Visualisation interactive des cosignatures à l’Assemblée nationale

Suite et fin d’un feuilleton sur les données parlementaires et la visualisation des réseaux de cosignatures, sous-titré : “Tant qu’il y aura des données.” Le code et les données sont accessibles dans ce répertoire,, et j’espère bientôt présenter ces slides.

L’an dernier, je suspectais l’arrivée d’un nouveau moteur de recherche pour les amendements de l’Assemblée nationale. Ça y est, il est en ligne, et la mauvaise nouvelle est que la nouvelle interface ne se laisse pas faire et demanderait une réécriture complète de mon code d’extraction des cosignatures.

Ce premier échantillon m’a incité à coder l’extraction des cosignatures sous la forme de fonctions génériques, auxquelles j’ai ensuite passé les mêmes listes de cosignatures issues des amendements (depuis 2002) et des propositions de loi (depuis 1986) de l’Assemblée nationale et du Sénat.

Baptiste Coulmont avait défriché le terrain il y a déjà plusieurs années, et la structure de ces données constituait un bon terrain d’entraînement pour apprendre à manipuler des réseaux pondérés et bipartites, de même que le format des données fut un bon terrain d’entraînement pour coder des fonctions d’extraction un peu complexes, utilisant des données collectées en ligne ou sorties de bases SQL.

Voici quelques résultats sous la forme d’une visualisation interactive qui passe des données et des paramètres produits avec R à la librairie de visualisation Javascript produite par deux membres du Médialab de Sciences Po, sigma.js (cliquez sur les images pour la version complète) :

fig_sigma

La visualisation se limite aux propositions de loi de l’Assemblée nationale, qui sont disponibles sur la période la plus longue, couvrant toutes les périodes de cohabitation de la Cinquième République. Elles donnent à voir les cosignatures d’environ 2 000 députés travaillant à ces cosignatures de manière très différenciée selon qu’ils appartiennent à un groupe parlementaire ou à un autre, à droite ou à gauche, dans l’opposition ou dans la majorité1. Les voici géocodés :

sponsor_maps

L’interface de la visualisation permet de mettre l’accent sur les réseaux égocentrés des députés, ce qui ne sert pas à grand chose d’un point de vue analytique2, mais qui permet de mieux identifier les membres des bureaux chargés de centraliser les cosignatures:

Screen Shot 2014-02-20 at 4.04.34 PM

L’interface affiche quelques informations sur les députés tirées de leurs fiches dans la base Sycomore, ainsi que leurs distances moyennes, soit la “rapidité” avec laquelle on peut relier un député à tous les autres en suivant leurs co-signatures :

fig_sigma_detail

En ce qui concerne la construction des graphes, quelques copains assistants parlementaires (merci !) m’ont incité à structurer tous les réseaux collectés de la même manière que James Fowler, en ne retenant que les liens entre les premiers auteurs et leurs cosignataires3. J’ai découpé les données du Sénat sur les mêmes périodes temporelles que l’Assemblée nationale, par législature.

J’ai aussi calculé toute une série de mesures similaires (centralité, modularité, etc.) en tenant compte de la nature pondérée des liens entre co-signataires. Ces mesures sont expliquées en détail dans le papier qui accompagne le code du projet, et qui devrait finir par contenir des modélisations plus avancées des données4.

Avant d’effectuer les mesures, j’ai standardisé les groupes parlementaires en grandes familles sur la période observée pour pouvoir comparer d’une législature à l’autre. Voici par exemple une mesure de centralité sur la législature en cours, qui met en valeur les quelques députés intermédiaires entre les groupes minoritaires et majoritaires, à la fois dans la majorité et dans l’opposition.

fig-weighted14

Enfin, voici la contribution du groupe parlementaire à la polarisation maximale du réseau, qui mesure l’intensité du travail parlementaire intra-groupe par rapport à l’activité inter-groupe — une manière de mesurer l’importance de la segmentation partisane, déjà visuellement remarquable. Suivant cette mesure, le Parlement français est beaucoup plus discipliné que le Congrès américain, même si le Sénat apparaît systématiquement moins contraint par la discipline de parti et semble même l’être de moins en moins.

fig-max_m

Pour produire le même style de visualisation sans trop mettre les mains dans le cambouis Javascript, voici une autre visualisation qui utilise une interface clés-en-main, tous les deux écrits par une équipe de l’Oxford Internet Institute, pour un résultat approchant de mon propre bricolage5 :

fig_oii

  1. Ces variables explicatives apparaissent régulièrement dans les études législatives, notamment celles utilisant les scrutins publics (roll calls). []
  2. Le récent “Que sais-je ?” d’Emmanuel Lazega sur les structures relationnelles l’explique à plusieurs reprises dans les deux premiers chapitres. []
  3. Les bureaux des groupes opèrent fréquemment par cosignature collective sous principe d’opt-in par défaut, ce qui a pour conséquence d’inclure les groupes parlementaires complets ou quasi-complets dans sur les cosignataires. Les biais induits par cette pratique sont minimisés si l’on ne retient que les liens asymmétriques et que l’on pondère les liens par le nombre de cosignataires, ce qui est la stratégie suivie par Fowler, qui peut aussi être normalisée. []
  4. Appel aux dons : si vous avez une heure à perdre au café et que vous savez lire les diagnostics d’un ERGM estimé à partir d’une distribution de Poisson, écrivez-moi maintenant, tout de suite. []
  5. Et pour cause, c’est toujours Sigma.js qui est utilisée en arrière-plan pour dessiner le réseau, avec quelques différences avantageuses comme l’emploi d’un moteur de rendu graphique compatible avec une gamme de navigateurs légèrement plus large. []

Réseaux et hyper-réseaux

Ce joli tutoriel sur les premières étapes d’une construction de réseau bipartite avec R remarque que ce sont ces toutes premières étapes, où il faut penser en “listes” et en “matrices”, qui sont les plus difficiles.

J’aimerais fournir un exemple de cette difficulté, qui me semble flagrante en sciences sociales où l’on se dispense généralement de réfléchir à la géométrie des données autrement que par la pratique1.

Hier, une étudiante me disait que l’exercice le plus compliqué du cours du semestre dernier était celui où il fallait trouver la manière la plus efficace de coder numériquement – dans une feuille de tableur, par exemple – le graphique suivant :

Heer et al.

Le graphique est un tableau qui représente les rencontres entre les personnages des Misérables : chaque fois qu’un personnage en a rencontré un autre, la case du graphique est colorée. L’auteur des données (qui fait par ailleurs partie du Panthéon de la science informatique pour ses recherches en algorithmique) n’a oublié que quelques relations.

Oubliez les couleurs différentes, car ce qui compte, comme l’indique Étienne dans son tutoriel, se trouve sur les bords du tableau. La caractéristique essentielle ici est que les colonnes et les lignes contiennent les mêmes noms : le réseau que contient ce tableau, qui va de personnage à personnage, est dit “unipartite” car il contient un seul type d’entité2.

Une fois converti en réseau, ce graphique donne l’équivalent de ce que vous pouvez obtenir en dessinant la “rosace” de vos amis Facebook, en les pointant sur un cercle et en les reliant par un arc à chaque fois qu’ils se connaissent aussi entre eux : un réseau d’interconnaissance où un seul type d’acteur apparaît. En voici un autre exemple :

Via The Monkey Cage.

Dans ce réseau unipartite, les liens vont de banque à banque, et dans les précédents, les liens allaient d’individu à individu. Mais ces représentations gomment les intermédiaires de ces relations : par quels ressources financières les banques établissent-elles ces liens ? dans quels bâtiments les individus se rencontrent-ils ?

Ces intermédiaires sont parfois pertinents pour l’analyse, et presque toujours pertinents pour l’exploration, ce qui demande d’introduire une entité supplémentaire dans les données. Dans un réseau bipartite ou “à deux modes”, les relations vont ainsi d’un type d’entité à un autre, établissant la jonction entre deux surfaces réticulaires.

Comme le signale Étienne, l’exemple classique de ce type de réseau est celui des réseaux d’affiliation entre des individus et des groupes, qui contiennent par exemple des artistes de hard rock et les groupes auxquels ils ont participé. Les couleurs distinguent les deux modes du réseau artiste-groupe :

Testament.BlackSabbath.small_

Le mode primaire d’un réseau social à deux modes est généralement un agent et le mode secondaire une structure, qui peut être de n’importe quelle nature : par exemple, en ce qui concerne les featurings dans le rap français, les artistes peuvent être liés par des albums solo, des compilations ou des groupes. L’application aux communautés en ligne est également aisée, comme dans l’exemple ci-dessous :

bipartite

On peut aller plus loin et introduire n types d’entités dans ce qu’on appellera alors un réseau k-partite, ou “hyper-réseau”, avec un mode primaire et tout plein de modes secondaires imbriqués les uns dans les autres. Pour illustrer cette catégorie, les réseaux sociaux qui utilisent des “tags” pour désigner leurs “ressources” (vidéos, liens, billets…) fournissent un bon exemple de réseau tripartite, représenté ici tout à droite :

Screen Shot 2014-03-21 at 11.22.10 AM

Les questions qui se posent dans cette configuration des données évoquent celle des structures multi-niveaux, où chaque niveau va obéir à ses propres règles de variabilité, croisée avec celles des réseaux, où chaque observation est structurellement dépendante d’une partie des autres, ce qui a pour effet de rendre inopérants les modèles homoscédastiques auxquels on est généralement habitué en sciences sociales3.

Ce croisement se modélise assez bien, même si les temps de calcul sont plutôt longs, car les matrices étudiées sont larges et que la simulation de données aléatoires dans des dimensions identiques aux données réelles y intervient à plusieurs reprises, généralement à plusieurs milliers d’occurrences. Ces problèmes se posent et se résolvent dans des termes analogues en dehors des sciences sociales proprement dites.

La manipulation de réseaux requiert ces différentes représentations spatiales, qui se traduisent fondamentalement par des listes et des matrices, et qui se prolongent ensuite dans des objets de type “réseau” : objets de classe igraph ou network dans R, fichiers GEXF manipulables avec Gephi, données aux format Pajek ou UCINET…

D’où l’utilité de ce qu’indique Étienne, et aussi de tout ce que Baptiste a pu raconter au fil de ses billets, sur les toutes premières étapes de construction de ces réseaux, car la chaîne des opérations qui suit est plus longue et plus complexe que pour l’analyse de données “plates”, comme les tableaux croisés, plus familières en sciences sociales, mais parfois moins efficaces pour se représenter une réalité intrinsèquement relationnelle à un degré élevé de granularité empirique4.

Il n’y a pas de révolution méthodologique associée à ces techniques de mesure et de visualisation, notamment parce que le reste des méthodes fonctionne plutôt bien au regard des objectifs interprétatifs que l’on se donne, mais les réseaux permettent d’alimenter les modèles avec des données plus proches de certaines représentations relationnelles de la réalité, ce dont on a assez régulièrement besoin en sociologie.

  1. La difficulté sous-jacente résidant dans la manipulation des arrays, celle-ci concerne aussi tout langage informatique qui peut manipuler des objets de taille supérieure à 1, donc pas de souci à se faire, on est bien sur un problème répandu et partagé. []
  2. Ce réseau est aussi très faiblement dense : il contient peu de relations par rapport à l’ensemble des relations possibles, représenté par l’intégralité des cases du tableau. Le codage le plus efficace pour ce graphique est une matrice creuse. Quelques étudiants sont intuitivement arrivés à ce résultat lorsque j’ai corrigé l’exercice en classe, mais la vaste majorité se demandait ce qu’on avait fumé. []
  3. Le format des enseignements de statistiques introductives encourage clairement à privilégier ces approches, probablement avec raison dans la mesure où tous les enseignements sur l’inférence linéaire sont utiles pour analyser des réseaux. []
  4. Merci également à Pedro Jordano, qui m’a initié à ces notions lorsque j’ai commencé à étudier la visualisation de réseaux, à la fois pour apprendre un peu de programmation fonctionnelle et pour enfin comprendre un manuel que j’avais photocopié en intégralité il y a presque dix ans, sans jamais le lire ensuite. []

Activisme en ligne et structures relationnelles

Quelques images qui illustraient un très bref passage en revue du thème indiqué en titre, pour la journée d’étude du Master GIDE à Lille :

Les trois premières slides sont tirées de recherches antérieures sur les réseaux d’activistes anti-DADVSI et anti-HADOPI (voir ce papier récent), et les deux qui suivent sont des exemples d’utilisation méthodique de données Twitter. Les sources sont reprises dans les commentaires des slides.

La deuxième partie de l’exposé portait sur les réseaux pondérés, unimodaux et bimodaux, sur la simulation de liens aléatoires dans des réseaux sociaux, et sur les réseaux dynamiques, qui évoluent au fil du temps, et qui se modélisent de manière encore plus avancée. La dernière slide n’avait presque rien à voir.

L’idée de la présentation était de dire :

  1. Quand on étudie des réseaux d’activistes, on peut avoir les mêmes préoccupations que dans l’étude d’un réseau social : classer les éléments influents (par degré de centralité ou par distances minimales), ou dessiner des réseaux égocentrés. Néanmoins, quand les réseaux se multiplient, la topologie de chaque réseau devient essentielle pour comprendre quel type d’influence s’exerce dans quel environnement : étudier des réseaux égocentrés, comme ci-dessous, ne suffit plus.

    Screen Shot 2014-03-13 at 5.10.05 PM

  2. De plus, lorsque l’on étudie une structure très dense (ou l’inverse), la structure des liens change, et il faut pouvoir prendre en compte le nombre d’échanges entre les noeuds du réseau, voire les supports intermédiaires, comme d’un cas des réseaux bimodaux de type “user-hashtag”, pour pouvoir modéliser la structure du réseau et l’importance de certaines caractéristiques comme les effets d’interconnaissance :

    Screen Shot 2014-03-13 at 5.10.31 PM

  3. Enfin, il faut se donner les moyens de se demander si le réseau observé aurait pu exister par accident, en simulant quelques-uns de ses paramètres et en découpant ce travail dans le temps pour saisir les évolutions temporelles de la structure. Je n’ai pas développé ce point parce c’était hors-sujet et que je n’ai pas eu le temps de l’apprendre au cours des dernières vacances (de Noël…), mais j’y reviendrai ici quand j’aurai des données et des modèles finalisés à présenter.

Il y a eu une question dans la salle sur le cas d’un “buzz” qui est apparemment passé de Twitter aux rédactions nationales en un weekend, mais je crois avoir répondu que la structure du réseau (médiatique) était moins importante pour expliquer le phénomène que le mécanisme d’imitation rationnelle qui contraint les journalistes quotidiens à créer des “buzz” de toutes pièces, pour le meilleur comme pour le pire.

Open data et politique de santé

L’apéro Science & Web #33 de jeudi prochain à La Penderie sera consacré à l’open data en santé, qui pose toutes sortes de questions similaires à celles que l’on peut trouver dans l’histoire des politiques de surveillance épidémiologique.

Si le sujet vous intéresse, j’y ferai un petit topo au croisement de cette recherche, dont j’ai déjà résumé le contenu, et du contexte français actuel, qui ne ressemble pas à ce qui se fait dans d’autres systèmes de santé. Pour changer, il n’y aura pas de code R.

Ça commence à 19h30, pendant les happy hours.

Mise à jour : on a raisonnablement profité des happy hours. La suite à l’Open Data Day de l’Open Knowledge Foundation, ce samedi !

Porngrams avec R

Pour celles et ceux qui auront besoin d’inclure les résultats de Sexualitics dans leurs papiers, voici la fonction R qui renvoie le graphique correspondant, avec la possibilité de visualiser jusqu’à dix mots-clés :

porngram("asian", "american", "french", adjust = FALSE)

porngram1

Il est assez fréquent de vouloir ajuster les courbes en incluant un diviseur commun pour contrôler par le volume de données disponible pour chaque année. Reprise du même exemple avec ce paramètre :

porngram("asian", "american", "french", adjust = "xxx")

porngram2

La fonction reprend des bouts de code que j’avais écrit pour le package ngramr. Malheureusement, les données de Google Ngram s’arrêtent en 2008, ce qui ne permet pas d’ajuster les Porngrams par les Ngrams.

Un exemple plus complet :

geo

Pour analyser ces bêtises, il faut faire un petit effort de manipulation en différenciant la série temporelle de chaque mot-clé sur les années 2008-2012, et en extrayant les composantes principales de la transposée du résultat : l’année 2011 est celle où les variations de volume des mots-clés sélectionnés ont été les plus importantes.

Derniers graphiques avant 2014

En faisant tourner à nouveau les scripts de réseaux législatifs dont j’ai déjà parlé plusieurs fois ici, j’ai pu vérifier les résultats précédents sur des données un peu plus propres (merci Regards Citoyens) et étendues à tous les amendements de l’année qui se termine :

Screen Shot 2013-12-30 at 7.55.26 AM

Mais j’ai aussi pu vérifier (cf. la fin de cette note) que l’Assemblée nationale doit s’apprêter à réorganiser son site Internet : entre juillet et décembre 2013, l’index des amendements déposés sous la 13e législature a diminué de 450 à 250 dossiers, et j’ai vérifié, plusieurs d’entre eux sont tout à fait valides (ce n’est pas une correction attribuable à des problèmes de datation, par exemple).

En attendant que ce mystère s’éclaircisse, voici la tête des données actualisées. Les barres grises comptent les amendements individuels, les barres rouges les amendements co-signés à moins de dix, et les barres bleues les amendements co-signés par plus de dix députés, avec des pics de co-signatures vers 200 sur les lois de finance et autres joyeusetés. Le pic gris monstrueux correspond au mariage pour tous.

amendments_sponsors

Je vous épargne un graphique de réseau en plus. Non, je déconne, voici un dernier réseau législatif de l’année, basé sur presque 40 000 amendements déjà co-signés sur la législature en cours. Il me reste à calculer les mesures de centralité et de modularité en tenant compte de la pondération du réseau — c’est en cours.

network.example

Meilleurs voeux !

Des réseaux et des mots

Histoire d’en terminer avec les réseaux de députés, voici quelques slides publicitaires pour la fonction ggnet du package GGally, qui rassemble plusieurs fonctions graphiques exploitant la syntaxe de ggplot2 :

Côté analyse, le réseau “Twitter” des députés est moins parlant que celui de leur travail législatif, même s’il lui ressemble structurellement, mais je ne reviens pas là-dessus, n’ayant pas beaucoup plus de données qu’il y a quelques mois.

Je présenterai les slides sur ggnet mercredi à R Addicts Paris, aux côtés d’autres présentations beaucoup plus avancées dans la manipulation de graphiques. Côté réseaux, il y a plein de pistes pour produire des réseaux manipulables, comme sigma.js ou d3Network. Voici un exemple de réseau textuel visualisé avec cette dernière fonction, qui utilise d3.js :

d3Network

La version dynamique, que je ne peux pas montrer sans l’héberger ailleurs que sur ce blog, devra attendre un peu. Les données sont tirées d’un petit exemple de modélisation textuelle dans un corpus faiblement structuré, conçu pour Baptiste Coulmont.

Dans cet exemple, les liens entre les termes correspondent à leur probabilité d’association dans un ensemble de termes lemmatisés, où les termes sont groupés par “thèmes possibles“. La modélisation utilise des distributions de Dirichlet et s’estime, grosso modo, de manière “fixe”, “aléatoire” ou “bayésienne” — ce qui prend des plombes dès que le corpus contient plus de quelques centaines de documents…

Dernier truc en cours, un autre exemple de temps de calcul très lent, et qui demande en plus un très long processus préalable de récupération des données. Le graphique suivant contient un peu plus d’un million d’observations, agrégées par semaine de publication et séparées visuellement par institution d’origine :

fig4_week

Le projet auquel se rattache les données est trop peu construit pour en dire vraiment plus, sinon que R et RStudio gèrent très bien les manipulations graphiques sur un million de points, à condition d’être disposé à aller se faire un café (ou même en racheter à côté) pendant que les objets ggplot2 (environ 250 MB par objet) percolent. Peut-être bigvis peut-il encore réduire ce temps de calcul, mais dans tous les cas, R fonctionne à un million de points : testé, approuvé.

Bonnes fêtes :)

L’évolution de la carte électorale du FN : mon papier au congrès de l’AFSP

J’arrive après la bataille, mais je voulais mettre en ligne le papier que j’ai présenté lors du congrès de l’Association française de science politique, qui s’est tenu du 9 au 11 juillet dernier à Sciences Po. Je participais à la ST 27 intitulée “le ‘nouveau’ Front national en question”. Ayant envoyé mon papier en retard, il n’est pas encore en ligne sur le site de l’AFSP, mais il est désormais disponible sur HAL-SHS.
Dans ce papier, j’essaie de répondre à la question “le Front national de Marine Le Pen est-il un ‘nouveau’ Front national ?” du point de vue de sa carte électorale. Sur le plan méthodologique, je m’appuie sur un modèle de croissance multiniveau du vote FN de 1995 à 2012 (je crois bien que c’est la première fois que c’est fait en France), avec comme données les résultats du Front national par canton aux élections présidentielles sur cette période, ainsi qu’un certain nombre de variables “indépendantes” : composition socio-démographique de la population essentiellement, mais aussi part des élèves scolarisés dans l’enseignement privé (pour tester l’influence catholique, ou ce qu’il en reste), caractère plus ou moins urbain ou périurbain des cantons.
Sur le plan substantiel, je conclus qu’au-delà qu’une quasi-stabilité de niveau entre 1995 et 2012 (avec évidemment l’exception de 2007), le vote FN a connu une transformation de sa structure géographique au fil du temps, qui tient surtout au déclin du vote FN dans les centres urbains et à sa croissance dans les périphéries urbaines et, surtout, à la campagne. Dans le même temps, l’association avec la structure socio-professionnelle a plutôt tendance à diminuer, que ce soit du côté des indépendants ou du côté des ouvriers.
Toutes ces évolutions sont assez linéaires sur la période, et en aucun cas 2012 ne marque un changement radical par rapport aux élections précédentes. C’est d’ailleurs ce qu’a montré de manière générale la section thématique, dans divers domaines (idéologique, militant, etc.) : les années récentes, depuis l’arrivée à la tête du Front national de Marine Le Pen, n’ont fait que continuer des tendances dont les origines sont bien plus anciennes. Le changement dans la continuité, comme dirait l’autre…

Quantification du travail parlementaire, pour quelques variables en plus

À l’occasion d’un coup de ménage estival, voici une mise à jour prévue depuis longtemps au dossier flegscrap, qui permet de récupérer les documents déposés sous les cinq dernières législatures de l’Assemblée nationale :

flegscrap

Collecter des données pendant la session législative implique de récupérer des documents déposés le jour même, ce qui donne des comparatifs intéressants où l’on voit, par exemple, le déplacement des amendements sur les articles d’une loi en cours d’examen :

Screen Shot 2013-07-14 at 12.16.51 AM

Les projets et propositions de loi qui s’insèrent sur l’agenda parlementaires apparaissent d’abord dans les sources HTML que le code télécharge, puis rejoignent le jeu de données entre chaque itération, donnant à voir comment les données sont progressivement complétées :

Screen Shot 2013-07-18 at 8.27.59 PM

Les données montrent deux espaces, dominés respectivement par les projets de loi (probabilités de discussion et d’adoption élevées) et les propositions de loi (probabilités de discussion et d’adoption faibles). En rentrant dans le détail, on voit aussi que la distribution des séances de débat en séance publique s’achètent cher (auprès de la conférence des Présidents, si je ne m’abuse).

null

En attendant que le site Internet de l’Assemblée nationale réorganise ses données, voire mieux, en rajoute. Cela ne fera pas disparaître la nécessité de bien nettoyer les données.

Un réseau de 68 203 co-signatures sur 11 569 amendements

J’ai récemment évoqué les co-signatures d’amendements, en me demandant tout du long si le réseau des co-signataires reflétait la même structuration partisane que le réseau des députés sur Twitter. Voici le résultat final sur les 11 500 amendements co-signés depuis le début de la 14e législature en cours :

network.fruchtermanreingold

J’ai rapidement annoté le graphique que m’a sorti ggnet après un calcul de douze minutes pour constituer le réseau1. Pour générer ou actualiser les données, il suffit de récupérer les dossiers parlementaires puis d’en extraire les co-signataires. Le résultat est une gigantesque liste de listes à décomposer en 68 203 paires uniques de co-signataires :

neta.prep

Pour tester mes versions intermédiaires, j’ai utilisé des échantillons réduits. Sur ces échantillons, le groupe GDR est complètement isolé, car il rédige moins d’amendements en valeur absolue et n’en co-signe pas souvent avec des membres d’autres groupes parlementaires. Voici le réseau avec 500 co-signatures sélectionnées au hasard :

neta.500

Puis, lorsque l’on augmente la “résolution” en prenant un échantillon dix fois plus large de 5 000 amendements, les connexions commencent à apparaître, plaçant le groupe GDR dans l’opposition, en dehors du groupe de “soutien” radical-écologiste placé à côté de la majorité socialiste :

neta.5000

Le réseau place également les élus frontistes dans cette opposition, mais comme il manque quelques données, les points gris ne sont pas tous des élus NI. Tout est perfectible, mais je n’ai pas le temps de corriger ce problème, créé par la présence d’homonymes. J’ai rédigé cette version dans le train et vais m’en tenir à ça.

La force du marqueur partisan est aussi évident que dans le cas des députés sur Twitter : l’immense majorité des liens se tisse à l’intérieur des groupes parlementaires. Cet effet ne révèle toutefois rien d’inconnu, et surtout rien de complet : le travail parlementaire trans-groupe, déjà identifiable dans ces visualisations, est simplement plus discret que ces signaux publics que sont les liens par Twitter ou par co-signature d’amendements2.

Pour terminer, une visualisation de la centralité des points montre les inégalités d’investissement dans le travail de co-signature d’amendements (tout en sachant que ce travail exclut de facto celui, non négligeable en quantité et certainement en temps, sur les amendements déposés au nom d’un seul député) :

network.centrality

Le code et les données sont en ligne, avec les notes de construction et les instructions pour actualiser les données. Il doit être possible, moyennant des retouches mineures au code du scraper, de récupérer les mêmes données pour les législatures précédentes.

Mise à jour : le code permet désormais de travailler sur les deux législatures précédentes et de visualiser les données sous forme de réseaux bipartites, un type de réseau à “deux modes” où l’on représente les acteurs et les événements (ici, les co-signatures d’amendements) sur le même graphe. Ces réseaux sont à l’honneur dans le dernier numéro de Social Networks.

Voici à quoi ressemble un réseau bipartite de la législature en cours, à partir d’un échantillon aléatoire de 5 500 amendements. La stratégie d’obstruction législative dans l’opposition est parfaitement lisible, de même que la division du travail entre les groupes et leurs positions respectives vis-à-vis du nexus majorité/opposition :

network.bipartite.14

Je n’avais pas prévu d’aller vers ce type de visualisation, mais Pedro Jordano m’a convaincu et a fourni le code qui sert à convertir les données entre single-mode et two-mode. En raison de la taille et de la nature du réseau, il faut également penser à le stocker dans une matrice “économe” qui compresse l’espace pris par les tonnes de “zéros” qu’on trouve dans les réseaux bipartites : le code pour cette sparse matrix est venu d’un billet de Solomon Messing sur le sujet.

  1. Ce n’est pas du “big data”, mais il faut quand même aplanir une matrice de plusieurs millions de lignes pour créer le réseau. []
  2. Il suffit de penser, par exemple, aux amendements déposés en commission, exclus des données uniquement nominatives montrées ici. []