Comment j’ai fouillé dans des dizaines de milliers de notices Wikipédia

Pour réa­li­ser le Top 50 des sites d’info les plus cités sur Wiki­pe­dia, j’ai uti­li­sé une série d’outils dont je m’étais par­fois déjà ser­vi dans d’autres pro­jets :

  • J’ai repé­ré des séries de notices inté­res­santes grâce à l’outil CatS­can pro­po­sé par Wiki­pé­dia.
  • J’ai uti­li­sé des tech­niques de data scra­ping pour par­cou­rir auto­ma­ti­que­ment des mil­liers de notices avec l’extension Fire­fox Out­wit Hub.
  • J’ai net­toyé les résul­tats obte­nu grâce à Open Refine.
  • J’ai dres­sé les clas­se­ments avec Google Sheets, le tableur de Google Drive.
  • J’ai réa­li­sé les gra­phiques avec Data­wrap­per.
  • J’ai pré­sen­té les tableaux de façon inter­ac­tive avec le plug-in JQue­ry Data­tables.

Comme cha­cun de ces ser­vices peut vous inté­res­ser, je reviens pas à pas dans cet article sur la méthode uti­li­sée, en don­nant des liens vers les fichiers de don­nées obte­nues.  N’hésitez pas à réuti­li­ser ces der­nières pour d’autres tra­vaux, et tenez-moi au cou­rant de vos trou­vailles dans les com­men­taires.

A plu­sieurs reprises, j’ai fait des choix qui m’ont sem­blé cohé­rents avec l’objectif de ce pro­jet. Que vous soyez wiki­pé­dien ou jour­na­liste, vous aurez sans doute envie de les dis­cu­ter, ce que je vous encou­rage for­te­ment à faire, je suis là pour ça.

1. Bâtir un échantillon avec CatScan

La pre­mière dif­fi­cul­té, c’était de trou­ver une série de notices Wiki­pé­dia per­ti­nentes.

J’ai d’abord pen­sé à pro­gram­mer Out­wit Hub pour en col­lec­ter de façon tota­le­ment aléa­toires, en uti­li­sant par exemple le lien « Explo­rer au hasard » de l’encyclopédie. Mais mon « robot » s’est vite per­du dans des fiches sans lien avec l’actualité ou dans diverses pages de listes.

J’ai alors décou­vert CatS­can et je m’en suis ser­vi pour obte­nir les liens de notices figu­rant dans toute une série de caté­go­ries et sous-caté­go­ries. En par­tant la caté­go­rie Eve­ne­ment de Wiki­pé­dia, j’ai sélec­tion­né les sous-caté­go­ries sui­vantes (elles-mêmes divi­sées en une mul­ti­tude de sous-caté­go­ries :

  • Evé­ne­ment en cours
  • Evé­ne­ment à venir
  • Evé­ne­ment récent
  • Jour­née com­mé­mo­ra­tive ou thé­ma­tique
  • Mas­sacre
  • Evé­ne­ment his­to­rique en météo­ro­lo­gie
  • Salon
  • Marche
  • Contro­verse
  • Fes­ti­val

CatS­can m’a ren­voyé une liste de 16741 notices (sur un total de plus de 1,6 mil­lion publiés sur la Wiki­pé­dia en fran­çais, soit envi­ron 1%) sur des sujets très variés. La taille de cette liste m’a paru suf­fi­sante – au-delà, les dif­fé­rents logi­ciels dont je me suis ser­vi n’aurait de toute façon pas pu fonc­tion­ner cor­rec­te­ment.

2. Programmer un scraper avec Outwit Hub

Bien que l’interface de ce logi­ciel de scra­ping soit inti­mi­dante (euphé­misme), Out­wit Hub n’est pas si com­pli­qué à uti­li­ser, une fois qu’on a digé­ré les tuto­riels de base. Il suf­fit d’identifier où se trouvent dans le code source les infor­ma­tions qu’on recherche et com­ment elles sont struc­tu­rées en lan­gage HTML.

En l’occurrence, les liens se trou­vant dans les par­ties qui m’intéressaient (« Notes et réfé­rences » et « Voir aus­si » notam­ment) sont dans des balises liens (« a ») por­tant la classe CSS « exter­nal text ».

Capture d’écran 2014-09-10 à 19.16.20
Cap­ture d’écran de Out­wit Hub

Il suf­fit alors de créer un « extrac­teur »,en indi­quant à Out­wit Hub les chaînes de carac­tères se trou­vant juste avant et juste après l’information ciblée.  Par exemple, pour l’URL externe :

<a class="external text" href="

et

">

Pour extraire plu­sieurs infor­ma­tions à la fois (l’URL, mais aus­si le nom de domaine et le texte du lien), j’ai cepen­dant dû construire une expres­sion régu­lière. Sans vous faire un cours com­plet sur ces trucs-là (ce dont je serais bien inca­pable), sachez qu’on les croise un peu par­tout (de Yahoo Pipes à Adobe Inde­si­gn en pas­sant par les dif­fé­rents lan­guages de pro­gram­ma­tion).

Pour un non-déve­lop­peur, c’est un peu pénible à apprendre, mais ça rend bien des ser­vices, ça en vaut donc la peine.  Après avoir pas mal trans­pi­ré, j’ai fini par bâtir l’expression sui­vante (sûre­ment per­fec­tible, d’ailleurs) :

/class="external text".*href="(http://.*?)(/.*?)">(.*?)</a>/

Out­wit Hub était alors paré pour le moment le plus agréable du pro­jet, celui où l’ordinateur tra­vaille à votre place : il a suf­fit de lui deman­der de pas­ser cet extrac­teur sur chaque page de l’échantillon, puis d’exporter tous les résul­tats obte­nus dans un gros fichier CSV (20 Mo).

3. Nettoyer les résultats avec Open Refine

Quand vous sou­hai­ter inter­ve­nir sur de gros fichiers de don­nées, les fonc­tion­na­li­tés les plus cou­rantes (comme Recher­cher / Rem­pla­cer) ne suf­fisent pas.

C’est là qu’Open Refine (ancien­ne­ment Google Refine) se révèle par­ti­cu­liè­re­ment utile, parce qu’il per­met de faire via une inter­face gra­phique très bien fichue des mani­pu­la­tions de tables qui doivent se faire sinon via des lignes de com­mande.

Là encore, il faut accep­ter de se plon­ger dans les tuto­riels et les pages d’aide pour apprendre à effec­tuer les opé­ra­tions sou­hai­tées, mais c’est du temps bien inves­ti, croyez-moi.

Dans le cadre de ce pro­jet, je me suis ser­vi de Google Refine pour pré­sen­ter pro­pre­ment chaque don­née dont j’avais besoin :

  • l’URL de la notice Wiki­pé­dia « scra­pée »
  • l’URL du lien externe repé­ré
  • le nom de domaine du lien externe repé­ré (par exemple, slate.fr)
  • le texte du lien (sou­vent le titre de l’article)

J’ai aus­si répar­ti ces noms de domaines en deux caté­go­ries : « Actu » et « Autres » (pour tous les liens vers des sites annuaires, ins­ti­tu­tion­nels, ou per­son­nels).

C’était l’étape la plus fas­ti­dieuse : pour évi­ter d’y pas­ser la jour­née et de faire plan­ter Open Refine, je me suis limi­té aux médias cités au moins 30 fois dans l’échantillon.

Cer­tains sites dans cette liste avaient un sta­tut ambi­gu : j’ai conser­vé ceux pro­po­sant à la fois des articles et des sta­tis­tiques ou pages de réfé­rence (par exemple, Allo­ci­né), et d’exclure les purs annuaires (comme IMDB).

J’ai aus­si pra­ti­qué quelques regrou­pe­ments, pour les sites pos­sé­dant plu­sieurs sous-domaines (par exemple, en fusion­nant les liens vers www.lefigaro.fr et elections.lefigaro.fr en lefigaro.fr).

Si ça vous inté­resse d’explorer vous aus­si ces don­nées, vous pou­vez télé­char­ger l’intégralité des liens de l’échantillon ou l’intégralité des liens vers des sites de médias dans des fichiers CSV désor­mais net­toyés.

4. Dresser les classements avec Google Sheets

On approche du but : en impor­tant le CSV conte­nant tous les liens vers des sites de médias dans une feuille de cal­cul Google Sheets, il ne reste plus qu’à créer un rap­port de tableau croi­sé dyna­mique char­gé de comp­ter le nombre de liens pour chaque nom de domaine.

Cette infor­ma­tion est éga­le­ment dis­po­nible dans Open Refine, mais j’avais besoin d’une pré­sen­ta­tion par cel­lules pour pou­voir en faire un gra­phique dans la fou­lée.

(Je n’ai jamais vrai­ment com­pris com­ment fonc­tion­naient vrai­ment ces rap­ports, et je suis bien embê­té quand je dois expli­quer leur fonc­tion­ne­ment lors de for­ma­tions. Je me contente d’essayer diverses com­bi­nai­sons de lignes, de colonnes et de valeurs pour obte­nir le résul­tat sou­hai­té, ce qui finit tou­jours par arri­ver à force d’essais.)

5. Faire le graphique avec Datawrapper

Je ne sais pas s’il est pos­sible de tom­ber amou­reux d’un logi­ciel ou d’un ser­vice web, mais si c’est le cas, je dois confier une pas­sion sans doute exces­sive pour Data­wrap­per – selon moi, Mir­ko Lorenz, son pro­gram­meur,  a déjà sa place réser­vée au para­dis des déve­lop­peurs.

Un copié/collé des don­nées de Google Sheets et quelques réglages dans une inter­face mer­veilleu­se­ment bien pen­sée, et zou, le gra­phique est prêt.

6. Un tableau filtrable avec Datatables

A ma connais­sance, il existe peu d’outils acces­sibles pour pré­sen­ter de longues séries de don­nées pro­pre­ment à l’intérieur d’un article. Le plug-in JQue­ry Data­tables fait ça vrai­ment très bien, mais il faut être suf­fi­sam­ment à l’aise en HTML, en CSS et en JQue­ry pour s’en ser­vir.

J’ai donc récu­pé­ré le flux Json du Google Sheet pour bâtir dyna­mi­que­ment le tableau conte­nant les 23 014 liens vers des sites de médias, et acti­vé Data­tables une fois la table ter­mi­née.

7. Des échantillons sur des thématiques

Pour conti­nuer à explo­rer l’encyclopédie, j’ai choi­si des thèmes plus pré­cis et repé­ré des caté­go­ries (et leurs sous-caté­go­ries) de notices por­tant sur le sport, la poli­tique, la Bre­tagne et la BD.

J’ai fait subir le trai­te­ment décrit ci-des­sus aux liens externes ain­si repé­rés (ça va beau­coup plus vite la deuxième fois).

Voi­ci les don­nées récu­pé­rées, éga­le­ment dis­pos dans Google Sheet :

 

Un peu d'inspiration !

Depuis 2014, j'accompagne des médias dans leurs projets et je mène mes propres expériences. Retrouvez les réalisations dont je suis le plus fier dans un portfolio qui vous donnera envie d'innover !

Partager cet article

Lien copié !
C'est nul, je veux de gros boutons colorés !

Partager cet article

On en discute ?