Skip to content

Ajoute les données carroyées de l'Insee - #125

Merged
linogaliana merged 1 commit into
mainfrom
carreaux
Oct 11, 2026
Merged

linogaliana merged 1 commit into
mainfrom
carreaux

Conversation

@linogaliana

@linogaliana linogaliana commented Oct 11, 2026 •

Copy link
Copy Markdown
Collaborator

Ajoute les carreaux Filosofi de l'Insee (édition 2021, publiée en février 2026) comme deux nouveaux niveaux, CARREAU_200M et CARREAU_1KM, en métropole, en Martinique et à La Réunion.

Faits saillants

  • Deux nouveaux niveaux : les carreaux de 200 m et de 1 km, avec toutes les variables de l'Insee gardées telles quelles (ind, men, ind_snv, i_est_200, lcog_geo…).
  • Un carreau, une commune : chaque carreau est rattaché à la commune (ou à l'arrondissement) qui contient son centre, avec les zonages de cette commune, comme les IRIS. Les carreaux d'un département le pavent donc sans doublon.
  • Filtres : par commune, arrondissement, zonage, département, région, territoire ou France entière. Pas de DROM rapprochés.
  • Un seul fichier par grille, FRANCE_ENTIERE, simplification 0 : des carrés ne se simplifient pas. Le client et l'API lisent toujours la simplification 0 pour ces niveaux : cela fait partie du contrat.
  • Versions : pipeline 0.5.0 (56 jobs par millésime au lieu de 54), API 0.2.1, client 0.4.0 (toujours non publié).
  • Vérifié sur les vraies sources, en local, pour 2026 :
    • 2 324 577 carreaux de 200 m et 63,8 millions d'habitants, comme dans les CSV de l'Insee ;
    • fichiers de 244 Mo (200 m) et 46 Mo (1 km), écrits en 10 s et 2 s ;
    • les carreaux de la Seine-Saint-Denis se lisent en 1 s avec le client.

Important

Ordre de mise en production :

  1. publier les fichiers (pipeline 0.5.0) ;
  2. publier le client 0.4.0 sur PyPI ;
  3. déployer l'API 0.2.1.

Le client 0.3.0 chercherait la simplification 80 et ne trouverait pas les carreaux.

Avant d'annoncer les carreaux, mesurer le coût d'une France entière en 200 m via /v1/geojson (2,3 millions de carrés).

Pipeline
  • Nouveau module cartiflette/carreaux.py :

    • le carré est construit à partir de l'identifiant du carreau (CRS3035RES200mN…E… : projection, taille, coin bas-gauche), dans la projection du territoire (EPSG:3035, 5490, 2975), puis reprojeté en WGS84 et déclaré en EPSG:4326 (CRS en PROJJSON dans les métadonnées geo) ;
    • seuls les CSV de l'Insee sont téléchargés.
  • Rattachement (attach_to_communes), en trois passes :

    1. la commune qui contient le centre du carreau ;
    2. sinon (centre en mer, 2 765 carreaux), celle qui couvre la plus grande part du carreau ;
    3. sinon (4 îlots absents des contours), la plus proche.

    La fonction échoue si un carreau reste sans commune ou en a plusieurs. lcog_geo garde la liste des communes recouvertes, dans la géographie des données.

  • Sources : l'Insee n'a pas de flux, donc sources.yaml liste les archives de chaque édition (carreaux.editions). Un millésime de fonds de carte prend la dernière édition dont les données ne sont pas plus récentes que lui : Filosofi 2021 pour 2023 à 2026.

  • prepare_year écrit CARREAU_200M.parquet et CARREAU_1KM.parquet, en parquet plutôt qu'en GeoJSON (2,3 millions de carreaux).

  • pipeline :

    • les carreaux ne passent pas par mapshaper : to_consolidated_parquet lit directement le parquet préparé, sans fusion des lignes ;
    • nouvelles fonctions level_layouts, level_simplifications et input_path ;
    • tri par région, département, puis commune ou arrondissement, pour que les carreaux d'une commune soient contigus.
  • http.download_zip : l'Insee n'envoie pas de Content-Length et coupe parfois les longs téléchargements (deux fois pendant les essais). L'archive est vérifiée en l'ouvrant, avec de nouvelles tentatives.

  • Version 0.5.0 : pyproject.toml, __init__.py, image et chemin de test dans pipeline.yaml, test_argo.py, documentation.

Client et API
  • Client : constants.GRID_LEVELS et client.grid_simplification. Pour les carreaux, la simplification est toujours 0, avec un avertissement si une autre valeur est demandée. La docstring de carti_download est complétée.
  • API :
    • request_path_kwargs force la simplification 0 pour les carreaux ;
    • fichiers nommés CAR200M2026 et CAR1KM2026 ;
    • version 0.2.1, avec l'image à basculer dans api/deployment/deployment.yaml une fois publiée.
Tests et documentation
  • tests/test_carreaux.py :
    • choix de l'édition ;
    • projection lue dans l'identifiant ;
    • construction des carrés (Corse, La Réunion) et typage des colonnes ;
    • rattachement (centre, mer, îlot) ;
    • nouvelles tentatives sur une archive tronquée ;
    • consolidation d'une grille sans mapshaper.
  • Tests mis à jour : niveaux disponibles, nombre de jobs (56) et tri.
  • Client et API : simplification forcée et nom du fichier.
  • Résultats : pipeline 87 tests (mapshaper compris), client 81, API 59. ruff et vulture ne signalent rien sur le code de la PR ; seule erreur ruff, un ordre d'import dans python-package/cartiflette/tests/test_client.py qui existait déjà.
  • Documentation : CLAUDE.md, README.md, doc/ (architecture, lancement, ajout d'un niveau, client) et les trois changelogs.
Choix et limites
  • Une ligne par carreau (commune du centre) plutôt qu'une ligne par commune touchée : pas de double compte quand on agrège plusieurs communes ou départements. Pour les carreaux qui touchent une commune, filtrer avec where sur lcog_geo.
  • WGS84 seulement, comme les autres niveaux : les carreaux n'y sont plus exactement carrés.
  • Hors périmètre de cette PR : niveau naturel, Filosofi 2019 et antérieurs, recensement 2021 au 1 km. Il suffira d'ajouter une édition dans sources.yaml si l'Insee garde le même format.
  • Imputation : au 200 m, 79 % des carreaux ont des valeurs imputées (moins de 11 ménages). i_est_200 les signale.

🤖 Generated with Claude Code

@linogaliana
linogaliana merged commit ab2c35d into main Oct 11, 2026
8 checks passed
@linogaliana
linogaliana deleted the carreaux branch October 11, 2026 13:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Données carroyées de l'Insee

1 participant