De Google My Maps à ggplot2 en quelques secondes

J’avais brièvement évoqué, en juin dernier, la version 1.0.0 du package R xml2, qui permet de lire du XML dans R en permettant d’y mobiliser la librairie libxml. Voici un petit bricolage basé sur cette chaîne d’outils.

Les données : Google My Maps

Au hasard d’une recherche sans rapport avec le schmilblick, je suis tombé sur cette carte des morts violentes à Barbès et à la Goutte d’Or. La carte a été réalisée par Jean-Raphaël Bourge, qui fait un superbe travail de recherche sur le quartier.

En fouillant un peu, j’ai également retrouvé cette carte des églises africaines qui font leur publicité à la Goutte d’Or. La carte a été réalisée par Baptiste Coulmont, qui a amplement documenté le phénomène, et qui a publié un très chouette article sur le sujet.

Enfin, en creusant encore un peu, je découvre une autre carte : « Gangs of Los Angeles« , et son complément sur les gangs hispaniques. Les graffiti que laissent les gangs de Los Angeles font l’objet d’une recension aussi systématique que possible sur Instagram, et il existe des tonnes de cartes très détaillées des territoires de ces gangs1.

Le problème : KML et ggplot2

Je me suis demandé comment je pouvais réutiliser les données de ces cartes. Google My Maps est un outil très pratique qui peut être utilisé sans compétence technique par un nombre illimité d’utilisateurs, ce qui en fait un excellent support pour le recueil de données géolocalisées ; mais comment réexploiter ces données ?

Google My Maps permet d’exporter les informations d’une carte au format KML, ce qui est pratique, mais l’utilisation de ces données par des outils tels que les packages R rgdal ou sf n’est pas facile, surtout si l’on souhaite utiliser les packages du « tidyverse » (dyplr et ggplot2 en particulier) pour manipuler les données et les visualiser.

La solution (limitée) : tidykml

Histoire de passer rapidement d’un fichier KML à un jeu de données qui puisse être utilisé avec ces packages, j’ai codé un petit package, tidykml, qui importe les éléments KML les plus simples (les géométries de base et leurs métadonnées). Tous les détails sont dans le README du package, et voici un exemple de résultat :

gangs

Le package est très limité : il ne gère pas les « géométries multiples » (les multi-polygones qui permettent de visualiser des îles, par exemple), et il n’a été testé que sur les cartes listées plus haut, plus quelques autres exemples de cartes issues de Google My Maps. En attendant mieux, le package permet de réaliser des cartes comme celle-ci :

sherman

L’exemple ci-dessus, qui ne demande que quelques lignes de code dont la plupart sont des réglages graphiques réalisés dans ggplot2, apparaît également dans ce billet en anglais, un peu plus technique.

Pour aller plus loin

Mon objectif, avec tidykml, était de raccourcir autant que possible le code allant de l’import d’un fichier KML à un graphique réalisé avec ggplot2, histoire de faciliter la réutilisation de données Google My Maps sur d’autres supports, et sans passer par des solutions de cartographie plus sophistiquées.

Pour aller plus loin, il faudrait avant tout que je trouve un moyen de prendre en compte les « géométries multiples » évoquées plus haut, et aussi que je documente l’énorme répertoire d’outils cartographiques pour R, comme par exemple l’excellent package cartography de Timothée Giraud et al..

Pas d’empressement toutefois : les outils de cartographie avec R sont en discussion et pourraient évoluer de manière à rendre mon package obsolète dans les mois à venir. Tant mieux.

  1. Voir notamment cette conversation sur Reddit. []