Créer une carte avec Wikidata, OpenRefine et uMap

A l’occasion de la Méridienne du CRBC du 13 décembre 2018, une carte des communes de Bretagne liées aux cylindres phonographiques conservés au CRBC a été créée sur uMap.

Les données nécessaires à la carte ont été construites en alignant avec Wikidata les noms des communes saisies dans l’inventaire Excel de Blanca Pérez González, stagiaire à la bibliothèque Yves-Le-Gallo, puis en récupérant sur Wikidata leurs coordonnées géographiques. Pour cela nous avons utilisé le logiciel libre OpenRefine (version 3.1). Dans ce tutoriel, nous détaillons toutes les opérations à effectuer pour créer la carte à partir de l’inventaire. Nous avons délibérément utilisé une version de l’inventaire où subsistent quelques erreurs pour montrer les capacités de OpenRefine en matière de nettoyage des données.

Mais avant toute chose, qu’est ce que Wikidata ? Wikidata est un projet de base de connaissances libre lancé en 2012 par la Wikimedia Foundation, l’organisme qui héberge Wikipédia. Les informations saisies dans Wikidata sont des données « brutes ». C’est à dire que l’on y saisi non pas des phrases telle que « Quimperlé [kɛ̃pɛʁle] est une commune française, située dans le département du Finistère en région Bretagne.  »1 mais des déclarations ou statements.

On trouve par exemple sur la page Wikidata de la ville de Quimperlé, ou plus précisément sur la page de l’élément Wikidata correspondant à Quimperlé, les déclarations comme quoi Quimperlé est une « commune of France », que sa population était de 11.978 habitants en 2013 et pour ce qui nous concerne aujourd’hui, que ses coordonnées géographiques sont 47°52’22″N, 3°32’59″W.

Si l’affichage de l’interface par défaut en anglais vous dérange, vous pouvez ouvrir une session sur Wikidata avec votre compte Wikipédia (en haut à droite, lien Log in) soit en créer un en déclarant le français comme langue par défaut.

Il existe plusieurs manières pour récupérer ces informations. L’une d’entre elle est le point d’accès SPARQL Wikidata Query Service (WQS) qui suppose d’avoir des notions élémentaires du langage SPARQL2. Mais WQS ne vous permettra pas de récupérer les coordonnées géographiques à partir de votre propre liste de noms de communes. Il faut un outil qui vous permettre de faire correspondre le nom d’une commune avec un élément Wikidata (« Quimperlé avec Q235382) puis d’interroger Wikidata pour récupérer la valeur de la propriété coordinate location de chaque élément. C’est exactement ce que permet le logiciel libre OpenRefine.

Commençons par créer un nouveau projet dans OpenRefine à partir du fichier Excel Inventaire des cylindres phonographiques du CRBC de Blanca et la commande Create Project > This computer.

La colonne Dublin Core Spatial Coverage des noms des communes est dans la feuille Catalogue du fichier Excel où chaque ligne correspond à un cylindre (la deuxième feuille, Inventaire, contient la liste des contenus intellectuels : chansons, interprétations musicales). Dans les paramètres d’importation du fichier Excel, cochons la case correspondant à la feuille Catalogue et cochons la case permettant de considérer la première ligne comme contenant les titres des colonnes (Parse next 1 line(s) as column headers).

Appliquons une facette textuelle sur la colonne Dublin Core Spatial Coverage (Depuis le menu de la colonne, commande Facet > Text facet).

La facette nous permet de constater qu’une des cellules du tableau contient au lieu d’une seule, deux noms de communes séparées par un point-virgule (Saint Avé et Morlaix).

Pour séparer ces deux communes sur deux lignes distinctes utilisons la commande Edit cells > Split multi-valued cells

… en précisant le point-virgule comme séparateur de valeur.

La facette est automatiquement mise à jour et on voit apparaitre de manière distincte Saint-Avé et Morlaix .

Par contre, petit problème, Saint-Avé apparait deux fois et Morlaix apparait en premier dans la liste classée alphabétiquement. Le premier problème est dû au fait que Saint-Avé a été saisi une fois « Saint Avé » (sans tiret) et cinq fois « Saint-Avé » (avec un tiret). On corrige le problème en éditant directement le nom de la commune dans la facette.

Pour Morlaix, le problème est dû à l’ajout d’un espace au début du nom de la commune. Pour être certain d’enlever tous les espaces superflus de la colonne, on utilise la commande Edit cells > Common transforms > Trim leading and trailling whitespace.

Dans cette colonne, Goelo correspond à une aire géographique et non pas à une commune. OpenRefine ne permet pas de supprimer des lignes mais cela n’a pas d’importance pour la suite des opérations.

Notez au passage que toutes les opérations que vous effectuez dans OpenRefine sont sauvegardées automatiquement. Vous pouvez également revenir aux étapes précédentes dans l’onglet Undo/Redo. Bon à savoir également : Le fichier Excel original reste intact puisque ses données ont été importées dans OpenRefine.

Le nom de la commune est suivit de son code commune entre parenthèses. Par exemple, Quiberon (56186). Nous pourrions lancer l’alignement avec Wikidata en utilisant les données telles quelles mais nous allons améliorer la réconciliation en répartissant ces deux informations dans des colonnes distinctes.

Une des manière de procéder est d’utiliser Edit column > Split into several columns en choisissant la parenthèse ouvrante précédée d’un espace comme séparateur.

On se retrouve avec une deuxième colonne Dublin Core Spatial Coverage 2 qui contient le code commune et la parenthèse fermante.

Pour supprimer la parenthèse fermante, on utilise la même commande que précédemment en choisissant cette fois la parenthèse fermante comme séparateur.

On lance la réconciliation avec Wikidata par la commande Reconcile > Start reconciliation sur la colonne Dublin Core Spatial Coverage 1 et on choisi la réconciliation avec Wikidata.

Le service de réconciliation devine que les données sont du type commune of France. Il aurait également été possible de préciser le type dans Reconcile against type. Pour renforcer la réconciliation, on précise que la colonne Dublin Core Spatial Coverage 2 contient des codes INSEE. Il suffit de commencer à taper « INSEE » pour afficher une liste de suggestions. On choisit INSEE municipality code.

Une fois la réconciliation terminée, deux nouvelles facettes sont affichées dont une qui permet d’afficher les lignes où l’alignement n’a pas pu se faire automatiquement.

Quand on clique sur none dans la facette,  les lignes correspondant à Landerneau et Goëlo s’affichent. Goëlo, comme nous l’avons vu n’est pas une commune mais un ancien pays de Bretagne. Nous n’allons donc pas l’afficher sur la carte. En ce qui concerne Landerneau (écrit Landernau dans l’inventaire), une lettre « e » a été omise mais cela n’aurait pas posé de problème au service de réconciliation de Wikidata si ce n’est que c’est le code postal qui a été saisi dans l’inventaire (29800) et non le code commune (29103).

Pour aligner à la main la commune avec Wikidata, on clique sur Search for match sous Landernau et dans le formulaire qui s’affiche on rajoute le e de Landerneau et on valide la commune proposée par Wikidata.

Pour récupérer les coordonnées géographiques de la commune, on commence par réinitialiser la facette de la réconciliation en cliquant sur reset.

On choisit ensuite depuis la colonne Dublin Core Spatial Coverage 1 la commande Edit Column > Add columns from reconcilied values.

On choisit dans le formulaire suivant la propriété Wikidata coordinate location.

Une fois la récupération des coordonnées géographiques terminée, on se retrouve avec une nouvelle colonne coordinate location contenant la latitude et la longitude de la commune séparées par une virgule. uMap a besoin de ces données séparément. On ventile la latitude et la longitude dans des colonnes distinctes avec la commande déjà utilisée Edit column > Split into several columns appliquée à la colonne coordinate location.

On se retrouve maintenant avec un tableau de données ou l’on a bien une ligne par commune (après la séparation de Saint-Avé et Morlaix qui se trouvaient dans la même cellule), où les erreurs ont été corrigées (Saint-Avé orthographié de deux manières différentes, Landerneau écrit Landernau), où l’on a récupéré la latitude et la longitude des communes dans des colonnes séparées. Comment extraire de ce tableau uniquement les communes et les coordonnées spatiales, sans doublons ?

Pour supprimer les doublons, il faut commencer par les rassembler. Nous pourrions pour cela appliquer un tri alphabétique sur le nom des communes. Mais bien que cet inventaire soit exempt de communes portant le même nom, il vaut mieux trier les lignes par codes communes par la commande Sort….

Pour rendre le tri permanent, on va dans Sort > Reorder rows permanently.

On vide ensuite les noms des communes consécutives en utilisant dans le menu de la colonne des noms de communes, la commande Edit cells > Blank down.

Toujours sur la colonne des noms des communes, on applique une facette par ligne vide : Facet > Customized facets > Facet by blank (null or empty string).

On clique ensuite sur false dans la facette pour n’afficher que les lignes non-vides.

On obtient un tableau où ne figure plus que la liste des communes sans doublons :

Subsistent néanmoins les lignes correspondant à Goëlo qui peuvent être masquées par une deuxième facette « by blank ». Mais étant donné qu’elles sont à la fin de la liste, nous les supprimerons une fois les données exportées.

Dans le menu Export en haut à droite, il faut choisir Custom tabular exporter.

Dans l’onglet Content, on ne coche que les trois colonnes contenant le nom des communes, les latitudes et les longitudes. Notez que Matched entity’s name permet d’exporter les noms des communes tel qu’il ont été saisi dans Wikidata et non pas tels que saisis dans l’inventaire.

Dans l’onglet Download, on sélectionne le format CSV et on clique sur Download.

Le fichier CSV doit contenir les lignes suivantes :

Dublin Core Spatial Coverage 1,coordinate location 1,coordinate location 2
Morlaix,48.5775,-3.8277777777778
Plonévez-du-Faou,48.252222222222,-3.8247222222222
Trégourez,48.106111111111,-3.8630555555556
Landerneau,48.450833333333,-4.2494444444444
Arzon,47.548055555556,-2.8913888888889
Belz,47.675833333333,-3.17
Melrand,47.980277777778,-3.1116666666667
Plumergat,47.741944444444,-2.9172222222222
Quiberon,47.483333333333,-3.1205555555556
Saint-Avé,47.686666666667,-2.7344444444444
Saint-Nolff,47.703611111111,-2.6516666666667
Sainte-Anne-d'Auray,47.703611111111,-2.9538888888889
Goëlo,,
Goëlo,,
Goëlo,,
Goëlo [Q3112879],,

On supprime à la main les dernières lignes concernant Goëlo. On renomme les titres des colonnes correspondant à la latitude (à renommer lat) et à la longitude (à renommer lon), faute de quoi l’import dans uMap ne fonctionnera pas. On renomme également la colonne des noms de communes en name. Ce qui donne :

name,lat,lon
Morlaix,48.5775,-3.8277777777778
Plonévez-du-Faou,48.252222222222,-3.8247222222222
Trégourez,48.106111111111,-3.8630555555556
Landerneau,48.450833333333,-4.2494444444444
Arzon,47.548055555556,-2.8913888888889
Belz,47.675833333333,-3.17
Melrand,47.980277777778,-3.1116666666667
Plumergat,47.741944444444,-2.9172222222222
Quiberon,47.483333333333,-3.1205555555556
Saint-Avé,47.686666666667,-2.7344444444444
Saint-Nolff,47.703611111111,-2.6516666666667
Sainte-Anne-d'Auray,47.703611111111,-2.9538888888889

uMap est un service de création de cartes personnalisées du projet OpenStreetMap, concurrent libre de Google Maps. Vous pouvez utiliser uMap sans vous créer de compte. Mais créer un compte vous permettra de gérer vos cartes plus facilement et vous évitera de perdre vos cartes.

Pour importer les données dans uMap, on clique sur le lien Créer une carte en haut à gauche de la page d’accueil de uMap. Puis on clique sur l’outil rond avec une flèche vers le haut dans la barre d’outils, à droite de la carte.

Je vous conseille d’importer les données dans un nouveau calque. Si uMap ne vous permet de cliquer sur le bouton Importer, c’est que vous n’avez pas renommé les colonnes des cordonnées géographies en lat et lon.

Les points correspondants aux communes apparait sur la carte. uMp appelle ces points des marqueurs.

Pour afficher les noms des communes et modifier l’aspect des marqueurs, vous pouvez éditer les propriétés du calque en cliquant sur l’icône en forme de cylindre (Gérer les calques) puis sur l’icône en forme de crayon à côté du nom du calque.

La forme des marqueurs se paramètre dans Propriété de la forme.et l’affichage des étiquettes dans Options d’interaction > Afficher une étiquette. Si vous avez bien renommé la colonne du nom des communes en name, avant d’importer le fichier CSV, vous devez voir apparaitre le nom des communes.

Pour partager votre carte ou l’intégrer dans une page web, utilisez le bouton Exporter et partager la carte dans la barre d’outils en haut à gauche de la carte.

Pour en savoir plus sur OpenRefine, voir le cours et le TP de l’atelier OpenRefine de l’ANF « Sciences des données : un nouveau challenge pour les métiers liés aux bases de données » (5 au 7 novembre 2018, Sète). Ces documents sont inspirés de la présentation Nettoyer et préparer des données avec OpenRefine de Mathieu Saby.

Pour les anglophiles, la documentation de OpenRefine, bien qu’un peu fouillis, reste la référence, notamment la page concernant la réconciliation des données.

Pour en savoir plus sur Wikidata, lire les publications de Markus Krötzsch, un chercheur de l’Université de Dresde qui a contribué à la conception de Wikidata. Notamment la publication Denny Vrandečić, Markus Krötzsch. Wikidata: A Free Collaborative Knowledgebase. In Communications of the ACM 57:10, pp. 78–85. ACM 2014

  1. source : la page Wikipédia en français de Quimperlé []
  2. Lecture conseillée pour s’initier au langage SPARQL : Wikidata:SPARQL tutorial. []

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.