Skip to content

Fix/population

Population 2021

Will close #67

Création d'une table circo_iris_correspondance

J'ai modifié le code pour utiliser la table circo_iris_correspondance au lieu de jointures directes sur les communes pour calculer la population des circonscriptions. Les modifications incluent :

  1. Population totale circonscription 2021 Avant : WHERE com in (%s) avec self.data.in_communes Après : Jointure avec circo_iris_correspondance utilisant pct_iris_dans_circo
  2. Population détaillée par tranches d'âge 2021 Avant : Agrégation directe par communes Après : Multiplication de chaque tranche d'âge par pct_iris_dans_circo pour une répartition proportionnelle
  3. Population détaillée par tranches d'âge 2018 Avant : Agrégation directe par communes Après : Multiplication de chaque tranche d'âge par pct_iris_dans_circo
  4. Méthode _set_pop_metro Corrigé les deux requêtes similaires dans cette méthode qui utilisaient également les jointures directes Avantages de ces modifications : Précision géographique : La table circo_iris_correspondance calcule précisément quelle partie de chaque IRIS appartient à chaque circonscription Calcul proportionnel : Utilise pct_iris_dans_circo pour attribuer la population proportionnellement à la surface d'intersection Cohérence : Toutes les requêtes de population des circonscriptions utilisent maintenant la même méthode de calcul Projections appropriées : La table de correspondance utilise les bonnes projections géographiques selon le territoire (métropole, DOM-TOM) Les requêtes pour les calculs départementaux et nationaux n'ont pas été modifiées car elles sont correctes en l'état (elles agrègent bien toutes les communes du département ou du pays).

Analyse des données dans circo_iris_correspondance

Statistiques générales : Total : 72 804 enregistrements

  • Valeurs proches de 1 (>0.99) : 47 665 (65,5%) pour pct_iris_dans_circo
  • Valeurs proches de 0 (<0.01) : 21 922 (30,1%) pour pct_iris_dans_circo
  • Valeurs exactement à 1.0 : 3 557 cas Interprétation : Les valeurs proches de 0.99-1.0 sont LÉGITIMES : Elles représentent des IRIS presque entièrement contenus dans une circonscription, mais avec de minuscules chevauchements dus aux imprécisions géospatiales.

Les valeurs proches de 0.001-0.01 sont aussi LÉGITIMES : Elles représentent de très petites portions d'IRIS qui débordent sur des circonscriptions voisines.

Exemple concret : L'IRIS 010580000 est réparti sur 5 circonscriptions :

  • 001-03: 99.3% (partie principale)
  • 001-05: 0.2% (petit débordement)
  • 038-06: 0.3% (petit débordement)
  • 073-01: 0.2% (petit débordement)
  • 038-10: 0.0% (micro-débordement) Recommandation : NE PAS harmoniser Il ne faut PAS harmoniser ces valeurs à 0 et 1 pour les raisons suivantes :

Précision géographique : Ces micro-chevauchements reflètent la réalité des découpages géographiques complexes Cohérence des totaux : Si on supprime les petites valeurs, on perd de la population dans les calculs Qualité des données : Ces valeurs proches de 0.99x et 1.0 montrent que le calcul géospatial fonctionne correctement Les modifications que nous avons apportées au code Python sont correctes car elles utilisent ces ratios précis pour une attribution proportionnelle exacte de la population.

Problème de surface avec les données carroyées

Résumé des corrections apportées J'ai corrigé 5 requêtes dans pop_data.py qui avaient le problème que vous avez identifié :

  • Stats ménages circonscription 2010 - Maintenant utilise circo_population_2010 avec pct
  • Stats ménages département 2010 - Maintenant utilise circo_population_2010 avec pct
  • Stats ménages circonscription 2015 - Maintenant utilise circo_population_2015 avec pct
  • Stats ménages département 2015 - Maintenant utilise circo_population_2015 avec pct
  • Stats ménages circonscription 2019 - Maintenant utilise circo_population_2019 avec pct
  • Stats ménages département 2019 - Maintenant utilise circo_population_2019 avec pct

Problème de projection géographique

Voici le bilan complet des problèmes de projection dans votre projet :

Corrections déjà apportées dans population.py Données carroyage 1km 2019 : projections conditionnelles ajoutées Table circo_iris_correspondance : projections conditionnelles ajoutées Problèmes identifiés à corriger

  1. geographie.py (ligne 19-22) - CRITIQUE

UPDATE zone_circo set geom = st_transform(wkb_geometry,2154) where ref < '097';UPDATE zone_circo set geom = st_transform(wkb_geometry,5489) where ref LIKE '972%';UPDATE zone_circo set geom = st_transform(wkb_geometry,4627) where ref LIKE '974%';UPDATE zone_circo set geom = st_transform(wkb_geometry,4627) where ref LIKE '976%';

⚠️ Problème : Mayotte (976) utilise EPSG:4627 (Réunion) au lieu de sa projection locale.

  1. geographie.py (ligne 66-75) - CRITIQUE

-- Calculs de correspondance circo/commune avec ::geographyround((st_area(st_intersection(co.wkb_geometry, ci.wkb_geometry)::geography) / st_area(co.wkb_geometry::geography))::numeric,2) as pct_surf

⚠️ Problème : Utilise ::geography qui est moins précis que les projections légales locales.

  1. population.py (ligne 530) - CRITIQUE

st_area(st_intersection(p.wkb_geometry, c.wkb_geometry)::geography)/st_area(p.wkb_geometry::geography) as pct

⚠️ Problème : Calcul pour circo_population_2010 utilise ::geography.

  1. Modules de données (modules_data) - MINEUR

Plusieurs fichiers utilisent ::geography pour les calculs, mais c'est pour l'export final donc moins critique.

Corrections apportées

Mayotte dans geographie.py

Changé EPSG:4627 → EPSG:4471 (RGM04 / UTM zone 38S) Projection correcte pour Mayotte

circo_population_2010 dans population.py

Remplacé ::geography par projections légales locales conditionnelles Calculs de surface précis selon le territoire Correspondance circo/commune dans geographie.py

Remplacé ::geography par projections légales locales conditionnelles Support de tous les territoires : métropole, Martinique, Réunion, Mayotte Support complet de Mayotte

Ajouté EPSG:4471 partout dans population.py Cohérence totale des projections Projections légales finales :

  • Métropole (≤ 95999) → EPSG:2154 (RGF93 / Lambert-93)
  • Martinique (972%) → EPSG:5489 (RGAF09 / UTM zone 20N)
  • Réunion (974%) → EPSG:4627 (RGF93 / UTM zone 38S)
  • Mayotte (976%) → EPSG:4471 (RGM04 / UTM zone 38S)

Impact :

  • Calculs de surface précis pour tous les territoires
  • Élimination des déformations dues aux mauvaises projections
  • Cohérence géospatiale totale du projet
Edited by Benoît Courty

Merge request reports

Loading