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é (56206) apparait deux fois et Morlaix  (29151) 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.

Morlaix apparaît en début de liste car lors de l’étape de séparation de « Saint Avé (56206); Morlaix (29151) » sur deux lignes, nous aurions dû utiliser comme séparateur un point-virgule suivit d’un espace au lieu du point-virgule seul. Ce qui fait que nous avons laissé un espace avant “Morlaix (29151)”. Rien de bien grave. Nous pouvons supprimer l’espace en éditant la valeur dans la facette ou utiliser 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.

Assurez-vous ensuite que vous êtes bien dans le mode d’affichage des lignes (rows) et non pas des entrées (records).

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 (Editer les cellules > Vider des valeurs répétées dans des cellules consécutives).

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 Nettoyer et préparer des données avec OpenRefine : atelier pour les journées du consortium MASA 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. []

La collection de cylindres phonographiques du CRBC

Les méridiennes du CRBC

Le CRBC organise régulièrement dans ses locaux des rencontres ouvertes à tous à l’heure de la pause déjeuner pour faire découvrir les projets menés par les membres du laboratoire et de la bibliothèque de recherche.

Ce jeudi 13 décembre 2018 entre 12h30 et 13h30, Blanca Pérez González, stagiaire au CRBC et étudiante en master à l’Université d’Estrémadure (Espagne) présente son travail d’inventaire et de documentation de la collection de 178 cylindres phonographiques conservée au CRBC ainsi que notre phonographe, en état de fonctionner.

La carte ci-dessous permet de visualiser les communes bretonnes où les cylindres ont été probablement été enregistrés.


Cylindre cote CRBC 75 : Comin’ thro’ the rye  by the 48th Highlanders Band (The Kilties), Edison Gold Moulded Record: 12879
Cylindre cote CRBC 68 : The campbells are coming by Pipe major H. Forsyth, Edison Gold Moulded Record: 13648, édité en 1907
Cylindre cote CRBC 23 : Cylindre de la Maison de la Bonne Presse, contenu inconnu
Cylindre cote CRBC 30 :  Cylindre de la Maison de la Bonne Presse, contenu inconnu

Première séance du cycle de rencontres et d’échanges autour du traitement et de l’analyse de données quantitatives en Sciences Humaines et Sociales à Brest

Le cycle de rencontres et d’échanges autour du traitement et de l’analyse de données quantitatives en SHS à l’UBO reprend pour la saison 2015-2016.

Dans la continuité des précédentes années, ces rencontres s’inscrivent dans une démarche pluridisciplinaire (démographes, sociologues, psychologues, géographes, gestionnaires, économistes, etc.) et transversale car selon la discipline, les chercheurs ne traitent pas de la même manière leurs données quantitatives. Ils ont des approches différentes et utilisent des traitements et des logiciels spécifiques qui peuvent être complémentaires. L’objectif est de créer un espace d’analyses et de discussions scientifiques sur nos pratiques. Ce cycle d’échanges prendra en compte autant les dimensions épistémologiques que méthodologiques en partant de nos pratiques et usages mais aussi de nos outils.

La première séance « L’analyse de réseaux sociaux avec le logiciel QCA. Le conformisme dans le choix des téléphones portables chez des jeunes français » par Germain Barré, docteur en sociologie et membre du LABERS aura lieu le mardi 3 novembre 2015 de 14h à 16h salle C219 à l’UFR des Lettres et Sciences Humaines à Brest.

Cette séance sera suivie d’un temps de discussion collective autour des prochaines rencontres (dates, propositions, contenu…).

Contacts et inscription : laurent.mell@univ-brest.fr

Ce cycle est organisé en collaboration avec l’ IBSHS (Institut Brestois des Science de l’Homme et de la Société), le LABERS (LABoratoire d’Études et de Recherche en Sociologie), le CRBC (Centre de recherche bretonne et celtique) et l’école doctorale SHS (Sciences Humaines et Sociales) de l’UBO (Université de Bretagne Occidentale)

Quel environnement de travail pour l’analyse de données avec Python ?

Si R est un langage de programmation qui revient souvent dans les articles sur l’analyse de données en Sciences Humaines et Sociales, Python a pour l’instant ma préférence. En effet, dans une petite UMS (Unité Mixte de Service) comme le Centre de Recherche Bretonne et Celtique où l’on doit être au four et au moulin, de la mise en place d’interfaces pour la saisie et la consultation dans des bases de données au traitement, la visualisation et l’analyse des données, Python, langage à tout faire, est un choix judicieux.

Quand vous développez en Python (mais c’est valable dans d’autres langages), vous évitez de réinventer la roue et vous utilisez ce que l’on appelle des librairies, c’est à dire des morceaux de codes développés par des tiers pour des usages spécialisés. Pour le traitement et l’analyse de données, je m’intéresse actuellement à la librairie Pandas (je vous conseille d’ailleurs la lecture du livre Python for Data Analysis par l’auteur de la librairie). Or quand vous utilisez Pandas et les librairies dites “scientifiques” comme NumPy et SciPy, il est habituellement conseillé d’installer des logiciels qui fournissent un environnement de travail clé en main tels que Enthought Canopy ou Anaconda (la bonne version de Python, les librairies scientifiques et leurs dépendances, des outils de mise à jour des libraires, un IDE1, etc.).

J’utilisais jusqu’à présent Anaconda mais je rencontrais depuis quelques temps des problèmes à répétition avec son IDE Spyder. Anaconda installait également bon nombre de librairies dont je n’avais pas l’usage et il m’imposait d’anciennes versions de ces librairies pour des raisons de compatibilité. Je suis donc passé à une solution plus légère basée sur Miniconda (la version allégée d’Anaconda), la console IPython et la version gratuite de l’IDE PyCharm, que j’utilise par ailleurs pour la configuration de Django.

Pour configurer vous aussi cet environnement de travail sous Windows, commencez par installer Miniconda 32 bits (Même si vous avez un environnement en 64 bits, je ne suis pas sûr que cela vaille la peine d’utiliser la version 64 bits de Miniconda, sauf usage spécifique). Vous avez aussi le choix de télécharger Miniconda avec Python 2.x ou avec Python 3.x. Ce choix concerne la version de Python dans l’environnement Miniconda par défaut. Cela ne vous empêchera pas de créer des environnements basés sur l’une ou l’autre de ces versions de Python.

Lors du processus d’installation de Miniconda, cochez l’option “Add Anaconda to the system PATH environment variable” et ne tenez pas compte du message d’avertissement qui s’affiche en rouge. Si vous ne le faites pas, vous pourrez toujours utiliser Miniconda mais uniquement en passant par sa propre invite de commande, Miniconda ne pourra pas être lancé depuis cmd.exe2.

Mettez ensuite à jour l’application conda à jour : Lancez l’invite de commandes Windows cmd.exe en tapant “cmd” dans la recherche de programmes et de fichiers du menu Démarrer et cliquez sur cmd.exe.

Dans Cmd, tapez conda update conda et validez les éventuelles mises à jour.

conda update conda

Si la mise à jour est refusée pour des raison de droits insuffisants (Message ‘Accès refusé’), relancez cmd.exe en mode administrateur : Lancez Cmd en tapant “cmd dans la recherche de programmes et de fichiers du menu Démarrer puis cliquez avec le bouton droit de la souris sur l’icône de cmd.exe et choisissez Exécuter en tant qu’administrateur.

Si vous avez par la suite des problèmes de droits pour installer ou mettre à jour des librairies Python, pensez à exécuter Cmd en tant qu’administrateur.

Nous allons ensuite procéder à la création d’un environnement virtuel. En effet, quand on utilise Python pour divers usages, mieux vaut ne pas mettre tous ses œufs dans le même panier et créer un environnement de développement par usage, c’est à dire un environnement dans lequel seront uniquement installées les librairies nécessaires.

Pour créer l’environnement virtuel “pandas”, tapez en ligne de commande conda create -n pandas python=3. Si vous souhaitez utiliser Python 2 remplacez le chiffre 3 par 2. Une fois l’environnement installé, activez-le avec la commande activate pandas. Installez ensuite Pandas et IPython par conda install pandas ipython.

Il est également possible d’installer la plupart des librairies avec la commande pip. Le problème, c’est que l’installation de certaines librairies Python nécessite la compilation de code C ou C++. Ce qui pose la plupart du temps des problèmes sous Windows. L’avantage de passer par conda, c’est de pouvoir récupérer des packages pré-compilés. L’inconvénient est que conda interroge par défaut un dépôt de librairies où elles ne sont pas toutes disponibles et si elles le sont, dans leur dernière version. Pour contourner le problème, il est toujours possible d’utiliser un autre dépôt compatible Miniconda (à trouver sur l’Anaconda Cloud puis à configurer selon la documentation de Miniconda), soit d’utiliser pip et des packages pré-compilés de Christoph Gohlke.

Installez ensuite la version Community de PyCharm. Après la création de votre premier projet dans PyCharm (menu File > New Project), allez dans le menu File > Settings puis dans Project:nom_de_votre_projet, puis cliquez sur Project Interpreter. Créez un nouvel interpréteur en cliquant sur la roue crantée puis sur Add ((La procédure et les captures d’écran sont susceptibles de changer avec la version de PyCharm. Les captures d’écran actuelles ont été faites avec la version 2018 de PyCharm.)).

Choisissez un environnement de type Conda Environment et cochez Exiting environment et Make available to all projects. Cliquez sur le bouton avec trois points (…) pour faire apparaitre la fenêtre de sélection du répertoire dans lequel se trouve l’environnement que vous avez créé précédemment.

Pour savoir où a été installé l’environnement, lancez la commande conda info --env dans Cmd. Dans mon cas, l’environnement pandas a été installé dans C:\ProgramData\Miniconda3\envs\pandas.

Sélectionnez le fichier python.exe dans le répertoire de l’environnement.

Normalement, PyCharm détecte automatiquement l’installation de IPython et propose ce  terminal amélioré quand vous lancez la console Python depuis le menu Tools > Python Console.

Pour installer des librairies complémentaires, vous pouvez utiliser PyCharm mais je vous déconseille de le faire car l’application utilise uniquement pip. Préférez plutôt une installation avec conda en ligne de commande comme vous l’avez fait pour installer Pandas.

Il ne vous reste plus qu’à vous lancer dans l’analyse de données avec Python.

Article mis à jour le 23 mai 2018

  1. Integrated Development Environment, voir http://fr.wikipedia.org/wiki/Environnement_de_d%C3%A9veloppement []
  2. Au sujet de cmd.exe, voir https://fr.wikipedia.org/wiki/Cmd. []

Bibliothèque Yves-Le-Gallo

Le carnet sera un moyen de partager l’actualité de la bibliothèque Yves-Le-Gallo (UMS 3554) : Entrée et inventaire de nouveaux fonds, participation à des événements culturels et scientifiques, publication de nouveaux ouvrages) en complément du site web et du compte Twitter de l’unité. La carnet sera également un moyen de partager l’expérience du personnel de la bibliothèque (succès et déboires) acquise durant nos projets d’inventaires, de numérisation, de création de bases de données scientifiques, d’analyse de données et tout ce qui concerne la vie d’une bibliothèque de recherche.