Pipeline ETL, analyse exploratoire et vérification empirique des lois de Zipf et Gibrat sur les données INSEE de mobilité résidentielle, avec un focus sur l'effet du COVID-19 sur les grandes métropoles françaises.
Stack : Python · Pandas · NumPy · Matplotlib · Jupyter Auteur : Ahmed EISH — Étudiant ingénieur CY Tech (Maths appliquées à la DATA/IA)
Projet réalisé dans le cadre du cursus de classe préparatoire intégrée à CY Tech (cours de macroéconomie urbaine). L'objectif est double :
- Cycle ETL complet sur 5 millésimes de données INSEE (~125 Mo de CSV bruts, ~2 millions de flux migratoires inter-communaux).
- Vérification empirique de deux lois fondamentales de l'économie urbaine sur le tissu communal français.
Ce projet est le premier volet d'une série orientée data/IA. Le second volet, DataChat-FR (en cours), construira un agent IA conversationnel par-dessus ces datasets INSEE.
| Dataset | Source | Description |
|---|---|---|
| Flux mobilité résidentielle 2018-2022 | INSEE — Base flux mobilité résidentielle | Flux migratoires inter-communaux annuels (~400 k lignes/an) |
| Population municipale 2012, 2018, 2022 | INSEE — Populations légales | Populations communales recensées (fichier ensemble.xls/xlsx) |
⚠️ Les fichiers de données ne sont pas inclus dans le repo (volumineux, > 100 Mo). Voir la section Reproduction pour les télécharger et les placer dansinputs/.
inputs/ notebooks/ outputs/
base-flux-mobilite-residentielle- ┌──────────────────────────────┐ flux_migratoire_triee.csv
2018.csv ─┐ │ 01_tri_donnees.ipynb │ ──────► (~2 M lignes nettoyées,
2019.csv │ │ ETL: nettoyage, fusion, │ 5 millésimes fusionnés)
2020.csv ├────────────────────────► │ filtrage flux étrangers, │
2021.csv │ │ exclusion auto-flux │
2022.csv ─┘ └──────────────────────────────┘ │
│
┌──────────────────────────────┐ │
ensemble2012.xls ──┐ │ 02_analyse_solde_migra.ipynb │ ◄──────────────┤
ensemble2018.xlsx ├──────────────────► │ EDA: solde migratoire par │ ──────► graphique_solde_migra.png
ensemble2022.xlsx ─┘ │ métropole, choc COVID 2020 │
└──────────────────────────────┘
│
┌──────────────────────────────┐ │
│ 03_loi_Zipf_Gibrat.ipynb │ ◄──────────────┘
│ Modélisation: régression │ ──────► Loi_de_Zipf.png
│ log-log, taux de migration │ Loi_de_Gibrat.png
│ net, détection d'outliers │
└──────────────────────────────┘
- Lecture des 5 CSV INSEE (séparateur
;, encodage Latin-1). - Détection automatique de la colonne
NBFLUX_*(le nom varie selon le millésime). - Filtrages :
- Suppression des flux d'origine étrangère (codes commençant par
99). - Exclusion des flux intra-communaux (code origine = code destination).
- Suppression des flux nuls ou manquants.
- Suppression des flux d'origine étrangère (codes commençant par
- Renommage des colonnes (
CODGEO→code_dest,DCRAN→code_orig, etc.). - Concaténation des 5 millésimes →
outputs/flux_migratoire_triee.csv.
Calcul du solde migratoire annuel (arrivées − départs) pour les 5 plus grandes métropoles françaises (Paris, Lyon, Marseille, Bordeaux, Nantes), avec gestion des arrondissements (regroupement des codes 751**, 6938*, 132**).
Lectures clés :
- Paris se distingue par un solde structurellement très négatif (~ −37 000 en 2018 → ~ −49 000 en 2022).
- Les autres métropoles sont également déficitaires mais d'un ordre de grandeur inférieur.
- Le COVID-19 (mars 2020) accélère la décroissance : toutes les courbes basculent plus fortement après le trait pointillé rouge.
- Nantes était la seule métropole à solde positif jusqu'en 2019 ; elle bascule en territoire négatif post-COVID.
La loi de Zipf prédit que dans une distribution de villes triée par taille décroissante,
Régression log-log sur les 100 plus grandes communes pour 2012, 2018 et 2022 :
Les trois millésimes s'alignent sur des droites quasi-identiques → la hiérarchie urbaine française est extrêmement stable sur 10 ans, comme le prédit la loi.
La loi de Gibrat (croissance proportionnelle) prédit que le taux de croissance d'une ville est indépendant de sa taille : le nuage doit être centré autour de 0 sans corrélation avec
Insight principal — Paris est un outlier structurel :
- Position en bas à droite du nuage (forte population, taux de migration net fortement négatif ≈ −2.3 %).
- Les villes moyennes (à gauche) présentent une dispersion symétrique autour de 0, conforme à Gibrat.
- Au-delà d'un certain seuil de taille, la dynamique devient systématiquement répulsive (déconcentration).
Note méthodologique : on utilise le taux de migration net uniquement (sans naissances/décès) pour isoler la composante mobilité résidentielle.
- Python ≥ 3.10
- ~3 Go d'espace disque pour les données brutes
git clone https://github.com/amdvii/UrbanFlowsFR.git
cd UrbanFlows-FR
pip install -r requirements.txtPlacer dans inputs/ :
| Fichier | URL |
|---|---|
base-flux-mobilite-residentielle-2018.csv à 2022.csv |
https://www.insee.fr/fr/statistiques/7637844 |
ensemble2012.xls |
https://www.insee.fr/fr/statistiques/2525755 |
ensemble2018.xlsx |
https://www.insee.fr/fr/statistiques/4265429 |
ensemble2022.xlsx |
https://www.insee.fr/fr/statistiques/8268826 |
Les notebooks sont à exécuter dans l'ordre :
jupyter notebook notebooks/01_tri_donnees.ipynb # ETL → outputs/flux_migratoire_triee.csv
jupyter notebook notebooks/02_analyse_solde_migra.ipynb # EDA → outputs/graphique_solde_migra.png
jupyter notebook notebooks/03_loi_Zipf_Gibrat.ipynb # Modélisation → outputs/Loi_de_*.pngUrbanFlows-FR/
├── notebooks/
│ ├── 01_tri_donnees.ipynb # ETL : nettoyage + fusion 2018-2022
│ ├── 02_analyse_solde_migra.ipynb # Solde migratoire par métropole
│ └── 03_loi_Zipf_Gibrat.ipynb # Régressions log-log
├── inputs/ # Données INSEE (à télécharger, gitignored)
├── outputs/ # Fichiers générés (gitignored)
├── docs/
│ ├── figures/ # Figures du README
│ └── Présentation_*.pptx # Présentation orale du projet
├── README.md
├── requirements.txt
└── .gitignore
- ETL & Data Engineering : ingestion CSV/Excel multi-format, détection de schéma dynamique, fusion multi-millésime, gestion des codes communaux INSEE (arrondissements, codes étrangers).
- EDA : agrégation temporelle, comparaison de cohortes, visualisation matplotlib.
- Modélisation statistique : régression linéaire log-log, vérification empirique de lois économétriques, détection d'outliers.
- Reproductibilité : pipeline en 3 notebooks séquentiels, requirements pinnés, structure inputs/outputs explicite.
Ce projet alimente directement le suivant : un agent IA conversationnel capable d'interroger ces datasets INSEE en langage naturel, avec :
- Plan d'exécution JSON généré par LLM.
- Exécution Pandas sécurisée en sandbox.
- RAG sur la documentation INSEE.
- Visualisation automatique des résultats.
Repo (en cours) : à venir sur github.com/amdvii.
Projet académique — Ahmed EISH (CY Tech, 2025). Pour toute question : a.eish@outlook.fr · LinkedIn


