PyScaffold extension tailored for Data Science projects. This extension is inspired by cookiecutter-data-science and enhanced in many ways. The main differences are that it
- advocates a proper Python package structure that can be shipped and distributed,
- uses a conda environment instead of something virtualenv-based and is thus more suitable for data science projects,
- more default configurations for Sphinx, pytest, pre-commit, etc. to foster clean coding and best practices.
Also consider using dvc to version control and share your data within your team. Read this blogpost to learn how to work with JupyterLab notebooks efficiently by using a data science project structure like this.
The final directory structure looks like:
βββ AUTHORS.md <- List of developers and maintainers.
βββ CHANGELOG.md <- Changelog to keep track of new features and fixes.
βββ CONTRIBUTING.md <- Guidelines for contributing to this project.
βββ Dockerfile <- Build a docker container with `docker build .`.
βββ LICENSE.txt <- License as chosen on the command-line.
βββ README.md <- The top-level README for developers.
βββ configs <- Directory for configurations of model & application.
βββ data
β βββ external <- Data from third party sources.
β βββ interim <- Intermediate data that has been transformed.
β βββ processed <- The final, canonical data sets for modeling.
β βββ raw <- The original, immutable data dump.
βββ docs <- Directory for Sphinx documentation in rst or md.
βββ environment.yml <- The conda environment file for reproducibility.
βββ 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 description,
β e.g. `1.0-fw-initial-data-exploration`.
βββ pyproject.toml <- Build configuration. Don't change! Use `pip install -e .`
β to install for development or to build `tox -e build`.
βββ references <- Data dictionaries, manuals, and all other materials.
βββ reports <- Generated analysis as HTML, PDF, LaTeX, etc.
β βββ figures <- Generated plots and figures for reports.
βββ scripts <- Analysis and production scripts which import the
β actual PYTHON_PKG, e.g. train_model.
βββ setup.cfg <- Declarative configuration of your project.
βββ setup.py <- [DEPRECATED] Use `python setup.py develop` to install for
β development or `python setup.py bdist_wheel` to build.
βββ src
β βββ PYTHON_PKG <- Actual Python package where the main functionality goes.
βββ tests <- Unit tests which can be run with `pytest`.
βββ .coveragerc <- Configuration for coverage reports of unit tests.
βββ .isort.cfg <- Configuration for git hook that sorts imports.
βββ .pre-commit-config.yaml <- Configuration of pre-commit git hooks.
See a demonstration of the initial project structure under dsproject-demo and also check out the documentation of PyScaffold for more information.
Just install this package with conda install -c conda-forge pyscaffoldext-dsproject
and note that putup -h
shows a new option --dsproject
.
Creating a data science project is then as easy as:
putup --dsproject my_ds_project
The flag --dsproject
comprises additionally the flags --markdown
, --pre-commit
and --no-skeleton
for convenience.
This project uses pre-commit, please make sure to install it before making any changes:
conda install pre-commit
cd pyscaffoldext-dsproject
pre-commit install
It is a good idea to update the hooks to the latest version:
pre-commit autoupdate
Please also check PyScaffold's contribution guidelines.