Catégories
Wikidata

Croiser des données avec OpenRefine

On vient de me poser une question intéressante sur Twitter :

« Question pour les experts Wikidata qui causent SPARQL : vous pourriez m’aider à faire une requête du genre « villes des États-Unis entre 100 000 et 600 000 habitants situées dans un comté ayant majoritairement voté pour Clinton en 2016 » ? »

Le problème ici est que les données électorales détaillées ne sont pas sur Wikidata (et à mon avis n’y ont pas leur place, elles seraient mieux sur Commons sous forme de données tabulaires).

En revanche, il est possible d’extraire via une requête SPARQL la liste des villes des États-Unis entre 100 000 et 600 000 habitants, puis de la croiser par le biais d’OpenRefine avec un tableau des résultats des élections.

Données électorales

La première étape est de chercher un fichier open data contenant les données de l’élection présidentielle américaine de 2016 par comté, idéalement sous la forme d’un CSV à télécharger. Ça tombe bien, il y en a un sur OpenDataSoft.

Plus qu’à l’importer dans OpenRefine. Si vous ne connaissez pas, c’est un outil d’alignement et de croisement de données, qui se définit lui-même comme un « Excel sous stéroïdes ». Il était développé à la base par Google pour Freebase, mais il a depuis été libéré et le développeur principal actuel est un contributeur à Wikidata. Il y a de bons tutoriels pour l’utiliser pour récupérer des données de Wikidata ou y importer de nouvelles données après alignement avec les données existantes, mais on ne va ici faire ni l’un ni l’autre.

Dans OpenRefine, il faut faire CreateProject → from this computer et choisir le CSV téléchargé, puis cliquer sur Next.

La prévisualisation semble correcte, et le nom du projet proposé (celui du fichier) également : je clique donc sur Create project.

Les informations qui vont être importantes pour la suite sont : le nom du projet, le nom de la colonne servant à aligner les données (la colonne « County », qui est du format « <County>, <State> ») et celui de la ou des colonnes avec les données à récupérer (ici, uniquement la colonne « Democrats 2016 ») Le jeu de données est déjà bon pour ce que je veux en faire, je n’ai pas de manipulations supplémentaires à faire.

Liste des villes

La seconde étape est d’extraire la liste des villes correspondant à la demande. Je ne vais pas détailler la requête, mais en regardant quelques entrées de villes US sur Wikidata, je vois qu’elles ont pour nature « city aux États-Unis » (Q1093829), qu’elles ont des chiffres de population pour 2010, le comté entré comme « localisation administrative » (je vais quand même vérifier qu’il a s’agit bien d’un comté américain et pas directement de l’état ou d’un autre type de division administrative. Apparemment tous ont pour nature « comté de <tel état> », qui sont eux-mêmes des sous-classes de « comté des États-Unis »)

Je vais aussi avoir besoin de l’état et, tant qu’à faire, je récupère aussi les coordonnées. Voici donc la requête :

La requête renvoie 247 résultats alors qu’il y a 213 villes correspondant à la requête, parce que certaines villes s’étalent sur plusieurs comtés et qu’il y a parfois plusieurs chiffres de population ou plusieurs coordonnées géographiques entrés sur certains éléments de ville.

Je télécharge donc le résultat de la requête en CSV, que je vais également importer dans un projet OpenRefine que je nomme « US Cities between 100000 and 600000 hab. that voted democrat in the 2016 Presidential election » ce qui est… long.

Aligner les données

L’idée est d’enrichir ce nouveau projet avec les informations électorales de celui créé plus haut. On va donc créer une nouvelle colonne contenant le nom des comtés sous le même format « <County>, <State> »

Pour cela, je commence par dupliquer la colonne StateLabel en cliquant sur la flèche à côté du nom de la colonne, puis Edit column → Add column based on this column. Je nomme la nouvelle colonne « county state » et je vérifie que l’expression est simplement « value » (ce qui va donc juste copier la valeur actuelle)

Sur la nouvelle colonne county state, je fais Edit column → Join columns avec les paramètres suivants :

Attention, il y a une espace après la virgule dans le champ Separator. Une fois cela fait, on peut enfin aligner avec l’autre projet et récupérer les résultats des démocrates en 2016. Là encore, on crée une nouvelle colonne « Democrats 2016 » basée sur la colonne « county state », avec l’expression suivante :

Pour détailler : cell.cross("usa 2016 presidential election by county csv", "County") indique le nom du projet avec lequel on aligne et celui de la colonne pivot dans ce projet, cells['Democrats 2016'].value[0] récupère la valeur de la colonne Democrats 2016 et enfin la fonction toNumber(...) transforme cette valeur en nombre (sinon c’est une chaîne de caractères)

On peut maintenant filtrer les villes où les démocrates étaient majoritaires en 2016 ! Dans OpenRefine, cela se fait avec une facette. Sur la colonne Democrats 2016, Facet → Numeric Facet fait apparaître une glissière très pratique. Il suffit de déplacer la borne de gauche sur 50 et voilà, on a le résultat qu’on cherchait au début.

Affichage dans uMap

On pourrait directement exporter ce résultat en CSV mais je veux l’afficher dans uMap, il reste donc quelques manips à faire pour correspondre au format attendu :

  • Renommer (ou dupliquer) la colonne cityLabel en name
  • Scinder la longitude et la latitude dans deux colonnes séparées et nommées comme ça. Il faut pour cela créer deux colonnes à partir de la colonne coord.

Pour la colonne longitude, l’expression (en jython) est :

Et pour la colonne latitude :

On peut donc ensuite exporter le projet en CSV (Export → Comma separated values) puis l’importer dans une nouvelle carte sur uMap, et voici le résultat :

Image d’en-tête : I´m ready for Hillary par Rafael Robles, CC-BY 2.0

Catégories
Projets Wikimédia

Convent(ion)s

J’ai eu la chance cette année de participer à quatre événements internationaux du mouvement Wikimédia : le hackathon européen à Vienne du 19 au 21 mai, Wikimania 2017 à Montréal du 9 au 13 août, la Wikiconvention francophone à Strasbourg du 19 au 21 octobre et la WikidataCon à Berlin les 28 et 29 octobre. Si je ne me trompe pas, je n’ai jamais participé à autant la même année.

À part pour la Wikiconvention, j’ai assisté à tous ces événements sur mon temps bénévole, avec une bourse de Wikimédia France pour le hackathon, une (partielle) de Wikimedia Foundation pour Wikimania, et une de Wikimedia Deutschland pour la WikidataCon: merci à ces organisations pour leur soutien.

Participer à de tels événements est toujours un moment intense, car on passe plusieurs jours en compagnie de personnes passionnées et passionnantes, qui viennent pour partager les trucs formidables qu’ils font sur les projets Wikimedia ou pour ceux-ci : c’est très motivant, c’est idées qui fusent dans tous les sens, des discussions intéressantes jusqu’à pas d’heure. Ça donne envie de se lancer dans plein de choses et on se prépare un bon gros con drop pour la semaine suivante.

Je vais ici essayer de faire le point sur comment se passe chaque événement et ce qui me motive à y aller, plutôt qu’essayer de faire un résumé de confs qui sont maintenant pour la plupart filmées et diffusées en ligne.

Hackathon Wikimedia

Photo de groupe du Hackathon Wikimedia 2017 – CC-BY-SA 4.0 Manfred Werner (Tsui)

Le hackathon Wikimedia rassemble chaque année, dans une ville européenne((Ou proche : en 2016 c’était à Jérusalem.)) environ 200 développeurs bénévoles du mouvement le temps d’un week-end. C’est intense : l’événement se déroule en continu et il est possible d’accéder aux salles pour hacker à toute heure, même si les organisateurs prévoient généralement des événements pour les soirées.

Contrairement aux hackathons institutionnels, durant lesquels des personnes ne se connaissant pas bossent ensemble le temps d’un week-end sur un projet qui partira aux oubliettes, beaucoup des gens présents travaillent ensemble toute l’année sur des outils et profitent de ce moment pour le faire en présentiel. D’autres travaillent séparément sur des outils développés au cous du week-end, mais profitent d’avoir sous la main des experts connaissant parfaitement Mediawiki et les différentes librairies et APIs dédiées et pouvant donner de précieux conseils. C’est ainsi que j’ai pu, pour ma part, créer un outil qui avait été demandé par Antoine Courtin quelques semaines avant.

J’en profite pour signaler que même si vous n’êtes pas dev, votre présence peut être utile, par exemple pour aider sur la documentation.

Wikimania 2017

Photo de groupe de Wikimania 2017 – CC-BY-SA 4.0 VGrigas (WMF)

Wikimania est le grand rassemblement mondial du mouvement Wikimedia, rassemblant chaque année des centaines de personnes.

Wikimania commence toujours par des pré-conférences, dont un hackathon qui se déroule comme le hackathon européen. Comme à Vienne, j’ai profité d’avoir des gens plus compétents que moi en JavaScript pour m’aider (en particulier, merci Tpt ;)) à finir mon premier gadget sur Wikidata : DataDrainer 2.0.((Ah, et je nie toute connaissance sur ces histoires de boucs. Quelles histoires de boucs, d’abord ? 🐐))

La conférence abordait, comme chaque année, tous les sujets liés au mouvement avec des présentations sur des actions de grande envergure et d’autres plus confidentielles. J’ai remarqué un changement cette année cependant : j’ai la très nette impression qu’on est passés de « Wikipédia et ses projets-frères » à « Wikidata et ses projets-frères », en témoignent le nombre de présentations liées à ce projet et le fait que celles-ci soient systématiquement pleines à craquer((D’un autre côté, j’ai trouvé les salles dédiées aux confs Wikidata sous-dimensionnées.))

Dernier point concernant cette Wikimania : Pyb et moi avons présenté un poster au sujet de Wikicheese((Euh, je veux dire Wikifromage ;). Et oui, il y avait du fromage de chèvre. 🐐)), et organisé une dégustation dans la suite de Wikimedia Canada.

Dégustation de fromage à Wikicheese – CC-BY-SA 4.0 Ahmed Houamel

Wikiconvention francophone 2017

Photo de groupe de Wikimania 2017 – CC-BY-SA 4.0 Habib M’henni

Avance rapide de quelques mois pour la deuxième édition de la Wikiconvention francophone, qui a eu lieu à Strasbourg en octobre. C’est une déclinaison de ce qui se fait déjà depuis des années chez les germanophones et les néerlandophones : rassembler les contributeurs et contributrices de tous les pays parlant une même langue. Les problématiques concernant les projets déclinés par langue sont ainsi beaucoup plus pertinentes : les problèmes de la Wikipédia en français ne sont pas forcément ceux de la version anglophone.

Étant là sur mon temps de travail, je me suis concentré sur les présentations les plus techniques, notamment une table ronde sur les besoins tech de la Wikipédia en français, qui devrait aboutir sur un pré-hackathon dans le sud de la France le mois précédant le prochain hackathon européen à Barcelone. Stay tuned 😉

La prochaine édition de la Wikiconvention elle-même aura a priori lieu à Grenoble en août prochain.

WikidataCon 2017

Photo de groupe de Wikimania 2017 – CC-BY-SA 3.0 Rama

Dernier événement, une semaine plus tard : la WikidataCon. Il s’agit ici de rassembler les contributeurs et contributrices de Wikidata au moment du 5e anniversaire du projet. C’est la première édition de cet événement et elle est très prometteuse, notamment grâce au soin apporté aux détails lors de l’organisation. Ainsi, au delà des efforts d’accessibilité qui sont devenus standards dans les événements Wikimédiens,  on peut noter l’insistance sur le respect de la friendly space policy, la précaution de mettre des toilettes gender-neutral ou un espace isolé pour les gens qui auraient besoin de récupérer, le soin particulier apporté à la restauration (clairement la meilleure cette année, et pourtant Wikimania avait mis la barre haut) et au fait qu’elle ait été pensée pour que tout le monde y trouve son compte.

La prochaine édition aura lieu à Berlin dans deux ans, mais en attendant Wikimedia Deutschland nous incite à organiser des événements de moindre ampleur vers la fin octobre prochain. Peut-être en France ?

Et l’an prochain ?

Comme je l’annonce plus haut, plusieurs événements d’envergure sont à prévoir en France dans l’année à venir : je vais essayer d’y être et je vous invite à venir aussi. Je vais aussi essayer d’aller au FOSDEM (à Bruxelles) et au Hackathon Wikimedia. Par contre, je pense que je vais passer mon tour pour Wikimania, même si l’Afrique du Sud est une destination tentante.

Image d’en-tête : The Convent, or The Great He-Goat 🐐, par Francisco de Goya y Lucientes (domaine public)