И как создать один в одну строку кода
Мотивация
Важно структурировать свой проект по науке о данных на основе определенного стандарта, чтобы ваши товарищи по команде могли легко поддерживать и изменять ваш проект.
Но какому стандарту следует следовать? Было бы неплохо, если бы вы могли создать идеальную структуру для проекта по науке о данных с помощью шаблона?
Существует несколько отличных шаблонов для проектов по науке о данных, но в них отсутствуют некоторые передовые методы, такие как тестирование, настройка или форматирование кода.
Именно поэтому я создал репозиторий с именем data-science-template. Этот репозиторий — результат многолетней работы по совершенствованию наилучшего способа структурирования проекта по науке о данных, чтобы он был воспроизводимым и удобным в сопровождении.
В этой статье вы узнаете, как использовать этот шаблон для включения лучших практик в рабочий процесс обработки данных.
Начать
Чтобы скачать шаблон, начните с установки Cookiecutter:
pip install cookiecutter
Создайте проект на основе шаблона:
cookiecutter https://github.com/khuyentran1401/data-science-template --checkout dvc-poetry
…, и вам будет предложено ответить на некоторые детали вашего проекта:
Теперь в вашей текущей директории создается проект с указанным именем! Структура проекта выглядит следующим образом:
Инструменты, используемые в этом шаблоне:
- Поэзия: управление зависимостями
- hydra: Управление конфигурационными файлами
- pre-commit plugins: Автоматизируйте форматирование проверки кода
- DVC: Контроль версии данных
- pdoc: Автоматически создавать документацию по API для вашего проекта.
В следующих нескольких разделах мы изучим функциональные возможности этих инструментов и файлов.
Установить зависимости
Существует два распространенных способа установки зависимостей: pip и поэзия. В следующих разделах показано, как использовать каждый подход.
Пип
Хорошей практикой является создание виртуальной среды для вашего проекта, чтобы изолировать зависимости вашего проекта от зависимостей других проектов на вашем компьютере.
Чтобы создать виртуальную среду, введите:
python3 -m venv venv
Чтобы активировать виртуальную среду, введите:
source venv/bin/activate
Затем установите зависимости для этого проекта из requirements.txt:
pip install -r requirements.txt
Чтобы добавить новую библиотеку PyPI, запустите:
pip install <library-name>
Поэзия
Poetry — это инструмент управления зависимостями Python, альтернатива pip. Поэзия позволяет:
- Разделите основные зависимости и подзависимости на два отдельных файла (вместо того, чтобы хранить все зависимости в
requirements.txt
) - Создание читаемых файлов зависимостей
- Удалите все неиспользуемые подзависимости при удалении библиотеки
- Избегайте установки новых пакетов, которые конфликтуют с существующими пакетами.
- Упакуйте свой проект в несколько строк кода
Инструкцию по установке Poetry ищите здесь. Все основные зависимости для этого проекта указаны в pyproject.toml
. Чтобы установить все зависимости, запустите:
poetry install
Чтобы добавить новую библиотеку PyPI, запустите:
poetry add <library-name>
Чтобы удалить библиотеку, запустите:
poetry remove <library-name>
Makefile
Makefile позволяет создавать короткие и читаемые команды для задач. Вы можете использовать Makefile для автоматизации таких задач, как настройка среды:
Теперь, когда другие хотят настроить среду для ваших проектов, им просто нужно запустить следующее:
make activate make setup
И будет запущен ряд команд:
Управление кодом и тестами
Весь код Python хранится в каталоге src
.
Все тестовые файлы находятся в каталоге tests
. Каждый тестовый файл начинается со слова test
, за которым следует имя тестируемого файла.
Управляйте конфигурационными файлами с помощью Hydra
Файл конфигурации хранит все значения в одном месте, что помогает отделить значения от кода и избежать сложного кодирования. В этом шаблоне все файлы конфигурации хранятся в каталоге config
.
Hydra — это библиотека Python, которая позволяет получить доступ к параметрам из файла конфигурации внутри скрипта Python.
Например, если наш файл main.yaml
выглядит следующим образом:
…, тогда мы можем получить доступ к значению внутри файла конфигурации, добавив декоратор @hydra.main
к определенной функции. Внутри этой функции мы можем получить доступ к значению под processed
и path
, используя запись через точку: config.processed.path
.
Управление данными и моделями с помощью DVC
Все данные хранятся в подкаталогах data
. В каждом подкаталоге хранятся данные с разных этапов.
Все модели хранятся в каталоге model
.
Поскольку Git не идеален для версий двоичных файлов, мы используем DVC — Data Version Control для управления версиями наших данных и моделей.
Указываем этапы DVC в файле dvc.yaml
. Каждый этап представляет собой отдельные процессы обработки данных, включая их входные данные (deps
) и результирующие выходные данные (outs
).
Все каталоги и файлы под outs
будут автоматически отслеживаться DVC.
Если вы хотите выполнить команды, определенные на их этапах, запустите dvc repro
. DVC пропустит этапы, которые не изменились.
Храните ваши данные удаленно
Основное преимущество использования DVC заключается в том, что оно позволяет загружать данные, отслеживаемые DVC, в удаленное хранилище. Вы можете хранить свои данные в DagsHub, Google Drive, Amazon S3, Azure Blob Storage, Google Cloud Storage, Aliyun OSS, SSH, HDFS и HTTP.
dvc remote add -d remote <REMOTE-URL>
После добавления данных в локальный проект вы можете отправить данные в удаленное хранилище:
dvc push
Добавьте и отправьте все изменения в Git:
git add . git commit -m 'commit-message' git push origin <branch>
Проверяйте проблемы в своем коде перед фиксацией
При фиксации кода Python в Git вам необходимо убедиться, что ваш код:
- выглядит хорошо
- организован
- соответствует руководству по стилю PEP 8
- включает строки документации
Однако проверка всех этих критериев перед фиксацией кода может оказаться сложной задачей. pre-commit — это фреймворк, который позволяет вам выявлять простые проблемы в вашем коде перед его фиксацией.
Вы можете добавлять различные плагины в конвейер предварительной фиксации. Как только ваши файлы будут зафиксированы, они будут проверены этими плагинами. Если все проверки не пройдены, никакой код не будет зафиксирован.
В этом шаблоне мы используем пять разных плагинов, которые указаны в .pre-commit-config.yaml
. Они есть:
- черныйk — форматирует код Python
- flake8 — проверяет стиль и качество вашего кода Python
- isort — автоматически сортирует импортированные библиотеки по алфавиту и разделяет их на разделы и типы.
- mypy — проверяет статический тип
- nbstripout — разделяет вывод из блокнотов Jupyter
Чтобы добавить предварительную фиксацию в git-хуки, введите:
pre-commit install
Теперь всякий раз, когда вы запускаете git commit
, ваш код будет автоматически проверяться и переформатироваться перед фиксацией.
Добавить документацию по API
Специалисты по данным часто сотрудничают с другими членами команды над проектом. Таким образом, важно создать хорошую документацию для проекта.
Чтобы создать документацию API на основе строк документации ваших файлов и объектов Python, запустите:
make docs_view
Выход:
Save the output to docs... pdoc src --http localhost:8080 Starting pdoc server on localhost:8080 pdoc server ready at https://localhost:8080
Теперь вы можете просмотреть документацию по https://localhost:8080.
Чтобы сохранить всю документацию API как уценки, запустите:
make docs_save
Заключение
Поздравляем! Вы только что узнали, как структурировать свой проект по науке о данных с помощью шаблона по науке о данных. Этот шаблон означает быть гибким. Не стесняйтесь корректировать проект на основе ваших приложений.
Не стесняйтесь играть с шаблоном науки о данных здесь:
Мне нравится писать об основных концепциях науки о данных и экспериментировать с различными инструментами обработки данных. Вы можете связаться со мной в LinkedIn и Twitter.
Отметьте этот репозиторий, если хотите проверить коды статей, которые я написал. Следуйте за мной на Medium, чтобы быть в курсе моих последних статей по науке о данных, таких как эти: