Ressources numériques en sciences humaines et sociales OpenEdition Nos plateformes OpenEdition Books OpenEdition Journals Hypothèses Calenda Bibliothèques OpenEdition Freemium Suivez-nous

Annotation GéoIA

Dans ce billet, nous allons nous intéresser à l’annotation de données sous QGIS vis-à-vis d’autres outils plus classiques en IA comme Label Studio ou LabelMe, en nous intéressant à l’objet parking.

L’annotation de données sous QGIS peut être considérée comme une variante très proche, finalement, voire même équivalente, de la digitalisation de données (au sens où peuvent l’entendre les dessinateurs classiques).

Sur un outil carto, les finalités de la digitalisation et de l’annotation sont assez différentes : pour l’une, le porter-à-connaissance, l’observation et l’analyse du territoire, pour l’autre l’entraînement d’IA, mais la technique demeure assez similaire.

Une différence notable entre les deux concerne le contenu de la tâche : tandis que la digitalisation de données cartographiques concerne en général, dans un même continuum, soit une diversité d’objets : des routes, des infrastructures, des bâtiments, soit une diversité d’attributs, comme des niveaux de caractérisation (par exemple pour l’occupation du sol), l’annotation IA, elle, se concentre en général sur un objet bien précis qu’on vise à détecter sur des images, que l’on saisira à la chaîne, si nécessaire en le déclinant sur un nombre limité de classes, ce qui confère à l’opération un caractère moins esthétique et gratifiant, plus répétitif et monotone.

Le séquençage d’opérations pour l’annotations sous QGIS se différencie d’outils comme Label Studio ou LabelMe sur plusieurs points.

Label Studio

Les logiciels classiques d’annotation IA fonctionnent image par image, en général non géoréférencées, bien que cela n’empêche nullement d’utiliser des jpeg ou encore des png auxquels associer des world files (que QGIS peut d’ailleurs générer lors d’atlas), respectivement jpw et pngw.

Sous Label Studio, on crée un projet, par exemple Parkings :

Il faut préciser quelle interface d’annotation utiliser, ici segmentation par polygones.

Il faudra ensuite définir les classes d’objet. Pour cela, un petit état de l’art s’impose.

Standards de données et configuration de l’annotation

Nous nous intéresserons à la forme du stationnement.

Pour l’état de l’art, on peut regarder :

  • les schémas de données liés au stationnement ;
  • les données existantes sur le sujet.

Concernant les schémas de données, nous pouvons aller sur :

  • schema.data.gouv.fr;
  • le wiki d’OSM.

Sur schema.data.gouv.fr, il existe un schéma associé aux emprises de stationnement :

https://schema.data.gouv.fr/macaron-ai/onstreet-parking-schema

Le schéma définit les champs suivants :

🙁Nous ne voyons pas de champ sur la forme de stationnement.

Par contre, nous voyons un champ places calculées. Or, le calcul du nombre de places dépend de la forme du stationnement, en plus de ses dimensions en largeur et longueur.

En effet, un rangement en bataille comporte plus de places qu’un rangement en épi sur la même surface.

Il est important de connaître la forme du stationnement pour déduire le nombre de places

Il est dommage que ce champ Forme n’apparaisse pas dans le schéma. Mais il est toujours possible de faire une proposition pour améliorer le standard !

En revanche, nous trouvons l’information de la forme de stationnement sur le Wiki d’OpenStreetMap

https://wiki.openstreetmap.org/wiki/FR:Street_parking

OSM peut être d’une aide très précieuse, à la fois pour récupérer des données d’annotation, mais aussi pour accéder à des standards folksonomiques très complets.

Nous trouvons la même modélisation pour la donnée d’emprises de stationnement de la Ville de Paris :

Revenons-en à notre annotation sous Label Studio.

Nous définissons nos classes de cette façon :

On importe les images et on commence à saisir les données.

Concernant la saisie proprement dite, on choisit le libellé, puis on dessine.

A noter qu’on peut utiliser un raccourci clavier pour chaque classe, 1 pour bataille, 2 pour épi et 3 pour longitudinal.

Aussi, le combinaison Ctrl+Enter permet de soumettre l’annotation, et de passer à l’image suivante.

Les raccourcis clavier permettent d’être beaucoup plus rapide et sollicitent moins les articulations que la souris.

On voit que le processus est différent sous Label Studio par rapport à QGIS, car sous QGIS, on dessine l’objet, puis on le classe (logique pour un logiciel de carto).

On peut noter que Label Studio ne permet donc pas de procéder en deux phases, à savoir :

  • Une tâche graphique consistant à dessiner les objets, qui pourrait être confiée à un dessinateur expert ;
  • Une tâche sémantique consistant à classer chaque objet selon sa catégorie, qui pourrait dans le cas présent être confiée à n’importe qui.

De ce point de vue, QGIS autorise une certaine souplesse et une organisation du travail que ne permet pas Label Studio (séparation du dessin et de la sémantisation).

A noter qu’on pourrait très bien alimenter Label Studio pour la tâche de caractérisation sémantique à partir des produits de QGIS.

Cela aurait un intérêt afin de profiter de l’interface de labellisation de Label Studio mais cela demande en revanche de l’ingénierie de la donnée pour exporter, réaffecter les classes à la géodonnée d’origine. L’intérêt est selon moi assez faible.

Il vaut mieux essayer de faire de QGIS une station d’annotation performante, ce que nous approfondirons par la suite, d’autant plus que si vous amenez des collègues à contribuer, cela peut être le prétexte à une mini-formation QGIS 😉.

Label Studio est néanmoins un excellent outil d’annotation. Il permet d’annoter collaborativement grâce son accès web, de suivre facilement l’état d’avancement du projet d’annotation, et d’identifier l’auteur.e de chacune.

QGIS permet néanmoins de s’en approcher par l’utilisation de bases de données type PostgreSQL, de vues ou de Virtual Layers, ce que nous verrons dans un prochain billet.

Voici comment exporter les annotations sous Label Studio :

Par souci de commodité, j’ai choisi de limiter l’annotation à un objet surfacique.

Voici le résultat.

[
    {
        "id": 36,
        "annotations": [
            {
                "id": 30,
                "completed_by": 1,
                "result": [
                    {
                        "original_width": 981,
                        "original_height": 822,
                        "image_rotation": 0,
                        "value": {
                            "points": [
                                [
                                    50.67154310273576,
                                    42.736486486486484
                                ],
                                [
                                    27.88350276882387,
                                    71.62162162162163
                                ],
                                [
                                    26.32655591371188,
                                    84.7972972972973
                                ],
                                [
                                    27.034259029671876,
                                    86.82432432432432
                                ],
                                [
                                    35.243615174807836,
                                    81.25
                                ],
                                [
                                    36.65902140672783,
                                    73.1418918918919
                                ],
                                [
                                    59.588602363831725,
                                    43.41216216216216
                                ]
                            ],
                            "closed": true,
                            "polygonlabels": [
                                "épi"
                            ]
                        },
                        "id": "r1KkcNC-WY",
                        "from_name": "label",
                        "to_name": "image",
                        "type": "polygonlabels",
                        "origin": "manual"
                    }
                ],
                "was_cancelled": false,
                "ground_truth": false,
                "created_at": "2025-08-18T06:22:54.603031Z",
                "updated_at": "2025-08-18T06:36:13.453192Z",
                "draft_created_at": "2025-08-18T06:20:50.017499Z",
                "lead_time": 937.94,
                "prediction": {},
                "result_count": 1,
                "unique_id": "47da71f6-5e78-4b57-a4a6-21c8acb2bf46",
                "import_id": null,
                "last_action": null,
                "bulk_created": false,
                "task": 36,
                "project": 20,
                "updated_by": 1,
                "parent_prediction": null,
                "parent_annotation": null,
                "last_created_by": null
            }
        ],
        "file_upload": "bcc78a2c-01.jpeg",
        "drafts": [],
        "predictions": [],
        "data": {
            "image": "\/data\/upload\/20\/bcc78a2c-01.jpeg"
        },
        "meta": {},
        "created_at": "2025-08-18T06:16:25.727527Z",
        "updated_at": "2025-08-18T06:36:13.522814Z",
        "inner_id": 1,
        "total_annotations": 1,
        "cancelled_annotations": 0,
        "total_predictions": 0,
        "comment_count": 0,
        "unresolved_comment_count": 0,
        "last_comment_updated_at": null,
        "project": 20,
        "updated_by": 1,
        "comment_authors": []
    }
]

points comprend les coordonnées de chaque point du polygone. Cependant, il s’agit de coordonnées relatives aux dimensions de l’image, et non de coordonnées géographiques.

Les données annotées sont à des formats JSON, ou XML, non natifs pour les SIG si bien que pour les intégrer à ces derniers, il sera nécessaire de réaliser quelques transformations, et de créer quelques scripts.

LabelMe

Sur LabelMe, le processus est un peu différent, et plus proche de QGIS.

On saisit un objet, puis on renseigne sa classe.

Les classes s’alimentent au fur et à mesure qu’on progresse dans l’annotation.

Finalement, ce comportement peut être atteint sous QGIS en utilisant le type “Valeurs uniques” dans la configuration du formulaire QGIS (bien cocher “Editable”)

Nous obtiendrons ceci à la saisie d’un objet :

IA et géo

La librairie GeoAI de Qiusheng Wu vise à spatialiser l’ensemble des traitements de données IA.

Ce sont comme des branchements aux librairies IA les plus communes (telles que torch), ce qui est bien pratique pour consolider l’environnement de travail et ne pas faire des aller-retours entre un environnement IA classique et SIG.

Signalons aussi l’outil geodeep qui permet de détecter des arbres, voitures, routes depuis des images aériennes.

Une des réalisations de Qiusheng Wu est la librairie SamGeo.

Segment Anything est un modèle qui, sur la base d’un point ou d’un rectangle posé sur une image, parvient à deviner la surface à considérer. On voit rapidement l’intérêt pour la géomatique.

SamGeo peut fournir un objet surfacique géoréférencé à intégrer directement dans votre SIG à partir d’un point géoréférencé ou d’une BBOX.

Voici un résultat que l’on peut obtenir avec SamGeo :

Notons d’ailleurs l’existence du plugin GeoOSAM qui intègre SAM dans QGIS.

QGIS

L’annotation de données sous QGIS peut emprunter une variété de chemins.

Grilles

Sous QGIS, pour une tâche de segmentation, ou de détection, on doit découper la zone à investiguer en carreaux afin de préparer les données nécessaires à l’entraînement d’une IA. Chacun de ces carreaux fournira l’image sur laquelle réaliser l’entraînement.

Dans certains cas, les dalles à utiliser fourniront naturellement les images sur lesquelles réaliser l’entraînement.

Dans ce cas, pour avoir la grille associée, il suffit d’en créer le tableau d’assemblage. en choisissant le tableau contenant les dalles

Ce tableau d’assemblage fournira la grille de suivi de l’état d’avancement des annotations. Nous verrons comment activer ce suivi dans un prochain billet.

Dans le cas où la zone serait très grande ou les données d’une précision telle que cela nécessiterait de considérer un tamis plus fin, il sera nécessaire de réaliser soi-même la grille.

Voici comment générer une grille sous QGIS :

On utilisera l’atlas pour générer les images le long de la grille.

Remarque sur d’autres objets de couverture

On pourrait se dire que des objets type parcelles fourniraient des objets corrects à partir desquels réaliser l’atlas et les images d’entraînement, mais cela a plusieurs inconvénients :

  • Les parcelles seront de taille différente, et les images en sortie correspondront à des échelles différentes ;
  • Si deux parcelles saisies sont contigües, certains objets pourront apparaître sur deux images, voire plus, ce qui équivaut à surentraîner le modèle IA sur ces objets.

La grille garantit une homogénéité des tailles et qu’il n’y ait pas de recouvrement, et donc d’objets surreprésentés.

Sachant qu’il est d’usage d’associer aux IA une fonction d’augmentation qui génèrera une variante synthétique, augmentée, du jeu de données, où les images auront été tournées, changées d’échelle (zoomées/dézoomées), ce qui permettra d’envisager une variété de situations possibles, soit de généraliser un maximum, sans avoir à réaliser davantage d’annotations.

Ici, nous avons considéré sous QGIS le cas d’usage “saisie de parkings”.

Masques basiques

Sur une tâche de type classification, où l’on doit classer des places préalablement détectées, par exemple en place PMR / place non PMR, QGIS permettra, par le biais des masques, dans l’atlas, de faire abstraction de ce qui environne la place de façon à ce que l’IA ne cherche pas à y trouver des motifs.

Sous QGIS, on utilisera le style :

  • Polygones inversés ;
  • Ensemble de règles ;
  • L’expression @atlas_featureid = $id

Voici comment générer l’atlas dans ce cas de figure :

(1) Dans un premier temps, on choisit la couche Places sur laquelle réaliser l’export.

(2) Il est important que l’identifiant de l’objet apparaisse dans le fichier d’export image, sinon on ne retrouvera pas nos petits 🐥.

On insère la carte. Comme on ne peut préjuger de l’orientation de la place, on choisit une image carrée de même hauteur et largeur

Voici le rendu pour cette place :

On exporte les images dans un dossier datasets dans lequel on mettra un dossier :

  • IS-PMR (pour les images de places PMR)
  • NOT-PMR (pour les images de places non PMR)

Pour cela, on utilise l’option de filtrage lors de l’export de l’atlas :

Ici, les images seront à mettre dans le dossier IS-PMR.

L’expression handicapee is False sera à utiliser pour le dossier NOT-PMR

Masques avancés

Dans d’autres cas où l’on devrait considérer l’environnement proche, par exemple pour l’élimination de faux positifs lors d’une détection de places de parkings, on pourra :

  • Appliquer une marge autour de la place assez significative pour intégrer l’environnement :
  • Réaliser différents types de masques, plus ou moins progressifs, et tester les performances du modèle selon ces derniers.

Voici un exemple avec un masque de type “dégradé selon la forme” :

Cas d’une place qu’on a notée comme “bien détectée”, qui servira à l’entraînement

Cas d’une place qu’on a notée comme “mal détectée”, qui servira à l’entraînement

Nous sommes sur cette image à proximité d’un terrain de sport et l’IA a détecté le marquage du terrain comme celui d’une place de parking.

Sous Label Studio ou LabelMe, la réalisation de ces masques nécessiterait de post-traiter les images et de réaliser un script, par exemple sous Python, ce qui serait plus complexe.

En résumé

Nous avons :

  • Pressenti que QGIS pouvait fournir un environnement approprié pour annoter des images ;
  • Analysé qu’il permettait d’organiser le travail et de répartir les tâches en fonction des envies et compétences de chacun, notamment en séparant les tâches géométriques des tâches de caractérisation sémantique ;
  • Observé qu’il fournissait un environnement de choix pour produire les images d’entraînement, sans nécessité de programmation, grâce à la fonction Atlas.

A suivre

Dans de prochains billets, nous verrons :

  • Comment configurer QGIS afin de saisir/annoter des objets de manière efficace, toujours sur l’exemple des parkings ;
  • Comment utiliser les expressions pour pré-renseigner certaines valeurs ;
  • Comment suivre l’avancement des annotations dans un cadre collaboratif.

2021 dans le rétro

Cela fait longtemps que je n’ai pas écrit d’article sur mon blog.

Je me suis dit que ce début d’année 2022 était l’occasion de parler de mes projets les plus marquants de 2021 réalisés au Cerema ou sur mon temps propre.

C’est comme regrouper en un seul article tous les articles que j’aurais pu écrire (dû ?) en 2021.

Vous verrez que pour moi, 2021 a été beaucoup été question de qualité et de standardisation, ainsi que de (géo)dataviz. Mais aussi de musique.

Formation “La data dans les territoires” avec OpenDataFrance

Avec l’association OpenDataFrance, j’ai animé début 2021 quelques sessions de formation en webinaire intitulées “La data dans les territoires”.

J’ai eu l’honneur d’ouvrir les sessions en animant le module : “La data, kezaco ?” afin d’expliquer ce qu’est une donnée, lister les typologies de données avec des analogies : la donnée brute comme le cristal, celle enrichie comme un verre ou harmonica de cristal, parler des API, des licences, … en essayant d’être le moins technique possible.

J’ai aussi animé le troisième module autour de l’écosystème des données en présentant les acteurs de la donnée, ce qu’ils font, et les relations qu’entretient la donnée avec la société civile : les répercussions d’une data déséquilibrée sur les disparités de politiques publiques de plus en plus propulsées par les données, mais aussi les discriminations engendrées par des biais dans l’IA. A ce titre, ne pas hésiter à suivre les webinaires “Automating Society”.

Schéma sur les arrêtés de circulation pour le transport de marchandises

On the standardization road again

Avec La Région Sud, OpenDataFrance, et le concours d’Etalab, dans le cadre de la Fabrique de la Logistique, nous avons travaillé au Cerema sur la dématérialisation des arrêtés de circulation pour le transport de marchandises.

Au tout départ, un environnement de saisie SIG, sous QGIS, était envisagé, mais de fil en aiguille, l’idée de créer un schéma de données nous a semblés la plus pertinente, sous les conseils de Jean-Marie Bourgogne d’OpenDataFrance.

Le schéma est aujourd’hui publié sur schema.data.gouv.fr et accompagné de tutoriels qui expliquent pas à pas comment dématérialiser l’information de véritables arrêtés municipaux. D’ailleurs, je me dis que pour chaque schéma, il serait intéressant de proposer des tutoriels pour accompagner les producteurs dans la saisie.

Les vertus de ce schéma ont été celles-ci : il a permis de regrouper des acteurs, de réfléchir à un modèle de remplissage d’informations qui soit le plus appréhendable possible par des agents en Collectivités à qui l’on confierait la tâche de saisie. Enfin, la publication d’un schéma sur schema.data.gouv.fr entraîne de facto l’éclosion d’un validateur de données, et d’un assistant pour la création de données. Sympa, non ?

L’idée de ce schéma était de regrouper dans un tableau l’ensemble des informations utiles, issues d’arrêtés réglementant la circulation en ville de véhicules logistiques sur certaines rues, à certaines heures de la journée, tout en restant accessible et réutilisable.

MCDto2DCSV Challenge

Un défi majeur, que nous avons tenté de relever, était de concentrer un modèle initialement relationnel dans un modèle tabulaire en 2 dimensions : le fameux CSV. L’adoption d’Opening Hours d’OSM, qui devient aujourd’hui un standard dans les standards, l’utilisation de champs à valeurs multiples avec référentiel de valeurs dans certains cas, et dans d’autres non (pour permettre assez de souplesse) nous ont aidés.

En parallèle à ce schéma, j’ai créé un assistant en ligne pour aider les producteurs de données appelé groom-groom.

groom-groom (https://cerema-med.shinyapps.io/groom-groom)

Groom-groom fournit un assistant pour remplir certains champs très techniques : les jours et horaires au format Opening Hours, les géométries de rues au format KWKT, des champs multiples.

Des collaborations avec des villes du Sud vont commencer pour aboutir aux premiers jeux de données d’arrêtés sur DataSud. Cela permettra d’éprouver le standard, même si nous avons déjà pu le mettre à l’épreuve de plusieurs arrêtés.

La qualification d’une donnée ne peut exister selon moi sans spécifications concernant celle-ci, soit sans standard, et la production de données de qualité dépend aussi de la présence de standards qui soient de qualité.

Validator

En même temps que je prenais connaissance de schema.data.gouv.fr et de la norme TableSchema qui propulse ses schémas, nous devions, dans le cadre du projet Cartofriches auquel je participe, consolider des données multi-sources, issues de partenaires divers et variés.

Je me suis alors posé la question d’un validateur de données qui permette de prendre connaissance des données d’entrée, et de réaliser une conversion d’une structure originelle à une structure cible.

Validator intègre un standard, un visualisateur de données et un transformateur d’une structure à une autre. Validator est écrit en python.

J’avais de prime abord regretté la technicité du standard TableSchema au format JSON. Aussi, pour validator ai-je utilisé un tableau CSV car il est plus facilement modifiable qu’un fichier JSON. Aussi, souvent, un tableau, par exemple sous framacalc, constitue la pierre angulaire des premières collaborations autour des standards, avant la constitution du fichier JSON.

Validator m’a permis de consolider mes connaissances en python tout en bénéficiant des conseils éclairés de Mathieu Morey de Datactivist, grâce auquel j’ai appris l’existence de plein de librairies intéressantes, dont black, typer, pydantic.

A noter que j’aurais des idées afin d’implémenter la dimension géo dans TableSchema. Je partagerai ces idées dans un nouveau billet de blog.

Quadogeo

La planète ISO, une planète où tout le monde est dans la norme

Le groupe Quadogeo, sous l’égide du CNIG, s’intéresse à la qualité des données géographiques.

Une donnée géographique est composée de deux composants principaux. Le premier concerne ses dimensions géographiques, le second ses dimensions attributaires.

Déjà beaucoup de ressources méthodologiques sur la qualité des données existent sur le net, créées par OpenDataFrance, la FING, Datactivist, mais peu concernent la dimension géographique, à l’exception de certains documents IGN ou Certu, que le groupe Quadogeo s’est proposé, justement, de remettre au goût du jour.

Les dimensions géographiques, comme vous le savez déjà, concernent la localisation et la forme d’objets dans l’espace.

En aparté, question que je pose souvent à des apprenants : “Quelle proportion de données géographiques existe parmi toutes les données existantes ?” On la retrouve quasiment partout. Même si la donnée n’existe pas toujours à des formats spatiaux type shapefile ou geopackage, la simple mention d’une adresse, d’une commune ou d’une référence cadastrale dans un fichier en fait une donnée géoréférençable et spatiale. Et force est de constater que peu de jeux de données échappent à ces attributs de localisation.

Revenons à la qualité : le groupe Quadogeo me donne l’occasion de m’intéresser à la qualité des données, pas forcément dans sa dimension géo, mais de manière générale, et à des initiatives de qualification et d’impact de jeux de données tels qu’évalués dans d’autres pays, comme au Canada à Toronto.

Aussi, le groupe me permet d’expérimenter et mettre au point des outils de contrôle et de qualification des dimensions spatiales d’une donnée, comme le modeste quadorender.

J’ai aussi pu prendre connaissance, par ce groupe, d’initiatives telles que le Geospatial User Feedback, Interlis, des plugins QGIS comme QompliGIS, qui visent pour le premier à collecter le ressenti qualité des usagers, pour les seconds, à formaliser, spécifier et contrôler la donnée dans sa dimension géo.

Webinaires qualité des données géos

RéGIS, le gaffeur de la géodata

Le Cerema avait produit une série de fiches autour de la qualité, mais avec le CRIGE, nous avons souhaité aller plus loin, en réalisant 5 webinaires autour de la qualité des données géographiques.

Ces webinaires, d’une durée chacun de 2h30, se déroulent en deux phases : une présentation théorique des mesures de qualité, et une mise en application concrète avec QGIS.

Lors de ces sessions, assurées par Stéphane Rolle du CRIGE PACA et moi-même, nous avons misé sur l’humour, nécessaire pour aborder un sujet aussi “effrayant” que la qualité, en incarnant un personnage gaffeur appelé Régis (si vous avez pigé, il y a un petit jeu de mots avec GIS pour Geographical Information Systems).

Régis fait des bêtises de digitalisation, de saisie de données que nous nous empressons de détecter et de quantifier.

Ces webinaires ont permis de donner une tangibilité aux fiches qualité via des applications pratiques, reproductibles, sous QGIS, d’aller à la rencontre des utilisateurs, et de collecter des remarques très pertinentes sur la qualité de la part des participants, remarques qui permettront de solidifier le contenu de formation.

Master Dataviz Mois dans le cadre de l’Innovation Publique

Dans le cadre du Mois de l’Innovation Publique 2021, j’ai été invité à animer une masterclass autour de la Dataviz.

Le contenu de cette masterclass est disponible en Open à cette adresse : https://github.com/datagistips/dataviz-masterclass

Aussi, la masterclass est disponible en format web ici : https://datagistips.github.io/dataviz-masterclass/

Il se compose d’une petite introduction à la dataviz, en passant en revue des dataviz marquantes, comme celle de Charles-Joseph Minard, en proposant des notebooks qui explorent la couleur, confrontent les camemberts aux graphiques en barres.

Enfin, cette masterclass aborde pas à pas, commit après commit, la création d’une application autour de données sur l’artificialisation, données consolidées par le Cerema.

Cette masterclass permettra d’initier un module de formation autour de Shiny au MTE.

D3

Amoureux de la représentation des données, D3 m’a fourni l’occasion d’apprendre le javascript via la dataviz, de façon ludique et pratique.

Sur la base des données ouvertes de trafic que nous avons publiées suite au Covid, je me suis amusé à produire quelques notebooks autour de D3 et du jeu de données trafic COVID.

Par exemple, une façon de visualiser la baisse et la rehausse trafic en animation

Là, c’est statique, mais en cliquant, vous aurez l’animation

Comme disait Laurent Jégou, chaque apprentissage nécessite d’intellégir, à savoir appliquer ses connaissances, immédiatement à quelque chose de tangible, qui nous soit utile.

J’ai encore quelques projets D3 en gestation, telles qu’une transposition des Covid sparklines sous D3, ce qui me permettra d’apprendre à manipuler le côté spatial des données sous D3.

J’ai été très étonné de voir le fourmillement de l’univers Javascript dans D3, en pleine ébullition.

D’ailleurs, il y a un très bon fil twitter de Tom Février sur javascript.

J’ai appris dans ce fil que Jeff Atwood, le créateur de Stack Overflow, aurait prédit que « Toute application qui peut être écrite en #JavaScript sera un jour écrite en #JavaScript. ». A ce titre, il existe une librairie appelée Arquero qui permet de manipuler des données avec la même versatilité que tidyverse sous R, ce qui accrédite ce présage.

Pensée Design

Grâce au Cerema, j’ai pu suivre une formation au Design Thinking animée par la Fabrique Humaine.

J’ai trouvé cette formation très intéressante, en cela qu’elle permet d’envisager les choses non du point de vue de l'”Expert”, mais du point de vue de l’Utilisateur.

En effet, certains projets sont parfois déconnectés de l’Usager. Ce dernier ne se sent pas engagé dans la démarche, parfois même avec un sentiment d’infériorité vis-à-vis d’une expertise affirmée par les tenants du projet.

Cette démarche ascendante, bottom up, qui valorise l’expérience et le ressenti des utilisateurs, permet de motiver les troupes, lever des ambigüités sur la direction de projets, qui ne permet que de leur faire du bien (en plus parfois de les sauver).

Cette approche fournit les bons réflexes pour dompter aussi la multitude d’idées qui jaillit de brainstormings : des façons de les hiérarchiser, de les prioriser et de les aiguiller pour prototyper à une solution. De plus de façon assez ludique et sympa, et selon une alternance de convergences-divergences caractéristiques de cycles naturels.

Des cartes

De la distorsion de la donnée géographique

La cartographie est une discipline d’une telle noblesse qu’il m’est difficile de me revendiquer un de ses pratiquants. Je me considère plutôt comme un bidouilleur de données spatiales qui s’amuse à faire des cartes.

Sur mon temps libre, j’expérimente sur mon territoire des types de cartographie, dans une discipline que je nommerais cartomatique, à la croisée de la cartographie et l’informatique, et que je réalise à grand renfort de geometry generators sous QGIS.

Sur Aix-en-Provence, je m’amuse à contorsionner les rues, les bâtiments afin d’aboutir à certains rendus, soit à faire faire des acrobaties aux données vectorielles.

Cercles contenus
Mon voisinage façon Kandinksy

Sur la Sainte-Victoire, j’expérimente différentes façons de voir le relief, soit à faire faire des acrobaties aux données de Modèle Numérique de Terrain.

La Ste Victoire et la division de la joie
Une Nuit Étoilée à la Ste Victoire

Il faut dire que l’ouverture Open des données RGE de l’IGN permet à présent de beaucoup s’amuser avec les cartes.

Du côté du design génératif, ou du graphisme computationnel (voir le fil #genuary), je vois beaucoup d’oeuvres intéressantes, vibrionnantes, mais pour lesquelles je regrette une décorrélation à quelque chose de tangible et concret.

Je vois beaucoup de potentiel dans l’utilisation des données spatiales pour expérimenter de nouvelles façons de voir et représenter le territoire de façon artistique.

(Temps personnel)

OSM Data

Je participe aussi bénévolement à OSM Data, pour le volet visualisation des données. OSM Data a été créé par Karl Tayou.

Karl, Jean-Louis Zimmermann et moi-même sommes de la partie.

J’ai ainsi pu créer un style autour des lampadaires, iconique de la plateforme, un sur les sentiers de randonnée, ainsi que d’autres, divers et variés.

Hypercarto des lampadaires

OSM Data permet de prendre connaissance de la richesse OSM à la façon d’un catalogue de données. OSM Data est ainsi présenté dans certains cursus pour montrer à quoi ressemble OSM et toutes les thématiques qui y sont associées.

OSM Data permet aussi de télécharger les données OSM facilement au format Geopackage.

Enfin, comme vu avec les lampadaires, OSM Data fournit des rendus cartos très avancés qui rendent honneur à l’effort, immense, des contributeurs d’OpenStreetMap.

L’hypercartographie du lampadaire : du point à l’objet réaliste

Après la cartomatique, pourquoi ne pas introduire un nouveau mode de cartographie : l’hyper-cartographie.

Si la micro-cartographie s’intéresse à la cartographie d’éléments minuscules dans l’espace, tels que des bancs, des passages piétons, des feux de signalisation, l’hyper-cartographie s’intéresse, elle, à la restitution cartographique, pour un objet donné, du maximum de ses attributs. Ainsi, pour les lampadaires, on essaiera de représenter graphiquement le type de lampe, la couleur de l’éclairage, le type de mât, l’orientation de l’éclairage.

Dans le cadre d’OSM Data, nous demandons aux utilisateurs quels rendus ils souhaitent.

Le prochain sera donc les restaurants. Miam !

(Temps personnel)

Géotribu

Une des missions que je me suis fixées l’année dernière est de remettre au propre les revues de presse de 2011, à grand renfort de scripts.

Il y a plusieurs passes de correction : du gras à passer en titres, des niveaux de titres à corriger, des espaces à supprimer. Je dois admettre que le temps passé à programmer ça était si grand qu’il aurait été sans doute aussi rapide de le faire manuellement.

Cependant, le temps passé à deux activités différentes ayant la même finalité, l’une auto, l’autre mano, n’a de mon point de vue pas la même valeur.

Le temps passé à concevoir des scripts est un temps à apprendre, à consolider quelque chose qui sera toujours réutilisable plus tard, peut-être même sur les revues de presse d’autres années.

Une fois les revues de presse nettoyées, beaucoup de valorisations seront possibles, telles q’une analyse de l’ensemble des revues de presse et de l’évolution des tendances géomatiques, une petite vidéo GIF à partir des des imagettes, la mise en opensource et en JSON du contenu.

To be continued !

(Temps personnel)

Collaboration musicale avec Samuel Bobin

J’ai commencé l’harmonica pour son côté léger et sympathique.

L’imaginaire que le ruine-babines véhicule est aussi fascinant. C’est celui du voyage, celui des grandes étendues d’Amérique où seuls résonnent le sifflement du train et le jeu d’harmo du cow-boy de Morricone ou du hobo de Kerouac.

Au départ autodidacte, inspiré de prime abord par la rugosité du souffle du bluesman James Cotton, puis ensuite par la limpidité de celui de Jean-Jacques Milteau, j’ai appris l’harmonie et l’impro jazz auprès de Sébastien Charlier, de mon point de vue un des meilleurs harmonicistes au monde, et approfondi les overnotes, une technique étrange de respiration qui permet d’obtenir la gamme chromatique à l’harmonica diatonique, sésame pour s’aventurer sur d’autres contrées musicales.

L’année dernière, le chanteur (et batteur), Samuel Bobin (du groupe Poum Tchack) m’a proposé de l’accompagner à l’harmonica lors d’une session youtube Tiny d’Aix (en référence aux fameux Tiny Desk) autour de son album Combustion Spontanée, un savoureux album aux sonorités langoureuses et jazzy.

Ce fut un honneur pour moi de prendre part à un projet impliquant des musiciens professionnels, reconnus comme Cathy Heiting.

Si vous voulez voir la vidéo et entendre la musique :

Voilà pour un petit “résumé” de l’année 2021 !

Des statistiques et des bulles d’iris qui flottent sur Paris

Cet article traite des cartes avec camemberts, des problèmes que cela pose d’un point de vue graphique, et cartographique. Mais surtout, nous verrons la conception d’une carte socio avec diagrammes, par contour IRIS à Paris, qui s’appuie sur le circle packing. Tout ça en essayant d’être rigolo.

Cliquer sur l’image modes de pour voir en grand


La tarte tatin, c’est bon …enfin, ça dépend


Les twix, c’est meilleur que les donuts


Les américains, ils disent que les tartes aux pommes, c’est pas bon. En effet, un article de Business Insider affirme qu’il est difficile de se faire une idée des proportions avec les pie charts. C’est pourquoi on en mange autant.

En France, on appelle ces pie charts des camemberts… On aurait pu appeler ces graphiques des “quiches lorraines” ou “pizzas 4 fromages” selon ce qu’on préfère. Résidant en Provence, je dirais “pompe à l’huile”

“Les chiffres sont critiques !  Regardez donc cette pompe à l’huile !”

Une tarte un peu spéciale


http://www.datemplate.com/post_types-of-charts_136702/gende
En fait, la vraie dénomination de ce graphique serait d’après l’illustration ci-dessus des “slice chart”.
Si l’on se réfère à cette illustration, la vraie pie chart serait une tarte tellement disproportionnée que tout pâtissier assez audacieux pour en confectionner une se ferait interner.
Cette pie chart présente en réalité certaines caractéristiques des radar charts, ou encore spider charts (des arachnophobes dans la salle ?)

Du coup, on pourrait la traduire par RADAR PIE CHART ™, ou “tarte espion” en français.

Ce type de graphique assez bizarroïde présente selon moi certains avantages sur une carte.
En admettant que l’angle de chaque part de tarte espion soit identique, chacune possèdera la même directivité dans l’espace, ce qui facilite les comparaisons. Ce n’est pas le cas avec la tarte maison.
Evidemment, cela ne marche plus dès lors que l’on fait varier à la fois l’angle des parts et leur longueur. C’est un cas qu’on rencontre assez souvent avec des graphiques car la bidimensionnalité est leur vocation première.

Ces tartes espion peuvent être utiles afin de figurer des variables statistiques discrètes mais aussi continues, par exemple temporelles.

Bulles de statistiques


Les iris ne sont pas que des fleurs

L’IGN et l’Insee nous ont gratifiés il n’y a pas si longtemps des contours…IRIS ®, l’iris étant le niveau d’agrégation et administratif le plus fin après la parcelle, le bâtiment et le pavé de trottoir.
En liant des données statistiques à ces IRIS, on peut réaliser tout plein d’analyses et de cartes folles et sympas, ce qui explique pourquoi la mise à disposition de ces contours a pas mal excité la géosphère.

“retrouvons-nous après un petit flash publicité”

Bon, je le dis comme ça : à l’ouverture des données, je m’étais amusé à réaliser une carte des IRIS niveau France entière avec des…iris

Catégories socio-professionnelles

L’Insee, acteur historique de l’#Opendata en France https://t.co/9G7jFHY7N6 pic.twitter.com/Ws9Ei9bOYs

@Insee (@InseeFr) 9 février 2016

C’est fou tout ce qu’on trouve sur le site de l’INSEE, mine de rien. La donnée qui nous intéresse ici est le fichier Travail-Emploi du recensement général de la population de 2012 à l’Iris. Grâce à ces données, on peut faire des cartes très intéressantes pour se faire une idée, entre quartiers, de la mixité sociale, du mode de déplacement privilégié des riverains : voiture, deux roues, etc

Illustrons la méthode en nous appuyant sur la première carte à bulles présentée en début de page. Les colonnes du fichier statistique qui ont été utilisées sont :

  • nombre d’agriculteurs : on en trouve à Paris, si s
  • nombre d’artisans, commerçants et chefs d’entreprise
  • nombre de cadres et professions intellectuelles supérieures
  • nombre personnes occupant des professions intermédiaires
  • nombre d’employés
  • nombre d’ouvriers

Quand les diagrammes posent des soucis aux géomaticiens

Nous pourrions être tentés de représenter ces données sous forme pie charts (camemberts), voire de graphiques à barres (twix).

Dans les deux cas, la difficulté vient, à l’échelle de travail qui est assez fine, du phénomène appelé overlapping qu’on appelle recouvrement en français, mais ça fait moins stylé.

ça fait over-mal

L’astuce du jour, le circle packing, ou empaquetage de cercles (on traduit comme on peut)


L’astuce du jour  $*♪ TADAM ♪*$  consiste à utiliser la technique du circle packing.

Cette technique que Google traduit par “cercle d’emballage”, consiste à répartir le mieux possible des cercles dans un espace de telle sorte qu’aucun ne recouvre l’autre.

C’est un peu ce qui se passe si vous remplissez à 99% une table de billard de boules et que vous mettez des boules dessus. Ces dernières vont se faufiler, pousser les autres jusqu’à le tout se soit équilibré (mais faut avoir bouché les trous du billard avant).

Son application en cartographie la plus connue s’appelle les cartogrammes de Dorling, du nom de son créateur, Danny Dorling

Danny Dorling (au photomaton ?)
http://www.abc.net.au/4corners/stories/2011/10/04/3331769.htm


A quoi ressemblera ma carte


un méchant diagramme
Au niveau de chaque rosace, chaque catégorie se verra affecter une tranche sur le diagramme et cette dernière sera d’autant plus grande qu’il y aura d’employés, ou de cadres, ou d’artisans,…

La carte


Le feeling


Et là, dans ma tête, cercle a évoqué “bulles”. Des bulles flotteraient au-dessus de la capitale avec des statistiques dedans. Les stats c’est lourd, mais quand elles sont dans des bulles, c’est plus léger.

Éléments de contexte


Bon ok, c’est un peu flou, et même très petit


J’ai positionné la Seine, épine dorsale de la capitale ainsi que les contours d’arrondissements (BDROUTE 500 ®) avec un léger flou, pour donner de la profondeur de champ, comme en photographie, ainsi que rejoindre cette idée de légèreté.

L’algorithme de circle packing s’est chargé du mieux qu’il a pu, de répartir les boules de même circonférence sur le territoire, alors que les iris ont initialement des formes, surfaces différentes, il faut faire attention à l’échelle d’analyse.
Chaque bulle a la couleur d’un arrondissement. Cela est d’autant plus nécessaire que la limite imposée à l’algorithme en terme d’itérations a pu entraîner par endroits le transfert d’une bulle dans un arrondissement voisin.

Parlez arrondissement à un provincial comme moi, et il n’y pigera que nenni. Parlez-lui métro, et tout s’éclaire. Tout touriste parviendra à adjoindre une atmosphère à une bouche de métro. Les noms “Barbès”, “Porte d’Italie”, “Le Trocadéro”, “La Défense” évoquent tout de suite des ambiances, des souvenirs.

Les stations de métro fournissent un très bon référentiel que j’ai choisi d’ajouter en filigrane afin de relier l’environnement socio-professionnel à ce réseau auquel on se réfère souvent.

La couleur des lignes, des étiquettes est celle du logo de la RATP. Fallait bien choisir une couleur et la couleur peut évoquer une fonction.

Pour récupérer les lignes ainsi que les stations, j’ai utilisé une petite requête overpass (overpass est  un super outil d’interrogation et d’extraction de données OSM par attributs et critères géographiques et non un pass navigo illimité que l’on trouve sur le darknet).

Les iris et leurs niveaux supérieurs

Aussi, les noms d’Iris constituent des toponymes intéressants à faire figurer sur la carte. Cependant, ils sont beaucoup trop nombreux. On trouvera par exemple PERE LACHAISE 1, PERE LACHAISE 2, etc…

groupes_iris = sub("^(.*) ([0-9]+)$", "\1", iris.df$NOM_IRIS)

Grâce à une petite expression régulière, j’ai récupéré la racine du nom de l’iris sans le numéro et constitué une couche agrégée d’entités de niveau supérieur. Les noms de ces entités supérieures ont servi à l’étiquetage. Je leur ai affecté la même couleur que celle de l’arrondissement auquel ils appartiennent.

Bribes de design

D’un point de vue programmatique, pour générer ces diagrammes, je me suis appuyé sur la librairie R packcircles et des rudiments de géométrie.

En particulier, pour avoir une tranche de gâteau, il suffit de générer un polygone issu d’une série de points, elle-même définie en fonction d’une distance à un centroïde, d’un effectif et d’une rangée d’angles.

Sous QGIS, un mode est utilisé, qui de son joli nom “Flannery”, permet de définir de façon automatique la taille de symboles proportionnels. Ce mode se base sur une fonction interne de QGIS appelée scale_exp. D’après la documentation utilisateur officielle de QGIS, cette fonction échelonne des valeurs entre une valeur minimale et une maximale en suivant une courbe exponentielle.

J’ai porté le code sous R grâce à la doc’ API de QGIS pour définir la taille des pales de la rosace.
Il s’avère qu’en réalité, le rééchelonnage des valeurs se fait selon une courbe de puissance. La fonction devrait du coup plutôt s’appeler scale_pow. 
Voici une illustration de ce que cette fonction accomplit :

La fonction puissance permet de mieux dissocier les valeurs hautes
Si l’on effectue un étirement linéaire, on perçoit moins les différences de valeur :

étirement linéaireVS étirement par puissance

Du QGIS


Sur cet iris, des employés d’abord. des professions intermédiaires ensuite, des cadres, des ouvriers et des artisans enfin

Pour les bulles, j’ai utilisé le dégradé selon la forme, auquel j’ai ajouté un effet d’ombre intérieure.
J’ai utilisé l’effet flou ainsi que des ombres portées sur les autres éléments d’habillage.
Pour les pétales de la rosace, j’ai utilisé un dégradé simple pour un peu de skeumorphisme ainsi que des ombres portées.
J’ai également utilisé les modes de fusion, celui de lumière dure et surtout, celui appelé “multiplier”.

Déclinaisons

Paris, encore

On peut décliner ces cartes sur tout un tas d’autres sujets.

Voici, sur le même mode, la répartition entre étudiants, chômeurs et retraités à Paris par iris:

Et ici, les modes de déplacement utilisé à Paris : deux roues, voiture, transport collectif, marche à pied :

Bonus tracks

Allez, en bonus, voici une carte de la population par âge quinquennal, par département

A vrai dire, je n’ai rien inventé : des cartes exploitant cette technique ont déjà circulé dans les médias, souvent réalisées à l’échelle internationale ou nationale.

Par exemple, il y a cette carte de la pollution, issue de l’atlas du carbone :


Kenneth Field, un carto-critique très pertinent, et créateur de cartes originales, avait par exemple créé cette carte à l’occasion du mondial du football

Rond – ballon, il n’y a qu’un pas !