Un wordcloud (ou nuage de mots-clés / nuage de tags) est une répresentation visuelle de mots dont la taille est proportionelle à la fréquence de ce mot dans un texte donné.
Exemple :
Avec R, il est assez facile de réaliser des wordcloud plutôt chouettes (je vous l’ai déjà dit, R c’est bien ;) ), je vais donc vous montrer comment, avec un petit exemple en relation avec l’actualité.
- Charger les données -
1 |
Texte <- readLines("HommageNationalHollande-27112015.txt", encoding = "utf-8") |
> Il s’agit du texte complet de l’hommage aux victimes des attentats du 13 novembre 2015, fait par le président François Hollande le 27 novembre (disponible sur internet).
- Charger les packages -
1 2 |
library(tm) # ce package propose un ensemble de fonctions facilitant le traitement de donnees textuelles library(wordcloud) # ce package permet la creation de wordcloud |
- Travail sur les données -
1 2 3 4 |
text_corpus <- Corpus(VectorSource(Texte)) text_corpus <- tm_map(text_corpus, content_transformer(tolower)) text_corpus <- tm_map(text_corpus, removePunctuation) text_corpus <- tm_map(text_corpus, function(x)removeWords(x,stopwords(kind = "fr"))) |
> Explications :
– La 1ère instruction permet de transformer le texte « brut » en un élément de classe « corpus » (classe du package « tm »), sur lequel un ensemble de fonctions de traitement de texte pourront être directement appliquées.
– La 2nde instruction permet de transformer toutes les lettres majuscules en lettres minuscules (afin par exemple que « Hommes » et « hommes » soient traités pareil).
– La 3ème instruction permet de supprimer automatiquement tous les caractères de ponctuations.
– La dernière instruction permet de supprimer automatiquement une grande partie des mots « de base » d’une langue donnée (ici le français avec l’instruction : kind = « fr », par défaut il s’agit de l’anglais), tels que par exemple : le, la, les, de, des, à, où, …
- Wordcloud -
1 2 3 |
set.seed(123456) # permet de "fixer un graine" pour l'alea, afin de pouvoir regenerer plusieurs fois le meme wordcloud wordcloud(text_corpus, max.words = 200, colors = brewer.pal(8, "Dark2"), rot.per=0) |
Remarque : On voit ici qu’il reste encore certains mots qui ne sont pas particulièrement utiles pour ce wordcloud visant à mettre en valeurs les « grands thèmes » de ce discours d’hommage. On va donc tenter d’en supprimer quelques-uns pour voir si on obtient quelque chose de mieux.
- Wordcloud : version 2 -
1 2 3 4 |
text_corpus2 <- tm_map(text_corpus, function(x)removeWords(x,c("quils", "cestadire", "tout", "dun", "cest", "etaient", "etre", "parce", "ete", "sais"))) # n'importe quelle liste de mots peut egalement etre passee en argument de la fonction "removeWords" set.seed(123456) wordcloud(text_corpus2, max.words = 200, colors = brewer.pal(8, "Dark2"), rot.per=0) |
> Ce wordcloud pourrait encore être retravaillé mais il est assez intéressant, notamment si on se concentre sur les mots apparaissant en bleu : hommes, femmes, tous, comme, meme, nation, retranscrivant bien le message général d’unité et d’égalité de ce discours.
- Enregistrer son wordcloud dans un fichier externe -
1 2 3 |
png("monwordcloud.png") wordcloud(text_corpus2, max.words = 200, colors = brewer.pal(8, "Dark2"), rot.per=0) dev.off() |
> Fonctionne aussi en remplaçant « png » par « jpeg », « pdf », …
- Pour aller plus loin : personnalisation du wordcloud -
La fonction « wordcloud » du package éponyme possède un certain nombre de paramètres permettant de personnaliser ses wordcloud :
- Tailles maxi et mini des mots affichés :
1scale = c(4,0.5) - Fréquence à partir de laquelle un mot sera retenu :
1min.freq = 3 - Nombre maximum de mots à afficher :
1max.words = Inf - Affichage des mots dans un ordre aléatoire :
1random.order = TRUE - Choix de couleur de mot aléatoire :
1random.color = FALSE - Proportion de mots tournés à 90 degrés :
1rot.per = 0.1 - Couleur des mots (du moins au plus fréquent) :
1colors = "black" - Autres paramètres pour le style des mots : type de police, taille des caractères, …
Exemple :
1 2 |
set.seed(123456) wordcloud(text_corpus, max.words = 200, scale = c(5,0.2), colors = brewer.pal(8, "Paired"), vfont = c("gothic english","plain"), rot.per = 0.3) |
Remarque : Pour le choix des couleurs, il est possible d’obtenir facilement des dégradés (ou palettes) « tout prêts » grâce au package « RColorBrewer » (installé avec le package « wordcloud ») et à la fonction « brewer.pal » utilisée ici dans les exemples.
Ci-dessous les différentes palettes de couleurs disponibles :
Et vous, avez-vous des exemples de wordcloud particulièrement réussis à partager ?