Ce dépôt agrège l'information électorale, administrative et géographique française nécessaire pour faciliter l'analyse électorale.
Les données sont stockées dans le dossier data avec les sous-dossiers suivants:
01_raw/: Données brutes (téléchargées)02_clean/: Données nettoyées (formatées, filtrées)03_main/: Données prêtes à l'emploi par étude (feature engineering, jointures, aggrégats, etc.)
L'installation du projet se fait avec le gestionnaire de paquets uv (voir instructions d'installation).
Pour créer l'environnement virtuel et installer les dépendances, utilisez la commande suivante.
uv syncPour pouvoir utiliser just, il est conseillé de l'installer globalement avec uv s'il
n'est pas déjà disponible :
uv tool install rust-justDéfinir les alias suivants permettent de simplifier l'utilisation de dvc et de just
alias dvc="uv run dvc"
alias just="uv run just"Une version initiale des données (et notamment des sources, dont certaines peuvent ne plus être disponibles en ligne) peut être récupérée depuis le cache en ligne.
uv run just pullUne fois cette opération terminée, tous les fichiers devraient avoir été créés dans le dossier
data.
L'ensemble des données sources sont présentes dans le dossier data/01_raw. Les
fichiers sont organisés dans des dossiers correspondant aux éditeurs des données.
L'ensemble des fichiers sources est versionné avec dvc et non directement avec git. En
effet, git ne gère pas correctement les fichiers volumineux. En pratique, cela signifie
que les jeux de données ne sont jamais ajoutés directement dans le dépôt git (et le
fichier .gitignore exclut d'ailleurs la plupart des extensions correspondant à des
jeux de données). À chaque jeu de donnée correspond un fichier .dvc généré par DVC.
C'est ce dernier qui doit être ajouté dans git.
La démarche est différente selon qu'il s'agisse d'un jeu de données disponible sur internet, ou non (par exemple s'il s'agit d'un jeu de données produit par la France insoumise).
Dans les deux cas, la commande à utiliser crée un fichier .dvc qu'il faut
impérativement versionner avec git. Le fichier lui-même ne doit pas être versionné
La commande import-url de DVC permet d'importer une source externe depuis une URL :
uv run dvc import-url <url> data/01_raw/<editeur>/<nom du fichier>Le fichier doit être enregistré dans le dossier data/01_raw/<editeur>/<nom fichier>.
La commande uv run dvc add data/01_raw/<editeur>/<nom fichier> permet ensuite de
générer le fichier .dvc.
Les sources ne sont pas mises à jour automatiquement. Pour les mises à jour, il y a trois cas de figure.
Il faut alors éditer le fichier directement, ou le remplacer par la nouvelle version.
Une fois que c'est fait, la commande uv run dvc add permet de mettre à jour le fichier
.dvc correspondant pour prendre en compte les modifications correspondantes.
Pour certains fichiers, l'URL de téléchargement renvoit un état actuel de la source de données qui peut donc changer à n'importe quel moment. C'est par exemple le cas pour les données de l'Assemblée nationale. Il suffit alors de faire tourner la commande :
uv run dvc update <chemin du fichier dans data/01_raw> Cette commande interroge le serveur d'origine, télécharge la nouvelle version le cas échéant, et met à jour le fichier .dvc.
Pour d'autres fichiers, l'URL correspond à une édition particulière du fichier, et il faut donc la changer pour mettre à jour le fichier. C'est par exemple le cas du COG.
Dans ce cas, il faut utiliser la commande :
uv run dvc import-url <nouvelle url> <chemin complet du fichier à mettre à jour>Chaque source ajoutée doit être documentée, voir ci-dessous
Les traitements de données sont définis dans le fichier dvc.yaml
(voir la documentation de DVC).
La commande uv run dvc repro fait tourner tous les traitements de données qui ne sont
plus à jour.
S'il y en avait, le fichier dvc.lock est mis à jour en conséquence. Si c'est le cas,
il est impératif :
- de versionner
dvc.lock - de pousser les nouvelles versions des fichiers.
De préférence, les traitements de données doivent être écrits en Python. Si nécessaire, il est toutefois possible d'ajouter des traitements sous la forme de scripts bash.
Les traitements de données en Python doivent respecter les conventions suivantes :
- Chaque traitement doit être un module Python exécutable dans le paquet
hexagonal; le fichier source doit donc se trouver dans le dossiersrc/hexagonal. - Sauf execption, le module exécutable doit prendre en argument les chemins vers les fichiers sources
et les fichiers destination plutôt que d'accéder aux fichiers avec un chemin en dur.
Il est possible d'utiliser la bibliothèque
clickpour faciliter le traitement des arguments.
Les traitements de données en Bash doivent respecter les conventions suivantes :
- Les scripts de traitements doivent se trouver dans le dossier
src/scripts. - Sauf exception, le script doit prendre en argument les chemins vers les fichiers sources et les fichiers destination plutôt que d'accéder aux fichiers avec un chemin en dur, dans la mesure du possible.
- Les scripts ne peuvent utiliser de dépendances externes qu'en cas de nécessité.
Une fois le traitement écrit, il faut l'ajouter dans le fichier dvc.yaml selon les
conventions suivantes :
- Donner un nom explicite au nom du traitement, en s'assurant qu'il soit bien unique
- La liste des dépendances doit inclure aussi bien la source du traitement que les jeux de données utilisés
- Les variables
${src},${raw},${clean}et${main}doivent être utilisés plutôt que les chemins complets. - Pour un traitement en python, le script doit être invoqué avec la syntaxe
${python} <nom.du.module>
Lorsque des fichiers ont été modifiés, il faut les pousser vers le cache distant de DVC
pour les rendre accessibles. Pour cela, il est nécessaire de me contacter pour obtenir
des droits en écriture sur le bucket S3 hexagonal-data.
just pushL'ensemble des sources, et l'ensemble des données produites sont documentés. Cette
documentation se trouve dans un fichier portant le même nom que le fichier documenté,
suivi de l'extension .toml.
La commande suivante permet de créer une version initiale de ces fichiers pour les nouvelles sources et productions :
just scaffoldElle met par ailleurs à jour la liste des dépendances des différents fichiers (à partir des pipelines définis dans DVC).
Un fichier .toml est créé dans le même dossier que les sources ajoutées par la commande ci-dessus.
Pour une source, les propriétés suivantes peuvent être renseignées :
| Propriété | Description |
|---|---|
nom |
Une désignation complète du jeu de données |
description |
Une description aussi complète que possible |
editeur |
L'éditeur du jeu de données |
date |
La date du jeu de données, si pertinent |
info_url |
Une URL vers une documentation externe |
Un fichier .toml est créé dans le même dossier que les fichiers produits. Pour un fichier produit,
les propriétés suivantes peuvent être renseignées :
| Propriété | Description |
|---|---|
nom |
Une désignation complète du jeu de données |
description |
Une description aussi complète que possible |
section |
La catégorie à laquelle appartient cette production |
Par ailleurs, pour les fichiers de type tabulaire (CSV ou parquet), il faut documenter les différentes colonnes avec les propriétés suivantes :
| Propriété | Description |
|---|---|
type |
Le type de données de la colonne |
description |
Une description plus précise, lorsqu'elle est nécessaire |
nullable |
Si la colonne admet des valeurs nulles. |
La commande suivante permet de créer ou mettre à jour les deux fichiers <sources.md> et <productions.md> :
just build_docPour permettre le téléchargement correct des fichiers depuis les fichiers <sources.md>
et <productions.md>, il faut réécrire les headers HTTP Content-Type et
Content-Disposition pour y mettre les bons types et noms de fichiers.
just push