Рубрики
Без рубрики

🔎 Как найти наборы данных в вашем каталоге Kedro

Kedro 0.16.2 только что упал на прошлой неделе с долгожданной функцией … Поиск каталога! Я пошел так далеко, как … Tagged с данными, Python, Kedro, DataScience.

Kedro 0.16.2 только что упал на прошлой неделе с долгожданной функцией … Каталог Поиск ! Я пошел так далеко, что обезьяна исправляла это в каждый из моих проектов. Я работаю между несколькими действительно большими проектами, в которых есть множество наборов данных. Возможность быстро искать то, что мне нужно, так полезно.

Каталог

Каталог данных KEDRO является ключевым компонентом к KEDro Framework. Он обрабатывает всю загрузку и сохранение данных для вас. Это настраивается и взломан. Наличие всех ваших соединений данных, перечисленных в одном месте, позволяет так легко поднять ваш проект и перемещать его в совершенно новую среду. Этот сладкий императивный стиль загрузки сохраняет столько чтения/записи над головой. Я могу загрузить все свои данные одной командой, будь то в Amazon S3, Google Cloud Platform или локальном файле.

Начать проект игрушек

Как и в большинстве этих статей, я собираюсь создать среду Conda, чтобы я не нарушал никаких существующих проектов и разыгрываю игрушечный проект, чтобы учиться.

conda create -n kedro0162 python=3.8 -y
activate kedro0162
pip install kedro
kedro new # call it Kedro 0162 and click-through
cd kedro-0162
kedro install

Ожидайте, что этот набор команд займет несколько минут в зависимости от вашей системы, скорости соединения и количества пакетов, уже в вашем локальном кеше.

Создайте немного каталога

Теперь сила поиска в каталоге действительно начинает сиять, когда ваши проекты выращивают ноги. У вас есть группы многих наборов данных, содержащих шаблоны данных, включая слой , или Источник среди прочего.

vim conf/base/catalog.yml

В каталоге вы увидите несколько строк инструкций, за которыми следуют

example_iris_data:
  type: pandas.CSVDataSet
  filepath: data/01_raw/iris.csv

Это дает нам одну сохраненную запись в каталоге под названием example_iris_data , это файл CSV, хранящийся в данные/01_RAW/Iris.csv Анкет

Давайте составим транспортную компанию, которая заливает в три разных подразделения, и наша задача заключается в том, чтобы донести свои продажи и метаданные продукта в один отчет. Эта компания делает поднятые дорожки , Премиум-змеи и Роскошные Yachts Анкет И мы знаем, что захотим сырой , инт , ПРИ и Модин Слои, чтобы начать наш проект, так что давайте очень быстро разбиваем этот каталог.

# ――――――――― lifted-truck ―――――――――

raw_lifted_truck_sales:
  type: pandas.CSVDataSet
  filepath: data/01_raw/sales/lifted-truck.csv

int_lifted_truck_sales:
  type: pandas.CSVDataSet
  filepath: data/01_int/sales/lifted-truck.csv

pri_lifted_truck_sales:
  type: pandas.CSVDataSet
  filepath: data/01_pri/sales/lifted-truck.csv

raw_lifted_truck_info:
  type: pandas.CSVDataSet
  filepath: data/01_raw/info/lifted-truck.csv

int_lifted_truck_info:
  type: pandas.CSVDataSet
  filepath: data/01_int/info/lifted-truck.csv

pri_lifted_truck_info:
  type: pandas.CSVDataSet
  filepath: data/01_pri/info/lifted-truck.csv

# ――――――――― primium-scoot ―――――――――

raw_primium_scoot_sales:
  type: pandas.CSVDataSet
  filepath: data/01_raw/sales/primium-scoot.csv

int_primium_scoot_sales:
  type: pandas.CSVDataSet
  filepath: data/01_int/sales/primium-scoot.csv

pri_primium_scoot_sales:
  type: pandas.CSVDataSet
  filepath: data/01_pri/sales/primium-scoot.csv

raw_primium_scoot_info:
  type: pandas.CSVDataSet
  filepath: data/01_raw/info/primium-scoot.csv

int_primium_scoot_info:
  type: pandas.CSVDataSet
  filepath: data/01_int/info/primium-scoot.csv

pri_primium_scoot_info:
  type: pandas.CSVDataSet
  filepath: data/01_pri/info/primium-scoot.csv

# ――――――――― luxy-yaht ―――――――――

raw_luxy_yaht_sales:
  type: pandas.CSVDataSet
  filepath: data/01_raw/sales/luxy-yaht.csv

int_luxy_yaht_sales:
  type: pandas.CSVDataSet
  filepath: data/01_int/sales/luxy-yaht.csv

pri_luxy_yaht_sales:
  type: pandas.CSVDataSet
  filepath: data/01_pri/sales/luxy-yaht.csv

raw_luxy_yaht_info:
  type: pandas.CSVDataSet
  filepath: data/01_raw/info/luxy-yaht.csv

int_luxy_yaht_info:
  type: pandas.CSVDataSet
  filepath: data/01_int/info/luxy-yaht.csv

pri_luxy_yaht_info:
  type: pandas.CSVDataSet
  filepath: data/01_pri/info/luxy-yaht.csv


# ――――――――― combined ―――――――――
pri_combined_sales:
  type: pandas.CSVDataSet
  filepath: data/01_pri/sales/combined.csv

pri_combined_info:
  type: pandas.CSVDataSet
  filepath: data/01_pri/info/combined.csv

# ――――――――― modin ―――――――――

modin_main:
  type: pandas.CSVDataSet
  filepath: data/01_pri/info/combined.csv

Некоторые примеры общего использования режима режима

regex Становятся очень сложными, но эти основные примеры являются очень распространенными случаями использования и дадут вам долгий путь, не будучи очень сложным.

  • термин – Все записи в каталоге, которые включают термин в записи в каталоге
  • ^термин – Все записи в каталоге, которые включают термин в Начало вход в каталог
  • Термин $ – Все записи в каталоге, которые включают термин в конец вход в каталог
  • Термин.*Термин2 – Включите все, что между термин и Термин Анкет
  • Термин | Термин 2 – Все записи в каталоге, которые включают термин1 или термин2

Давайте поиск этой штуки

Кедро долго включал catalog.list () Функция, которая возвращает список всех наборов данных. Теперь список Команда принимает regex_search Аргумент ключевого слова. По умолчанию он пуст и возвращает весь каталог.

kedro ipython

Перечислите все роскошные яхты

>>> catalog.list('luxy_yaht`)
['raw_luxy_yaht_sales',
 'int_luxy_yaht_sales',
 'pri_luxy_yaht_sales',
 'raw_luxy_yaht_info',
 'int_luxy_yaht_info',
 'pri_luxy_yaht_info']

Перечислите данные по слою

Легко просто поищите имя слоя.

сырой

>>> catalog.list('raw')
['raw_lifted_truck_sales',
 'raw_lifted_truck_info',
 'raw_primium_scoot_sales',
 'raw_primium_scoot_info',
 'raw_luxy_yaht_sales',
 'raw_luxy_yaht_info']

ПРИ

 >>> catalog.list('pri')
['pri_lifted_truck_sales',
 'pri_lifted_truck_info',
 'raw_primium_scoot_sales',
 'int_primium_scoot_sales',
 'pri_primium_scoot_sales',
 'raw_primium_scoot_info',
 'int_primium_scoot_info',
 'pri_primium_scoot_info',
 'pri_luxy_yaht_sales',
 'pri_luxy_yaht_info',
 'pri_combined_sales',
 'pri_combined_info']

😲 Мы только что включили все Примиум-Скат Набор данных!

Здесь мы только что столкнулись с нашей первой потребностью в regex Анкет Я буду первым, кто признает, что я действительно плохо в Ругаре Это невероятно сбивает с толку, становится только для чтения с большой сложностью, но он очень мощный и используется во многих местах.

^термин

начало входа в каталог

^ Оператор REGEX ищет записи каталога, которые включают в себя поисковый термин в самом начале.

 >>> catalog.list('^pri')
['pri_lifted_truck_sales',
 'pri_lifted_truck_info',
 'pri_primium_scoot_sales',
 'pri_primium_scoot_info',
 'pri_luxy_yaht_sales',
 'pri_luxy_yaht_info',
 'pri_combined_sales',
 'pri_combined_info']

срок $

Конец входа в каталог

$ Оператор является противоположностью ^ оператор. Это означает, что мне все, что соответствует, что происходит в конце входа в каталог.

>>> catalog.list('info$')
['raw_lifted_truck_info',
 'int_lifted_truck_info',
 'pri_lifted_truck_info',
 'raw_primium_scoot_info',
 'int_primium_scoot_info',
 'pri_primium_scoot_info',
 'raw_luxy_yaht_info',
 'int_luxy_yaht_info',
 'pri_luxy_yaht_info',
 'pri_combined_info']

Термин.*Термин2

Анкет * Оператор в Regex означает дать мне все наборы данных, которые включают два термина, независимо от того, что находится между ними. Есть также .? разрешить только один персонаж между ними. Чаще всего я просто хочу, чтобы два шаблона существовали в записи набора данных.

>>> catalog.list('raw.*info$')
['raw_lifted_truck_info',
 'raw_primium_scoot_info',
  'raw_luxy_yaht_info']

Некоторые реальные вещи, которые мы можем сделать с поиском

Давайте посмотрим на несколько примеров, помимо очевидных поисков набора данных, который мы хотим загрузить.

Проверьте необработанные данные

При миграции трубопроводов между средами важно знать, доступны ли ваши наборы данных. Я буду утверждать, что вы также должны рассмотреть вопрос о том, чтобы посмотреть на Pipeline.inputs так как он не может лгать и дает вам истинное чтение входов трубопровода. Но еще одна простая проверка может состоять в том, чтобы проверить все наборы данных, которые инженеры данных назвали RAW.

>>> {dataset: catalog.exists(dataset) for dataset in catalog.list('^raw')}
{'raw_lifted_truck_sales': False,
 'raw_lifted_truck_info': False,
 'raw_primium_scoot_sales': False,
 'raw_primium_scoot_info': False,
 'raw_luxy_yaht_sales': False,
 'raw_luxy_yaht_info': False}

Поскольку мы только что создали фиктивный каталог, в этом примере не существует данных.

Создать новый каталог

Допустим, у нас есть кто -то в команде, который находится из наземного подразделения нашей компании, и он хочет, чтобы упрощенный каталог легко доступен, который не включает никаких морских данных.

Для этого нам нужно будет немного добраться до внутренних внутренних участников KEDRO для DataCatalog Класс и используйте новый оператор корпорации | .

>>> from kedro.io import DataCatalog
>>> land_catalog = DataCatalog(
    {
        dataset: getattr(catalog.datasets, dataset)
        for dataset in catalog.list('truck|scoot')
        }
    )
>>> land_catalog.list()
['raw_lifted_truck_sales',
 'int_lifted_truck_sales',
 'pri_lifted_truck_sales',
 'raw_lifted_truck_info',
 'int_lifted_truck_info',
 'pri_lifted_truck_info',
 'raw_primium_scoot_sales',
 'int_primium_scoot_sales',
 'pri_primium_scoot_sales',
 'raw_primium_scoot_info',
 'int_primium_scoot_info',
 'pri_primium_scoot_info']

резюме резки

  • ^термин – начало
  • срок $ – конец
  • Термин.*Термин2 – все, что между ними
  • Термин | Термин 2 – или же

👀 Смотрите вопрос, отредактируйте этот пост на GitHub

Я писал короткие фрагменты о том, что мой менталитет врывается в индустрию технологий/данных в моей новостной рассылке, 👇 Проверьте это и давайте запустим разговор.

Оригинал: “https://dev.to/waylonwalker/how-to-find-datasets-in-your-kedro-catalog-5a4b”