Et sans les journalistes ? (ou « robustesse de la communauté #EnLD un soir de match »)

La question a été posée sur twitter : quelle forme adopterait le débat de l’émission de radio « En Ligne Directe » lorsqu’on ne prend pas en compte les journalistes qui l’animent ? (tweet1 tweet2) Il ne s’agit pas de savoir à qui ils s’adressent, comment ils relancent le débat ou à combien de tweets ils contribuent, mais de découvrir la structure des relations entre les contributeurs, et seulement entre eux.

Pour y répondre, on a identifié comme journalistes @lamagouille @ducommnath @p_le_fort @raphaelgrand et @rtsinfoplus (pas toujours tous présents en même temps) et enregistré une version du réseau avec eux, et une sans (ce qui supprime également du graphe les arcs représentant un tweet qu’ils ont écrit, ou une mention). On conserve le même layout (disposition des sommets) pour faciliter la comparaison visuelle. La taille des noeuds reste une fonction (logarithmique – voir code) du nombre total de tweets écrits pendant le débat : sont comptabilisés les tweets sans mentions, avec mentions de journalistes, et avec mentions d’autres contributeurs (donc tous).

Nouveauté : les sommets dont le nom apparaît en rouge sont des utilisateurs mentionnés, mais qui n’ont pas contribué au débat. La couleur des sommets (i.e. les pastilles) ne signifie (toujours) rien. Mais j’espère bientôt changer cela, une fois que je les (vous) aurai tous fichés et que je pourrai afficher une couleur en fonction de leur (votre) « rôle » 😉

Ci-dessous le graphe des débats, avec les journalistes.

Les habitués auront remarqué, le mercredi soir 18 avril, date du gros du débat sur Twitter, que le sujet aura moins passionné les foules que d’autres débats précédents (voir anciens posts sur ce blog, pour s’en rendre compte). On s’observe cet affaiblissement dans le graphe ci-dessus à travers :

le nombre important de sommets isolés (4 sur 26 personnes, sans compter les 4 personnes dont le nom apparaît en rouge), qui sont proportionnellement plus nombreux que d’habitude. En effet, le nombre d’intervenants étant un peu plus faible qu’ordinairement, la probabilité qu’on interagisse avec un isolé l’est également.
Le graphe est peu dense (5.5% des arêtes possibles existent).
On observe au moins deux clusters (groupes très denses) très distants à l’échelle du réseau, qui font penser que le débat ne s’est pas déroulé de manière continue, mais par à-coups.
On trouve deux cycles plutôt anormaux : @raphaelgrand a des discussions (arcs dans les deux sens) avec @benoitgaillard et @boschettisteen. @alunoakapage est dans le même cas : alors pourquoi aucun arc entre @raphaelgrand et @alunoakapage ? Même question dans le quatuor @raphaelgrand – @benoitgaillard – @ducommnath – @grandjeanmartin …

Ces observations laissent présager d’un réseau assez peu solide, composé majoritairement de quelques échanges spontanés et rapides. Le graphe suivant (en enlevant les quatre comptes « journalistes ») le confirme, puisqu’on observe suite à leur disparition un éclatement en quatre groupes composés de plus d’un acteur :

On en conclut que le débat (mercredi-jeudi) sur l’immigration (portant sur des mesures prises par le Conseil fédéral et très contestées) n’a pas passionné les twittos romands, ce qui est aussi confirmé par un nombre de tweets plus faible que d’habitude : seulement 110 tweets contre 272 mardi-mercredi et 174 lundi-mardi.

En version animée, ça donne ça :

J’espère que @grandjeanmartin et @stephjaq verront un intérêt à ce semblant de réponse. Il reste encore beaucoup, et pour commencer, il faudrait observer les réseaux des débats des autres jours pour voir si ce vide se crée systématiquement (comme ça, je dirais non). D’autre part, une nouvelle question se pose : est-ce que densifier consciemment le réseau le rendrait plus efficace ? (= est-ce que le débat s’emballerait un peu plus ?) À vrai dire, un cheminement ténu (une suite de sommets et d’arcs) entre deux communautés n’apporte rien, s’il est justement anecdotique. Imaginons que l’arc entre @palrgogg et @kaltezar existe : le chemin passant par là et reliant @benoitgaillard à @cleonarda68 – voire le cluster qui lui est incidente (tout à gauche sur la figure) – est proprement inexploitable (je me suis permis d’ajouter ce commentaire personnel, parce que d’autres chercheurs pourraient vouloir y voir quelque chose… #saufquenon).

Quelques éléments de code…
[Ces commentaires font suite à certains des posts précédents, les éléments de code qui suivent seront difficiles à comprendre sans s’y référer.]

C’est un algorithme du nom de Fruchterman et Reingold (source) qui décide de la position des sommets du graphe. Très très schématiquement, il le fait en rapprochant les sommets adjacents, ce qui évite trop d’overlaps entre différentes parties du graphe lorsqu’on le visualise. On va enregistrer les coordonnées de ces positions ainsi :

g$layout

avec g notre graphe en cours d’étude. On définit également une fonction que l’on appelle draw pour gagner du temps lorsqu’il faut visualiser le graphe :

draw par(mar=c(0,0,3,0))
 plot(g,
 vertex.color = rainbow(vcount(g),start=5/6),
 vertex.label.dist = .2,
 vertex.size = log(V(g)$Freq+2)*2,
 vertex.label = V(g)$name,
 vertex.frame.color = "White",
 vertex.label.cex = 1
 edge.curved = .2,
 edge.width = E(g)$weight/1.5,
 edge.arrow.size = E(g)$weight/1.5,
 layout = g$layout,
 )
 title(main = "#EnLD 19 avril : Immigration", cex.main = 2.5)
 text(-0.8, 0.9, "La taille du sommet\ncorrespond au nombre\nde tweets écrits", cex=1.5)
 text(-0.8, -0.8, "L'épaisseur de l'arc\nest égale au nombre\nde mentions faites", cex=1.5)
 text(0.8,1, "Les sommets dont le nom\nd'utilisateur est en rouge\nn'ont pas contribué au débat", cex=1.5)
 }

L’astuce pour que les noms des absents soient en rouge :

V(g)$label.color <- "Red"
 for (i in V(g)) if (V(g)[i]$auteur) V(g)[i]$label.color <- "Black"

La création d’un fichier .png avec la jolie figure (la première) dedans :

png("graphe_enld_19avril.png",width=1000,height=1000)
 draw(g)
 dev.off()

Et la création d’une nouvelle figure sans les journalistes :

png("graphe_enld_19avril_sansjournaliste.png",width=1000,height=1000)
 g1  away  k  for (i in c("ducommnath","raphaelgrand","rtsinfoplus","lamagouille")) {away[k]  g1$layout  draw(g1)
 dev.off()

La première ligne sert à définir l’output (la sortie graphique). La seconde ligne génère un sous-graphe du graphe étudié précédemment, où tous les acteurs cités dans la liste, ainsi que les arcs y incidents, ont disparu. L’étape où l’on crée l’objet away et les quatre lignes qui suivent servent à retirer du layout précédent les coordonnées des sommets disparus.

Publicités