Une analyse statistique de la campagne présidentielle

Comme la plupart des français en âge de voter, j’ai reçu il y a quelques jours les programmes des différents candidats à l’élection présidentielle de 2012. C’était l’occasion rêvée de faire un peu de text-mining et ainsi de comprendre le positionnement des différents candidats.

Principe

Le text-mining est l’étude statistique des textes. Elle consiste à décrire les textes sous la forme de vecteurs numériques, puis à utiliser des techniques traditionnelles de data-mining sur ces vecteurs. La méthode la plus courante consiste à prendre l’ensemble des mots présents dans l’ensemble des documents, puis pour chaque mot et pour chaque document, à calculer un score d’importance du mot dans le document. On obtient ainsi un tableau de nombres avec en lignes les textes et en colonne les mots.

abrog abrogeon absenc absolu abus
eva 0.000 0.000 0.000 0.000 0.003
francois b 0.000 0.000 0.000 0.000 0.003
francois h 0.000 0.000 0.000 0.000 0.000
jacques 0.004 0.002 0.002 0.002 0.000
jean luc 0.010 0.004 0.000 0.003 0.000
marine 0.000 0.000 0.000 0.000 0.000
nathalie 0.000 0.000 0.000 0.001 0.000
nicolas da 0.003 0.000 0.000 0.000 0.000
nicolas s 0.000 0.000 0.003 0.000 0.000
philippe 0.000 0.000 0.000 0.000 0.000
Premières colonnes du tableau créé pour effectuer l’analyse statistique.

Il existe différentes mesures d’importance : la plus simple consiste à compter le nombre d’occurrences d’un mot dans un texte. Ici on utilise un score un peu plus sophistiqué qui est tel que :

  • si un mot apparait souvent dans un texte mais pas dans les autres, alors le score est élevé.
  • s’il apparait peu dans le document ou s’il apparait souvent dans tous les documents, alors son score est faible.

Afin de rendre les résultats plus faciles à lire et à interpréter, on supprime les mots  qu’on retrouve dans tous les textes comme les pronoms, les conjonctions ou les auxiliaires. Dans le cas présent, on essaie également de supprimer un maximum de mots du langage courant afin de ne conserver que les mots qui ont un contenu politique

Résultats

Une fois ce tableau construit, on peut utiliser les méthodes classiques de data-mining. On commence par réaliser une classification hiérarchique (si vous ne savez pas ce que c’est, vous pouvez jeter un oeil à cet article). On obtient ainsi trois groupes de candidats : le premier regroupe les candidats très à droite, le second les candidats très à gauche et le dernier les candidats plutôt centristes.

Classification hiérarchique des candidats, fondée sur la proximité de leurs tracts. On obtient trois groupes : les candidats de la droite dure, ceux de la gauche dure et les candidats centristes. Dupont-Aignan se retrouve dans ce dernier groupe, mais est malgré tout assez éloigné des trois autres candidats centristes.

Afin de mieux comprendre ce qui se cache derrière ces divisions, on réalise une analyse en composantes principales (voir ici pour une explication). Dans le plan constitué par les deux premières composantes principales, on retrouve les trois groupes. Le groupe de droite se trouve en bas en droite, le groupe de gauche en bas à droite et les centristes au centre en haut.

Résultats de l'analyse en composantes principales. Dans le plan créé par les deux premières composantes, on retrouve les groupes identifiés précédemment.

Afin d’interpréter ces composantes, on regarde quels sont les mots qui contribuent le plus à celles-ci. Sur le graphique ci-dessous, on a représenté les 50 mots dont la contribution est la plus élevée.

Mots ayant la plus forte contribution aux deux premières composantes principales. Cliquez pour voir l'image en grand.

En bas à droite, on retrouve des termes nationalistes et conservateurs : « compatriotes », « France », « Français », « immigration », « famille », « valeur ». Si on avait pris davantage de mots, on retrouverait également des termes associées à la sécurité : « police », « gendarmerie », « sécurité », « terrorisme », « armé » ainsi que des termes à fort contenu émotionnel tels que « peur », « mensonge » et « souffrance » Mais ce qui ressort le plus, c’est le mot « fort » : Nicolas Sarkozy comme Marine Le Pen désirent une « France forte » !

En bas à gauche, on trouve des termes caractéristiques de l’extrême gauche : « travailleur », « classe », « capital », « patron », « exploitation », etc. Là encore, on trouve des termes à fort contenu émotionnel : « licenciement », « catastrophe », « brutal », « dictature ». En fait, c’est à cause de ces mots que les candidats d’extrême gauche se retrouvent dans le bas du plan tout comme les candidats de droite et d’extrême droite. Dans leurs tracts, ces candidats s’adressent aux gens du peuple (on pourrait parler de populisme) et tentent de créer l’émotion chez le lecteur.

Au contraire, en haut on trouve des termes assez neutres, qui ont souvent trait à l’économie (« prêt », « épargne », « équilibre », « impôt »…), aux institutions (« éducation »,   »justice », « parlement », « ministère », etc.) et à l’environnement. Ici, on est face à un discours qui se veut technique et rationnel, qui cherche non pas à émouvoir, mais à convaincre.

Finalement, on peut conclure que la première composante capture les convictions politiques et oppose idées de droite et de gauche. La seconde composante quant à elle semble décrire les stratégies de communication et oppose les candidats qui cherchent à émouvoir et ceux qui essaient de convaincre.

Conclusion

Cette très rapide étude met en lumière les stratégies choisies par les différents candidats. Comme en 2007, Nicolas Sarkozy a décidé de séduire l’électorat d’extrême-droite, ce qui fait que son discours est proche de celui de Le Pen. François Hollande a quant à lui choisi un discours centriste, mesuré et plutôt technique. Mélenchon se trouve à mi-chemin entre les candidats centristes et les candidats d’extrême gauche, ce qui lui permet de séduire l’électorat d’extrême gauche et une partie de celui de la gauche modérée.

Faites-le vous-même

Vous pouvez télécharger les programmes des différents candidats ici.

Pour obtenir ces fichiers, j’ai scanné tous les programmes puis je les ai traité avec un logiciel d’OCR. Ces fichiers contiennent par conséquent de nombreuses coquilles.

Pour faire du text-mining avec R, il faut utiliser le package « tm ». Pour l’installer :

Et pour l’utiliser :

Pour la suite, il vous faudra également le package « Snowball » :

install.packages("Snowball")

Commencez par télécharger les programmes des candidats. Dézippez le fichier dans votre répertoire de travail. Vous pouvez maintenant importer les textes dans R avec la commande suivante :

corpus <- Corpus(DirSource("campagne"))

Afin de faciliter le travail d’analyse, on effectue quelques opération de traitement des textes :

# Obligatoire sous mac OS X (et peut-être avec d'autres systèmes
# d'exploitation) pour utiliser la fonction stemDocument
Sys.setenv("NOAWT" = "true")

# Mettre en minuscules
corpus <- tm_map(corpus, tolower)
# Remplacer les ponctuations par des espaces
corpus <- tm_map(corpus, function(x) gsub("\\W", " ", x))
# Supprimer les mots courants
corpus <- tm_map(corpus, removeWords, words = stopwords("french"))
# Supprimer les terminaisons des mots (ex : e, es, ent...)
corpus <- tm_map(corpus, stemDocument, language = "french")
# Supprimer les nombres
corpus <- tm_map(corpus, removeNumbers)
# Supprimer les espaces superflus
corpus <- tm_map(corpus, stripWhitespace)

On peut maintenant calculer le tableau utilisé dans cet article, à l’aide de la fonction « DocumentTermMatrix » :

dtm <- DocumentTermMatrix(corpus, control = list(weighting = weightTfIdf))

On supprime les mots trop rares ou trop fréquents pour apporter de l’information à l’aide de la commande suivante :

dtm <- removeSparseTerms(dtm, 0.8)

Notez que cette fonction nécessite de choisir un seuil : plus celui-ci est petit, moins il restera de mots. Il n’y a pas de manière objective de choisir cette valeur. Ici je l’ai choisi en essayant de supprimer un maximum de mots du langage courant tout en conservant les mots à connotation politique.

La classification hiérarchique peut être réalisée à l’aide de la fonction « hclust » :

d <- dist(dtm)
h <- hclust(d, "ward")
plot(h)

Enfin, l’analyse en composante principale nécessite le package « FactoMineR » :

install.packages("FactoMineR")
library(FactoMineR)
pca <- PCA((as.matrix(dtm)), scale.unit = F)

Pour récupérer les mots les plus influents, il faut bidouiller un peu. On commence par récupérer les coordonnées des mots, puis on calcule la distance à l’origine et enfin on identifie les mots qui ont la plus grande distance à l’origine. Ca donne :

coord <- pca$var$coord
d <- coord[,1]^2 + coord[,2]^2
idx <- which(pond > quantile(d, 1 - 50/nrow(coord))) # On veut environ 50 mots

plot(coord[idx, 1:2], type = "n", xaxt = "n", yaxt = "n", xlab = "Composante 1",
     ylab = "Composante 2")
text(coord[idx, 1:2], names(idx))
abline(h = 0, lty = 2, col = gray(0.5))
abline(v = 0, lty = 2, col = gray(0.5))
Cette entrée a été publiée dans Analyse. Vous pouvez la mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>