Projet de data science analysant les données ouvertes d'Île-de-France Mobilités (IDFM) sur les validations de titres de transport du réseau ferré francilien (métro, RER, train). Le projet couvre l'ensemble de la chaîne : collecte des données, préparation/agrégation, stockage, exposition via une API sécurisée, et restitution via un dashboard interactif.
- Contexte
- Sources de données
- Structure du projet
- Installation
- Utilisation
- API
- Dashboard
- Documentation
- Tests
- Stack technique
Les données proviennent du système de collecte et de partage de la Plateforme Régionale d'Information pour la Mobilité (PRIM) d'Île-de-France Mobilités, issu de l'usage des passes Navigo. Elles permettent d'analyser les flux de voyageurs sur le réseau ferré (les validations y sont rattachées à une station, contrairement au réseau de surface — bus, tram — où la validation se fait dans le véhicule). Ces chiffres sont mis à jour semestriellement et offrent une vision partielle du trafic (hors tickets magnétiques, forfaits spéciaux et fraude).
Le projet explore notamment :
- la répartition des validations par jour de la semaine et par mois,
- les stations avec le plus et le moins de validations,
- une carte interactive des stations,
- la répartition par catégorie de titre de transport (Navigo, Imagine R, Améthyste, etc.),
- les validations agrégées par ligne,
- une corrélation entre la proximité des écoles et l'usage du forfait Imagine R,
- une corrélation entre le nombre de lignes desservant une station et son volume de validations.
Données ouvertes récupérées automatiquement depuis :
- data.iledefrance-mobilites.fr : validations de titres par trimestre (réseau ferré) et emplacement des gares/stations.
- data.iledefrance.fr : liste et localisation des établissements scolaires (1er et 2d degrés) en Île-de-France.
├── api/ # API FastAPI pour servir les données traitées
│ └── main.py
├── src/ # Scripts du pipeline de données
│ ├── collecte.py # Téléchargement des sources (validations, stations, écoles)
│ ├── preparation.py # Nettoyage, fusion et agrégation des données
│ ├── stockage.py # Chargement des données dans une base SQLite
│ └── app.py # Dashboard Streamlit d'analyse et de visualisation
├── notebooks/ # Notebooks Jupyter d'exploration et d'analyse
│ ├── 1_idfm.ipynb
│ ├── 2_idfm_analyses.ipynb
│ ├── 3_idfm_db.ipynb
│ └── 4_idfm_geopandas.ipynb
├── config/ # Fichiers de configuration
├── docs/ # Documentation (MkDocs)
├── tests/ # Tests unitaires et d'intégration
├── requirements.txt # Dépendances du projet
├── Makefile # Commandes de développement
└── mkdocs.yaml
Prérequis : Python 3.11.
git clone https://github.com/m1111111ke/idfm.git
cd idfm
# Créer un environnement virtuel et installer les dépendances
make setup
# Installer les hooks pre-commit
make install_precommitOu manuellement :
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtLe pipeline de données s'exécute en trois étapes, depuis le dossier src/ :
cd src
# 1. Télécharger les fichiers sources (validations, stations, écoles)
python collecte.py
# 2. Nettoyer, fusionner et agréger les données
python preparation.py
# 3. Charger les données dans une base SQLite locale (data/database/idfm.db)
python stockage.pyUne API FastAPI sécurisée par clé permet de servir les données traitées (stations et validations par station/par ligne).
cd api
uvicorn main:app --reloadEndpoints principaux (authentification via l'en-tête X-API-Key) :
| Méthode | Endpoint | Description |
|---|---|---|
| GET | / |
Message de bienvenue |
| GET | /health |
Statut de l'API |
| GET | /api/stations |
Liste des stations |
| POST | /api/stations |
Créer une nouvelle station |
| GET | /api/validations_station |
Validations pour toutes les stations |
| GET | /api/validations_station/{id_zdc} |
Validations pour une station donnée |
| GET | /api/validations/ligne |
Validations pour toutes les lignes |
| GET | /api/validations/ligne/{Ligne} |
Validations pour une ligne donnée |
| POST | /api/validations/ligne |
Créer une nouvelle ligne |
La documentation interactive Swagger est disponible sur /docs une fois l'API lancée.
Un dashboard Streamlit permet d'explorer visuellement les données (graphiques, carte des stations, corrélations) :
cd src
streamlit run app.pyLa documentation du projet est générée avec MkDocs (thème Material).
# Servir la documentation en local sur http://localhost:8001
make serve_docs_locally
# Déployer sur GitHub Pages
make deploy_docsmake run_tests- Données & traitement : pandas, geopandas
- Visualisation : plotly, matplotlib, seaborn, Streamlit
- API : FastAPI, Pydantic
- Stockage : SQLite
- Qualité de code : pre-commit, Ruff, Bandit
- Documentation : MkDocs Material
- Tests : Pytest
Ce projet est sous licence MIT — voir le fichier LICENSE pour plus de détails.