Les “unes” de Charlie Hebdo au cours du temps

Sur le thème « Qui est Charlie Hebdo ? », voici quelques compléments au billet de mercredi. Au passage, j’ai légèrement amélioré le code de réplication des billets, en corrigeant quelques erreurs mineures et en complétant les (rares) valeurs manquantes ; on passe, du coup, à un jeu de données qui contient 338 « unes » de Charlie Hebdo, catégorisées à l’aide de 401 mots-clés. C’est encore améliorable, mais la version actuelle me suffit.

Dans le billet précédent, donc, j’évoquais les mots-clés des « unes » de quatre illustrateurs de Charlie Hebdo, à grands renforts de réseaux visualisant les co-occurrences entre ces mots-clés (merci encore au fantastique blog Strips Journal pour le travail de codage). En séparant les « unes » par auteur, j’ai supposé que celles-ci variaient dans l’espace : l’espace des mots-clés de Luz n’est pas celui de Charb, qui n’est pas celui de Cabu.

En revanche, je n’ai rien dit des variations dans l’espace. Y en a-t-il ? Trouve-t-on des mots-clés sur la religion dans les mêmes proportions au fil des années ? Le jeu de données couvre intégralement les années 2009 à 2014 : découpons-le en quatre périodes de trois mois chacune, et voyons si les thèmes « Religion », « Terrorisme » et « Violence » y reviennent aussi souvent.

Voici, par exemple, les co-occurrences de termes de juillet à septembre 2009 (cliquer pour la version PDF) :

network_2009_3

On y parle de Sarkozy, Villepin, Clearstream, d’Hortefeux et de Besson, bref, de la Sarkozie. Et voici celui, pour comparaison, des trois « unes » de l’année 2015 :

network_2015_1

Pour la suite, on garde les trois « unes » de 2015 en mémoire, et l’on se concentre sur les années 2009-2014, où le nombre de « unes » est suffisamment élevé pour que les réseaux de co-occurrences soient un peu denses1. On va chercher, dans ces réseaux, les sous-réseaux les plus fortement liés aux thèmes « Religion », « Terrorisme » et « Violence ».

Les réseaux de co-occurrence

Voici les réseaux de co-occurrences qui nous intéressent, mis à la suite les uns des autres (cliquer à nouveau pour une version un peu plus grande) :

network_quarters

On distingue, sur certaines périodes, des “zones vertes” — des clusters de mots-clés liés à la religion. Comment repérer ces périodes ? Une méthode ultra-basique :

  1. Pour chaque période de trois mois (soit de 12 à 14 « unes »), on mesure les dimensions du réseau de co-occurrences complet : le nombre de mots-clés, et le nombre de liens, c’est-à-dire de co-occurrences.
  2. On extrait ensuite le sous-graphe qui ne contient que les mots-clés liés aux trois thèmes qui nous intéressent : « Religion » (en vert), « Terrorisme » (en rouge), et « Violence » (en mauve).
  3. On mesure les dimensions du sous-réseau, que l’on divise par les dimensions du réseau complet. Plus les fractions de mots-clés ou de liens augmentent, plus les thèmes sont représentés.

Voici les résultats de l’opération. Les deux plus hautes barres sont en bleu, les quatre suivantes en turquoise, et les autres en jaune2 :

prop_nodes

prop_edges

Les lignes horizontales en pointillés correspondent au niveau de chaque proportion dans le réseau de co-occurrences des trois « unes » de 2015, qui servent de niveau de référence. Comme on peut le voir, il y a deux autres périodes où Charlie Hebdo a souvent fait sa « une » sur les mêmes thèmes :

Voici le réseau “2011-2” (cliquer pour bla bla bla) :

network_2011_2

Et voici le réseau “2013-1” (cliquer pour bla bla bla) :

network_2013_1

On va se servir de ces deux réseaux pour avancer un peu dans l’analyse—parce que jusqu’à présent, il faut signaler que l’on a utilisé des réseaux de co-occurrences, mais sans vraiment bénéficier de la forme “réseau” : 90% de ce que l’on a observé aurait également été observable sur des tris à plat de fréquences brutes. Pour pouvoir réellement bénéficier de la forme “réseau”, il va falloir faire un peu de modélisation.

La suite dans le prochain billet.

  1. La densité correspond au nombre de liens dans le réseau, divisé par le nombre de liens qu’il aurait pu contenir si tous les noeuds étaient connectés à tous les autres. Cela vous donne une fraction de 0 (réseau vide) à 1 (réseau complet), comparable d’un réseau à l’autre. La densité des réseaux des années 2009-2014 varie de 0.08 à 0.38. []
  2. Si vous voyez d’autres couleurs, ce n’est pas grave, c’est juste que les cônes de votre rétine déconnent. Ou alors les miens. On s’en fiche. []

De quoi parlent les “unes” de Charlie Hebdo ?

Charlie Hebdo recommence à paraître normalement aujourd’hui.

Sur son blog, Gaël évoque le travail de deux sociologues, publié sous la forme d’une tribune dans Le Monde. Le graphique ci-dessous résume à la fois le thème de l’étude et son résultat principal :

charlie_lemonde

On avait pu entendre la même chose sur certains plateaux télévisés. Sauf que…

Sauf que Gaël pose les bonnes questions :

[L]a quantité de « unes » de Charlie Hebdo consacrées à l’Islam faisait-elle débat ? […]

Le décompte des “unes” du journal était-il un bon moyen de repérer l’obsession, si elle existe, de Charlie Hebdo pour l’Islam ?

Comment, dès lors, qualifier précisément la relation de Charlie Hebdo à l’Islam ?

On peut effectivement se demander si les “unes” de Charlie Hebdo peuvent s’analyser comme celles de Paris Match, en établissant simplement la fréquence de tel ou tel personnage ou thème en couverture. Et même si l’on accepte la méthode, il est difficile de répondre sans données : or, les deux sociologues n’en fournissent aucune, ce qui empêche à la fois de vérifier leur codage et de tenter une analyse secondaire.

En revanche, le texte publié dans Le Monde renvoie fréquemment à un blog qui archive régulièrement les différentes “unes” de Charlie Hebdo depuis septembre 2008. Mieux, le blog fournit des mots-clés avec chaque couverture, comme « Religion« , « François Hollande« , « François 1er » ou « xénophobie« , ainsi que la date de parution et l’auteur de la couverture. On peut donc passer aux choses sérieuses.

Les données

On commence par récupérer les métadonnées des 329 “unes” publiées sur le blog, ce qui demande 100 lignes de code à tout casser, téléchargement desdites “unes” inclus. On vérifie ensuite les fréquences principales, à commencer par les dates de parution. Il y en a bien 52 de publiées pour les années 2009-20131, une quarantaine pour 2014, et quelques-unes avant et après :

> table(substr(d$date, 1, 4))

2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 
   2    1   19   52   52   52   52   53   43    3 

Et puisque l’on va s’intéresser aux auteurs, les voici par fréquence décroissante :

> rev(sort(table(d$author)))

    Charb      Cabu       Luz      Riss Catherine       Jul   Tignous    Honoré 
       97        78        73        57        14         4         3         2

Le décor est planté. Passons aux 399 différents mots-clés que l’auteur du blog a utilisé pour catégoriser les “unes” : je les ai intégralement parcourus, et comme prévu, il n’y a aucune surprise dans ces mots-clés. On s’en doutait, Charlie Hebdo titre, comme tout le monde, sur l’actualité politique, économique et sociale. Jetons quand même un coup d’oeil aux 1% des mots-clés les plus fréquents :

> table(terms)[ table(terms) > quantile(table(terms), .99) ]
terms
        élections françois hollande          religion           sarkozy 
               42                39                33                80

On notera qu’à ce stade, on a déjà posé plein d’hypothèses : le codage est uniforme au cours du temps, tous les thèmes sont aussi bien catégorisés, etc. Vérification faite, à part quelques fautes d’orthographe, le codage est vachement bien : par exemple, l’auteur du blog inclue systématiquement les noms propres des personnages dans les mots-clés des couvertures où ils apparaissent2.

On note aussi que la religion revient souvent dans les mots-clés des “unes”, à raison d’environ une “une” sur dix. Notre corpus est plus limité que celui des sociologues cités plus haut, mais la fréquence du thème y est à peu près identique : on va simplifier les choses et se convaincre que c’est une convergence de codage en double aveugle, et que du coup, boum, les deux codages sont valides. Youpi.

Voilà pour la phase “collecte et vérification des données”. D’accord, le raisonnement sur la validité du codage est ultra-léger, mais après tout, je veux bien faire confiance à un auteur de blog suffisamment consciencieux pour archiver la quasi-intégralité des “unes” de Charlie Hebdo depuis sept ans. A priori, distinguer Johnny Halliday et Mahomet n’est pas trop difficile, et la vingtaine de couvertures que j’ai vérifiées étaient bien codées.

Les réseaux

Les lecteurs réguliers de ce blog, s’il en reste quelques-uns, s’en doutaient : ça va finir en réseaux, cette histoire… D’ailleurs, j’ai oublié de raconter que j’en avais produit plein, plein d’autres sur le modèle des réseaux de cosignatures dans les chambres parlementaires françaises. Mais ce sera pour une prochaine fois. (Et dans l’attente, vous pouvez déjà jeter un coup d’oeil aux demos interactives.)

Bref bref bref, maintenant qu’on a les données, que va-t-on en faire ? Pour rappel, il y a 329 “unes”, 329/52 ~ six années de publication de 2008 à 2014, quatre auteurs principaux avec au moins 50 “unes” à leur actif (mon bien-aimé Cabu, et les non moins bien-aimés Charb, Luz et Riss), 399 mots-clés différents, et une moyenne de presque quatre mots-clés par “une” :

> library(stringr)
mean(1 + str_count(d$tags, ";"))
[1] 3.893617

Réponse : on va visualiser le réseau des co-occurrences des mots-clés, histoire de voir si les couvertures sur le thème “Religion” sont plus souvent associées à des termes comme “Terrorisme” que, par exemple, les couvertures sur le thème “Bretagne” ou “Syrie”. Pour cela, il nous faut la liste (non dirigée, et non pondérée, pour l’instant) de toutes les co-occurrences, par auteur :

full = data.frame()
for(i in 1:nrow(d)) {
  
  y = unlist(strsplit(d$tags[ i ], ";"))
  full = rbind(full, data.frame(
    expand.grid(i = y, j = y, stringsAsFactors = FALSE),
    author = d$author[ i ]
  ))

}

Ce qui donne, pour les premières lignes :

> head(full)
                      i       j author
1               banques banques   Riss
2                bourse banques   Riss
3                 crise banques   Riss
4 crise financière 2008 banques   Riss
5               lagarde banques   Riss
6               banques  bourse   Riss

Explication de texte : ces co-occurrences de mots-clés proviennent de la “une” de Charlie Hebdo n°849, parue le 24 septembre 2008, et qui était dessinée par Riss. Titre de la “une” tel qu’enregistré sur le blog : “Sauvez les banques”. Mots-clés : “banques, bourse, crise, crise financière 2008, lagarde”. Précis, n’est-ce pas ? Je vous l’avais dit, l’auteur du blog est un bon codeur, il a bien bossé.

Qu’est-ce qu’on fait avec ça ? Déjà, on vire les “self-loops”, c’est-à-dire les lignes qui contiennent deux fois le même mot-clé. Ensuite, on établit la fréquence de chaque ligne : combien de fois, par exemple, Cabu a-t-il dessiné une “une” portant à la fois sur le thème “Armée” et sur le thème “Afghanistan” ? Réponse dans quelques lignes de code un peu dégueulasses mais parfaitement fonctionnelles :

# remove self-loops and select artist name
edges = subset(full, i != j & author == "Cabu")[, 1:2 ]
  
# aggregate and count identical (sorted) ties
edges$u = apply(edges, 1, function(x) paste0(sort(x), collapse = "///"))
edges = data.frame(table(edges$u))
edges = data.frame(i = gsub("(.*)///(.*)", "\\1", edges$Var1),
                   j = gsub("(.*)///(.*)", "\\2", edges$Var1),
                   n = edges$Freq / 2)

La réponse, donc :

> head(edges)
            i             j n
1 afghanistan         armée 1
2 afghanistan       chômage 1
3 afghanistan        guerre 1
4 ahmadinejad antisémitisme 1
5 ahmadinejad        durban 1
6 ahmadinejad négationnisme 1

On dispose désormais de ce que l’on appelle, dans le jargon, une one-mode edge list pondérée (mais non dirigée, car il n’y a pas de “directionalité” d’un mot-clé à l’autre). En clair, ça signifie que l’on va pouvoir dessiner le réseau des co-occurrences des mots-clés, où chaque noeud est un mot-clé et chaque lien une ou plusieurs co-occurrence(s). Et à plus long terme, on va même pouvoir évaluer la probabilité de chaque co-occurrence.

Les graphes

On y arrive enfin. Avant de passer aux graphes, eux-mêmes, un dernier mot de méthode : pour faire ressortir les grandes thématiques des “unes” avec des couleurs, j’ai procédé à un rapide codage des mots-clés, similaire à celui de l’étude publiée dans Le Monde. J’ai ensuite simplifié ce codage pour ne garder que six catégories directement liées aux accusations diverses et variées dont Charlie Hebdo a fait l’objet :

  • Trois couleurs claires codent des catégories de mots-clés très larges : “France”, “International”, et “Varia”, la catégorie résiduelle, qui contient tout et n’importe quoi (“France Télécom”, “Hitler”, j’en passe) ;
  • Trois couleurs vives codent des catégories beaucoup plus précises :
    • La catégorie “Religion”, en vert, contient les 22 mots-clés du corpus qui portent sur les trois religions monothéistes3 : “antisémitisme, athées, benoit xvi, bible, burka, charia, coran, dieu, évêque, françois 1er, intégrisme, jesus, laïcité, lourdes, mahomet, opus dei, pape, prophète, ramadan, religion, torah, vatican”
    • La catégorie “Terrorisme”, en rouge, contient les 7 mots-clés directement assimilables au terrorisme international ou islamique : “al-qaida, 11 septembre, ben laden, jihad, mohamed merah, otage, terrorisme”
    • La catégorie “Violence”, en mauve, contient 13 mots-clés à connotation négative : “assassinat, attentats, discrimination, guerre, homophobie, massacre, parricide, pédophilie, sexisme, torture, tueur de masse, violence, xénophobie”

Ce codage a pour effet de souligner certains mots-clés bien précis, histoire de faciliter la lecture des graphes. Voici, par exemple, le réseau des co-occurrences de mots-clés construit à partir des 78 “unes” dessinées par Riss. Le graphe contient 172 mots-clés et 554 liens de co-occurrences entre ces mots-clés. Cliquez sur le graphe pour ouvrir la version PDF, qui est beaucoup plus lisible :

network_Riss

Grâce aux couleurs, on repère aisément la zone du graphe qui correspond aux (quelques) “unes” sur la religion :

Screen Shot 2015-02-26 at 04.24.19

On recommence l’exercice. Voici à présent le réseau des “unes” de Cabu (bien-aimé Cabu, tu me manques tous les mercredis) :

network_Cabu

Zoom à nouveau sur la “zone verte” correspondant aux “unes” sur la religion :

Screen Shot 2015-02-26 at 04.26.39

On continue avec Luz, qui est un peu plus compliqué que les deux graphes précédents :

network_Luz

Plus compliqué, en effet, car les mots-clés sur la religion sont éparpillés, mais il y a quand même un cluster visible en base à droite :

Screen Shot 2015-02-26 at 04.30.36

Et enfin, le réseau des co-occurrences de mots-clés pour les “unes” de Charb, qui contient notamment cette superbe association entre Jean-Marie Bigard et le 11 septembre, grâce à la couverture de Charlie Hebdo n°848 (septembre 2008) :

network_Charb

Dernier zoom sur la zone “Religion” et sur la zone “Terrorisme” mitoyenne4 :

Screen Shot 2015-02-26 at 04.34.12

Voilà pour les graphes. Pour la visualisation, voir ce script de 50 lignes, qu’il suffit de faire tourner après avoir fait tourner les deux précédents (données et codes couleurs). Le tout tient en 200 lignes de code et prend au strict maximum dix minutes à faire tourner. Et pour les feignasses, voici les données brutes (les pages du blog avec les métadonnées).

Nota bene – ne vous fiez pas au nombre de “unes” indiqués en haut des graphes : j’ai juste eu la flemme de changer tous les fichiers après avoir rectifié une petite erreur de programmation. L’erreur laisse croire que tous les graphes sont basés sur 78 “unes”. Or, s’il y a bien 78 “unes” pour Cabu, il y en a 97 pour Charb, 73 pour Luz, et 57 pour Riss. Le code de réplication produit les bons chiffres.

Conclusion provisoire

A-t-on “prouvé” quoi que ce soit avec ces graphes ? Certainement pas, sinon que Charlie Hebdo parle de tout et de rien. Je garantis une seule chose : les mêmes réseaux de co-occurrences sur les “unes” de Valeurs actuelles ou de Minute auraient été beaucoup, beaucoup plus simples à interpréter. Et c’est un peu, je pense, ce que suggérait Gaël dans son billet.

Prochaine étape : quelques probabilités simples à partir de ces réseaux et de leurs pondérations (que j’ai ignorées dans l’exercice de visualisation ci-dessus), et peut-être, si je trouve le temps de faire quelque chose de pas trop moche, une version interactive des graphes, avec visualisation parallèle des “unes” et autres gadgets. En attendant, Charlie Hebdo est en kiosques, si vous voulez voir un peu plus loin que la “une”.

Mise à jour : le code a été amélioré depuis la publication de ce billet. Voir le billet suivant dans la série « Charlie Hebdo ».

  1. L’année 2013 contient 53 “unes” parce qu’elle contient aussi la “une” d’un supplément. []
  2. Il y a même le nom précis des papes successifs ! Que demande le peuple. []
  3. Il n’y a pas de mots-clés sur les autres religions. []
  4. Attention, les graphes utilisent une méthode de placement qui contient une part irréductible d’aléatoire : les positions affichées ne sont pas du tout les seules possibles. []