www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Kedro: новый инструмент для науки о данных

Дата публикации Jun 4, 2019

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

Изображение отстан(по лицензииCC BY-SA 2.0)

Предположим, вы - специалист по данным, работающий на старшего руководителя, который принимает ключевые финансовые решения для вашей компании. Она просит вас предоставить специальный анализ, а когда вы это сделаете, она благодарит вас за предоставление полезной информации для ее планирования. Большой!

Через три месяца вновь назначенный руководитель, а теперь и ваш генеральный директор, попросит вас повторно провести анализ для следующего совещания по планированию ... а вы не можете. Код поврежден, потому что вы перезаписали некоторые ключевые разделы файла и не можете вспомнить, какую именно среду вы использовали в то время. Или, возможно, код в порядке, но он находится в одной большой записной книжке Jupyter со всеми жестко запрограммированными путями к файлам, а это означает, что вам придется тщательно пройти проверку и изменить каждый из них для ввода новых данных. Не так здорово!

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

Любой код, который обеспечивает некоторый процесс принятия бизнес-решения, должен рассматриваться как производственный код

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

  • Versioning- использоватьмерзавецили аналогичный инструмент для регулярного сохранения изменений независимо от того, работаете ли вы в одиночку или в команде.
  • Воспроизводимость- Вы должны быть в состоянии перенести проект на другой компьютер и запустить его без значительных усилий или перенастройки.
  • Следуйте стандартам- Общая структура проекта, стандартные правила и инструменты кодирования.
  • Документация- Автоматизированная документация для поддержания вашей документации в актуальном состоянии с вашим кодом.
  • модульность- Код может быть легко выполнен и проверен.

Для более подробной информации об этих принципах, посмотрите наполезное сообщение в блогеТомас Хуйскенс изQuantumBlack,

Что такое Кедро?

Kedroэто инструмент рабочего процесса разработки, который позволяет создавать переносимые конвейеры данных. Он применяет передовой опыт разработки программного обеспечения к вашему коду данных, поэтому он воспроизводим, модульный и хорошо документирован. Если вы используете Kedro, вы можете меньше беспокоиться о том, как писать готовый к работе код (Kedro делает для вас тяжелую работу), и вы стандартизируете способ совместной работы своей команды, позволяя всем работать более эффективно.

Многим ученым, работающим с данными, необходимо выполнять рутинные задачи по очистке, обработке и компиляции данных, которые, возможно, не являются их любимыми видами деятельности, но составляют значительную долю их повседневных задач. Kedro упрощает создание конвейера данных для автоматизации «тяжелой работы» и сокращения времени, затрачиваемого на выполнение таких задач.

Кедро был созданQuantumBlackпродвинутая аналитическая фирма, которая была приобретена консалтинговым гигантом McKinsey & Company в 2015 году. QuantumBlack использовали Kedro в более чем 60 проектах с McKinsey и теперь решили открыть его с открытым исходным кодом. Их цель - дать возможность сотрудникам, клиентам и сторонним разработчикам использовать Kedro и использовать его. Расширяя этот открытый инструмент для собственных нужд, специалисты по обработке данных могут эффективно выполнять свои обычные задачи и потенциально делиться своими усовершенствованиями с сообществом.

Команда из Quantum Black объясняет Кедро

Является ли Kedro планировщиком рабочего процесса?

Kedro не является планировщиком рабочего процесса, как Airflow и Luigi. Kedro упрощает создание прототипа вашего конвейера данных, в то время как Airflow и Luigi являются дополнительными средами, которые отлично подходят для управления развертыванием, составлением расписаний, мониторингом и оповещениями. Трубопровод Кедро похож на машину, которая строит автомобильную деталь. Airflow или Luigi предписывают различным машинам включать и выключать, чтобы работать вместе и производить автомобиль. QuantumBlack создал плагин Kedro-Airflow, обеспечивающий более быстрое создание прототипа и снижающий барьеры для входа, связанные с перемещением конвейеров в оба планировщика рабочего процесса.

Что мне нужно знать?

Документация Kedro была разработана для начинающих, чтобы начать создавать свои собственные проекты Kedro (в Python 3.5+) Если у вас есть только самые базовые знания Python, вам может показаться, что курс обучения более сложный, но имейте это в виду и следуйте руководству.

Пятнадцатиминутный космический полет с Кедро

Мой простой пятнадцатиминутный учебник будет основан на следующем сценарии:

Это 2160, и индустрия космического туризма процветает. Во всем мире существуют тысячи компаний, которые доставляют туристов на Луну и обратно. Вы смогли получить три (вымышленных) набора данных об удобствах, предлагаемых в каждом космическом шаттле, отзывах клиентов и информации о компании. Вы хотите обучить модель линейной регрессии, которая использует наборы данных для прогнозирования цены аренды челнока. Однако прежде чем приступить к обучению модели, вам необходимо подготовить данные, выполнив некоторую обработку данных, которая представляет собой процесс подготовки данных для построения модели путем создания мастер-таблицы.

Начало настройки

Первый шаг - это установить pedro в новую виртуальную среду Python 3.5+ (мы рекомендуемКонда) и подтвердите правильность установки, набрав

kedro info

Вы должны увидеть изображение Kedro, как показано ниже:

Это также даст вам версию Kedro, которую вы используете. Я написал это руководство на основе версии 0.14.0 в мае 2019 года, и, поскольку это активный проект с открытым исходным кодом, со временем могут произойти изменения в кодовой базе, которые приведут к незначительным изменениям в примере проекта. Мы будем стараться обновлять пример кода, хотя и не этот пост, поэтому вам следует проконсультироватьсяКедро документацияа такжезаметки о выпускеесли вы столкнулись с какими-либо несоответствиями.

Рабочий процесс Kedro

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

Настройте шаблон проекта

Чтобы упростить задачу, команда QuantumBlack предоставила весь необходимый код, поэтому вам просто нужно клонировать пример проекта из егоGithub Repo, Вам не нужно настраивать шаблон проекта в этом руководстве.

Если у вас есть код для проекта Spaceflights, чтобы убедиться, что у вас есть для него необходимые зависимости, запустите следующее в виртуальной среде Python 3.5+:

kedro install

Настройте данные

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

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

В этом руководстве используются три набора данных для компаний, выполняющих космические полеты, которые доставляют клиентов на Луну и обратно, и используются два формата данных: .csv и .xlsx. Файлы хранятся вdata/01_raw/папка каталога проекта.

Для работы с предоставленными наборами данных все проекты Kedro имеютconf/base/catalog.ymlфайл, который действует как реестр используемых наборов данных. Регистрация набора данных так же проста, как добавление именованной записи в файл .yml, чтобы указать местоположение файла (путь), параметры для данного набора данных, тип данных и управление версиями. Kedro поставляется с поддержкой нескольких типов данных, таких как CSV, и если вы посмотрите наcatalog.ymlВ файле для руководства Spaceflights вы увидите следующие записи для используемых наборов данных:

companies:
type: CSVLocalDataSet
filepath: data/01_raw/companies.csvreviews:
type: CSVLocalDataSet
filepath: data/01_raw/reviews.csv

Чтобы проверить, правильно ли Kedro загружает данные, и проверить первые пять строк данных, откройте окно терминала и запустите сеанс IPython в каталоге проекта Kedro (и просто введите (exit()когда вы хотите завершить сеанс и продолжить учебник):

kedro ipython
io.load(‘companies’).head()

Создать и запустить конвейер

Следующая часть рабочего процесса заключается в создании конвейера из набора узлов, которые являются функциями Python, которые выполняют отдельные, отдельные задачи. В типичном проекте этот этап проекта состоит из трех этапов:

  • Напишите и задокументируйте ваши функции узла
  • Создайте свой конвейер (ы), указав входы и выходы для каждого из его узлов
  • Запустите Kedro, выбирая, запускать ли узлы последовательно или параллельно

Data Engineering Pipe

Мы рассмотрели необработанные наборы данных для проекта Spaceflights, и теперь пришло время рассмотреть конвейер обработки данных, который обрабатывает данные и подготавливает их для модели внутри конвейера обработки данных. Этот конвейер предварительно обрабатывает два набора данных и объединяет их с третьим в основную таблицу.

В файлеdata_engineering.pyвнутри папки узлов вы найдетеpreprocess_companiesа такжеpreprocess_shuttlesфункции (указанные как узлы в конвейере вpipeline.py). Каждая функция принимает фрейм данных и выводит предварительно обработанные данные, preprocessed_companies и preprocessed_shuttles соответственно.

Когда Kedro запускает конвейер разработки данных, он определяет, зарегистрированы ли наборы данных в каталоге данных (conf/base/catalog.yml) Если набор данных зарегистрирован, он автоматически сохраняется по указанному пути без необходимости указывать какой-либо код в самой функции. Если набор данных не зарегистрирован, Kedro сохраняет его в памяти для запуска конвейера и впоследствии удаляет его.

В учебнике предварительно обработанные данные регистрируются вconf/base/catalog.yml:

preprocessed_companies:
type: CSVLocalDataSet
filepath: data/02_intermediate/preprocessed_companies.csvpreprocessed_shuttles:
type: CSVLocalDataSet
filepath: data/02_intermediate/preprocessed_shuttles.csv

CSVLocalDataSetвыбран для простоты, но вы можете выбрать любой другой доступный класс реализации набора данных для сохранения данных, например, в таблицу базы данных, облачное хранилище (например, S3, хранилище BLOB-объектов Azure и т. д.) и другие.

data_engineering.pyфайл также содержит функцию,create_master_tableкоторый использует конвейер обработки данных для объединения компаний, переносит и просматривает кадры данных в единую главную таблицу.

Наука о данных

Наука о данных, которая строит модель, использующую наборы данных, состоит из модели прогнозирования цен, в которой используется простаяЛинейная регрессияреализация отscikit учитьсябиблиотека. Код находится в файлеsrc/kedro_tutorial/nodes/price_prediction.py,

Размер теста и параметры случайного состояния для модели прогнозирования указаны вconf/base/parameters.ymlи Kedro подает их в каталог при выполнении конвейера.

Объединение трубопроводов

Трубопроводы проекта указаны вpipeline.py:

def create_pipeline(**kwargs):  de_pipeline = Pipeline(
[
node(preprocess_companies, “companies”, “preprocessed_companies”),
node(preprocess_shuttles, “shuttles”, “preprocessed_shuttles”),
node(create_master_table,[“preprocessed_shuttles”, “preprocessed_companies”, “reviews”],“master_table”,),
],
name=”de”,
)ds_pipeline = Pipeline(
[
node(split_data,[“master_table”, “parameters”],[“X_train”, “X_test”, “y_train”, “y_test”],),
node(train_model, [“X_train”, “y_train”], “regressor”),
node(evaluate_model, [“regressor”, “X_test”, “y_test”], None),
],
name=”ds”,
)return de_pipeline + ds_pipeline

de_pipelineбудет предварительно обработать данные, а затем использоватьcreate_master_tableобъединитьpreprocessed_shuttles,preprocessed_companiesа такжеreviewsвmaster_tableнабор данных.ds_pipelineЗатем создадим функции, обучим и оценим модель. Первый узел ds_pipeline выводит 4 объекта:X_train,X_test,y_train,y_test], которые затем используются для обучения модели и, в конечном итоге, для оценки модели.

Два трубопровода объединены вde_pipeline + ds_pipeline, Порядок, в котором вы добавляете конвейеры вместе, не имеет значения, поскольку Kedro автоматически определяет правильный порядок выполнения для всех узлов. Тот же самый общий конвейер получится, если вы укажетеds_pipeline + de_pipeline,

Оба конвейера будут выполнены при запуске kedro run, и вы должны увидеть вывод, подобный следующему:

Если у вас возникли проблемы с запуском учебного кода, вам следует убедиться, что вы работаете в среде Python 3.5 и все зависимости установлены для проекта. Если проблемы не устранены, отправляйтесь вПереполнение стекадля руководства со стороны сообщества, и, если поведение, которое вы наблюдаете, кажется проблемой с Kedro, пожалуйста, поднимите вопрос оKedro's Github хранилище,

Кедро бегунов

Есть два разных способа запустить трубопровод Кедро. Вы можете указать:

  • SequentialRunner- последовательно запускает ваши узлы: как только узел завершил свою задачу, запускается следующий
  • ParallelRunner- запускает ваши узлы параллельно: независимые узлы могут работать одновременно, позволяя вам использовать преимущества нескольких ядер ЦП, и быть более эффективными, когда в вашем конвейере есть независимые ветви. Обратите внимание, чтоParallelRunnerвыполняет распараллеливание задачи (то есть может запускать несколько задач одновременно), но не распараллеливает вычисления внутри задачи.

По умолчанию Kedro используетSequentialRunnerкогда вы вызываете Кедро, бегите. Переключение на использованиеParallelRunnerэто так же просто, как предоставление дополнительного флага следующим образом:

kedro run — parallel

Это конец учебника по основам Kedro. Там еще многодокументацияна различные параметры конфигурации и оптимизации, которые вы можете использовать в своих собственных проектах, например:

Взносы приветствуются!

Если вы начинаете работать с Kedro и хотите внести пример или внести изменения в проект Kedro, мы будем рады возможности поработать с вами. Пожалуйста, обратитесь круководство по вкладам,

Подтверждения

Пример космического полета основан на учебном пособии, написанном командой Kedro наQuantumBlack Labs(Йетунде Дада, Иван Данов, Дмитрий Дериабин, Лорена Балан, Гордон Ригли, Киёхито Кунии, Насеф Хан, Ричард Вестенра и Николаос Цаусис), которые любезно предоставили мне ранний доступ к своему коду и документации для подготовки этогоруководстводля TowardsDataScience. Спасибо всем!

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map