Skip to content
This repository was archived by the owner on Oct 4, 2021. It is now read-only.

Commit d697c06

Browse files
authored
Merge pull request #86 from signaux-faibles/develop
Last release
2 parents 4031003 + 1b4950f commit d697c06

40 files changed

+3234
-343
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
runs-on: ubuntu-latest
1111
steps:
1212
- uses: actions/checkout@v2
13-
- name: Set up Python 3.8
13+
- name: Set up Python 3.6
1414
uses: actions/setup-python@v2
1515
with:
1616
python-version: 3.6

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ local_settings.py
6060
db.sqlite3
6161
db.sqlite3-journal
6262

63+
# Emacs stuff
64+
.dir-locals.el
65+
6366
# Flask stuff:
6467
instance/
6568
.webassets-cache
@@ -68,7 +71,7 @@ instance/
6871
.scrapy
6972

7073
# Sphinx documentation
71-
docs/_build/
74+
docs/build/
7275

7376
# PyBuilder
7477
target/

CHANGELOG.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,21 @@ and this project is versionned in the `YY.MM` format corresponding to the month
2727
- Nothing, it's our first release :smile: :tada:
2828

2929
### Fixed
30-
- Nothing, it's our first release :smile: :tada:
30+
- Nothing, it's our first release :smile: :tada:
31+
32+
33+
## [21.09] - September 2021
34+
### Added
35+
- Created documentation using Sphinx
36+
- Created synthetic data generation capabilities
37+
- Created [explainability module](/predictsignauxfaibles/explain.py)
38+
- Created a [CLI](/predictsignauxfaibles/__main__.py) to easily parameterize model training runs
39+
- Created [model config files](/models)
40+
- Created "redressements experts" capacities [starting with a URSSAF-based rule](/predictsignauxfaibles/redressements.py)
41+
- Created [evaluation module](/predictsignauxfaibles/evaluate.py)
42+
43+
### Fixed
44+
- fill missing fields after fetching data
45+
- merging redundant operations on data.columns
46+
- force siren and sirets to be strings + pad them to 9 characters
47+
- downgrade jedi version to fix auto-complete bug with ipython.

README.md

Lines changed: 66 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,67 @@
11
# predictsignauxfaibles
2+
23
Dépôt du code python permettant la production de liste de prédiction Signaux Faibles.
4+
5+
⚠️ ce dépôt est aujourd'hui archivé est n'est plus en cours de développement ! En effet, la partie data science du projet Signaux Faibles a migrée sur le lac de données de la DGFiP dans le cadre d'une évolution du partenariat et a donc changé d'environnement technique.
6+
37
## Dépendances / pré-requis
8+
49
- python 3.6.4
5-
- Docker (:construction_worker:)
610
- un accès à la base de données du projet
711

812
## Installation pour un développeur/data scientist :
913

1014
### Cloner et naviguer dans le repo
11-
```
15+
16+
``` sh
1217
git clone git@github.com:signaux-faibles/predictsignauxfaibles.git
1318

1419
```
15-
### Optionnel : Pour les personnes qui travaillent sur le serveur labtenant avec un proxy
20+
### Optionnel : Pour les personnes qui travaillent sur le serveur labtenant avec un proxy
1621

1722
Pour pouvoir télécharger les packages, leurs dépendances ainsi que la documentation de données de opensignauxfaibles, il est nécessaire de prendre en compte le proxy pour les personnes qui travaillent sur le serveur.
1823

1924
Par exemple, pour installer un package :
2025

21-
```
26+
``` sh
2227
pip install --proxy socks5h://localhost:<PORT_INTERNET> <MON_PACKAGE>
2328
```
29+
2430
Pour éviter de fournir l'option --proxy à chaque fois, vous pouvez créer un fichier ~/.conf/pip/pip.conf
2531

26-
```
27-
mkdir ~/.conf
28-
mkdir ~/.conf/pip
32+
``` sh
33+
mkdir -p ~/.config/pip
2934
nano pip.conf
3035
```
3136
Et y ajouter la configuration suivante :
3237

33-
```
34-
[global]
38+
``` config
39+
3540
proxy = socks5h://localhost:<PORT_INTERNET>
3641
```
3742
Cette configuration est cruciale pour l'installation automatique des packages indiqué dans requirements.
3843

3944
### créer un environnement virtuel python (recommandé)
40-
exemple avec [pyenv](https://github.com/pyenv/pyenv):
41-
```
45+
46+
Exemple avec [pyenv](https://github.com/pyenv/pyenv) :
47+
48+
``` sh
4249
pyenv install 3.6.4
4350
pyenv virtualenv 3.6.4 sf
4451
pyenv local sf
4552
```
4653

4754
### installer les dépendences du projet
48-
```
55+
56+
``` sh
4957
pip install -r requirements.txt
5058
```
5159

5260
Note: la procédure sur le serveur est légèrement différente.
5361

5462
### activer les githooks
55-
```
63+
64+
``` sh
5665
python -m python_githooks
5766
```
5867

@@ -68,37 +77,64 @@ Chaque run de modèle produit 2 fichiers dans `./model_runs/<model_id>` **qui n'
6877

6978
La variable d'environnement `ENV` permet de faire tourner le modèle en mode `develop` (utilisant moins de données, le défaut) ou bien en `prod`:
7079

71-
```sh
80+
``` sh
7281
export ENV=prod
7382
python -m predictsignauxfaibles
7483
```
7584

7685
## Structure du Dépot
77-
(librement inspiré du [cookiecutter data science](https://drivendata.github.io/cookiecutter-data-science))
78-
79-
- `lib` contient l'essentiel du code nécéssaire à la production de listes signaux faibles
80-
- `bin` contient des scripts utiles au projet
81-
- `models` contient les artefacts de modèle (entrainés et serialisés), ses prédictions, et son évaluation
82-
- `notebooks` contient les notebooks Jupyter (exploration, documentation intéractive, tutoriels, ...)
83-
- `tests` contient les tests du projet : tests unitaires, d'intégration, et "end-to-end" (e2e). Le module python utilisé pour les tests est `pytest`.
84-
- `Makefile` contient les commandes make pour l'execution de taches communes (`make train`, `make predict`, etc.)
85-
- `config.py` est module de gestion de configuration du projet
86-
- `requirements.txt` liste les dépendences (et leurs versions) nécessaires à la production d'une liste signaux faibles, `requirements-dev.txt` y rajoute les dépendences optionnelles qui ne concernent que les développeurs (pour les tests, le linting, etc.)
87-
- `.githooks.ini` et `.pylintrc` dont des fichiers de configuration pour les githooks et le linter.
86+
87+
Librement inspiré du [cookiecutter data science](https://drivendata.github.io/cookiecutter-data-science)
88+
89+
- `lib/` contient l'essentiel du code nécéssaire à la production de listes signaux faibles.
90+
- `bin/` contient des scripts utiles au projet.
91+
- `models/` contient les artefacts de modèle (entrainés et serialisés), ses prédictions, et son évaluation.
92+
- `model_run/` contient les prédictions, et les métriques d'évaluation des modèles exécutés.
93+
- `notebooks/` contient les notebooks Jupyter (exploration, documentation intéractive, tutoriels…)
94+
- `tests/` contient les tests du projet : tests unitaires, d'intégration, et "end-to-end" (e2e). Le module python utilisé pour les tests est `pytest`.
95+
- `Makefile` peut être utilisé pour l'execution de taches communes (`make train`, `make predict`, etc.) _Rq_ : Ceci n'est pas implémenté car déjà couvert par l'utilitaire en ligne de commandes.
96+
- `setup.cfg` est un fichier contenant les métaonnées du projet utilisées par `setuptools` lors de l'installation du projet.
97+
- `requirements.txt` liste les dépendences (et leurs versions) nécessaires à la production d'une liste signaux faibles.
98+
- `.githooks.ini` et `.pylintrc` sont les fichiers de configuration pour les githooks et le linter.
8899

89100
## Documentation
90101

102+
### Démo
103+
91104
Un notebook jupyter interactif de démo est disponible [ici](./notebooks/00-get_started.ipynb).
92105

93-
Il est également possible de télécharger le listing des features disponibles pour le modèle Signaux Faibles, fichier json présent dans le dépôt Github opensignauxfaibles. Ce listing est utilisé dans le notebook de démo.
106+
### Générer la documentation
107+
108+
La documentation peut être générée en exécutant la commande (toujours depuis `docs/`)
109+
110+
``` sh
111+
make html
112+
```
113+
114+
pour obtenir un dossier formattant la documentation en html (type «readthedocs.io»). Celle-ci est ensuite navigable en ouvrant `docs/build_/html/index.html`
115+
116+
Beaucoup d'autres formats d'export sont disponibles (pdf, man, texinfo); pour plus d'informations, voir
94117

118+
``` sh
119+
make help
95120
```
121+
122+
La documentation est générée grâce aux fichiers `.rst` contenus dans le dossier `docs/source`. Si besoin, ceux-ci peuvent être automatiquement générés à l'aide de `sphinx` : depuis le dossier `docs/`, exécuter
123+
124+
``` sh
125+
sphinx-apidoc -fP -o source/ ../predictsignauxfaibles
126+
```
127+
128+
### Variables d'apprentissage
129+
130+
Il est également possible de télécharger la liste des features disponibles pour le modèle Signaux Faibles, fichier `json` présent dans le dépôt Github opensignauxfaibles. Ce listing est utilisé dans le notebook de démo.
131+
132+
``` sh
96133
cd notebooks
97134
curl --proxy socks5h://localhost:<PORT_INTERNET> -OL https://raw.githubusercontent.com/signaux-faibles/opensignauxfaibles/master/js/reduce.algo2/docs/variables.json -o variables.json
98135
cd ..
99136
```
100137

101-
102138
## Gestion des fonctions aléatoires
103139

104140
Les fonctions aléatoires doivent être décorées avec le décorateur `is_random` (dans `lib.decorators`).
@@ -107,12 +143,12 @@ Dès lors, la variable d'environnement `RANDOM_SEED` permet aux fonctions aléat
107143

108144
Au début d'un notebook, vous pouvez créer cette variable d'environnement de la manière suivante :
109145

110-
```python
146+
``` python
111147
import os
112148
os.environ["RANDOM_SEED"]="42"
113149
```
114150

115151
Ou depuis le terminal :
116-
```sh
152+
``` sh
117153
export RANDOM_SEED=42
118-
```
154+
```

datascience_workflow.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,18 @@ Les git hooks permettent de s'assurer que certains scripts tournent automatiquem
124124
- `pytest`
125125
- faire tourner et évaluer le modèle (ça peut juste être un rappel si c'est trop lourd)
126126

127-
L'évaluation du modèle peut produire un artefact "model_evaluation.json",
128-
versionné dans git avec chaque nouvelle version du modèle.
127+
L'évaluation du modèle peut produire un artefact "model_evaluation.json", versionné dans git avec chaque nouvelle version du modèle.
128+
129+
## Documentation
130+
131+
Une documentation du code peut être générée automatiquement grâce à `sphinx` (voir [README.md](./README.md)). Celle-ci se base sur les «docstrings» des modules, classes et autres objets pythons du code, il est donc très utile de bien les documenter !
132+
133+
Le format `napoleon` (variante google) est employé. Un exemple de ce format est disponible [ici](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html). Quelques éléments importants du format des docstrings :
134+
- La première ligne est une courte description de l'objet.
135+
- Des sauts de lignes séparent la première ligne, la description plus longue, les arguments, la valeur renvoyée.
136+
- Si la ligne de description d'un argument dépasse la longueur maximale autorisée, on indente la ligne suivante de deux espaces.
137+
- On préférera indiquer les types des variables d'entrée et de sortie directement dans la signature d'une fonction plutôt que dans la docstring.
138+
- Il est possible d'intégrer des équations à l'aide de la directive `:math:`.
129139

130140
## Securité et Configuration :construction_worker:
131141

docs/Makefile

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Minimal makefile for Sphinx documentation
2+
#
3+
4+
# You can set these variables from the command line, and also
5+
# from the environment for the first two.
6+
SPHINXOPTS ?=
7+
SPHINXBUILD ?= sphinx-build
8+
SOURCEDIR = source
9+
BUILDDIR = build
10+
11+
# Put it first so that "make" without argument is like "make help".
12+
help:
13+
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14+
15+
.PHONY: help Makefile
16+
17+
# Catch-all target: route all unknown targets to Sphinx using the new
18+
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19+
%: Makefile
20+
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

docs/make.bat

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
@ECHO OFF
2+
3+
pushd %~dp0
4+
5+
REM Command file for Sphinx documentation
6+
7+
if "%SPHINXBUILD%" == "" (
8+
set SPHINXBUILD=sphinx-build
9+
)
10+
set SOURCEDIR=source
11+
set BUILDDIR=build
12+
13+
if "%1" == "" goto help
14+
15+
%SPHINXBUILD% >NUL 2>NUL
16+
if errorlevel 9009 (
17+
echo.
18+
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
19+
echo.installed, then set the SPHINXBUILD environment variable to point
20+
echo.to the full path of the 'sphinx-build' executable. Alternatively you
21+
echo.may add the Sphinx directory to PATH.
22+
echo.
23+
echo.If you don't have Sphinx installed, grab it from
24+
echo.http://sphinx-doc.org/
25+
exit /b 1
26+
)
27+
28+
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
29+
goto end
30+
31+
:help
32+
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
33+
34+
:end
35+
popd

docs/source/conf.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Configuration file for the Sphinx documentation builder.
2+
#
3+
# This file only contains a selection of the most common options. For a full
4+
# list see the documentation:
5+
# https://www.sphinx-doc.org/en/master/usage/configuration.html
6+
7+
# -- Path setup --------------------------------------------------------------
8+
9+
# If extensions (or modules to document with autodoc) are in another directory,
10+
# add these directories to sys.path here. If the directory is relative to the
11+
# documentation root, use os.path.abspath to make it absolute, like shown here.
12+
#
13+
import os
14+
import sys
15+
16+
sys.path.insert(0, os.path.abspath("../predictsignauxfaibles/"))
17+
18+
19+
# -- Project information -----------------------------------------------------
20+
21+
project = "predictsignauxfaibles"
22+
copyright = "2021, the signaux-faibles contributors"
23+
author = "The signaux-faibles contributors."
24+
25+
26+
# -- General configuration ---------------------------------------------------
27+
28+
# Add any Sphinx extension module names here, as strings. They can be
29+
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
30+
# ones.
31+
extensions = [
32+
"sphinx.ext.napoleon",
33+
"sphinx.ext.autodoc",
34+
"sphinx.ext.viewcode",
35+
]
36+
37+
# Add any paths that contain templates here, relative to this directory.
38+
templates_path = ["_templates"]
39+
40+
# List of patterns, relative to source directory, that match files and
41+
# directories to ignore when looking for source files.
42+
# This pattern also affects html_static_path and html_extra_path.
43+
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
44+
45+
46+
# -- Options for HTML output -------------------------------------------------
47+
48+
# The theme to use for HTML and HTML Help pages. See the documentation for
49+
# a list of builtin themes.
50+
#
51+
html_theme = "sphinx_rtd_theme"
52+
53+
# Add any paths that contain custom static files (such as style sheets) here,
54+
# relative to this directory. They are copied after the builtin static files,
55+
# so a file named "default.css" will overwrite the builtin "default.css".
56+
html_static_path = ["_static"]

docs/source/index.rst

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
.. predictsignauxfaibles documentation master file, created by
2+
sphinx-quickstart on Tue Aug 31 14:35:33 2021.
3+
You can adapt this file completely to your liking, but it should at least
4+
contain the root `toctree` directive.
5+
6+
Welcome to predictsignauxfaibles's documentation!
7+
=================================================
8+
9+
.. toctree::
10+
:maxdepth: 2
11+
:caption: Contents:
12+
13+
modules
14+
15+
Indices and tables
16+
==================
17+
18+
* :ref:`genindex`
19+
* :ref:`modindex`
20+
* :ref:`search`

docs/source/modules.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
predictsignauxfaibles
2+
=====================
3+
4+
.. toctree::
5+
:maxdepth: 4
6+
7+
predictsignauxfaibles

0 commit comments

Comments
 (0)