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”