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

Совместная наука данных с Ploomber

Представляем Ploomber Spec API, простой способ синхронизации научно -научной работы с использованием короткого файла YAML …. Помечено с юпитером, питоном, наукой данных, машинным обучением.

Внедряя Ploomber Spec API, простой способ синхронизировать работу по науке о данных с использованием короткого файла YAML.

Вы уже загрузили последнюю версию данных? кошмар

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

Представьте, что вы работаете с тремя коллегами, принимая одну филиал в каждой функции (от A до D). Чтобы выполнить свой трубопровод, вы можете написать Master Script Это выполняет все задачи слева направо.

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

Поскольку полные пробеги занимают слишком много времени, а отслеживание устаревших задач вручную – это трудоемкий процесс, вы можете прибегнуть к Злой трюк обмена промежуточными результатами Анкет Все загружают Последняя версия Из всех или некоторых выбранных задач (скорее всего, с вычисленными функциями) в общее местоположение, которое вы можете затем скопировать в локальное рабочее пространство.

Но чтобы генерировать Последний Версия каждой задачи, вы должны убедиться, что она была сгенерирована из Последняя версия из всех его восходящих зависимостей, которые возвращают нас к оригинальной проблеме; Там просто нет никаких гарантий о линии данных. Использование файла данных, происхождение которого неизвестно, как входные компромиссы воспроизводимости.

Представление API Ploomber Spect

Новый API предлагает простой способ синхронизации научно -научной работы. Все, что вам нужно сделать, это перечислить местоположение исходного кода и продукты (файлы или таблицы/представления базы данных) для каждой задачи в Pipeline.yaml файл.

# pipeline.yaml

# clean data from the raw table
- source: clean.sql
  product: clean_data
  # function that returns a db client
  client: db.get_client

# aggregate clean data
- source: aggregate.sql
  product: agg_data
  client: db.get_client

# dump data to a csv file
- class: SQLDump
  source: dump_agg_data.sql
  product: output/data.csv  
  client: db.get_client

# visualize data from csv file
- source: plot.py
  product:
    # where to save the executed notebook
    nb: output/executed-notebook-plot.ipynb
    # tasks can generate other outputs
    data: output/some_data.csv

Ploomber проанализирует ваш исходный код для определения зависимостей и пропустит задачу, если его исходный код (и исходный код всех его зависимостей) не изменился с момента последнего запуска.

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

git pull
ploomber entry pipeline.yaml

Если вы запустите команду снова, ничего не будет выполнено.

Помимо помощи вам синхронизировать с вашей командой. Ploomber отлично подходит для разработки трубопроводов итеративно: изменить любую часть и снова позвонить, будут выполняться только измененные задачи. Поскольку инструмент не связан с GIT, вы можете экспериментировать без совершения изменений; Если они вам не нравятся, просто выбросьте и постройте снова. Если ваш трубопровод не выходит из строя, исправьте проблему, постройте снова, и выполнение возобновится с точки сбоя.

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

Попытайся!

Нажмите здесь, чтобы попробовать демонстрацию в прямом эфире (установка не требуется).

Если вы предпочитаете запускать его на локальном уровне:

pip install "ploomber[all]"

# create a new project with basic structure
ploomber new

ploomber entry pipeline.yaml

Если вы хотите знать, как работает Ploomber и какие еще аккуратные функции, продолжайте читать.

Вывод зависимости и инъекции продуктов

Для ноутбуков Jupyter (и аннотированных сценариев Python) Ploomber ищет ячейку «параметры» и извлекает зависимости из «восходящей» переменной.

# annotated python file, it will be converted to a notebook during execution
import pandas as pd

# + tags=["parameters"]
upstream = {'some_task': None}
product = None

# +
df = pd.read_csv(upstream['some_task'])
# do data processing...
df.to_csv(product['data'])

В файлах SQL он будет искать и «вверх по течению» заполнителя:

CREATE TABLE {{product}}
SELECT * FROM {{upstream['some_task']}}
WHERE x > 10

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

В ноутбуках Юпитера и сценариях Python Ploomber вводит ячейку с переменной, называемой «Продукт», и словарь «восходящего» с расположением его восходящих зависимостей.

import pandas as pd

# + tags=["parameters"]
upstream = {'some_task': None}
product = None

# + tags=["injected-parameters"]
# this task uses the output from "some_task" as input
upstream = {'some_task': 'output/from/some_task.csv'}
product = {'data': 'output/current/task.csv'}

# +
df = pd.read_csv(upstream['some_task'])
# do data processing...
df.to_csv(product['data'])

Для файлов SQL Ploomber заменяет заполнителей соответствующими именами таблицы/просмотра. Например, сценарий SQL, показанный выше, будет разрешен следующим образом:

CREATE TABLE clean
SELECT * FROM some_table
WHERE x > 10

Охватывание ноутбуков Jupyter в качестве формата вывода

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

Поскольку существующие выходы ячеек из исходного файла игнорируются, нет никаких причин использовать .Ipynb файлы в качестве источников. Мы настоятельно рекомендуем вам работать с аннотированными сценариями Python ( .py ) вместо этого. Они будут преобразованы в ноутбуки во время выполнения через Jupytext а затем выполнено с помощью бумажная фабрика .

Еще одна хорошая особенность от JupyText – это то, что вы можете разработать сценарии Python в интерактивном режиме. Как только вы начнете Жюрит -блокнот , ваш .py Файлы будут отображаться как регулярные .Ipynb файлы Вы можете изменить и выполнять ячейки по желанию, но создание вашего трубопровода обеспечит выполнение верхнего до дна. Это помогает предотвратить ноутбуки Юпитера наиболее распространенным источником ошибок: скрытое состояние из -за неупорядоченного выполнения ячеек.

Использование аннотированных сценариев Python упрощает управление кодом. Nopbooks Jupyter ( .ipynb ) – это файлы JSON, это делает кодексы и все труднее; Используя простые сценарии в качестве источников и ноутбуков в качестве продуктов, вы получаете лучшее из обоих миров: простые кодовые версии и богатые журналы выполнения.

Бесполезно перемешать Python и (шаблон) SQL

Если ваши данные живут в базе данных, вы можете написать скрипт Python, который подключается к нему, отправляет запрос и закрывает соединение. Ploomber позволяет вам пропустить код с шаблоном, чтобы вы сосредоточились на написании части SQL. Вы можете даже написать целые трубопроводы, используя только SQL.

Джинджа Шаблон интегрирована, что может помочь вам модулировать ваш код SQL с помощью макросы Анкет

Если ваша база данных поддерживается SQLALCHEMY или у него есть клиент, который реализует DBAPI Интерфейс, он будет работать с Ploomber. Это охватывает почти все базы данных.

Интерактивное развитие и отладка

Ploomber не ставит под угрозу структуру с интерактивностью. Вы можете загрузить свой трубопровод и взаимодействовать с ним, используя следующую команду:

ipython -i -m ploomber.entry pipeline.yaml -- --action status

Это начнет интерактивный сеанс с Даг объект.

Визуализируйте зависимости трубопроводов (требуется graphviz ):

dag.plot()

Вы можете интерактивно разработать сценарии Python:

dag['task'].develop()

Это откроет скрипт Python в качестве ноутбука Jupyter с впрыскиваемыми параметрами, но удалит их до сохранения файла.

Отладка линии по линии также поддерживается:

dag['task'].debug()

Поскольку код SQL проходит процесс рендеринга, чтобы заменить заполнители, полезно увидеть, как выглядит код, который выглядит:

print(dag['sql_task'].source)

Заключительные замечания

Есть еще много функций, доступных через Python API, которые еще не реализованы в спецификационном API. В настоящее время мы переносим некоторые из наиболее важных функций (интеграционное тестирование, параллелизация задач).

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

Python API рекомендуется для проектов, которые требуют передовых функций, таких как динамические трубопроводы (конвейеры, точное количество задач, определяется его параметрами).

Куда пойти отсюда

Нашел ошибку в этом посте? Нажмите здесь, чтобы сообщить нам о Анкет

Первоначально опубликовано в ploomber.io

Оригинал: “https://dev.to/edublancas/collaborative-data-science-with-ploomber-ad”