Trucs et astuces

Comment je prépare le tableau de bord des sujets les plus traités par les sites d’actu

Capture d’écran d’un script Python

C’est sans doute le projet le plus ambitieux et le plus complexe que j’aie mené à bien depuis que j’ai lancé Dans mon labo il y a bientôt quatre ans. Il m’a fallu pas mal d’après-midi pluvieux et de jours fériés blafards pour terminer le tableau de bord qui liste les sujets les plus présents dans les sites d’actualité français.

Il est devenu possible grâce aux progrès que j’ai réalisés en Python, un langage de programmation prisé des datajournalistes. De mon côté, j’ai dû sérieusement m’y mettre courant 2017, notamment pour afficher en direct les résultats des élections législatives au sein de la carte interactive que j’ai préparée pour Contexte.

Pour explorer les flux XML mis à disposition par le ministère de l’Intérieur le soir des scrutins, j’ai trouvé en Python, avec sa syntaxe accessible et ses multiplies librairies disponibles, un partenaire idéal. (Mais il est aussi possible de faire ça très bien avec d’autres solutions, comme R.)

Et ces connaissances m’ont ouvert de nouveaux horizons, notamment ceux de la reconnaissance automatisée d’entités nommées. Un domaine qui, m’a-t-on expliqué, a beaucoup progressé grâce au patient travail de description et de classement réalisé par les contributeurs de Wikipedia.

J’ai d’abord travaillé, toujours pour Contexte, sur les thématiques les plus présentes dans le discours des députés pour enrichir le trombinoscope de l’Assemblée nationale que le site propose à ses abonnés. C’est alors que m’est venue l’idée de proposer une démarche comparable, mais avec les médias en ligne.

1. Scraper les flux RSS des sites d‘actu avec Python

J’ai listé, dans une Google Sheet, les sites que je souhaitais étudier, en renseignant pour chacun l’adresse de son flux RSS principal.

Mon script de scraping (dispo pour les curieux) commence par récupérer cette liste, et va chercher dans chaque flux le titre et la description (le chapô ou le début du texte) de chaque article. Il récupère aussi sa date de publication, et enregistre le tout dans un fichier Json dédié à chaque site.

Tous les flux RSS n’étant pas construits de la même façon, il a fallu prendre en compte les différents cas de figure : ainsi, le résumé de l’article se trouve dans un élément qui peut être nommé « description », « summary », « content »…

2. Créer un corpus de textes et le faire analyser par TextRazor

La suite de ce script va concaténer ensemble les titres et résumés de chaque article publiés dans une période donnée pour en faire un seul et même texte.

Ce corpus va ensuite être envoyé à TextRazor, via la librairie Python que met à disposition ce service d’analyse sémantique. Ce dernier est gratuit jusqu’à 500 requêtes par jour, un quota largement suffisant pour ce projet.

Parmi les services équivalents, TextRazor a un autre avantage : non seulement son outil d’extraction des entités nommées renvoie la liste des thématiques détectées au sein du corpus soumis, mais il fournit aussi pour chacune un score de relevance (« pertinence », que j’ai finalement traduit en « présence » dans mon tableau de bord).

Ainsi, s’il détecte les mots « GPA », « gestation pour autrui » ou « mère porteuse » dans un texte, Textrazor réunit ses expressions dans une seule thématique (en général le titre de la notice Wikipedia dédiée). Et donne à cette dernière une note, de 0 à 1, selon que l’entité lui semble plus ou moins pertinente dans le texte fourni.

C’est à la fois la force et la faiblesse de ma méthode : ce scoring me permet de générer les multiples classements, mais je n’ai pas « la main » sur son élaboration.

Malgré quelques mauvaises surprises, l’observation des résultats obtenus m’a toute fois rassuré : Le Parisien est en général le média où le thème « Paris » est le plus présent ; on retrouve souvent « Jean-Luc Mélenchon » bien classé dans les résultats de Politis ; Sputnik et RT France sont bien placés au classement pour le thème « Vladimir Poutine ».

4. Héberger les scripts sur un serveur chez PythonAnywhere

Cette partie-là du chantier serait une promenade de santé pour un développeur back-end même débutant. A un journaliste bidouilleur comme moi, elle a pris pas mal de temps et d’énergie.

Une fois le script Python décrit ci-dessus terminé, je ne pouvais pas l’exécuter moi-même plusieurs fois par jour sur mon ordinateur afin de disposer de données toujours fraîches pour alimenter un éventuel tableau de bord.

Sur les conseils d’amis développeurs, j’ai regardé plusieurs offres d’hébergement comme Amazon Web Services ou Google Cloud Platform, mais la longueur des procédures d’installation et des tutoriels proposés m’a vite refroidi. Je me suis rabattu sur Python Anywhere. un service peu onéreux et qui s’est révélé mieux adapté à un noob comme moi.

Même avec cette solution, je suis passé par mal, de guides d’utilisation, de pages d’aide et de questions Stack Overflow avant d’arriver mes fins : faire tourner mon script de scraping plusieurs fois par jour.

4. Créer le tableau de bord en front à partir d’un fichier Json optimisé

Une fois toutes ces listes de thématiques récupérées et enregistrées dans le fichier Json de chaque média, un autre script Python, lui aussi hébergé sur PythonAnywhere, va préparer un fichier Json commun et de taille réduite.

Ce dernier sera récupéré, au moment où le tableau de bord publié Dans mon labo se charge, par votre navigateur.  Au final, c’est donc Chrome, Firefox ou Edge qui va construire l’infographie à l’intérieur de la page.

Je ne détaillerais pas sur ce travail de développement front-end, classique combinaison de HTML, de CSS et de Javascript, mais si vous avez des questions sur cette partie, je serai ravi d’y répondre !

A ce stade, la principale difficulté pour moi a été de s’assurer que le chargement des données puis la construction de l’infographie se fasse dans un délai raisonnable : lors des premières étapes, le tout prenait parfois une bonne dizaine de secondes, ce qui es rédhibitoire.

Pour chaque média, j’ai choisi de ne pas intégrer une thématique si son score était inférieur à un certain seuil (en ce moment, 0,4/1), et de n’afficher une thématique dans la liste principale que si elle était présente dans au moins quatre médias.

Il m’a fallu pas mal d’allers-retours entre scripts Python sur le serveur et code Javascript dans le navigateur pour réduire ce délai et obtenir une expérience suffisamment fluide, mais il  reste sans doute pas mal d’optimisation possible.

5. Préparer la suite avec des analyses hebdomadaires et mensuelles

Comme beaucoup l’ont fait remarquer dès la publication du tableau de bord, les résultats seront intéressants à observer dans le temps, au-delà de la photographie actuelle (les sept derniers jours). Mon script réalise déjà des analyses hebdomadaires et mensuelles, qui ne sont pas affichées mais que j’espère utiliser quand j’aurais davantage de recul. (Edit le 5 octobre : des graphiques s’affichent désormais pour chaque thématique, j’y reviens dans un thread sur Twitter)

Voilà ! Je suis en tout cas curieux de savoir vos remarques, critiques ou propositions d’amélioration dans les commentaires de ce post ou bien, pour les timides, dans un message privé.

Mis à jour le 2/2 à 10h15. Précision sur les seuils (point 4) et point 5 ajouté.

Comment j’ai réalisé les cartes de France de la VO et de la VF

Comme souvent, le travail que j’ai réalisé pour ma petite enquête sur la France de la VO et celle de la VF met en jeu toute une série d’outils que j’ai découvert au fil des ans, qu’il s’agisse de scraping, de jointures de tables ou de représentation par anamorphoses. L’ensemble des données dont je me suis servi est disponible dans une Google Sheet.

Je vais en décrire les différentes étapes, ce qui peut être utile si vous souhaitez vous lancer dans un chantier comparable. N’hésitez pas à mettre votre grain de sel dans les commentaires.

1. Récupérer la liste des séances avec un scraping en deux étapes avec Outwit Hub

Pour commencer, il fallu que je me constitue une base contenant l’ensemble des salles de cinéma de France. Par chance, le site Cinefil propose des pages listant tous les cinés d’un département (par exemple, ceux situés dans l’Ain).

J’ai d’abord généré automatiquement une URL pour chaque département sur cinefil.com dans Google Sheet. J’ai ouvert cette première liste dans Outwit Hub, un logiciel de scraping qui m’a permis de rassembler une liste de 1 409 salles. Pour chacune, j’ai aussi récupéré l’URL de sa page sur cinefil.com.

Sur ces 1 409 URL, j’ai fait passer un second scraper, afin de récupérer la liste des films diffusés dans chaque salle sur une journée, avec les horaires des séances et la version diffusée (VF ou VO). J’ai obtenu ainsi une liste de 14 423 films et de 20 182 séances.

2. Déterminer la langue de tournage dans chaque film avec OMDB

Après quelques heures de travail, je me suis aperçu d’une chose toute bête mais qui m’avait échappé : sur Cinefil, les séances des films en langue française sont indiquées « en VF », ce qui ne permet pas de les différencier automatiquement des films en langue étrangère diffusés en VF…

Il a donc fallu que j’établisse une liste des 982 films différents diffusés sur toute la France ce jour-là (le 28 avril), et que je trouve un moyen de déterminer, pour chacun d’entre eux, s’il s’agit à l’origine d’un film tourné en langue française ou en langue étrangère.

L’API Omdb m’a permis de récupérer cette information dans un bon nombre de cas, par l’intermédiaire de Cloud Ignite, un module complémentaire de Google Sheet particulièrement pratique.

Pour le reste, j’ai réalisé des croisements – par exemple, un film qui n’est diffusé qu’en VO sur toute la France ne peut être qu’un film en langue étrangère – et des déductions – par exemple, une coproduction France/Suisse/Belgique a de bonnes chances d’être tournée en français.

Ce tri s’est révélé fastidieux et le résultat n’est pas garanti sans erreurs, mais j’ai estimé sa fiabilité suffisante pour continuer à avancer, en mettant de côté tous les films en langue française.

3. Géolocaliser chaque salle de cinéma avec ezGecode

J’avais déjà récupéré l’adresse et le code postal de chaque cinéma sur sa page Cinefil. Pour en déduire sa latitude et sa longitude, j’ai utilisé un autre module complémentaire de Google Sheet, ezGeocode.

La grande majorité des salles a ainsi été géolocalisée automatiquement et avec une très bonne fiabilité, et j’ai réussi à placer le reste grâce à des recherches manuelles dans Google Maps.

 4. Déterminer le code commune pour chaque salle de cinéma

Afin de « marier » la base que je me suis ainsi constituée avec les données démographiques fournies par l’Insee ou les résultats électoraux disponibles sur le site du ministère de l’Intérieur, il me fallait déterminer le code Insee de la commune où se trouve chacun des cinémas de ma liste.

J’ai pu le faire grâce à une table de correspondances et à la base officielle des codes postaux, toutes deux disponibles sur Data.gouv.fr. Une série de recherches verticales plus tard, j’avais pour chaque salle de cinéma des informations comme la population de la ville, le taux de pauvreté, le vote Macron…

Des tableaux croisés dynamiques m’ont ensuite permis de consolider les résultats pour chacune des 278 localités françaises pourvues d’au moins une salle de cinéma (avec au moins une séance programmée ce jour-là), puis pour chaque département.

5. Réaliser les deux cartes interactives avec Carto

J’ai ensuite préparé deux séries de données, l’une avec toutes les salles où la part de la VO est majoritaire (#teamvo), et l’autre avec les salles plutôt VF (#teamvf).

J’ai créé deux cartes basées sur ces jeux dans Carto, et j’ai ajouté dans chacune d’elle un calque supplémentaire, avec les contours de chaque département et une couleur en fonction de la part de la VO ou de la VF à cette échelle.

J’ai passé pas mal de temps à chercher des réglages satisfaisants pour la taille des cercles, les nuances de couleurs ou encore la répartition des départements en cinq catégories (choix des intervalles).

6. Réaliser les cartes anamorphosées avec Qgis et Scapetoad

J’avais déjà utilisé les anamorphoses (cartograms en anglais) pour une série de cartes du monde tel que le voient les médias français qui avait tapé dans l’œil de pas mal d’observateurs. J’avais envie de commencer mon article avec ce type de visiuels, que je trouve facile à appréhender même pour des lecteurs peu friands d’infographies.

J’ai récupéré un tracé des départements français au format shapefile sur OpenStreetMap.

J’ai ouvert ce fichier dans l’éditeur de cartes Qgis afin d’associer à chaque département le nombre de séances en VO et en VF pour un million d’habitants.

C’est sur la base de ces deux données que j’ai réalisé les déformations de la carte de France dans ScapeToad, un petit utilitaire dédié à la création d’anamorphoses.

7. Créer une série de graphiques dans Datawrapper

Pour terminer, j’ai repris une dernière fois mes données pour isoler une série de chiffres de synthèse afin de créer les graphiques de synthèses qui figurent à la fin de l’article, en reprenant les codes couleur.

Comment j’ai réalisé les cartes du monde selon les médias français

C’est sans doute l’expérience publiée sur ce site qui m’a donné le plus de fil à retordre. Il a fallu passer par de nombreuses et fastidieuses étapes pour arriver à la publication de la série de cartes du monde tel que le voient les médias français Dans mon labo.

Mais je suis content du rendu un peu arty de ces anamorphoses – j’ai emprunté l’idée et une partie de la méthode à Altermondes, qui en avait réalisé une à l’occasion de sa campagne de crowdfunding.

1. Scraper les résultats de recherche Google en Python

C’était la première fois que je réalisais un travail d’extraction automatique de données en concevant un script dans un langage de programmation plutôt qu’en utilisant un logiciel disposant d’une interface graphique, comme Outwit Hub.

Je me suis servi de Scrapy, un outil qui m’a beaucoup facilité la tâche, mais que je n’ai pas réussi à installer sur mon Mac (la faute à El Capitan, semble-t-il) : il a fallu ressortir un portable sous Linux pour parvenir à le lancer.

La mise au point du script m’a pris pas mal de temps, mais une fois que j’ai compris la logique, j’ai avancé relativement vite : il suffisait en effet de repérer l’endroit de la page des résultats de recherche où figure la mention « Environ x résultats ».

Le plus compliqué à été de composer avec les sécurités qui se déclenchent sur les serveurs de Google quand on le sollicite trop : même en ralentissant beaucoup le rythme du robot passant sur ces pages, je finissais toujours par voir mon adresse IP bloquée.

2. Analyser les résultats dans Google Sheets

C’est en commençant à trier et à filtrer les résultats obtenus que je me suis aperçu qu’ils n’étaient pas toujours fiables : pour certains pays, les résultats trouvés dans Google Actualités (tous médias confondus) étaient en effet ajoutés au résultats trouvés sur un média particulier…

J’ai alors tenté ma chance sur Bing, mais ce dernier ne permet pas d’effectuer une recherche combinant plusieurs termes (avec l’opérateur OR) en ciblant un nom de domaine particulier.

De retour sur Google, j’ai fini par obtenir des données cohérentes en limitant la recherche aux pages publiées lors de l’année écoulée.

Il a fallu aussi traiter quelques cas particuliers – par exemple, le mot « Canada » apparaît sur toutes les pages du Huffington Post et de Buzzfeed, ces deux sites proposant un accès vers leur édition canadienne.

Il reste sans doute de petites aberrations de ce genre dans les données utilisées pour faire les cartes, mais j’ai considéré qu’elles n’étaient pas préjudiciables, vu la taille finale des cartes et leur niveau important de déformation.

3. Ajouter les résultats obtenus à une carte du monde grâce à QGIS

Le logiciel de cartographie avancé QGIS m’a permis d’ouvrir un shapefile (fichier de contours) trouvé sur ThematicMapping et de lui associer mes propres données via des recherches verticales dans la table.

Pour que ça marche, il faut une clé commune aux deux fichiers : en l’occurence, le code ISO à trois chiffres, que j’avais pris soin d’utiliser pour chaque pays étudié – je l’ajoute désormais systématiquement à toutes mes feuilles de calcul quand elles sont basées sur des pays, une précaution qui se révèle souvent utile.

4. Réaliser les anamorphoses avec ScapeToad

Disponible sur tous les OS via Java, ScapeToad est un petit logiciel plutôt bien fichu qui va réaliser la déformation du fichier shapefile en tenant compte, pour chaque pays, d’une valeur numérique disponible dans la table associée au fichier de contours.

Le résultat peut être enregistré au format d’image vectoriel SVG, ce qui permet de l’utiliser ensuite à n’importe quelle taille.

Attention : pour une carte du monde, les temps de calcul et de sauvegarde sont importants (surtout quand il faut recommencer la manipulation vingt fois pour vingt médias différents…).

5. Améliorer le résultat dans Adobe Illustrator

Le fichier SVG obtenu peut être facilement ouvert et modifié dans Illustrator, ce qui m’a permis de changer la couleur et la transparence des pays, et de créer une version PNG utilisée pour le partage Facebook.

Une fois les vingt cartes obtenues, j’ai créé la petite infographie permettant de basculer d’un média à l’autre en HTML, CSS et JQuery. Enfin, j’ai utilisé Datawrapper pour réaliser les deux graphiques également présents dans l’article.

3 outils pour organiser le boulot d’une rédac’ web (enfin, essayer)

Image extraite du fim "Playtime” de Jacques Tati.
Image extraite du fim « Playtime” de Jacques Tati.

Avant, organiser le travail de sa rédaction, c’était simple. On accrochait les pages déjà envoyées à l’imprimeur sur un des murs, et quand ce mur était rempli, c’est qu’on pouvait aller boire un canon. Ailleurs, on listait simplement les sons ou les vidéos prêtes à être diffusés dans un conducteur, en notant leur durée et en faisant gaffe à ne pas empiéter sur l’émission qui vient après.

Et puis boum, le web est arrivé. La place est infinie, et désormais, le seul facteur limitant, c’est l’énergie des journalistes qui doivent publier les contenus. Et peu à peu, l’offre des sites d’actu s’est diversifiée, ne se limitant plus à la reprise de dépêches AFP plus ou moins enrichies.

Comment dès lors éviter le chaos et organiser le travail de son équipe, sachant que certains contenus peuvent être préparés en quelques minutes (voire en quelques secondes, s’agissant d’un tweet), quand d’autres vont prendre des jours voire des semaines ?

Le meilleur outil, c’est celui dont on se sert

Et comment s’assurer d’avoir un flux de copie assez nourri pour alimenter ces bêtes insatiables que sont les sites de flux, où l’internaute doit trouver du nouveau à se mettre sous la souris à chaque heure du jour ou de la nuit ?

Je liste ici trois outils qui peuvent vous être utiles, mais le plus intéressant sera sans doute vos propres méthodes et les témoignages que vous allez laisser dans les commentaires ci-dessous.

Gardez en tête aussi que le meilleur outil du monde, c’est celui dont on se sert. Donc si vous avez pour habitude de griffonner la liste des trucs en cours sur les dos d’une vieille enveloppe, et que tout le monde est heureux comme ça, vous n’avez sans doute pas besoin de lire la suite.

Et puis ne rêvez pas : ce n’est pas parce que vous leur mettez en place un système d’organisation que vos troupes vont spontanément s’en emparer – c’est l’effet « j’ai ouvert un Google Doc pour que tout le monde mette ses idées mais personne ne s’en sert ! »

Si vous souhaitez que le collectif adopte votre nouvel outil, c’est à d’abord à vous de vous en servir et de vous assurer qu’il soit à jour. C’est seulement au bout de quelques semaines à montrer l’exemple que vos collègues seront (peut-être) assez convaincus de l’utilité de votre « usine à gaz » qu’ils auront envie de monter à bord à leur tour.

1. Trello, de la liste des courses au projet complet

Exemple de tableau de bord Trello (cliquez pour agrandir).
Exemple de tableau de bord Trello (cliquez pour agrandir).

C’est un outil très simple à prendre en main et d’une grande plasticité : Trello peut vous servir à gérer votre liste de courses hebdomadaire comme à mener à bien un projet de nouvelle rubrique ou de refonte.

Le principe : sur un tableau de bord,  on liste toutes les tâches de l’équipe dans des colonnes qu’on peut nommer, déplacer et multiplier à volonté. Exemple sur l’image ci-dessous : sujets « possibles », « prêts à publier », « publiés » et « reportés ».

Le vrai plus de Trello, c’est qu’il fonctionne comme des poupées russes :

  • En cliquant sur une tâche principale, on peut y lister des tâches secondaires, ajouter des fichiers, des commentaires, un indicateur coloré…
  • On peut multiplier les tableaux de bord : par exemple un pour le service sports et un autre pour le service international, ou encore un pour les sujets à court terme et un autre pour les enquêtes à long terme.

2. Google Sheet, pour les amoureux des feuilles de calcul

Exemple de “backlog” réalisé avec Google Sheet.
Exemple de “backlog” réalisé avec Google Sheet.

Si vous êtes comme moi un amoureux du tableur en ligne Google Sheet, sachez que vous pouvez aussi l’utiliser comme un gestionnaire de projets, et qu’il se révèle, de façon surprenante, très efficace dans ce rôle – voir l’exemple d’un site d’étudiants en école de journalisme dont j’ai piloté le lancement, ci-dessus.

Dans ce cas, vous partagerez votre document avec tous les collaborateurs concernés, puis vous listerez un sujet par ligne de votre tableau (pensez à figer la ligne d’en-tête). Ensuite, vous aurez besoin des fonctionnalités suivantes :

  • Commentaire de cellule. Je l’ai découvert il y a peu : un fil de commentaires peut être créé pour chaque cellule d’une feuille. Les participants à cette conversation très ciblée reçoivent une notification par e‑mail à chaque nouveau post.
    Clic droit sur la cellule -> « Insérer un commentaire » dans le menu contextuel
  • Mise en forme conditionnelle. Permet, par exemple, de passer une cellule sur fond rouge si le mot « important » est détecté à l’intérieur.
    Menu Format -> Mise en forme conditionnelle
  • Tri des données. Permet de changer l’ordre des lignes selon l’une des colonnes, par exemple pour afficher les sujets marqués « importants » en premier.
    Clic droit sur la lettre de la colonne concernée, puis « Trier de A à Z »
  • Vues filtrées. Permet, par exemple, uniquement les sujets pour lesquelles la colonne « état d’avancement » est « en cours » et la colonne « priorité » est « très important ».
    Menu Données -> Vues filtrées
  • Validation des données. Permet de forcer l’utilisateur à choisir le contenu d’une cellule entre plusieurs valeurs prédéterminées, et de créer un petit menu déroulant.
    Menu Données -> Validation
  • Protection de plages. Permet de verrouiller certaines feuilles, certaines colonnes ou certaines plages de cellules, afin d’éviter que des utilisateurs patauds ne mettent le bazar dans votre bel édifice.
    Menu Données -> Feuilles et plages protégées
  • Retour à la ligne dans le texte des cellules. Par défaut, le texte d’une cellule est tronqué s’il est trop long pour la taille de cette dernière (sauf si la cellule d’à côté et vide). Mais on peut prévoir un retour à la ligne automatique. Attention tout de même, dans ce cas, la hauteur totale de votre feuille à l’écran va avoir tendance à augmenter dangereusement, et vous perdrez le côté synthétique de l’outil.
    Icône « Activer le retour à la ligne automatique” de la barre d’outils
  • Et aussi… Vous pouvez exporter une feuille au format PDF, par exemple pour communiquer l’état d’avancement à votre chef ou à toute l’équipe par e‑mail ; consulter l’historique des révisions voire revenir à une version antérieure en cas de plantade ; attribuer un identifiant unique à chaque ligne pour une meilleure traçabilité.

3. Basecamp, une belle interface pour des projets plus complexes

Capture d'écran d'une démo de Basecamp.
Capture d’écran d’une démo de Basecamp.

C’est un peu la Rolls des gestionnaires de projets : avec son design épuré et son interface aux petits oignons, Basecamp ne fait pas mal aux yeux quand on le charge et ne déroutera pas les moins agiles du clavier dans votre équipe.

Mais il n’est pas gratuit, et vous n’aurez peut-être pas besoin d’autant de fonctionnalités (calendrier, groupe d’utilisateurs, fonds de documents…) si vous ne publiez que trois articles par semaine.

Coté open source et gratuit, on peut citer Redmine, mais son interface chargée est davantage étudiée pour des développeurs, et elle risque de décourager le commun des mortels.

Voilà ! Maintenant c’est à vous de raconter vos expériences en termes d’outils et d’organisation du travail en général.

Je passe dans beaucoup de rédactions et je vois beaucoup de systèmes en place, mais souvent leurs utilisateurs n’ont pas l’air très satisfaits, je pense qu’un peu de partage d’expérience fera du bien à tout le monde.

Comment j’ai exploré plus de 500 chroniques de Bernard Guetta

La liste des chroniques de Bernard Guetta dans Google Sheet.
La liste des chroniques de Bernard Guetta dans Google Sheet.

Comme souvent pour les projets que je mène Dans mon labo, ma petite enquête autour des chroniques de Bernard Guetta sur France  Inter m’a amené à utiliser toute une panoplie d’outils. Je les passe rapidement en revue dans cet article, en espérant que ça vous aide pour vos propres travaux.

1. Récupérer le texte des chroniques avec Outwit Hub

Cette première étape a été rapide, la construction du site de France Inter le rendant très simple à « scraper ». Une page d’archives propose en effet des liens vers chacune des chroniques. Je l’ai chargée dans Outwit Hub puis ai demandé à ce dernier d’attraper toutes les URL concernés (elles contiennent toutes la chaîne de caractères « emission-geopolitique »).

Toujours dans Outwit Hub, j’ai ensuite mis au point un scraper pour extraire les éléments intéressants du code HTML de la page, à commencer par le texte. Vous pouvez télécharger cet extracteur (c’est un petit fichier XML) et l’importer dans Outwit Hub si vous souhaitez faire un travail similaire avec d’autres contenus publiés sur le site de France Inter.

2. Nettoyage des textes avec Open Refine

Les textes récupérés étaient globalement propres. Open Refine m’a cependant permis de supprimer de mon échantillon les chroniques du remplaçant de Bernard Guetta, Anthony Bellanger (classées dans la même rubrique sur le site de France Inter), ainsi que quelques entrées sans texte (correspondant à des pages vides sur le site).

J’ai également également pu retirer le code du lecteur vidéo Dailymotion parfois présent en haut des textes.

3. Décompte des pays dans Google Sheet

Une fois les données nettoyées, je les ai exportées au format CSV et importées dans le tableur Google Sheet. J’ai ajouté une feuille avec une liste des pays du monde compilée par Wikipedia.

Dans cette deuxième feuille, j’ai pu chercher, grâce à la fonction COUNTIF, les occurences de chaque pays dans la colonne concernée de la première feuille.

J’ai fait quelques tests et passé en revue la liste pour traiter quelques cas particuliers. Par exemple, pour la Birmanie, le mot Myanmar est parfois utilisé ; le Nigéria est parfois écrit « Nigeria » ; le mot Congo peut désigner deux pays, le Congo-Brazzaville ou le Congo-Kinshasa : le mot Hollande est un pays mais aussi un président français…

Il n’est d’ailleurs pas exclu qu’il reste des erreurs après ce traitement, n’hésitez pas à me contacter si vous pensez en avoir décelé.

4. Croisement avec les données de la Banque mondiale

Un module complémentaire de Google Sheet m’a permis de traduire automatiquement les cellules contenant le nom du pays du français vers sa version anglaise.

J’ai récupéré la liste des codes ISO à trois caractères des pays du monde, et grâce à la fonction VLOOKUP, j’ai pu attribuer le bon code ISO à chaque pays de ma propre liste, non sans une série de corrections « à la main ».

Le tout est un peu fastidieux, mais quand cette manipulation fini, c’est magique : avec comme clé commune le code ISO, il devient facile de croiser un tel fichier avec des centaines d’autres disponibles sur le Web.

Le site de la Banque mondiale contient ainsi des séries de données sur beaucoup d’indicateurs : population, superficie, PIB… Et le tableau qu’on télécharge contient aussi le code ISO, la fonction VLOOKUP permet donc de faire le rapprochement automatiquement et sans risque d’erreur.

Exemple de nuage de points dans Google Sheet
Exemple de nuage de points dans Google Sheet

J’ai ensuite utiliser la fonction CORREL de Google Sheet pour chercher très facilement des corrélations (par exemple entre la population d’un pays et le nombre de fois où il est cité) d’une colonne de mon document à l’autre.

5. Réalisation de la carte avec TileMill

Je ne vais pas m’étendre sur cette partie du travail, d’autant que TileMill n’est plus maintenu – il est censé être remplacé par Mapbox Studio, logiciel que j’ai testé et que je n’aime pas trop.

je suis parti du shapefile contenant les délimitations de chaque pays (y compris les zones contestées, comme le Somaliland ou le Sahara occidental, ce qui peut être source de problèmes), et j’ai pu insérer dans le fichier DBF associé des colonnes contenant mes propres données – non sans mal.

L’avantage de TileMill, c’est qu’il permet de une configuration très précise de la carte, des couleurs avec lesquelles « colorier » les pays au design des info-bulles, en passant par le niveau de détails souhaité à chaque niveau de zoom.

L’inconvénient, c’est que tout ça prend beaucoup de temps, au point que je ne sais pas si je recommanderai un outil aussi sophistiqué pour un travail plus régulier au sein d’une rédaction.

J’ai l’impression qu’aucune solution de cartographie actuelle ne donne pleinement satisfaction quand on est plus un bricoleur qu’un développeur, mais vous avez peut-être de bons tuyaux à échanger dans les commentaires.

La carte créée dans TileMill s’exporte facilement dans un compte Mapbox, depuis lequel on récupère le code d’intégration, sous forme d’iframe et avec quelques options intéressantes, comme la désactivation du zoom via la molette de la souris.

6. Etude des textes avec le logiciel de lexicométrie TXM

C« était la partie la plus nouvelle pour moi dans ce processus : tester des outils de lexicométrie. Le sociologue Baptiste Coulmont, que je remercie au passage, m’a conseillé sur Twitter d’essayer TXM, logiciel prisé des chercheurs dans ce domaine.

J’ai dû passer par pas mal de tutoriels et de guides, pour apprendre par exemple à « étiqueter » un corpus de texte, afin de trier les mots entre adjectifs, adverbes, verbes… Au passage, j’ai appris des mots rigolos comme « hapax » ou « lemmatisation ».

Les fonctionnalités qui m’ont le plus bluffé sont l’affichage des concordances (les mots qui précèdent ou suivent chaque occurence d’un mot donné du texte) et celle des cooccurrences (les mots qui se retrouvent souvent au voisinage d’un mot donné du texte).

Mais si les possibilités de cet outils semblent passionnantes, je recommande pas mal de patience à ceux qui veulent s’y coller.

7. Réalisation des graphiques avec Datawrapper

Pas grand chose à signaler ici : j’ai préparé mes tableaux dans Google Sheet, je les ai copiés/collés dans Datawrapper et j’ai pu fignoler la présentation des graphiques que vous avez vus.

Précision : l’intégration d’un graphique sur son propre site requiert désormais la souscription à un abonnement payant, décision que lequel Mirko Lorenz a expliquée sur le blog de la société.

Voilà ! Il y avait sans doute bien plus simple pour arriver au même résultat, et je compte d’ailleurs sur vos conseils dans les commentaires ci-dessous.

Je ne peux publier le corpus sur lequel j’ai travaillé (ce serait une forme de reproduction sans autorisation des textes), mais vous pouvez télécharger une synthèse par pays ou bien me contacter pour obtenir l’ensemble de mes données.

5 outils qui vont vous aider à sortir le scoop de l’année

Dustin Hoffman et Robert Redford dans « Les Hommes du président »
Dustin Hoffman et Robert Redford dans « Les Hommes du président »

Imaginez la scène. Un homme vous a contacté et donné rendez-vous au dernier sous-sol d’un parking mal éclairé. En jetant des regards par dessus son épaule, les doigts tremblants, il vous confie un gros disque dur, en expliquant qu’il y a là-dedans des documents explosifs pour la multinationale dans laquelle il travaille. Puis il disparaît sans demander son reste.

Vous voilà en possession de données qui seront, peut-être, à l’origine du scoop de votre carrière. Tout journaliste web a rêvé de vivre un tel moment – d’ailleurs, Edward, si jamais tu passes par ici, sache que j’ai une clé PGP, moi, pas comme cet étourdi de Glenn Greenwald.

Problème : « Il est rare qu’un lanceur d’alertes se pointe après avoir rassemblé toutes les informations utiles aux journalistes dans un texte de quinze pages », a rappelé le spécialiste en datajournalisme Friedrich Lindenberg lors de son intervention au Festival de journalisme de Pérouse la semaine dernière.

C’est plus probablement dans un fatras de milliers de documents au format PDF, Excel, Word, Powerpoint et leurs équivalents qu’il va vous falloir fouiller, si vous voulez y dénicher l’information exclusive qui vous vaudra la gloire.

Heureusement, de plus en plus d’outils existent pour vous aider dans ce genre de situations, souvent mis au point pour les journalistes à l’occasion des précédentes fuites de grande ampleur. Lindenberg en a décrit six, que voici :

  • DocumentCloud pour héberger les données et gérer leur accès
Capture d'écran du site de de DocumentCloud.
Capture d’écran du site de de DocumentCloud.

Plutôt que naviguer à l’aveugle dans le disque dur qu’on vous a refilé, avec le gestionnaire de fichiers de Windows ou de Mac OS, DocumentCloud permet de stocker l’ensemble des documents, de les parcourir plus confortablement, de les annoter et même de les intégrer ensuite à vos articles.

Comme vous risquez d’avoir besoin d’aide dans vos démarches, vous pourrez aussi donner accès à vos précieux fichiers à d’autres utilisateurs ou groupes d’utilisateurs, en gérant finement les autorisations des uns et des autres.

Pour créer votre compte sur ce service, il vous faudra cependant demander un accès à l’équipe qui a fondé ce service, en présentant votre projet. Une fois installé, DocumentCloud peut aussi servir à centraliser les documents utilisés par toute votre rédaction, et peut-être opérer des rapprochements entre deux enquêtes séparées.

Attention quand même : si vos documents sont vraiment explosifs, du genre à faire sauter la République, vous éviterez d’utiliser ce service directement en ligne, mais vous l’installerez plutôt « en local », soit sur votre ordinateur seulement – sachant que dans un cas pareil, bien d’autres précautions s’imposent.

  • Overview pour faire parler les gros ensembles de documents
Capture d'écran du site d'Overview.
Capture d’écran du site d’Overview.

L’outil a été mis au point à l’origine par l’agence AP et la Knight Foundation pour explorer les documents de l’armée américaine sur la guerre en Afghanistan diffusés par Wikileaks.

Ses algorithmes opèrent des rapprochements entre les concepts qu’il a détecté dans les millions de fichiers que vous lui avez fait avaler (jusqu’aux sons au format MP3), en créant des liens entre ces différents clusters. Pour explorer les e‑mails piratés de Sony, Overview se révèle ainsi beaucoup plus efficace que l’outil mis en ligne par le site de Julian Assange.

Il permet aussi de taguer vos recherches pour les retrouver plus facilement, et propose plusieurs modes de visualisation. « L’équipe qui s’en occupe est très intéressée par les nouveaux outils d’analyse et les nouveaux challenges, explique Lindenberg. Ils vous aideront dans vos recherches, et peuvent améliorer une fonctionnalité en quelques heures seulement. » Overview peut aussi être installé en local.

  • Crowdata pour que les internautes vous aident dans votre quête
Capture d'écran du site de Vozdata.
Capture d’écran du site de Vozdata.

Après avoir passé vos week-ends et vos nuits à chercher la pièce maîtresse perdue dans le gros tas d’octets qu’on vous a mis sur les bras, vous avez un coup de mou ? Il est temps de demander à Internet de vous venir en aide.

Crowdata est l’outil qui a servi au quotidien argentin La Nacion à lancer Vozdata, une opération de crowdsourcing pour laquelle chaque internaute était invité à examiner un des 6 500 documents comptables fournis par les sénateurs afin y chercher d’éventuelles irrégularités. Inventeur de cet exercice de transparence, le Guardian le reproduit chaque année pour les notes de frais des députés britanniques.

Crowdata peut se brancher directement sur DocumentCloud, pour vous faciliter encore la tâche. Mais vous aurez sans doute besoin de l’aide d’un développeur pour l’installer, et faire de tous vos lecteurs deds enquêteurs en pantoufles.

  • Tabula  pour extraire des tableaux dans des documents PDF
Capture d'écran du site de Tabula.
Capture d’écran du site de Tabula.

Souvent utilisé pour la diffusion d’études ou de rapports, le PDF est un format qui empoisonne la vie des datajournalistes, parce qu’il n’est pas vraiment conçu pour qu’on puisse réutiliser les divers éléments composant un document.

Avec Tabula, il suffit de sélectionner le tableau qui vous intéresse pour les lignes et les colonnes et les manipuler dans un tableur. Selon Lindenberg, Tabula est l’une des meilleures solutions pour cette tache, mais elle n’est pas parfaite : des décalages entre les colonnes peuvent apparaître et corrompre votre série de données.

C’est pour ça qu’il teste souvent plusieurs outils pour un même tableau, avant d’opter pour celui qui s’en sort le mieux (selon mon expérience, Adobe Acrobat fait ça plutôt bien, mais il est payant).

  • Aleph pour croiser vos données avec d’autres sources
Capture d'écran du site d'Aleph.
Capture d’écran du site d’Aleph.

Pour tirer cette affaire au clair, vous aurez peut-être besoin de croiser vos précieux fichiers avec d’autres sources existantes. C’est ce que propose Aleph, outil encore expérimental mais avec lequel vous pouvez jouer pour chercher si la personnalité ou l’entreprise sur laquelle vous travaillez apparaît ailleurs, grâce à des représentations graphiques.

Utiliser davantage le recoupement avec des bases déjà en lignes, c’est devenu « la croisade personnelle » de Lindenberg :

« Il faut que les journalistes d’investigation acceptent de dire à des gens comme moi qui sont les personnes ou entreprises qui les intéressent, cette information restant confidentielle, bien sûr.

Dès que j’ai cette liste, je peux mener des recherches dans une grande quantité de documents déjà publiés, et activer des notifications dès qu’une nouvelle correspondance est trouvé. Mais les journalistes ne lâchent pas facilement ce genre d’info, il faut encore que je trouve un moyen de les convaincre. »

7 fautes de français qui n’en sont pas, en fait

J’aurais pu titrer cette note « Confessions d’un emmerdeur ». Après ma sortie d’école de journalisme, j’ai été pendant plusieurs années secrétaire de rédaction, un travail qui comprend en général beaucoup de relecture de copie ou de pages.

Un TOP ou un Grevisse à portée de main, j’ai découvert quelques-unes des subtilités de la langue française, désuètes ou charmantes selon le point de vue.

Le problème avec ce type d’occupation professionnelle, c’est qu’elle tend à faire de vous un ayatollah, corrigeant par réflexe les fautes de ses amis à l’oral, et capable de partir en guerre sainte contre les impies qui enchaînent les solécismes sans réaliser l’horreur de leur sacrilège.

Mes années passées à bosser sur le Web m’ont profondément adouci. D’abord parce que relever une faute dans un article qui peut être corrigé, c’est moins douloureux, pour le lecteur comme pour l’auteur, que de la voir imprimée pour l’éternité.

Ensuite parce que j’ai découvert qu’il y avait deux sortes d’internautes qui signalaient les fautes d’orthographe :

  • ceux qui n’ont que mépris pour le journaliste coupable d’un faux pas,  « alors que c’est quand même votre métier d’écrire », et y voient la preuve définitive de votre incurable incompétence ;
  • ceux qui s’excusent vraiment de vous déranger, « mais il manque un mot dans le titre de l’article, je sais, je suis un peu obsessionnel et vous devez avoir d’autres chats à fouetter, encore pardon ».

Avec le temps et sauf misanthropie profonde, vous avez assez vite envie d’appartenir à la seconde catégorie plutôt qu’à la première.

Enfin, la fréquentation des blogs et forums spécialisés comme des ouvrages de référence m’a enseigné que dans bien des cas, il n’y a pas de règles implacables mais une série d’exceptions et de sous-exceptions.

Vous pouvez passer vos soirées à apprendre la dizaine de pages consacrées à l’accord du participe passé des verbes pronominaux que compte le TOP. Ou bien vous pouvez décider que vous avez mieux à faire de votre vie.

Mais le pire, c’est quand j’ai appris que certaines des règles que je chérissais tant étaient parfois discutables, d’autres fois à côté de la plaque. En voici un rapide florilège, que vous aurez sûrement à cœur de compléter ou de critiquer dans les commentaires.

1. « Par contre » est tout à fait correct

Martine Rousseau et Olivier Houdart, correcteurs au Monde.fr, le rappelaient déjà dans leur blog Sauce piquante en 2007 :

  « La locution “par contre”, malgré les attaques récurrentes dont elle est l’objet […] est tout à fait correcte. »

Portrait de Voltaire, auteur inconnue (Gallica.bnf.fr)
Portrait de Voltaire, auteur inconnu (Gallica.bnf.fr)

Un wikipédien véhément l’a d’ailleurs fait retirer de la notice Fautes de français destinée aux contributeurs de l’encyclopédie en ligne. « Par ailleurs » et « par avance » sont corrects, pourquoi pas « par contre », argumente-t-il.

« C’est une double préposition : c’est ça le problème, un problème de grammaire », réplique Rara dans un commentaire de cet article – preuve que les contempteurs du « par contre » n’ont pas déposé les armes. 

C’est paraît-il Voltaire qui est entré en guerre contre « par contre », et c’est donc la faute à Voltaire si je l’ai tant de fois remplacé par « cependant » ou « en revanche ».

Sur Langue-fr.net, on lira avec intérêt un décryptage de ce curieux ostracisme, défendu par Littré mais combattu par Grevisse :

« C’est plutôt une affaire de sociolinguistique : employer “en revanche” plutôt que “par contre” dénote l’appartenance culturelle à un milieu maîtrisant un code social, celui de l’expression — un code dont l’emploi est un signe de reconnaissance implicite pour “ceux qui savent”. »

Si vous écrivez « par contre » dans votre texte, vous rejoindrez un club qui compte notamment « Tocqueville, Stendhal, Maupassant, Gide, Giraudoux, Saint-Exupéry, Malraux, Bernanos, De Gaulle » parmi ses membres. Il y a pire compagnonnage.

2. On peut écrire « autant pour moi » si on veut

C’est l’un des sujets les plus polémiques sur les forums dédiés à la langue française. Beaucoup soulignent l’origine militaire de l’expression : si l’officier dirigeant un exercice se trompe dans ses consignes, il va demander à sa troupe de revenir « au temps » initial de la manœuvre, « pour moi » parce que c’est lui, et non les exécutants, qui s’est trompé.

Mais cette explication est elle-même contestée, et puis après tout,  si l’expression « autant pour moi » s’est imposée au fil du temps, c’est parce qu’elle a tout autant de sens que sa variante.

Je le confesse, j’aime bien écrire « au temps pour moi », par pure coquetterie. Mais je respecte et apprécie les partisans du camp d’en face.

3. « Une auteure », « une écrivaine », « une entraîneure »… et pourquoi pas ?

Il y a quelques années, croiser l’expression « une auteure » ou « une écrivaine » dans un texte me faisait pleurer des larmes de sang.

Mais alors que les combats féministes sont de mieux en mieux relayés dans la société ou sur les réseaux sociaux, j’avoue être en panne d’arguments contre vous si vous écrivez votre amour pour « l’écrivaine George Sand » ou votre respect envers Corinne Diacre, « première entraîneure d’une équipe de foot professionnelle française ».

Et je suis plutôt content d’utiliser une langue qui vit et évolue, plutôt qu’une collection de règles figées pour l’éternité dans quelque vieux grimoire de l’Académie française.

Je n’en suis pas à accorder chaque mot avec des tirets (« motivé-e‑s ») ou à prôner la règle de proximité pour l’accord de l’adjectif – quoique l’usage actuel n’ait rien de bien satisfaisant intellectuellement, qui oblige  à écrire : « Trois millions d’infirmières et un médecin se sont retrouvés dans la rue pour manifester. »

Quand je travaillais à Rue89, on s’était donné comme règle de ne pas en avoir, et de laisser l’auteur d’un article choisir de féminiser ou non certains mots, selon ses convictions personnelles. De même, Rue89 pouvait être du féminin ou du masculin selon le contexte (« le site d’information Rue89 » mais « les riverains de la Rue89 », par exemple).

4. Oui, on peut « supporter » une équipe de foot

Si j’avais gagné un centime d’euro à chaque fois que j’ai lu un tweet ou un commentaire dénonçant l’emploi du mot « supporter » au sens de « soutenir » dans un article sur le sport, j’aurais sans doute assez d’argent pour offrir des cours de français aux auteurs de ces réclamations.

« Supporter » figure pourtant bien dans le dictionnaire du CNRTL avec cette définition : « aider activement, donner son soutien moral ou matériel à » et « encourager, soutenir ». Avec un exemple d’emploi qui date de 1897.

Si j’essaie de ne pas recourir trop souvent aux anglicismes pour privilégier – quand c’est possible et que ça ne nuit pas à la compréhension – leur équivalent français, j’ai tendance à penser que leur traque systématique finit par ressembler au chantier d’un barrage contre le Pacifique.

Ou alors, pour faire bonne mesure, il faut aussi chasser les mots « algorithme » (qui vient de l’arabe), « bivouac » (emprunté à l’allemand) et « albinos » (d’origine espagnole). Bon courage.

5. Paris est belle et Paris est beau

Les noms de ville sont-ils féminins ou masculin ? Vous pouvez essayer de trouver une règle, ce qui vous amènera à des acrobaties comme celles repérées par Francaisfacile.com :

 « Quelques linguistes suggèrent parfois de se référer à la dernière syllabe : le nom d’une ville est en effet souvent féminin si ce nom se termine par une dernière syllabe muette (comme par exemple : Bruxelles, Rome), alors qu’il est souvent masculin si ce nom se termine par une dernière syllabe sonore (comme par exemple : Dakar, Oslo).

Toutefois, cela pourrait conduire à de mauvaises interprétations (par exemple : “La Nouvelle-Orléans” est féminin alors que la dernière syllabe est sonore).

D’autres linguistes suggèrent parfois de se référer à la dernière lettre : le nom d’une ville est en effet souvent féminin si ce nom se termine par une voyelle (comme par exemple : Rome), alors qu’il est souvent masculin si ce nom se termine par une consonne (comme par exemple : Dakar, Paris).

Toutefois, cela pourrait également conduire à de mauvaises interprétations (par exemple : “La Nouvelle-Orléans” est féminin alors que la dernière lettre est une consonne). »

Ou alors, vous vous souvenez que selon Tino Rossi, Paris est la « reine du monde » et que personne n’a embêté René Clément pour avoir titré son film « Paris brûle-t-il ? ». Et vous décidez de faire comme ça vous chante. Un peu de liberté langagière ne fait jamais de mal.

6. Pour « impacter » et « prioriser », le combat est déjà perdu

On est d’accord, « impacter » n’est pas un très joli mot. Il a cependant le mérite d’être efficace : on peut lui préférer « avoir des conséquences sur », par exemple, mais c’est un chouïa plus long (edit : “affecter » fait très bien l’affaire, me suggère Emmanuelle Ducros, journaliste à L’Opinion). Et « impacter » est désormais dans le Larousse.

Même chose pour « prioriser », que le Robert accueille désormais dans ses pages (plus prudent, le CNRL le donne parmi les synonymes possibles sans en avoir fait une entrée dans son lexique).

Je propose de cesser les hostilités contre ceux qui utilisent ces deux mots, et de concentrer le feu contre ceux qui s’obstinent à « pallier à un problème » et ceux qui utilisent le subjonctif après « après que ». Ceux-là méritent vraiment notre châtiment.

7. Lamartine aimait bien « le jour d’aujourd’hui »

Le combat contre l’abominable expression « au jour d’aujourd’hui » ne date pas du jour d’aujourd’hui, justement. Pierre Larousse s’échinait déjà à lui faire un sort dans son Grand dictionnaire du XIXe siècle, paru en 1864. Le texte est savoureux :

« Cet adverbe, composé de cinq mots, “à le jour de hui”, est peut-être l’exemple le plus frappant du principe d’agglutination suivant lequel se sont formés un grand nombre de mots de notre langue. […]

Hui” était évidemment suffisant pour rendre l’idée exprimée par le latin “hodie” ; mais, par une des redondances si fréquentes dans notre ancienne langue, on ajouta à cet adverbe les mots “au jour de”, et l’on eut “au jour de hui”, “aujourd’hui”.

Et ce pléonasme ne suffisant pas encore au peuple, il dit “au jour d’aujourd’hui”, comme nous le montre Vadé [un chansonnier de l’époque, ndlr] : “Les garçons du jour d’aujourd’hui savent si bien emboiser les filles que je devrions en être soules.”

Cependant Lamartine a su employer cette locution vicieuse avec une poétique énergie : “Dans ce cercle borné, Dieu t’a marqué ta place. / L’univers est à lui. / Et nous n’avons à nous que le jour d’aujourd’hui.”

Il nous souvient même avoir entendu de nos propres oreilles “au jour du jour d’aujourd’hui”. N’est-ce pas ici le cas de dire : quand on prend du galon, on n’en saurait trop prendre ?

Voilà comment nous rendons, par une accumulation de mots que nos pères exprimaient par un monosyllabe. Qu’on vienne donc nous dire maintenant que le progrès consiste à simplifier. »

C’est vrai qu’à part chez Lamartine, on peine à trouver un usage élégant de « au jour d’aujourd’hui ». Mais après tout, comme le montre Larousse, « aujourd’hui » est déjà un pléonasme. Peut-être finirons-nous par apprendre à aimer « au jour d’aujourd’hui »,  qui écorche encore les oreilles cent cinquante ans plus tard ?

(Merci à l’intraitable Emmanuelle Bonneau, journaliste à Rue89 qui m’a soufflé quelques-uns des exemples de cet article.)

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

Pour réaliser le Top 50 des sites d’info les plus cités sur Wikipedia, j’ai utilisé une série d’outils dont je m’étais parfois déjà servi dans d’autres projets :

  • J’ai repéré des séries de notices intéressantes grâce à l’outil CatScan proposé par Wikipédia.
  • J’ai utilisé des techniques de data scraping pour parcourir automatiquement des milliers de notices avec l’extension Firefox Outwit Hub.
  • J’ai nettoyé les résultats obtenu grâce à Open Refine.
  • J’ai dressé les classements avec Google Sheets, le tableur de Google Drive.
  • J’ai réalisé les graphiques avec Datawrapper.
  • J’ai présenté les tableaux de façon interactive avec le plug-in JQuery Datatables.

Comme chacun de ces services peut vous intéresser, je reviens pas à pas dans cet article sur la méthode utilisée, en donnant des liens vers les fichiers de données obtenues.  N’hésitez pas à réutiliser ces dernières pour d’autres travaux, et tenez-moi au courant de vos trouvailles dans les commentaires.

A plusieurs reprises, j’ai fait des choix qui m’ont semblé cohérents avec l’objectif de ce projet. Que vous soyez wikipédien ou journaliste, vous aurez sans doute envie de les discuter, ce que je vous encourage fortement à faire, je suis là pour ça.

1. Bâtir un échantillon avec CatScan

La première difficulté, c’était de trouver une série de notices Wikipédia pertinentes.

J’ai d’abord pensé à programmer Outwit Hub pour en collecter de façon totalement aléatoires, en utilisant par exemple le lien « Explorer au hasard » de l’encyclopédie. Mais mon « robot » s’est vite perdu dans des fiches sans lien avec l’actualité ou dans diverses pages de listes.

J’ai alors découvert CatScan et je m’en suis servi pour obtenir les liens de notices figurant dans toute une série de catégories et sous-catégories. En partant la catégorie Evenement de Wikipédia, j’ai sélectionné les sous-catégories suivantes (elles-mêmes divisées en une multitude de sous-catégories :

  • Evénement en cours
  • Evénement à venir
  • Evénement récent
  • Journée commémorative ou thématique
  • Massacre
  • Evénement historique en météorologie
  • Salon
  • Marche
  • Controverse
  • Festival

CatScan m’a renvoyé une liste de 16741 notices (sur un total de plus de 1,6 million publiés sur la Wikipédia en français, soit environ 1%) sur des sujets très variés. La taille de cette liste m’a paru suffisante – au-delà, les différents logiciels dont je me suis servi n’aurait de toute façon pas pu fonctionner correctement.

2. Programmer un scraper avec Outwit Hub

Bien que l’interface de ce logiciel de scraping soit intimidante (euphémisme), Outwit Hub n’est pas si compliqué à utiliser, une fois qu’on a digéré les tutoriels de base. Il suffit d’identifier où se trouvent dans le code source les informations qu’on recherche et comment elles sont structurées en langage HTML.

En l’occurrence, les liens se trouvant dans les parties qui m’intéressaient (« Notes et références » et « Voir aussi » notamment) sont dans des balises liens (« a ») portant la classe CSS « external text ».

Capture d’écran 2014-09-10 à 19.16.20
Capture d’écran de Outwit Hub

Il suffit alors de créer un « extracteur »,en indiquant à Outwit Hub les chaînes de caractères se trouvant juste avant et juste après l’information ciblée.  Par exemple, pour l’URL externe :

<a class="external text" href="

et

">

Pour extraire plusieurs informations à la fois (l’URL, mais aussi le nom de domaine et le texte du lien), j’ai cependant dû construire une expression régulière. Sans vous faire un cours complet sur ces trucs-là (ce dont je serais bien incapable), sachez qu’on les croise un peu partout (de Yahoo Pipes à Adobe Indesign en passant par les différents languages de programmation).

Pour un non-développeur, c’est un peu pénible à apprendre, mais ça rend bien des services, ça en vaut donc la peine.  Après avoir pas mal transpiré, j’ai fini par bâtir l’expression suivante (sûrement perfectible, d’ailleurs) :

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

Outwit Hub était alors paré pour le moment le plus agréable du projet, celui où l’ordinateur travaille à votre place : il a suffit de lui demander de passer cet extracteur sur chaque page de l’échantillon, puis d’exporter tous les résultats obtenus dans un gros fichier CSV (20 Mo).

3. Nettoyer les résultats avec Open Refine

Quand vous souhaiter intervenir sur de gros fichiers de données, les fonctionnalités les plus courantes (comme Rechercher / Remplacer) ne suffisent pas.

C’est là qu’Open Refine (anciennement Google Refine) se révèle particulièrement utile, parce qu’il permet de faire via une interface graphique très bien fichue des manipulations de tables qui doivent se faire sinon via des lignes de commande.

Là encore, il faut accepter de se plonger dans les tutoriels et les pages d’aide pour apprendre à effectuer les opérations souhaitées, mais c’est du temps bien investi, croyez-moi.

Dans le cadre de ce projet, je me suis servi de Google Refine pour présenter proprement chaque donnée dont j’avais besoin :

  • l’URL de la notice Wikipédia « scrapé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 (souvent le titre de l’article)

J’ai aussi réparti ces noms de domaines en deux catégories : « Actu » et « Autres » (pour tous les liens vers des sites annuaires, institutionnels, ou personnels).

C’était l’étape la plus fastidieuse : pour éviter d’y passer la journée et de faire planter Open Refine, je me suis limité aux médias cités au moins 30 fois dans l’échantillon.

Certains sites dans cette liste avaient un statut ambigu : j’ai conservé ceux proposant à la fois des articles et des statistiques ou pages de référence (par exemple, Allociné), et d’exclure les purs annuaires (comme IMDB).

J’ai aussi pratiqué quelques regroupements, pour les sites possédant plusieurs sous-domaines (par exemple, en fusionnant les liens vers www.lefigaro.fr et elections.lefigaro.fr en lefigaro.fr).

Si ça vous intéresse d’explorer vous aussi ces données, vous pouvez télécharger 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ésormais nettoyés.

4. Dresser les classements avec Google Sheets

On approche du but : en important le CSV contenant tous les liens vers des sites de médias dans une feuille de calcul Google Sheets, il ne reste plus qu’à créer un rapport de tableau croisé dynamique chargé de compter le nombre de liens pour chaque nom de domaine.

Cette information est également disponible dans Open Refine, mais j’avais besoin d’une présentation par cellules pour pouvoir en faire un graphique dans la foulée.

(Je n’ai jamais vraiment compris comment fonctionnaient vraiment ces rapports, et je suis bien embêté quand je dois expliquer leur fonctionnement lors de formations. Je me contente d’essayer diverses combinaisons de lignes, de colonnes et de valeurs pour obtenir le résultat souhaité, ce qui finit toujours par arriver à force d’essais.)

5. Faire le graphique avec Datawrapper

Je ne sais pas s’il est possible de tomber amoureux d’un logiciel ou d’un service web, mais si c’est le cas, je dois confier une passion sans doute excessive pour Datawrapper – selon moi, Mirko Lorenz, son programmeur,  a déjà sa place réservée au paradis des développeurs.

Un copié/collé des données de Google Sheets et quelques réglages dans une interface merveilleusement bien pensée, et zou, le graphique est prêt.

6. Un tableau filtrable avec Datatables

A ma connaissance, il existe peu d’outils accessibles pour présenter de longues séries de données proprement à l’intérieur d’un article. Le plug-in JQuery Datatables fait ça vraiment très bien, mais il faut être suffisamment à l’aise en HTML, en CSS et en JQuery pour s’en servir.

J’ai donc récupéré le flux Json du Google Sheet pour bâtir dynamiquement le tableau contenant les 23 014 liens vers des sites de médias, et activé Datatables une fois la table terminée.

7. Des échantillons sur des thématiques

Pour continuer à explorer l’encyclopédie, j’ai choisi des thèmes plus précis et repéré des catégories (et leurs sous-catégories) de notices portant sur le sport, la politique, la Bretagne et la BD.

J’ai fait subir le traitement décrit ci-dessus aux liens externes ainsi repérés (ça va beaucoup plus vite la deuxième fois).

Voici les données récupérées, également dispos dans Google Sheet :