Cookiecutter-data-science - Un outil 🐍 pour structurer ses projets
Version du package utilisée : 2.3.0
Présentation
Cookiecutter (de son nom complet Cookiecutter-data-science) est un outil développé par DrivenData qui a pour but de structurer les projets Python. Le package propose via une interface CLI de prendre en charge l'ensemble des éléments de configurations du projets, de la création des différents dossiers de travail jusqu'à la configuration du gestionnaire de package projet et le linter utilisé.
Les avantages de ce package sont les suivants : 💪 Standardiser la structure de fichiers des projets, particulièrement utile pour les débutants et intermédiaires pour qui organiser ses fichiers de projets n'est pas encore une évidence, où les équipes qui ont besoin d'un standard 💪 Processus répétable de création de projet, donc pas de risque d'oublier un des éléments de configuration 💪 Interface CLI claire & facile à utiliser.
Attention à ne pas confondre Cookiecutter-data-science qui aide à l'initialisation d'un projet de data sicence, au package Python Cookiecutter qui propose de créer des templates de projets python facilement réutilisables par les autres utilisateurs. Le domaine d'action des 2 packages se chevauche largement, sauf que Cookiecutter-data-science est spécialement dédié à l'initialisation d'un projet data science via des templates.
Si Cookiecutter-data-science a des avantages indéniables, il a aussi naturellement des défauts : ❌ Listes d'outils et de templates prédéfinis. Le package est assez large cependant pour reconfigurer manuellement quelques éléments si besoin, mais ces configurations manuelles ne seront pas répétables ❌ Pas d'initialisation de git même si git installé sur le système, avec l'utilisation de repo_name pour définir le dossier du projet et non le nom d'un repository comme laissé pensé.
Installation
Lors de la rédaction de cet article, version 2.3.0 du package
Installation et configuration minimale
pipx install cookiecutter-data-science # Installation avec pipx (recommandé)
ccds # Lancer l'initalisation d'un nouveau projet
Cookiecutter v2 ne supporte que Python 3.9+ (Python version 3.9 et au-delà).
Les différentes étapes de configuration (source avec tous les détails) sont (texte en bleu = texte par défaut si vous ne saisissez rien) : 1. Si vous avez déjà installé Cookiecutter, voulez-vous le réinstaller (cf. partie Installation approfondie ci-dessous)
-
Nom du projet (impact : fichier de configuration)
-
Nom du repo git (impact : nom du dossier)
-
Nom du package (impact : nom du dossier du package du projet)
-
Nom de l'auteur (impact : fichier de configuration)
-
Description du projet (impact : fichier de configuration, README)
-
Version Python à utiliser
-
Méthode de stockage de vos datasets de travail. None = stockage en local, sur votre ordinateur.
-
Manageur d'environnement
-
Fichier de dépendance
-
Installation des packages standards pour l'analyse de données (ipython, jupyterlab, matplotlib, notebook, numpy, pandas, scikit-learn)
-
Package de testing
-
Linter projet
-
Licence du projet
-
Pré-installation de mkdocs pour la documentation
-
Inclure du code de base dans le module python
Installation approfondie
Cookiecutter peut être installé avec tous les outils :
uv add cookiecutter-data-science # Installation avec uv
uv run ccds # Lancer le script
pip install cookiecutter-data-science # Installation avec pip
conda install cookiecutter-data-science # Installation
Lors de son installation, Cookiecutter crée un dossier /cookiecutters/cookiecutter-data-science dans votre dossier d'utilisateur. Grâce à cette méthode, vous n'avez à l'installer qu'une seule fois, pour l'appeler n'importe où et autant de fois que vous voulez (faites le test : ouvrez un terminal et taper ccds, et Cookiecutter se lancera).
Configuration approfondie
Pour utiliser la v1 du template de Cookiecutter :
ccds https://github.com/drivendataorg/cookiecutter-data-science -c v1
Structure du dossier
La structure de dossier suivante est celle avec tous les fichiers. La votre différera selon les choix de configuration que vous ferez (Cookiecutter renseigne cette structure de fichier dans le README du projet) :
├── LICENSE <- Licence
├── Makefile <- Fichier Makefile
├── README.md <- README du projet
├── data
│ ├── external <- Données externes
│ ├── interim <- Données intermédiaires de travail
│ ├── processed <- Données finales, utilisées pour la modélisation par exemple
│ └── raw <- Données brutes, d'entrée du projet
│
├── docs <- Dossier de documentation Mkdocs
│
├── models <- Dossier de stockage des différents modèles
│
├── notebooks <- Notebooks de travail, par convention nommé par ordre d'exécution (exemple : *1.0-jqp-initial-data-exploration*)
│
├── pyproject.toml <- Fichier de configuration du projet
│
├── references <- Eléments additionnels d'explication du projet
│
├── reports <- Rapports générés (LaTex, PDF, ... )
│ └── figures <- Graphiques générés et à destination de présentation
│
├── requirements.txt <- Requirements file (généré avec : *pip freeze > requirements.txt*)
│
├── setup.cfg <- Fichier de configuration pour flake8
│
└── {{ cookiecutter.module_name }} <- Dossier du package de votre projet, nommé selon votre paramétrage
│
├── __init__.py <- Ficheir standard python
│
├── config.py <- Variables et configuration
│
├── dataset.py <- Scripts pour télécharger et/ou générer des données
│
├── features.py <- Scripts pour les features des modèles
│
├── modeling
│ ├── __init__.py
│ ├── predict.py <- Scripts pour prédire à partir des modèles
│ └── train.py <- Scripts pour entrainer les modèles
│
└── plots.py <- Scripts de visualisation des données