Наука о данных: структура проекта
Почему необходимо использовать структуру проекта?
Когда-то предпочтение было отдано структуре, но, в конце концов, все, что имеет значение, это то, что вам должно быть удобно перемещаться и писать код.
Когда мы думаем о науке/анализе данных, мы часто думаем, что речь идет только о результатах, диаграммах, цифрах, идеях или визуализации. Хотя эти конечные продукты, как правило, являются главным событием, легко сосредоточиться на том, чтобы продукт выглядел красиво, и забыть о качестве кода, возможности повторного использования и возможности сотрудничать с другими, и для этого важна структура проекта.
При этом нет правильного метода структурирования вашего проекта, но у вас должна быть хотя бы некоторая структура, которой мы можем следовать для всего нашего проекта для стандартизации. Вы можете подумать, почему нужно использовать структуру проекта! Вот несколько причин для этого:
Счастливый член команды
Никто не сидит без дела перед созданием нового проекта Rails, чтобы выяснить, куда они хотят поместить свои представления; они просто бегут
rails new
, чтобы получить стандартный скелет проекта, как и все остальные.
Четко определенная стандартная структура проекта означает, что новичок может начать понимать анализ, не углубляясь в обширную документацию. Это также означает, что им не обязательно читать 100% кода, прежде чем знать, где искать очень конкретные вещи.
Хорошо организованный код имеет тенденцию к самодокументированию, поскольку сама организация обеспечивает контекст для вашего кода без особых накладных расходов. Люди будут благодарны вам за это, потому что они могут:
- Облегчить совместную работу с вами над этим анализом
- Узнайте из своего анализа о процессе и домене
- Уверенность в выводах, к которым приходит анализ
Счастливого вам будущего
Вы когда-нибудь пытались воспроизвести анализ, который вы сделали несколько месяцев назад или даже несколько лет назад? Вы, возможно, написали код, но теперь невозможно понять, следует ли вам использовать make_figures.py.old
, make_figures_working.py
или new_make_figures01.py
, try_figre.py
чтобы добиться цели. И вы начинаете сомневаться в своем существовании, что случилось со всеми нами в какой-то момент времени. Вот несколько вопросов, которые мы задаем, когда открываем старый проект по науке о данных.
- Где я хранил файлы данных?
- Где сохранились сюжеты?
- Где я сохранил модель ML?
Такие вопросы болезненны и являются симптомами неорганизованности проекта. Хорошая структура проекта поощряет методы, облегчающие возвращение к старой работе.
Приступая к работе
Последовательность в рамках проекта более важна. Согласованность в рамках одного модуля или функции является наиболее важной… Однако знайте, когда следует быть непоследовательным – иногда рекомендации руководства по стилю просто неприменимы. Если вы сомневаетесь, используйте свое лучшее суждение. Посмотрите на другие примеры и решите, что выглядит лучше всего.
Требования
- Python 3.5+
Запуск нового проекта
Запустить новый проект так же просто, как выполнить эту команду в командной строке.
- Создайте папку.
- Копировать вставить
setup.py
. - Запустите файл python с помощью
python setup.py
.
# setup.py
import os
folders = [
"data",
"data/processed",
"data/raw",
"data/external",
"data/transformed",
"docs",
"models",
"notebooks",
"references",
"reports",
"reports/figures",
"src",
"src/data",
"src/features",
"src/models",
"src/visualization",
]
for folder in folders:
os.makedirs(folder, exist_ok=True)
with open(os.path.join(folder, ".gitkeep"), "w") as f:
pass
files = [
"src/__init__.py",
"src/data/make_dataset.py",
"src/features/build_features.py",
"src/models/train_model.py",
"src/models/predict_model.py",
"src/visualization/visualize.py",
"requirements.txt"
]
for file in files:
with open(file, "w") as f:
pass
Структура каталогов
├── data
│ ├── external <- Data from third party sources.
│ ├── transformed <- Intermediate data that has been transformed.
│ ├── processed <- The final, canonical data sets for modeling.
│ └── raw <- The original, immutable data dump.
│
├── docs <- A default Sphinx project; see sphinx-doc.org for details
│
├── models <- Trained and serialized models, model predictions, or model summaries
│
├── notebooks <- Jupyter notebooks. Naming convention is a number (for ordering),
│ the creator's initials, and a short `-` delimited description, e.g.
│ `1.0-jqp-initial-data-exploration`.
│
├── references <- Data dictionaries, manuals, and all other explanatory materials.
│
├── reports <- Generated analysis as HTML, PDF, LaTeX, etc.
│ └── figures <- Generated graphics and figures to be used in reporting
│
├── requirements.txt <- The requirements file for reproducing the analysis environment, e.g.
│ generated with `pip freeze > requirements.txt`
│
├── setup.py <- Make this project pip installable with `pip install -e`
├── src <- Source code for use in this project.
│ ├── __init__.py <- Makes src a Python module
│ │
│ ├── data <- Scripts to download or generate data
│ │ └── make_dataset.py
│ │
│ ├── features <- Scripts to turn raw data into features for modeling
│ │ └── build_features.py
│ │
│ ├── models <- Scripts to train models and then use trained models to make
│ │ │ predictions
│ │ ├── predict_model.py
│ │ └── train_model.py
│ │
│ └── visualization <- Scripts to create exploratory and results oriented visualizations
│ └── visualize.py
└─
Мнения
Это ни в коем случае не лучшая структура проекта, но это отправная точка. Эта структура обеспечивает отправную точку, вы можете повторить ее, чтобы сделать ее своей. Некоторые мнения касаются рабочих процессов, а некоторые – инструментов, которые облегчают жизнь.
Данные неизменны
Никогда не редактируйте свои необработанные данные, особенно вручную, и особенно не в Excel. Не перезаписывайте свои необработанные данные. Не сохраняйте несколько версий необработанных данных. Относитесь к данным (и их формату) как к неизменяемым. Код, который вы пишете, должен перемещать исходные данные по конвейеру для вашего окончательного анализа. Вам не обязательно выполнять все шаги каждый раз, когда вы хотите создать новые рисунки, но любой желающий должен иметь возможность воспроизвести конечные продукты, используя только код в src
и данные в data/raw.
Кроме того, если данные неизменяемы, им не требуется управление версиями так же, как это делает код. Таким образом, по умолчанию папка данных включена в файл .gitignore
. Если у вас есть небольшой объем данных, которые редко меняются, вы можете захотеть включить эти данные в репозиторий.
Notebook предназначены для исследований и попыток
Блокноты очень эффективны для поискового анализа данных. Однако эти инструменты могут быть менее эффективными для воспроизведения анализа. Мы должны разделить папку “notebooks”. Например, notebooks/exploratory
содержит начальные исследования, тогда как notebooks/reports
– это более отточенная работа может быть экспортирована в reports
каталог в формате html.#Python
https://t.me/ai_machinelearning_big_data