5 juin 2020
Photo Mathieu Delmestre, CC BY-NC-ND 2.0 (source)
Après mon précédent article où j'analysais les personnes et les listes candidates aux élections municipales (vous vous souvenez, c'était avant les événements), j'ai été pris par l'envie de refaire des statistiques politiques, cette fois-ci en regardant le comportement des députés sur Twitter. Ç'a été surtout un prétexte pour bricoler avec l'API du réseau social, mais j'ai quand même pu sortir quelques beaux camemberts et autres histogrammes (diagrammes bâtons, toi-même tu sais).
Première étape, récupérer les comptes Twitter des députés. Le site de l'Assemblée nationale ne les recense pas sur les fiches individuelles de chaque député, mais je trouve mon bonheur avec le projet Arcadie qui est une base d'informations sur les parlementaires français. Pour chaque député, outre des informations politiques, on trouve les réseaux sociaux où il est présent.
Il est aisé à partir de là de récupérer l'information avec une petite moulinette en Python qui va aller gratter le site. C'est du web scraping, je vous renvoie vers l'article sur les municipales pour les détails techniques, y'a rien qui change. Deux constats à ce stade : tous les députés n'ont pas de compte Twitter (du moins référencé) et certains députés ont changé de pseudonymes sur Twitter par rapport à ce qui est renseigné, ce qui se traduit par des erreurs dans la collecte.
Sur ce dernier point, les changements de pseudonymes sont souvent cosmétiques et témoignent souvent d'une époque pré-politique, ou alors d'un temps où le député était encore simple militant. Par exemple, Sacha Houlié, qui s'est inscrit sur Twitter en 2011 comme @Sach_He et s'est depuis sobrement renommé @SachaHoulie, ou Frérique Tuffnell qui était inscrite depuis 2012 sur le site sous le nom @PollenIIF (?) avant de créer un second compte @Tuffnell17 en mai 2017 et de mettre le premier en privé. Probablement une mesure de précaution pour prévenir le déterrage de vieilles publications trop insouciantes.
Pas de panique néanmoins, et on parvient sans trop de mal à retrouver la trace de tout le monde et à faire les quelques corrections nécessaires. Ce qui nous permet de donner les premiers chiffres : sur 577 députés, 550 ont un compte Twitter. Sur ces 550, une députée (Frédérique Meunier, LR) a son compte en privé, ce qui est étonnant dans une optique de communication. Impossible de savoir s'il est toujours actif.
Les députés qui n'ont pas de compte Twitter ont en moyenne 62 ans, alors que la moyenne d'âge des députés est de 51 ans. L'orientation politique ne semble pas jouer un rôle prévalent dans cet état de fait.
Il est possible à présent de récupérer quelques informations sur ces comptes : nombre de followers, abonnements, date de création, etc. On pourrait se dire « rien de plus simple, il suffit de faire comme d'habitude et extraire les informations directement depuis le site ». Sauf que, si les sites que nous avons visité jusque là était aisés à déconstruire pour en sortir les informations utiles, ce n'est pas le cas de Twitter.
Comprenez bien : Twitter, visuellement, il y a rien à redire (et encore une fois, c'est pas moi qui vais donner des leçons de web design). Mais sous le capot, c'est une horreur. Et je suis certain que c'est fait délibéremment pour dissuader de scraper le site sauvagement. Voyez plutôt :
Au-dessus, l'interface du compte Twitter de Christian Jacob, avec un résumé des informations utiles. Notez par exemple le nombre d'abonnés.
Et ici, le code de cette interface, avec des informations complètement noyées dans une hiérarchie absconse de balises HTML avec des noms sans aucun sens. Les termes « 10,1 k abonnées » sont scindés dans deux blocs span
distincts, sans trop de justification technique.
Pour remédier à cela et si on veut se simplifier la vie à l'avenir, une seule solution : utiliser l'API de Twitter. J'avais déjà évoqué la notion d'API sans trop la définir dans l'autre article, je vais la détailler ici. Une API, c'est une interface standardisée à destination des développeurs par laquelle vous pouvez utiliser un service. Cette API, dans le cas de Twitter, va permettre de récupérer toutes les informations sur un compte, comme ses abonnements, ses followers, la liste des tweets avec leur date de publication, etc. On peut aussi s'en servir pour poster des tweets, retweeter, suivre des gens, etc. Les comptes bots, c'est à dire les comptes qui postent du contenu automatiquement, comme l'Emoji Mashup Bot ou le Bot du cul, utilisent l'API de Twitter pour poster ainsi régulièrement sans intervention humaine.
La plupart des gros réseaux sociaux proposent une API plus ou moins ouverte et plus ou moins permissive. Cette API permet aussi de créer, outre des bots, des outils tiers comme des clients alternatifs ou des services capables de vous prévenir quand quelqu'un vous a unfollowé.
Mais au travail, donc. Utiliser l'API de Twitter exige de disposer d'un compte « développeur », qu'il faut demander auprès de Twitter. La procédure n'est pas très lourde mais il faut quand même expliquer ce que vous comptez faire. Je vous laisse voir vous-même, on se retrouve de l'autre côté.
Ceci fait, vous devriez trouver sur votre tableau de bord une API key et une API secret key. Les plus observateurs et polyglottes d'entre vous auront noté l'utilisation de l'épithète « secrète » pour désigner une de ces clefs, ce qui doit vous guider dans la publicité à donner à cette dernière. Ces informations vous serviront à vous authentifier auprès de Twitter.
Il existe à ce sujet plusieurs façons de s'authentifier, je vais en présenter une qui marche, et c'est la principale qualité que je recherche chez n'importe quelle méthode que j'utilise. Libre à vous de creuser le sujet ici. J'utilise donc la méthode OAuth 2.0 Bearer Token. Cette méthode va vous permettre d'obtenir un jeton (token) à adjoindre à chaque commande envoyée.
Pour obtenir ce jeton, il faut envoyer une requête HTTP avec une commande GET. Si vous n'avez pas compris cette dernière phrase c'est pas grave. En Python ça ressemble à ça avec requests
:
import requests
data = {
'grant_type': 'client_credentials'
}
url = 'https://api.twitter.com/oauth2/token'
api_key = 'my_api_key'
api_secret_key = 'my_api_secret_key'
response = requests.post(url, data=data, auth=(api_key, api_secret_key))
headers = {
'authorization': 'Bearer ' + response.json()['access_token'],
}
À partir de là, vous allez pouvoir coller ce headers
à toutes vos requêtes. Essayons tout de suite de récupérer les informations sur un compte avec l'API, rendons-nous de suite sur la page dédiée dans la documentation. On voit qu'il faut passer comme paramètre soit l'identifiant du compte (qui est une série de chiffres peu intuitive), soit le screen name qui correspond simplement au pseudonyme Twitter. Optons pour la seconde option.
On nous donne des exemples de requêtes faites avec curl
. Il s'agit d'un outil qui est vénéré par les vieux barbus sous Linux et qui a ses qualités, mais à des fins de pédagogie nous allons nous en passer. Je vous signale quand même cet outil qui permet de convertir des requêtes curl
en code Python utilisant la bibliothèque requests
.
Supposons que nous souhaitions récupérer les informations du compte Twitter de Jean-Luc Mélenchon (@JLMelenchon).
url = 'https://api.twitter.com/1.1/users/show.json'
params = {
'screen_name': 'JLMelenchon'
}
response = requests.get(url, headers=headers, params=params)
info = response.json()
Vous noterez l'objet headers
que l'on a récupéré de la manipulation précédente. À l'issue du processus, on récupère un objet info
qui est au format JSON, que je vous décrivais déjà dans l'autre article sur les municipales. Il va contenir plein... d'infos (no shit Sherlock) sur le compte, dont son nom d'affichage, sa description, sa date de création, le nombre de followers, le dernier tweet, etc. De là, il est facile de systématiser pour récupérer les informations de tout le monde.
{
...
'name': 'Jean-Luc Mélenchon',
'screen_name': 'JLMelenchon',
'location': 'France',
'description': 'Député de la 4e circo des Bouches-du-Rhône, pdt du grpe
@FranceInsoumise. JLM ne tweete pas en personne.
Instagram : @jlmelenchon. YT: https://t.co/UZJeDOk6az',
'protected': False,
'followers_count': 2159054,
'friends_count': 4899,
'listed_count': 4493,
'created_at': 'Thu Oct 08 10:50:24 +0000 2009',
'favourites_count': 2474,
'profile_image_url': 'http://pbs.twimg.com/profile_images/1067002166404096001/Csvx4UYo_normal.jpg'
...
}
Ci-dessus, un extrait des nombreuses informations qui sont renvoyées par l'API sur le compte de Jean-Luc Mélenchon.
Twitter ne permet pas à tout le monde d'envoyer autant de requêtes qu'il le souhaite. En effet, des limitations sont imposées pour se protéger des abus, et pour réserver l'essentiel des ressources aux clients payants (simples plébéiens que nous sommes, nous n'allons pas commencer à nous mêler à ces considérations). Par exemple, pour la commande permettant de récupérer les informations d'un compte, on est limité à 900 requêtes par plage de quinze minutes. C'est a priori suffisant pour 577 députés, mais si on ajoute à ça les essais et échecs successifs avant d'arriver à un résultat satisfaisant on a vite fait d'épuiser son capital.
C'est là que je vous confie une petite astuce de mon cru pour pouvoir quand même continuer d'envoyer des requêtes. Je vous préviens néanmoins, c'est un peu sale et c'est à ranger dans la partie la plus sombre de votre boîte à outils. La technique consiste en le détournement de jetons d'authentification. Comment faire ? Il s'avère que Twitter utilise lui-même son API pour faire fonctionner son site. Ainsi, si vous vous rendez par exemple sur un compte pour afficher ses abonnements, Twitter va faire une requête à son service pour récuper lesdits abonnements. Et il est possible d'intercepter depuis votre navigateur cette requête pour en extraire le jeton d'authentification.
Encadré ici en rouge à droite, le jeton utilisé pour la requête apparaît et pourra être réutilisé pendant un temps limité (les jetons finissant toujours par expirer). Méthode présentée sans aucune garantie évidemment.
Vous voici à présent équipés pour exploiter à fond l'API et ses nombreuses possibilités. Sur le même modèle vous pouvez à présent récupérer par exemple la liste des abonnements en changeant les variables url
et params
pour qu'elles correspondent à votre objectif.
Voyons déjà la place qu'occupent les députés sur Twitter dans l'absolu. Ci-dessous, un graphique montrant les vingt-cinq députés les plus populaires sur le réseau, en nombre d'abonnés.
Les deux premières places sont confortablement occupés par Marine Le Pen et Jean-Luc Mélenchon, tous les deux ayant plus de deux millions d'abonnés et pouvant se prévaloir d'un statut d'anciens candidats à l'élection présidentielle, d'où ils tirent l'essentiel de leur popularité. On trouve d'ailleurs non loin derrière Nicolas Dupont-Aignan et encore un peu plus loin Jean Lassalle (alors même que leur apport aux travaux parlementaires est quasi-nul). Pour mesurer l'avance qu'ont les deux premiers sur le reste des troupes, il faut noter que Benjamin Griveaux, le troisième de la liste, a huit fois moins d'abonnés que Jean-Luc Mélenchon.
Histoire d'être complet sur les statistiques, la moyenne du nombre de followers est à 18126, avec une médiane à 4167 (preuve une fois de plus que ces deux notions sont bien distinctes et ne sauraient être assimilées) ; le premier quartile est 2319, le troisième quartile est à 7162. On devine donc un très vaste ventre mou où s'épanchent la très grande majorité des députés, tandis qu'une poignée plus médiatique s'accapare le gros du gâteau.
Pour pousuivre nos observations sur le premier graphique, on peut noter la forte présence des députés La France insoumise dans le haut du classement, alors même que ces derniers n'occupent que dix-sept sièges dans une assemblée qui en compte 577. Cela peut s'expliquer par leur grande popularité chez les jeunes, très présents sur Twitter, et plus largement la très efficace stratégie numérique du parti LFI. Jean-Luc Mélenchon, en plus d'être une star de Twitter, est aussi très bien installé sur YouTube, et depuis quelques jours sur Twitch. Mais on y reviendra peut-être un autre jour.
Les députés non-inscrits, notamment ceux du Rassemblement national, semblent également bien positionnés. Ces impressions sont vérifiées par le graphique suivant qui montre le nombre de followers pour chacun des groupes politiques de l'Assemblée.
Oui je sais, les étiquettes des « petits » groupes sont illisibles et superposées, mais matplotlib c'est un peu la merde à manipuler, donc je laisse comme ça. Je pense que vous avez quand même saisi l'idée générale.
Pour rappel et comparaison, la répartition effective des groupes à l'assemblée par siège est ainsi :
Anecdote : quand j'ai commencé à travailler sur cet article, LREM avait encore la majorité absolue. Le temps passe comme des voitures.
Autre donnée statistique : sur les 550 comptes, 447 sont « vérifiés ». Cela signifie que l'identité du propriétaire du compte a été vérifié par Twitter. Ces comptes se reconnaissent à un petit insigne bleu à côté de leur nom.
Ci-dessous, un graphique montrant quand les députés de l'actuelle législature ont créé leur compte Twitter. Il apparaît un « sursaut » évident en mai 2017, correspondant certes au moment de l'élection présidentielle mais surtout au moment où les plus gros partis, notamment LREM, ont décidé les investitures pour l'élection législative qui s'est tenu en juin. On peut distinguer une « vague » similaire fin 2011/début 2012 correspondant à des députés déjà élus ou candidats à l'époque.
Pour finir cette article, je vous propose de se pencher sur un dernier élément d'analyse : qui suit qui à l'Assemblée nationale ? Marine Le Pen et Jean-Luc Mélenchon sont les députés les plus suivis par la population, mais qui sont les députés les plus suivis par les autres députés ? Voyons ce que ça donne.
Cette fois-ci, ce sont les députés LREM qui s'en sortent le mieux. On trouve en tête de liste les plus fameux d'entre eux, à savoir le président de l'Assemblée, son prédécesseur au perchoir (vous vous souvenez de l'affaire des homards, c'était fou non ?), ainsi que l'ancien président du groupe et candidat à la mairie de Paris (sale histoire ça aussi) (le tiercé de tête est glorieux, ils ont tous dû démissioner à un moment).
Dans les cent premières places, on ne trouve quasiment que des députés « En marche », quelques anciens du groupe devenu frondeurs, notamment chez « Écologie Démocratie et Solidarité » (groupe créé en mai dernier se voulant l'aile gauche de LREM), et des députés MoDem.
On semble comprendre ici que les députés « En Marche » tendent à tous se suivre entre eux (ce qui est somme toute logique, ils bossent ensemble, ils sont potes). Mais les autres groupes, font-ils pareils ? Suivent-ils les autres groupes ? Lesquels en priorité ? Voyons cela avec un graphique d'un nouveau genre.
Comment lire l'image : à gauche, les groupes qui suivent ; à droite, les groupes qui sont suivis. On peut voir par exemple que les députés du groupe LREM ont ensemble 58 226 abonnements, très majoritairement à des comptes d'autres députés LREM. En retour, il y a 57 287 abonnements à des comptes de députés LREM.
Ce graphique permet de deviner les liens existants entre les différents groupes. On voit par exemple qu'il y a des liens importants entre LREM et ÉDS et entre LREM et le MoDem. Une limite à cette représentation est qu'elle empêche les analyses fines, le groupe majoritaire écrasant tout. Il est normal qu'il y ait plus d'abonnements au groupe LREM (281 membres) qu'au groupe LFI (17). Il serait donc intéressant de normaliser en fonction de la taille du groupe. Dont acte.
Les nombres n'ont ici aucun sens absolu et sont à comparer les uns avec les autres. On peut voir que rapporté à sa taille, le groupe ÉDS est très suivi, autant que LREM. Également, Agir Ensemble et le MoDem font pratiquement jeu égal dans l'influence qu'ils ont sur la majorité.
Les Républicains forment un bloc soudé, peu intéressé par les autres groupes. Tout juste sont-ils un peu tourné vers l'UDI, partenaire de longue date du parti.
Outre elle-même, La France insoumise est un peu tournée vers le groupe Gauche Démocrate et Républicaine constitué essentiellement de députés communistes. À noter le désintérêt complet pour le groupe socialiste.
Voilà pour les principaux groupes (du moins les plus intéressants à regarder). Je ne vais pas les détailler tous, retrouvez le reste ici : * GDR * SOC * ÉDS * MoDem * L&T * Agir * NI
Voilà tout pour aujourd'hui, j'ai essayé d'être pédagogique dans les détails techniques, et en même temps de tirer des trucs intéressants des données récupérées. C'est pas toujours évident mais si j'ai au moins pu vous apprendre un truc c'est déjà ça de pris.
Bye !