J’ai travaillé en partie la semaine dernière sur une carto web des données carroyées que j’ai appelé francepixels. Je travail avec une doctorante sur ces données et comme elles n’avaient pas été disponibles pendant un bon moment je me suis laissé tenté. Ces nouveaux fichiers re-diffusés par l’INSEE après un petit cafouillage autour de la précédente version sont en effet assez motivant puisqu’ils fournissent des données localisées sur des carreaux de 200m de côté ! Enfin, plus précisément des groupes de carreaux de 200m dans cette nouvelle version pour assurer le degré d’anonymisation nécessaire au respect du secret statistique. Bref, à l’échelle la plus fine autorisée par nos lois, c’est à dire des groupes d’au moins 11 personnes (le max étant à 4384). Cela laisse tout de même plus 698 659 groupes de carreaux. Malgrés ces chiffres qui donnent le tournis, comme toute source de données celle-ci n’est pas parfaite, incertitudes liées à la géolocalisation des adresses des ménages français, des traitement effectués … Ces données fournissent donc une image forcément partielle mais que je trouve parlante de notre pays. J’ai donc sélectionné quelques variables qui m’intéressaient et travaillé leur représentation à différentes échelles :

– d’abord de manière assez agrégée (carrés de 4km2) :

francepixels1

– puis de manière plus fine (carrés de 200m x 200m) :

francepixels2

Je ne détaillerai pas les différentes observations que l’on peut faire de ces cartes à vous de vous faire votre idée. Je vais juste laisser ici quelques traces sur l’aspect techniques. Attention [mode geek on] ! le lecteur pourra donc s’arrêter là pour allez directement à la conclusion si ces détails ne l’intéressent pas.

[mode geek on] !

Pour construire la visualisation, j’ai d’abord fait quelques traitements en R pour produire des premières images, tester rapidement quelques échelles de couleurs et sélectionner les différentes variables que je voulais garder et représenter. J’ai ensuite fait quelques essais avec Tillemill pour produire des tuiles et développé une interface leaflet pour pouvoir jouer avec les différentes couches. Cela donnait ça. J’ai finalisé la semaine dernière en gérant les échelles fines en vectoriel et en peaufinant l’interface. Je voulais rajouter l’accès aux informations détaillées à ces niveaux de détails.

Capture-7

J’aurai sans doute pu m’en sortir avec les outils mapbox : UTF-grid + wax mais je voulais m’amuser un peu et voir comment générer des tuiles vectoriels en geoJSON avec les données et les visualiser avec leaflet et d3. J’ai fait pour cela un petit bout de code R qui sérialise un objet spatialPolygonDataFrame dans un ensemble de fichiers geojson correspondant chacun à une tuile. Chaque tuile respecte les conventions type OSM et est donc organisé dans une arborescence du type z/x/y.geojson et ressemble à un bête fichier geojson listant les carreaux de la tuile, c’est à dire leur géométrie et les variables associées comme par exemple la tuile 14/7961/5663.geojson.

Ecrire un bout de code R pour les créer n’a finalement pas été aussi difficile. Je l’ai laissé sur un gist au cas où.

Du côté client, je me suis ensuite synchronisé avec leaflet pour demander les mêmes tuiles que la couche de fond de carte et supprimer les tuiles qui ne sont plus utilisées. Pour cela j’ai simplement attrapé les événements tileload et tileunload de cette couche et y est greffé mon code d’affichage et de nettoyage des tuiles vectorielles, assez court grâce à d3 et en particulier d3.geo.path.

Forcément, cette approche est tout de même assez gourmande côté client et l’application peut donc ramer assez vite. Le compromis que j’ai choisi, tuile vectorielle à partir de l’échelle 10 avec des carreaux et 1km2 et de 200m de coté à partir de l’échelle 11. est peut être un peu ambitieuse…

Conclusion

Voilà, j’espère que ces petits travaux pourront être utiles et j’espère donc que vous n’hésiterez pas à l’utiliser! J’ai cru comprendre que l’on essaye en ce moment de définir de nouvelles ZUS, et que ces données peuvent participer à ce débat …

Bonne exploration!

Comments are closed.