Notes supplémentaires sur l’analyse de réseaux

J’ai récemment présenté mes recherches sur les réseaux de collaboration législative à Marseille, où j’ai aussi donné, grâce à Joël, une formation à l’analyse de réseaux.

Les slides de la première présentation, donnée au RUG Aix-Marseille, sont en ligne sur le site Internet de Datactivi.st, et sur Google Slides ; il s’agit d’une traduction de notes déjà présentées, et qui m’a permis de récolter plusieurs idées et commentaires très utiles pour améliorer mes recherches.

Quant aux slides de la formation en analyse de réseaux, qui m’a permis de rencontrer ou de revoir les amis du Centre pour l’édition électronique ouverte, sont ci-dessous, et aussi sur Google Slides.

La plupart des illustrations de ces slides proviennent de l’excellent manuel de Mark E. J. Newman sur les réseaux.

J’y mentionne aussi cette liste de ressources sur l’analyse de réseaux, dont j’ai fait la publicité ici et ailleurs, l’excellent tutoriel de visualisation de réseaux de Katherine Ognyanova (mentionné ici et ), un autre manuel de graph mining avec R, et évidemment, l’excellent guide à l’utilisation du package igraph, par Eric D. Kolaczyk et Gábor Csárdi.

Demain à Paris : « Approaches to Understanding the Quality of Legislation »

Ce jeudi, le Médialab et le LIEPP de Sciences Po accueillent Ruth Dixon, qui présentera ses travaux sur l’étude de la législation à partir de méthodes initialement conçues en bio-informatique.

J’ai eu la chance d’assister à une présentation des recherches de Ruth Dixon il y a plus d’un an, à Londres, et la similarité entre son approche et celle à l’origine de « La Fabrique de la Loi » m’a incité à proposer cette invitation en séminaire.

Venez nombreux et sans vuvuzelas, mais surtout, n’oubliez pas de vous inscrire avant :

Notes de travail sur les réseaux de collaboration législative

J’ai eu la chance d’intervenir, il y a dix jours, dans le séminaire interne du CEVIPOL, le laboratoire de science politique de l’Université Libre de Bruxelles. J’étais invité par Émilien Paulis, que je remercie au passage pour l’invitation, pour la logistique et pour l’accueil sur place.

Mon intervention portait sur l’étude des réseaux de collaboration législative. Les slides que j’ai utilisées sont proches de celles que j’avais présentées en juin 2016 dans une conférence d’utilisateurs de R, et que j’ai présentées à nouveau cette même année dans une conférence « quanti » à Lille et dans le séminaire du Médialab de Sciences Po.

Quelques extraits ci-dessous, à cliquer pour obtenir les slides au complet :

Qualifier et quantifier l’activité parlementaire : demandez le programme

En octobre dernier, vous avez pu lire sur ce blog l’appel à communications de la Section Thématique 38 du Congrès AFSP 2017, « Qualifier et quantifier l’activité parlementaire : données, méthodes et pratiques« .

La sélections des communications qui seront présentées dans la section est à présent terminée, et le programme de la section est désormais disponible sur le site Internet (temporaire) de la section :

st38-prog

Le programme est en anglais car la section aura lieu en anglais, histoire de permettre aux non-francophones de se sentir un peu plus à l’aise sous le soleil montpelliérain.

La sélection et ses suites

Le programme, élaboré avec Olivier Rozenberg, est résolument international, avec des papiers de plusieurs pays francophones mais aussi d’ailleurs. La sélection a été difficile : nous avons reçu 25 propositions d’un peu partout dans le monde1, et parmi elles, beaucoup étaient assez, voire très, pertinentes.

Remarque : trop peu de femmes

Mon seul vrai regret concernant les propositions que nous avons reçues : sur les 44 auteurs listés, on ne trouve que 5 femmes, et qu’une seule femme parmi les papiers retenus2. C’est peu, et probablement en-deçà de la présence des femmes dans les milieux scientifiques qui ont reçu notre appel à communications—du moins souhaitons-le !

Au niveau de l’âge, nous avons reçu un bon mélange de « juniors » et de « seniors » ; mais au niveau du sexe, notre créneau thématique (les études parlementaires) me semble terriblement masculin… Peut-être est-ce aussi la conséquence de la coloration « méthodologique », voire « quantitativiste », de notre thème de section.

Je ne citais pas directement la « ST 38 » dans ce billet, mais vous aurez fait le rapprochement.

À noter également : la « ST 37 »

Pour celles et ceux qui seront à Montpellier, notez également l’existence de la Section Thématique 37, « Dans l’ombre de la loi. Travail au parlement et vie politique », organisée par Sébastien Michon et Étienne Ollion.

See you in Montpellier!

  1. Plus exactement, nous avons reçu des propositions de chercheurs établis dans 13 pays différents, en excluant une proposition totalement hors-sujet (la seule) en provenance des Philippines. []
  2. Toujours si l’on exclut la seule proposition complètement hors-sujet, qui nous a été envoyée par deux jeunes étudiantes. La différence de proportion est non significative, mais cela reste regrettable. []

Qualifier et quantifier l’activité parlementaire : données, méthodes et pratiques

Olivier Rozenberg et moi-même organisons une section thématique au prochain Congrès de l’Association Française de Science Politique. Voici l’appel à communications, qui se termine dans une semaine :

st38

L’appel existe aussi en anglais, et le reste des détails est à trouver sur le site Internet de la section, qui disparaîtra quand elle aura eu lieu—attendez-vous donc à ce que tous les liens de ce billet finissent en erreur 404 dans quelques temps.

Si vous aimez les parlements et les données, envoyez vite votre proposition de communication !

Remerciements

La diffusion de cet appel à communications m’a donné l’occasion de faire le tour des associations professionnelles et groupes de recherche qui travaillent sur les parlements. Outre l’AFSP et l’ANCMSP, voici la liste des groupes qui ont reçu et diffusé l’appel—avec tous mes remerciements à leurs coordinateurs et organisateurs :

La seule société qui n’ait pas diffusé l’appel est la Société Québécoise de Science Politique, mais bon, on ne va pas se fâcher pour si peu.

Remerciements supplémentaires au blog germanophone « Soziologie der Parlamente » (hébergé sur Hypothèses), qui a relayé l’appel de son côté.

Repérages supplémentaires

La liste ci-dessus n’est pas tout à fait exhaustive : pour la zone francophone, le Groupe de Recherche sur les Parlements et les Parlementaires (GRPP) de l’AFSP aurait été pertinent, mais il est apparemment inactif, de même que l’Association de science politique du Luxembourg, LUXPOL, et que les associations qui ont existé en Tunisie et au Cameroun.

De plus, si l’on souhaitait étendre la liste aux groupes d’histoire parlementaire francophones et anglophones, il faudrait aussi inclure les groupes suivants :

  1. Calenda n’a pas encore diffusé l’appel, mais c’est ma faute, j’envoie toujours trop peu à l’avance… Mise à jour : c’est fait, l’équipe de Calenda a été très rapide—merci beaucoup ! []
  2. Et l’IPSA elle-même, qui a aussi diffusé l’appel de son côté. []
  3. Ce groupe est centré sur un autre sujet, mais je n’ai pas trouvé de groupe « parlements » au sein du CES, et ai pris celui-ci en remplacement. []

Début de reprise

Ce n’est vraiment encore la reprise, mais un peu quand même, alors on s’y remet.

Deux comptes-rendus de conférences, et un projet à suivre :

Et une photo de voyage, histoire de répéter ce que j’ai déjà dit sur Facebook : le “Bourdieu” de Fabiani est un excellent livre qui accompagne très bien les heures chaudes.

Tanger, juillet 2016

Photo prise à la terrasse du Café Menara, Tanger, Petit Socco, Maroc.

Collecte et visualisation de données législatives avec R

Le groupe d’utilisateurs R du Muséum national d’Histoire naturelle de Paris (le groupe “Sémin-R”) organise une conférence R demain. Cliquez sur l’image ci-dessous pour le programme complet :

JourneeR-2016-Programme

J’y présenterai les slides résumées ci-dessous (cliquez sur n’importe quelle image pour la version PDF complète, ou utilisez la version en ligne), et si tout se passe bien, j’aurai un court papier technique à partager sur le sujet dans moins d’un mois :

Briatte_R_MNHN_2016-2

Briatte_R_MNHN_2016-3

Briatte_R_MNHN_2016-4

La présentation reprend, en substance, une brève note que j’ai récemment publiée dans Network Science. Cliquez sur l’image ci-dessous pour accéder au preprint ou lisez directement son annexe pour le détail des données :

Briatte_NWS_published

Comme d’habitude, le code et les données sont en ligne — j’en ai déjà parlé à plusieurs occasions cette année, et vous risquez d’en entendre encore parler dans les années qui arrivent (plus de détails quand il y en aura à partager).

Affaire à suivre, donc, mais bon, c’est pas comme si je ne vous avais pas déjà un peu cassé les pieds avec R et la visualisation de réseaux de collaborations législatives depuis quelques temps déjà.

J’en profite pour saluer amicalement les collègues suisses, et Marion Deville en particulier, qui participent à la Semaine de la démocratie de Genève, et qui ont prévu d’utiliser certains de mes graphiques dans une présentation de leurs travaux lors d’un hackathon organisé le 23 septembre. Je n’ai pas beaucoup plus d’informations là-dessus, mais vous pouvez écrire à Marion si vous êtes intéressés.

En attendant, il reste quelques places pour la conférence de demain : écrivez aux gentils organisateurs (leurs coordonnées sont sur le site du Sémin-R), ou faîtes-moi très vite signe, et je ferai suivre. À demain !

Mise à jour, le jour même : malgré un léger gros problème qui m’a fait rater la matinée, je peux confirmer que la journée R du MNHN était, comme prévu, hyper-chouette, le cadre du Muséum d’Histoire Naturelle étant très agréable par ailleurs.

À noter dans les présentations, qui seront bientôt en ligne sur le site du RUG MNHN :

  • les dernières améliorations du package FactoMineR – et Factoshiny
  • l’utilisation de scripts R sur un serveur Apache
  • la visualisation de cartes auto-organisatrices
  • un exemple d’interfaçage R + Java
  • la sonification (!) de graphiques R/ggplot2

La dernière présentation, par Jérôme Sueur (l’un des deux organisateurs de la journée, avec Amandine Blin) était très divertissante. Pour comprendre pourquoi, jetez un coup d’oeil au package playitbyr.

Les réseaux de cosignatures législatives de quinze pays européens

Mise à jour, janvier 2017 : la recherche présentée ci-dessous est désormais publiée dans un ouvrage collectif. Le manuscrit est en ligne depuis belle lurette.

Mise à jour, juin 2016 : les données présentées dans ce billet ont évolué, et vont continuer d’évoluer. Pour une présentation plus récente, voir ce billet de juin 2016.

Si la série de billets “Charlie Hebdo” vous a plu, voici quelques réseaux en plus. Add. Et si ce billet vous a plu, la base de données et les visualisations interactives comptent désormais 24 chambres parlementaires de 18 pays européens (les trois nouveaux pays sont l’Irlande, le Portugal et la Slovakie).

Vous vous souvenez peut-être de ce premier travail, dont j’avais parlé courant 2014, sur les réseaux des cosignatures de propositions de loi et d’amendements à l’Assemblée nationale. L’idée venait de Baptiste Coulmont.

La présentation de ce travail en conférence était plutôt bien passée. À cette époque, j’avais déjà rajouté les réseaux de cosignatures du Sénat, très faciles à construire grâce à son portail open data.

À l’occasion d’une summer school avec piscine et sauna (si si), j’ai ensuite élargi l’assiette empirique à six pays européens. Puis j’ai fait le tour de tous les pays membres de l’Union européenne et de l’AELE1.

Ce qui m’amène à la base de données actuelle : j’ai fini par assembler 100 réseaux de cosignatures législatives dans 19 chambres parlementaires de 15 pays européens. Voici un texte qui les présente rapidement2.

Les réseaux sont limités aux propositions de loi, mais cette limite permet de remonter plus loin dans le temps, sur une base plus comparable. Le code est aussi beaucoup moins dégueulasse que le code initial pour la France.

Voici par exemple l’exemple l’Islande actuelle :

net_is2013-2017

Ou encore l’Italie actuelle (chambre basse) :

net_it_ca17

Ou encore la République tchèque actuelle :

net_cz7

Et enfin, voici un tableau récapitulatif des pays et des chambres parlementaires couvertes. Les liens “plots” amènent aux représentations graphiques statiques, les liens “viz” aux visualisations interactives. Amusez-vous bien.

Pays / Chambre
Autriche (chambre basse) code plots viz
Belgique (deux chambres) code plots viz
Bulgarie code plots viz
République tchèque (chambre basse) code plots viz
Danemark code plots viz
Finlande code plots viz
France (deux chambres) code plots viz
Hongrie code plots viz
Islande code plots viz
Italie (deux chambres) code plots viz
Lithuanie code plots viz
Norvège code plots viz
Roumanie (deux chambres) code plots viz
Suède code plots viz
Suisse (chambre basse) code plots viz

Le code contient des fonctions facilement réutilisables pour construire d’autres réseaux, et certains pays peuvent encore être rajoutés, à condition de trouver un moyen de récupérer les données (ce qui est parfois assez compliqué).

Si vous vous demandez à quoi peuvent servir ces réseaux, jetez un coup d’oeil au texte précité, ou au papier de Justin H. Kirkland sur la structure collaborative des chambres parlementaires, ou à ce papier sur la segmentation partisane.

Si vous souhaitez participer à l’amélioration, l’élargissement ou l’analyse de la base, je suis preneur : il y a beaucoup, beaucoup de données dans ces graphes (environ 195 000 propositions de loi et 13 000 parlementaires).

Dernier truc : j’ai publié un billet similaire à celui-ci sur la plateforme OpeningParliament.org, qui rassemble des organisations mobilisées autour de la thématique de l’open data dans le domaine législatif.

  1. À l’exception des micro-États, comme Andorre. []
  2. Le texte contient aussi un modèle très simple de la segmentation partisane des réseaux. []

Qui arrivera à décoder la bombe à retardement symbolique du patrimoine des élus ?

Les décodeurs du Monde constataient récemment que les déclarations de patrimoine des élus, issues du “scandale Cahuzac”, font l’objet d’un dispositif hyper-restrictif, empêchant notamment toute prise de note lors de leur consultation en présence d’un agent préfectoral (voir les articles 1 et 3 de l’arrêté fraîchement publié).

Screen Shot 2014-06-10 at 7.37.23 PM

Aux Pays-Bas, des petits malins ont utilisé une faille juridique pour collecter en temps réel les résultats des dernières élections européennes. Rien ne semblant interdire la lecture des déclarations à haute voix, j’imagine que le dispositif français doit aussi avoir une faille—il y en a toujours au moins une, comme en matière de sécurité informatique1.

Plus sérieusement, le Parlement français a donc décidé de s’en tenir aux effets d’annonce, ce qui fait que pour un citoyen français, il reste plus difficile de s’informer sur les ressources des élus de son propre parlement que d’obtenir la même information pour la Roumanie, qui diffuse les déclarations d’intérêts et de patrimoine de ses élus, des candidats aux élections, et plus généralement de tous les agents financés par de l’argent public, qu’ils soient fonctionnaires ou pas2 :

Screen Shot 2014-06-10 at 7.46.26 PM

La comparaison avec la Roumanie est bien évidemment faussée par la corruption endémique de son appareil d’État, qu’on se doit d’espérer moindre chez les parlementaires français. Mais dans une démocratie comparable, la Grande-Bretagne, le scandale des dépenses parlementaires de 2009 me semble avoir débouché sur quelque chose de légèrement plus pertinent : les parlementaires y bénéficient désormais d’une assistance administrative les aidant à remplir leurs déclarations de revenus et à ne pas s’acheter de nains de jardin avec leur carte bancaire de représentant du peuple3.

Bref, plutôt qu’un risque de hack généralisé du dispositif grâce à une opération massive de désobéissance civile et de crowdsourcing des données, le Parlement français me semble avoir surtout pris le risque d’affronter, un de ces quatre, le même scandale que la Grande-Bretagne—c’est-à-dire un mélange d’antiparlementarisme assez rarement étayé et de dépenses injustifiées mais souvent accidentelles et futiles.

Et dans cette dernière hypothèse, les conséquences électorales seront, à coup sûr, beaucoup plus sévères que celles occasionnées par le scandale Cahuzac, sans même parler des dégâts collatéraux que de tels scandales peuvent engendrer. C’est cette perspective, inquiétante mais à mon sens tout à fait réelle, qui me fait penser que cet arrêté est une petite bombe à retardement symbolique, placée à mi-distance des deux chambres parlementaires4.

Encore un point commun avec la Grande-Bretagne, en quelque sorte.

  1. Histoire d’être bien clair, je n’encourage personne à aller vérifier cette hypothèse. Les sans-papiers savent qu’un agent préfectoral peut obtenir l’intervention des forces de police sur place. []
  2. Le dispositif roumain est né d’une condition posée lors de l’entrée du pays dans l’Union européenne. Apparemment, “deux poids, deux mesures” s’écrit “două greutăți, două măsuri” en roumain. []
  3. Je plaisante à peine : certains députés britanniques se sont fait mettre au pilori par la presse pour avoir acheté des cabanons de jardin ou des canards en plastique pour leur baignoire. []
  4. Ce raisonnement devrait inciter les parlementaires à considérer les associations comme Regards Citoyens de manière moins négative, mais je suis biaisé par mes propres amitiés sur cet exemple. []

Toutes les interventions plénières des eurodéputés, en 100 lignes (de code)

Mise à jour, juin 2015 : si ce billet vous intéresse, allez voir le travail de Derek Greene et James P. Cross, qui ont modélisé les documents décrits ci-dessous de manière plus fine que ce que j’avais codé.

Quelques notes tirées de trois conversations sur les sept derniers jours. C’était plus long à décrire qu’à coder.

Commençons par récupérer la liste des eurodéputés, en trois étapes :

  1. La source : l’index complet est disponible en une seule page, ce qui rend les choses faciles. Le zéro final de l’adresse est le numéro de législature ; il y en a 7 au total, et la dernière possède un index des députés un peu plus détaillé, que l’on utilisera peut-être un autre jour.
  2. La méthode : il y a quatre ans, on m’a fait découvrir XPath, qui est une syntaxe servant à sélectionner des éléments dans un document structuré. XPath, c’est un peu comme les expressions régulières, ou découvrir comment trafiquer un PDF sans laisser de traces dans les métadonnées : ça change la vie1.
  3. La syntaxe : le site Internet du Parlement européen est rédigé en HTML propre (car généré automatiquement), avec des éléments bien imbriqués les uns dans les autres : c’est le cas idéal. La source de l’index, consultable dans tout navigateur, donne la syntaxe exacte des éléments utilisés ci-dessous.

Illustration de l’explication ci-dessus :

Screen Shot 2014-05-19 at 9.26.24 PM

À présent, dans R :

  1. On souhaite juste sauvegarder un « annuaire » minimal des 3 000 et quelques eurodéputés, et le sauvegarder dans un fichier qui servira d’index général où chaque eurodéputé est identifiable par trois éléments : le nom complet, inutilisable car plein d’accents et non unique2, l’URL (l’adresse de sa page personnelle), et dans cette URL, un numéro, 4484 par exemple, qui servira d’identifiant unique plus tard.
  2. La fonction de téléchargement va lire la page HTML, en extraire les éléments pertinents à partir de sa structure, et renvoyer tout ça dans un jeu de données. On sauvegardera les données au format CSV, un format en texte simple qui sauvegardera correctement les accents dans les noms si l’on s’assure que le parser les lit en encodage UTF-8.
  3. Petite nuance : quand vous voulez extraire un lien, la syntaxe XPath vous le permet directement ; mais pour extraire le texte d’un lien, le truc sur lequel on clique pour aller au lien en question, il vous faut la « valeur XML », d’où la fonction xmlValue ci-dessous. Le reste du code demande surtout de se renseigner sur XPath, et ce n’est pas compliqué du tout, surtout si l’on apprend par essai-erreur.

Il va donc vous falloir installer puis charger les librairies (a.k.a packages, extensions, plugins, comme vous voulez) jsonlite, plyr et XML, et 20 lignes plus tard, vous avez tous les eurodéputés dans un fichier CSV.

Plus compliqué, obtenir toutes leurs interventions parlementaires :

  1. Sur la page de chaque eurodéputé (exemple), un lien fournit toutes les interventions en séance plénière (exemple). En lisant encore une fois la source de la page, on trouve le petit bout de Javascript qui génère cette information, et surtout l’URL qui renvoie cette information depuis la base de données utilisée en coulisses du site.
  2. L’information est au format JSON, pour lequel il y a non pas un, ni deux, mais trois packages R qui peuvent assurer la conversion vers le format classique des jeux de données R, data.frame. Jeroen Ooms m’a prouvé en cinq lignes que son package était le meilleur, et j’ai pu vérifier depuis qu’il a entièrement raison3.
  3. Les fonctions conditionnelles de type if else, qui permettent par exemple de ne rien faire si aucune donnée n’a été trouvée, servent à contrôler l’exécution du script. Le code ci-dessous contient deux autres structures apparentées, while et try. Quelques détails chiants si vous ne les utilisez pas fréquemment :
    • while est un itérateur habituellement moins préférable que for (ou, dans R, qu’une vectorisation de type *apply), mais qui marche très bien ici pour lister les interventions de chaque eurodéputé(e)4.
    • try permet de continuer l’exécution même si un problème de connexion Internet empêche ponctuellement de lire une page (erreurs 404, 502, 503… amusez-vous bien)5.

Voilà pour le détail, et 30 lignes plus tard, vous pouvez récupérer les interventions de n’importe quel eurodéputé dans n’importe quelle législature (1 à 7), en utilisant son numéro d’identifiant unique (id)6.

Ça se complique encore un peu mais on y est presque. Le workflow final est le suivant :

  1. Pour chaque eurodéputé dans l’index général, extraire le numéro d’identifiant unique de l’adresse de sa page Internet, puis aller chercher ses interventions publiques dans chacune des 7 législatures parlementaires. La partie « pour chaque député » est purement itérative (for), mais la partie « chacune des législatures » est vectorisée : on va de 1 à 7, et on applique à chaque fois la fonction get_cre de 20 lignes décrite plus haut. Le seul bénéfice avéré de la vectorisation dans ce cas réside dans l’économie d’accolades et de lignes de code à gérer.
  2. Il ne reste que les soucis de format. Le premier est très simple : la partie vectorisée du code renvoie une liste, que l’on va aplatir au format data.frame avec rbind.fill, la fonction la plus utile du monde après paste (si si). Enfin, dernier problème : les fichiers JSON utilisent des listes, mais vos jeux de données sont des tableaux (i.e. des matrices avec des attributs) qui utilisent des cellules. Une liste vide est NULL, alors qu’une cellule vide est NA : welcome to the R Inferno ! Heureusement, une fois le problème détecté, il se règle en une ligne, à appliquer à chaque colonne susceptible de contenir des listes/cellules nulles/vides afin de les « purger » — sinon, pas d’écriture possible au format CSV.
  3. Prévoir, dans quelques heures, environ 1700 fichiers de résultats (car tous les eurodéputés n’interviennent pas, loin de là), pour environ 90 MB d’espace disque. Cet exemple est très « léger » et relativement rapide, mais d’expérience, vous avez vraiment intérêt à toujours penser à la taille des résultats sur disque avant de faire quoi que ce soit — à moins d’avoir la trésorerie pour détruire un disque dur de temps à autre7.

Illustration de l’avertissement ci-dessus, tiré d’un autre projet dont les résultats des modélisations font plusieurs gigaoctets de plus que les données brutes, ce qui est logique quand on utilise des simulations ou, comme ici, un bootstrap :

Screen Shot 2014-05-16 at 1.39.12 PM

On termine en écrivant poliment le nombre d’eurodéputés restants à l’écran, et avec 20 lignes de plus, l’index général est mis à profit pour télécharger, dans un dossier records à créer préalablement, les métadonnées de tout ce que les eurodéputés ont raconté en séance plénière depuis qu’il y a des données disponibles, dans des fichiers nommés UID_cre.csvUID est l’identifiant unique de chaque eurodéputé.

Ça fait 100 lignes en tout, avec quelques trucs en plus.

Le résultat à l’écran ressemble à l’illustration ci-dessous, avec des pseudo-barres de progression quand il y a des fichiers en téléchargement (je montre une exécution avec les résultats déjà présents sur le disque, d’où les « 0 » jamais suivis des « 100, 200, 300… » correspondant au téléchargement de chaque page d’interventions). Le code est exécuté dans TextMate via son plugin R, (qui doit exister pour d’autres éditeurs comme SublimeText).

Screen Shot 2014-05-19 at 9.32.46 PM

Sans avoir regardé en détail, les données intégrales ne semblent concerner que les trois dernières législatures. Le même code peut aussi collecter les opinions prononcées en tant que rapporteur, les motions, les questions écrites etc. avec à peu près autant de facilité, et pour rajouter des variables aux eurodéputés eux-mêmes, il suffit d’extraire plus d’informations de leurs pages personnelles—mais cela dépasserait le temps que je voulais passer sur cet exercice.

Je termine en pensant aux vraies feignasses dans mon genre : le code et les données en une seule archive. Add. : et si ça vous intéresse, j’ai aussi un fichier CSV de 400 MB contenant toutes les interventions orales des eurodéputés au cours des législatures 5–7 (1999–2004, 2004–2009 et 2009-2014).

  1. Les métadonnées, c’est ce que la NSA sait sur vous et sur votre grand-mère. Ça sert aussi à détecter des trucs bizarres dans les copies d’étudiants, ou à savoir qui rédige vraiment les rapports publics que vous trouvez parfois dans la presse en ligne. []
  2. Ce menu détail rend les dernières données de VoteWatch inutiles pour cet exercice, mais voici quand même un guide à leur réutilisation avec R, en trois parties : un, deux, trois. []
  3. La vignette du package explique très bien pourquoi, et en pratique, c’est l’argument flatten = TRUE qui fait la moitié du boulot de virer les listes pour mettre des colonnes, histoire que le résultat ressemble moins à un flux qu’à un tableau de données. L’autre moitié du boulot prend une ligne, lire plus haut. []
  4. La variable idx est lue dans le fichier JSON et correspond à la pagination des interventions publiques, qui sont fournies par tranche de 100 interventions en partant de zéro, parce que Javascript compte à partir de zéro. Elle est égale à 100, 200, 300 ... tant qu’il reste des pages d’interventions publiques dans la pagination du site Internet, -1 quand on se trouve sur la dernière page d’interventions. La variable est directement égale à 0 quand il n’y a aucune intervention publique. []
  5. Vu le grand nombre de pages à couvrir, N eurodéputés * P pages d’environ 100 interventions, le script va nécessairement avoir quelques soucis : il faut le réexécuter quelques fois pour arriver à télécharger tout ce qui est possiblement téléchargeable. Je laisse de côté les fonctions de mise à jour, (il suffit d’effacer les fichiers-cibles en amont). []
  6. Par exemple, le président actuel du Parlement est codé 1911, donc la fonction get_cre(1911, 7) renvoie les interventions (nombreuses, car majoritairement procédurales) de son mandat en cours. []
  7. N’imaginez même pas essayer d’écrire les résultats sur une clé USB : ce n’est pas vraiment un support froid, et je garantis à 200% que tout essai sur une clé USB de plus de 8 GB aura pour seul effet de la rendre complètement et définitivement inutilisable. []