samedi 23 février 2013

Densité de population

À la fin du mois dernier, j'ai vu passer un tweet dans ma timeline Twitter, parlant de carroyage. Il pointait vers le site de l'INSEE, sur les données carroyées à 200 mètres de la population française. En clair, ça signifie que l'INSEE avait découpé le territoire français en petits carrés de 200 m de côté et recensé dans chacun d'entre eux le nombre d'habitants. Plutôt cool, non ?

Là, je me dis : « mon bonhomme, y'a moyen de faire une carte trop top avec ces données ». Je commence par télécharger les archives pour chacune des 22 régions de France métropolitaine[1] (quelques centaines de Mo, une broutille). Chacune comprend un fichier .dbf stockant les données, un format que, par chance, Excel lit[2]. Première action de ma part, sélectionner trois colonnes : les coordonnées géographique de chaque carreau et la population correspondante. Je copie-colle cette sélection dans un fichier texte. 22 ouvertures de fichier .dbf plus tard, j'obtiens un beau fichier texte de 2 272 481 lignes. Sur chacune, la coordonnée x d'un carré de 200 m de côté, sa coordonnée y et sa population. Bon début.

Il est temps de passer ces données à la moulinette. Je ponds rapidement un petit programme en C++[3] qui parcourt ce fichier texte et recherche les extremums de coordonnées ; comme je sais que chaque carré est espacé de ses voisins par 200 unités de coordonnées (un système simple), je constate que l'ensemble tient dans une carte de 5 371 pixels de large sur 5 524 de haut, où chaque pixel correspond à un carré de 200 m de côté. Je farfouille un peu parmi les cartes de densité de population sur Commons, tombe sur celle du Maine et décide d'en utiliser les couleurs. Je modifie mon programme pour qu'il me génère l'image suivante :


Projection ETRS89

Première constatation : c'est über-cool, mais la projection rend la carte un peu inhabituelle. C'est parce que les coordonnées utilisent le système ETRS89, une projection azimutale équivalente de Lambert. Elle a le bon goût de conserver localement les surfaces (ce qui est indispensable pour les données de l'INSEE), mais pas les angles (normal, il est impossible de conserver les deux dans une projection cartographique).

Je décide que ça serait sympa d'avoir la projection de Mercator correspondante. OK, c'est une projection naze, mais elle parle un peu à tout le monde.

Première étape : convertir les coordonnées ETRS89 en latitude et longitude. La géométrie elliptique est notoirement complexe, mais par chance, ce pdf a déjà fait les calculs sordides et donne le mode d'emploi pour passer des unes aux autres (page 72, pour les intéressés). Les formules font un peu peur au premier abord, mais il suffit de les suivre avec rigueur, l'une après l'autre, pour obtenir le résultat. Modification du programme, donc. En projetant naïvement la latitude et la longitude de façon linéaire, convertissant à chaque pixel en ETRS89 et regardant la population correspondante, j'arrive à la carte suivante :


Projection naïve

Ah, oui, c'est un peu aplati. C'est parce que la projection de Mercator nécessite une correction supplémentaire en fonction de la latitude. Remodification du programme : pour chaque pixel, je convertis tout d'abord les coordonnées en longitude/latitude, puis en coordonnées ETRS89. Voici le résultat :


Projection de Mercator

Là, c'est bon. Je suis content de moi, je charge le résultat sur Commons.

Quelques temps plus tard, je me rends compte que j'ai trop réduit la définition du fichier final (4 000 pixels de large) et qu'on perd des détails importants. Je regénère la carte en plus grand (5 371 pixels de large). Malheureusement, le fichier final compte plus de 25 millions de pixels et Commons est incapable d'afficher un aperçu d'une telle image PNG. Tant pis.

Pour finir, je change les couleurs pour la palette Solarized. Le résultat final ressemble à ces vues de la France la nuit (ce qui est normal, après tout, quand on y réfléchit) :


Projection de Mercator (fond sombre)

Le résultat est assez fascinant, la résolution est suffisante pour discerner la forme des cours d'eau, des vallées, des forêts. Dans certains cas, on distingue les routes. La dichotomie ouest/est est évidente. La diagonale du vide fait des zigzags. Les Landes sont presque complètement inhabitées. La limite entre le Nord et le Pas-de-Calais apparait. La Sologne également. Et puisque les données initiales ne comprennent que les carrés de 0.04 km² qui sont habités et qu'on en a le nombre exact, on en déduit que 83% du territoire français métropolitain est inhabité. Impressionnant, non ?

Pour finir, je tiens à mettre l'accent sur un point : je n'ai fait qu'écrire un petit programme qui lit un fichier texte, place les données en mémoire puis assigne à chaque pixel d'une image une couleur en convertissant ses coordonnées. Je n'irai pas jusqu'à dire que c'est du niveau d'« Hello World », mais ce n'est pas d'une algorithmique bien complexe. La seule difficulté est initiale : se convaincre qu'avec ces données, on a la capacité de produire quelque chose. Vous aussi, vous pouvez.


[1] J'ai laissé tomber les deux départements d'outre-mer disponibles ; c'est mal, je sais.
[2] On ne répètera jamais assez à quel point Excel permet d'effectuer tout un tas de manipulations de données. Et si votre religion (ou les circonstances) vous interdit d'utiliser du Microsoft, vous pouvez toujours utiliser les équivalents libres et gratuits (je les apprécie moins, mais c'est juste moi).
[3] J'utilise le C++ parce que c'est le langage dans lequel je programme le plus facilement, même pour réaliser un p'tite moulinette à données. Je suis vieux, que voulez-vous.

13 commentaires:

DM a dit…

Cher Poulpy, félicitations! Je suis assez bluffé. Pour placer tes pixels et les sauver en C++, comment as-tu fait? libpng?

Quand j'avais fait les cartes sur cette page j'avais utilisé les Generic Mapping Tools:
http://commons.wikimedia.org/wiki/User:David.Monniaux

L'avantage est que ça gère directement les histoires de projection, l'inconvénient c'est que c'est antidéluvient par de nombreux aspects.

Des gens nous disent du bien de GNU R.

Monsieur I. a dit…

La réduction de taille de l'image (algo quelconque de sous-échantillonnage) est un travestissement de la Vérité statistique !

Simplification du low-res ! Idéologie de l'arrondi ! MENSONGES !

Feldo a dit…

"Malheureusement, le fichier final compte plus de 25 millions de pixels et Commons est incapable d'afficher un aperçu d'une telle image PNG."
Est-ce une question de pixels ou bien un bug lié à la taille du fichier ?

Feldo

Jean-Fred a dit…

@Feldo : de pixels, cf. [[COM:MAXTHUMB]]

@Poulpy : tu gères.

LUCIEN RABOT a dit…

Bonjour Monsieur Poulpy (si c'est votre nom),

J'ai profité de votre carte pour examiner attentivement avec ma loupe (j'ai des problèmes oculaires depuis deux ans mais les miracles de la médecine moderne font des merveilles pour les gens de mon âge) les alentours de ma résidence, située à Vésignole, lieu-dit rassemblant six maisons, non loin de la commune de Salles-Lavalette (département de la Charente), que je vous invite à visiter si vous ne connaissez pas.
Je connais parfaitement cette région, puisque j'y habite depuis 43 ans et que je suis né non loin à Nanteuil-Auriac-de-Bourzac (département de Dordogne, oui c'est toujours perturbant de changer de département par quelques mètres de marche à travers les campagnes). Je suis aussi passionné de cartographie, tout comme vous, et notamment des vieilles cartes d'État-Major que je collectionne par nostalgie de mes années révolues comme sergent dans l'armée de terre. Aussi j'ai pu identifier sans hésitation les parages de mon parcours quotidien de promenade le long de la route du moulin de Salles (le moulin a disparu), avec les contours très nets de la vallée de la Lizonne et la rivière de la Dronne et d'autres petits ruisseaux.

Je peux donc vous affirmer de manière certaine que plusieurs pixels colorés sont erronés, puisqu'ils suggèrent une présence humaine dans des champs inhabités, je pense notamment aux rives droite et gauche du ruisseau de Nogerède, que je connais parfaitement depuis mon enfance. Il n'y a que des châtaigniers ! et pas d'habitants ! La maison sur la rive droite est celle de madame Keurzac, mais elle est abandonnée depuis son décès en avril 2011, vous pouvez vérifier dans les avis du journal Charente Libre (je ne sais pas comment faire par INTERNET)

Merci de corriger votre carte, afin de ne pas induire en erreur les lecteurs de wikipédia. Il y a déjà suffisamment d'approximations et d'erreurs sur les villages de France !!!!

Cordialement,

LUCIEN (78 ans!)

Mon courriel : lucien.rabot@laposte.net

Dereckson a dit…

Monsieur Rabot,

Les données utilisées sont celles de l'INSEE. La dernière mise à jour semble avoir été réalisée sur base des déclarations fiscales de 2010.

Une hypothèse de l'origine de l'erreur pourrait être que des personnes déclarent payer leurs impôts depuis ces lieux abandonnés (par exemple en ayant pas signalé un déménagement aux impôts ?).

La méthodologie utilisée par l'INSEE pour préparer ces données est décrite sur cette page : http://www.insee.fr/fr/methodes/default.asp?page=sources/sou-adm-rf-menages.htm

Poulpy a dit…

@DM : pour les pixels, simple tableau exporté dans un .tga. Rudimentaire, mais facile. Je garde en mémoire les outils de mapping, ça peut toujours servir.

@Monsieur I. : je ne suis là que pour désinformer le peuple. :)

@Feldo & @Jean-Fred : ouaip, trop de pixels. Faut que je charge une vignette pour compenser.

@Lucien Rabot : non mais lol. :D

@Dereckson : merci des réponses ! ^^

Matthieu DREVELLE a dit…

Bonjour
Tes cartes sont vraiment très sympas ! J'utilise moi même ces données pour ma thèse de géo. Cependant l'INSEE a récemment retiré les données de son site et je me retrouve un peu bloqué (car je bosse sur les transports dans les espaces peu denses et les carreaux sont super pratiques pour voir là où il y a des habitants !).
Je vais te demander un gros service, mais je voulais savoir s'il t'était possible de partager tes données sur un espace de partage, s'il te plait ?
Merci d'avance

Kyle_the_hacker a dit…

Etant donné qu'après transformation en projection de Mercator les pixels ne sont plus carrés, ça ne serait pas plus précis de sortir le tout en SVG (et tu éviterait la limitation de MediaWiki)?
Je dis ça je dis rien. ^^

Anonyme a dit…

Bonjour M. POULPY,

Je suis à la recherche de la base complète données carroyées. Mes travaux sur la précarité connaîtraient une avancée très significative.
Dites moi à quelles conditions vous pouvez me communiquer ces données.
Par avance merci.
rosnyf5@gmail.com

Anonyme a dit…

Bonjour, je laisse juste un petit commentaire pour dire que je suis ravi d'avoir trouvé la carte de que voulais justement faire à partir des données carroyées de l'INSEE. Dommage qu'ils aient supprimé une partie des infos. M'enfin c'est du très bon travail :).

Je fais justement des cartes à gauche à droite par pur intérêt de la chose, deux petits exemples ici :

Carte de France communale des densités :
http://image.noelshack.com/fichiers/2013/35/1377870432-france-com-dens2007-25.png

Carte de France communale des revenus médians par unité de consommation :
http://image.noelshack.com/fichiers/2013/35/1377870563-france-com-rev2010-25.png

Bon en réalité, mes cartes sont 2x plus larges et 2x plus hautes, mais là je les ai retrécies pour pouvoir les uploader sans encombre. Sinon je fais aussi des cartes des municipalités pour certains autres pays, mais il y a pas mal de boulot :D. Sur ce, bonne continuation :).

Arnaud Langlois a dit…

Bonjour,

Vos cartes sont superbes !
Me serait-il également possible de vous demander s'il vous était possible de me partager les fichiers sources Insee?

Un grand merci

Utopie2025
Le_pouvoir_des_utopistes@yahoo.fr

JBC a dit…

pas mal! Un certain nombre de carrés sont à cheval sur 2 régions et ont donc 2 valeurs différentes. quelle valeurs as-tu prise?
Sinon je suis d'accord avec Lucieb Rabot, certains points colorés sont erronés (exemple à Mafate - Réunion) et les habitats collectifs (prisons - casernes - internat - monastères...) ne sont pas renseignés non plus