Chapitre 4 Text Mining
Nous voici à l’étape de l’analyse de contenu.
4.1 Tokenisation des titres
La première étape de l’analyse des titres est de transformer notre table en tidy text format
. Pour cela nous allons tokeniser les titres, c’est-à-dire séparer chaque mot (nous verrons aussi que nous pouvons séparer nos titres en n-grams) et les mettre dans une colonne. Pour nous aider, nous allons utiliser le package tidytext
et proustr
pour le nettoyage de la ponctuation.
title_agency <- adada_tbl3 %>%
select(agency, client, category, title) %>%
distinct_all() %>%
group_by(agency) %>%
mutate(titlenum = row_number())
tidy_title_agency <- title_agency %>%
pr_normalize_punc(title) %>% #from proustr
unnest_tokens(output = "word", input = "title") #from tidytext
#> Observations: 2,018
#> Variables: 5
#> Groups: agency [71]
#> $ agency <chr> "takaneo", "betocee", "agence_vous", "binsfeld", "plan_k", "…
#> $ client <chr> "kpmg", "rosport", "médecins du monde", "enovos", "belle éto…
#> $ category <chr> "category-marques", "category-crea", "category-crea", "categ…
#> $ title <chr> "kpmg plage 2019: kpmg persiste et signe avec takaneo", "sou…
#> $ titlenum <int> 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 2, 1, 3, 2, 4, 1, 5, 6, 1, 2, …
4.2 Soustraire les stopwords
Les stopwords
ou mots vides
sont des mots communs dénués d’intérêt pour notre recherche. Ils sont le contraire des mots pleins
. Ce sont des mots comme : “le”, “la”, “avec”, “du”, “ce”… que nous retrouvons avec une fréquence similaire dans un ensemble de documents. Pour soustraire les stopwords, nous devons récupérer une liste exhaustive. Nous allons nous servir du package stopwords
pour créer 2 tables. Elles contiendront les mots vides provenant de sources différentes. Nous rassemblons l’ensemble dans une seule table stop_mix
.
iso_stop <- stopwords(language = "fr", source = "stopwords-iso") %>% enframe(value = "word", name = NULL)
snow_stop <- stopwords(language = "fr", source = "snowball") %>% enframe(value = "word", name = NULL)
stop_mix <- iso_stop %>% bind_rows(snow_stop) %>% distinct()
word |
---|
a |
abord |
absolument |
afin |
ah |
ai |
aie |
aient |
aies |
ailleurs |
ainsi |
ait |
allaient |
allo |
allons |
allô |
alors |
anterieur |
anterieure |
anterieures |
Voici le résultat.
agency | client | category | titlenum | word |
---|---|---|---|---|
takaneo | kpmg | category-marques | 1 | kpmg |
takaneo | kpmg | category-marques | 1 | plage |
takaneo | kpmg | category-marques | 1 | 2019 |
takaneo | kpmg | category-marques | 1 | kpmg |
takaneo | kpmg | category-marques | 1 | persiste |
takaneo | kpmg | category-marques | 1 | signe |
takaneo | kpmg | category-marques | 1 | takaneo |
betocee | rosport | category-crea | 1 | sources |
betocee | rosport | category-crea | 1 | rosport |
betocee | rosport | category-crea | 1 | lancent |
betocee | rosport | category-crea | 1 | eau |
betocee | rosport | category-crea | 1 | aromatisée |
betocee | rosport | category-crea | 1 | rosport |
betocee | rosport | category-crea | 1 | mat |
betocee | rosport | category-crea | 1 | betocee |
agence_vous | médecins du monde | category-crea | 1 | médecins |
agence_vous | médecins du monde | category-crea | 1 | monde |
agence_vous | médecins du monde | category-crea | 1 | luxembourg |
agence_vous | médecins du monde | category-crea | 1 | oppose |
agence_vous | médecins du monde | category-crea | 1 | réalités |
4.3 Répétition, fréquence (tf) et tf_idf
4.3.1 Répétition
Avant de calculer la fréquence d’apparition d’un mot dans un document, nous devons calculer d’abord sa répétition. Nous allons regrouper chaque mot par agence avant l’opération.
tidy_title_agency2 %>%
mutate(agency = replace_na(agency, "no_agency")) %>%
anti_join(enframe(agency, value = "word", NULL), by = "word") %>%
anti_join(enframe(client, value = "word", NULL), by = "word") %>%
count(agency, sort = TRUE) %>%
kable("html", escape = FALSE, align = "l", caption = "Fréquence des token") %>%
kable_styling(bootstrap_options = c("striped", "condensed", "bordered"), full_width = T) %>%
scroll_box(width = "100%", height = "400px")
agency | n |
---|---|
no_agency | 5341 |
binsfeld | 690 |
mikado_publicis | 582 |
agence_vous | 533 |
concept_factory | 480 |
vanksen | 430 |
comed | 334 |
plan_k | 247 |
noosphere | 237 |
wili | 195 |
idp | 161 |
maison_moderne | 158 |
moskito | 157 |
lola | 142 |
h2a | 134 |
nvision | 122 |
takaneo | 108 |
dechmann | 106 |
moast | 106 |
betocee | 101 |
a3com | 95 |
bizart | 90 |
101_studios | 83 |
apart | 77 |
advantage | 69 |
skill_lab | 69 |
bunker_palace | 64 |
cropmark | 64 |
interact | 59 |
explose | 55 |
fish_and_chips | 55 |
granduchy | 54 |
human_made | 52 |
mad_about | 49 |
mad_about_soul | 49 |
push_the_brand | 48 |
knewledge | 45 |
accentaigu | 44 |
graphisterie_générale | 44 |
groupe_get | 38 |
mediation | 34 |
shine_a_light | 33 |
quattro_creative | 28 |
studio_polenta | 24 |
georges | 23 |
ludwig | 22 |
brainmade | 21 |
vidale_gloesener | 19 |
mefa | 18 |
pointcomm | 18 |
apollo strategists | 16 |
intrepide_studio | 16 |
antidote | 11 |
gotcha | 10 |
agacom | 8 |
e_connect | 8 |
piranha | 8 |
smart media | 8 |
standart | 8 |
dotcom | 6 |
meanings | 6 |
plugandcom | 6 |
kosmo | 5 |
rose_de_claire | 5 |
scalp | 5 |
addedvalue | 4 |
myagency | 4 |
tapage | 4 |
wide | 4 |
neopixl | 3 |
lightbulb | 2 |
Les agences avec le plus de mots sont les agences avec le plus de titres à leur actif. Logique.
4.3.2 Répétition par agence
Regardons le mot le plus répété par agence.
tidy_title_agency2 %>%
mutate(agency = replace_na(agency, "no_agency")) %>%
group_by(agency) %>%
count(word, sort = TRUE) %>%
anti_join(enframe(agency, value = "word", NULL), by = "word") %>%
# anti_join(enframe(client, value = "word", NULL), by = "word") %>%
arrange(desc(n)) %>%
filter(n == max(n)) %>%
distinct(agency, .keep_all = TRUE) %>%
kable("html", escape = FALSE, align = "l", caption = "Fréquence des token") %>%
kable_styling(bootstrap_options = c("striped", "condensed", "bordered"), full_width = T) %>%
scroll_box(width = "100%", height = "400px")
agency | word | n |
---|---|---|
no_agency | luxembourg | 205 |
binsfeld | campagne | 21 |
mikado_publicis | campagne | 21 |
comed | campagne | 18 |
agence_vous | bnp | 17 |
concept_factory | luxembourg | 17 |
vanksen | luxembourg | 13 |
plan_k | luxembourg | 9 |
idp | campagne | 8 |
moast | createam | 8 |
moskito | campagne | 8 |
dechmann | partners | 7 |
wili | dudelange | 7 |
lola | nouvelle | 6 |
takaneo | kpmg | 6 |
betocee | dévoile | 5 |
bizart | campagne | 5 |
fish_and_chips | auchan | 5 |
h2a | design | 5 |
maison_moderne | quitte | 5 |
noosphere | agence | 5 |
nvision | bofferding | 5 |
skill_lab | spot | 5 |
101_studios | signe | 4 |
a3com | signe | 4 |
apart | bcee | 4 |
cropmark | luxembourg | 4 |
human_made | luxembourg | 4 |
accentaigu | campagne | 3 |
bunker_palace | nouvelle | 3 |
graphisterie_générale | 10 | 3 |
groupe_get | campagne | 3 |
knewledge | 3 | |
mad_about | dété | 3 |
mad_about_soul | dété | 3 |
push_the_brand | marketing | 3 |
quattro_creative | police | 3 |
advantage | agence | 2 |
antidote | agence | 2 |
apollo strategists | apollo | 2 |
brainmade | agence | 2 |
explose | 1535 | 2 |
granduchy | 2018 | 2 |
interact | communication | 2 |
intrepide_studio | briquemont | 2 |
ludwig | adidas | 2 |
mediation | 1er | 2 |
mefa | contern | 2 |
pointcomm | aral | 2 |
shine_a_light | rejoint | 2 |
vidale_gloesener | luxembourg | 2 |
addedvalue | alleva | 1 |
agacom | 3d | 1 |
dotcom | identité | 1 |
e_connect | activités | 1 |
georges | agence | 1 |
gotcha | appel | 1 |
kosmo | change | 1 |
lightbulb | creativecluster.lu | 1 |
meanings | banque | 1 |
myagency | belux | 1 |
neopixl | anthony | 1 |
piranha | capital | 1 |
plugandcom | airstrip | 1 |
rose_de_claire | 2017 | 1 |
scalp | agence | 1 |
smart media | alexandra | 1 |
standart | associent | 1 |
studio_polenta | 2017 | 1 |
tapage | bénédicte | 1 |
wide | david | 1 |
On retrouve luxembourg, campagne, bnp… Tiens pour l’agence VOUS le mot bnp
a été plus de fois cité que le mot campagne
.
4.3.3 Fréquence
Calculons maintenant la proportion ou fréquence de chaque mot dans son groupe agence (ou document). On divise donc le nombre d’occurrences par la somme des occurrences.
tidy_title_agency2 %>%
mutate(agency = replace_na(agency, "no_agency")) %>%
group_by(agency) %>%
count(word, sort = TRUE) %>%
anti_join(enframe(agency, value = "word", NULL), by = "word") %>%
anti_join(enframe(client, value = "word", NULL), by = "word") %>%
mutate(prop = n/sum(n)) %>% #calcul
arrange(desc(n)) %>%
filter(n == max(n)) %>%
distinct(agency, .keep_all = TRUE) %>%
kable("html", escape = FALSE, align = "l", caption = "Fréquence des token") %>%
kable_styling(bootstrap_options = c("striped", "condensed", "bordered"), full_width = T) %>%
scroll_box(width = "100%", height = "400px")
agency | word | n | prop |
---|---|---|---|
no_agency | luxembourg | 205 | 0.0383823 |
binsfeld | campagne | 21 | 0.0304348 |
mikado_publicis | campagne | 21 | 0.0360825 |
comed | campagne | 18 | 0.0538922 |
agence_vous | bnp | 17 | 0.0318949 |
concept_factory | luxembourg | 17 | 0.0354167 |
vanksen | luxembourg | 13 | 0.0302326 |
plan_k | luxembourg | 9 | 0.0364372 |
idp | campagne | 8 | 0.0496894 |
moskito | campagne | 8 | 0.0509554 |
dechmann | partners | 7 | 0.0660377 |
wili | dudelange | 7 | 0.0358974 |
lola | nouvelle | 6 | 0.0422535 |
moast | nouvelle | 6 | 0.0566038 |
betocee | dévoile | 5 | 0.0495050 |
bizart | campagne | 5 | 0.0555556 |
h2a | design | 5 | 0.0373134 |
maison_moderne | quitte | 5 | 0.0316456 |
noosphere | agence | 5 | 0.0210970 |
skill_lab | spot | 5 | 0.0724638 |
101_studios | signe | 4 | 0.0481928 |
a3com | signe | 4 | 0.0421053 |
apart | campagne | 4 | 0.0519481 |
cropmark | luxembourg | 4 | 0.0625000 |
fish_and_chips | cloche | 4 | 0.0727273 |
human_made | luxembourg | 4 | 0.0769231 |
takaneo | consulting | 4 | 0.0370370 |
accentaigu | campagne | 3 | 0.0681818 |
bunker_palace | nouvelle | 3 | 0.0468750 |
graphisterie_générale | 10 | 3 | 0.0681818 |
groupe_get | campagne | 3 | 0.0789474 |
knewledge | 3 | 0.0666667 | |
mad_about | dété | 3 | 0.0612245 |
mad_about_soul | dété | 3 | 0.0612245 |
nvision | digitale | 3 | 0.0245902 |
push_the_brand | marketing | 3 | 0.0625000 |
quattro_creative | police | 3 | 0.1071429 |
advantage | agence | 2 | 0.0289855 |
antidote | agence | 2 | 0.1818182 |
apollo strategists | apollo | 2 | 0.1250000 |
brainmade | agence | 2 | 0.0952381 |
explose | 1535 | 2 | 0.0363636 |
granduchy | 2018 | 2 | 0.0370370 |
interact | communication | 2 | 0.0338983 |
intrepide_studio | briquemont | 2 | 0.1250000 |
ludwig | agence | 2 | 0.0909091 |
mediation | 1er | 2 | 0.0588235 |
mefa | contern | 2 | 0.1111111 |
pointcomm | aral | 2 | 0.1111111 |
shine_a_light | rejoint | 2 | 0.0606061 |
vidale_gloesener | luxembourg | 2 | 0.1052632 |
addedvalue | alleva | 1 | 0.2500000 |
agacom | 3d | 1 | 0.1250000 |
dotcom | identité | 1 | 0.1666667 |
e_connect | activités | 1 | 0.1250000 |
georges | agence | 1 | 0.0434783 |
gotcha | appel | 1 | 0.1000000 |
kosmo | change | 1 | 0.2000000 |
lightbulb | plateforme | 1 | 0.5000000 |
meanings | banque | 1 | 0.1666667 |
myagency | belux | 1 | 0.2500000 |
neopixl | anthony | 1 | 0.3333333 |
piranha | capital | 1 | 0.1250000 |
plugandcom | airstrip | 1 | 0.1666667 |
rose_de_claire | 2017 | 1 | 0.2000000 |
scalp | agence | 1 | 0.2000000 |
smart media | alexandra | 1 | 0.1250000 |
standart | associent | 1 | 0.1250000 |
studio_polenta | 2017 | 1 | 0.0416667 |
tapage | bénédicte | 1 | 0.2500000 |
wide | david | 1 | 0.2500000 |
Nous pourrions maintenant comparer les documents et trouver des similitudes dans la fréquence des mots utilisés avec un calcul de corrélation entre catégorie
pour cela il nous faudrait calculer pour chaque mot la fréquence par catégorie sans oublier de supprimer la colonne word
pour ne garder que les colonnes numériques comme illusté ci-dessous.
4.3.4 Corrr Package
Le package corrr
du meta-package tidymodels
va nous permettre de manipuler notre matrix.
category_matrix %>%
correlate(quiet = TRUE) %>%
rearrange() %>%
shave() %>%
stretch() %>%
filter(r > 0.4) %>%
kable("html", escape = FALSE, align = "l", caption = "Calcul de corrélation") %>%
kable_styling(bootstrap_options = c("striped", "condensed", "bordered"), full_width = T)
x | y | r |
---|---|---|
category-communiques | category-concours-dagences | 0.6235569 |
category-communiques | category-crea | 0.4708947 |
category-communiques | category-medias | 0.5057214 |
category-communiques | category-vie-dagence | 0.4216571 |
Résumons. Nous avons transformé nos données par tokénisation (un mot par rang). Puis nous avons enlevé les mots vides (stopwords). Calculé la répétition
(n
dans notre table) puis la fréquence ou proportion
(prop
). Mais :
- Est-ce que la fréquence suffit à déterminer le contenu d’un texte ?
- Que se passe-t-il avec les mots dont la fréquence est élevé mais qui ne sont pas ou très peu important ?
Reprenons notre table sans la soustraction des stopwords
.
agency | word | n | prop |
---|---|---|---|
no_agency | de | 307 | 0.0364392 |
concept_factory | avec | 73 | 0.0808416 |
agence_vous | avec | 70 | 0.0727651 |
mikado_publicis | avec | 62 | 0.0579439 |
binsfeld | de | 51 | 0.0429655 |
comed | la | 35 | 0.0551181 |
vanksen | de | 27 | 0.0381356 |
wili | de | 24 | 0.0701754 |
idp | avec | 19 | 0.0629139 |
plan_k | avec | 19 | 0.0439815 |
moskito | avec | 17 | 0.0568562 |
noosphere | de | 17 | 0.0437018 |
nvision | de | 15 | 0.0617284 |
maison_moderne | de | 14 | 0.0555556 |
a3com | de | 12 | 0.0764331 |
cropmark | de | 12 | 0.1016949 |
bizart | avec | 11 | 0.0588235 |
dechmann | avec | 11 | 0.0607735 |
graphisterie_générale | la | 10 | 0.1111111 |
101_studios | la | 9 | 0.0633803 |
Sans la soustraction des mots vides, nous voyons que les termes avec le plus de répétitions sont des mots sans doute de peu d’importance. Néanmoins, il peut arriver que ces mêmes mots soient plus importants dans certains documents que d’autres. Pour cela, nous allons utiliser une autre méthode qui consiste à calculer la fréquence inverse d’un terme dans un document. La fréquence inverse va nous permettre de diminuer le poids des termes qui se répètent donc commun dans l’ensemble des documents. La formule de l’ìdf
est :
\(idf = ln(\dfrac{n_{doc}}{n_{doc-term}})\)
n_doc
est le nombre de documents. Nous utiliserons l’ensemble des titres par agences pour document. n_doc_term
est la répétition du mot dans l’ensemble des documents. Si par ex. le mot apparait au moins 1x
dans 5
documents, la valeur sera de 5
.
Donc si nous retrouvons le terme dans tous les documents, la valeur de l’idf
sera de 1
. Si le terme apparait moins souvent, la valeur augmentera. Dès la valeur obtenue, nous multiplions tf
par ìdf
pour obtenir la valeur tf-idf
, c’est-à-dire le poids final du terme ou son importance.
tidy_title_agency %>%
mutate(agency = replace_na(agency, "no_agency")) %>%
group_by(agency) %>%
count(word, sort = TRUE) %>%
anti_join(enframe(agency, value = "word", NULL), by = "word") %>%
mutate(tf = n/sum(n)) %>%
group_by(word) %>%
mutate(n_doc_term = n()) %>%
ungroup() %>%
mutate(n_doc = sum(!duplicated(agency))) %>%
mutate(n_doc_n_doc_term = (n_doc / n_doc_term)) %>%
mutate(idf = log(n_doc_n_doc_term)) %>%
mutate(tf_idf = tf * idf) %>%
head(20) %>%
kable("html", escape = FALSE, align = "l", caption = "Calcul tf-idf") %>%
kable_styling(bootstrap_options = c("striped", "condensed", "bordered"), full_width = T) %>%
scroll_box(width = "100%", height = "400px")
agency | word | n | tf | n_doc_term | n_doc | n_doc_n_doc_term | idf | tf_idf |
---|---|---|---|---|---|---|---|---|
no_agency | de | 307 | 0.0364392 | 58 | 71 | 1.224138 | 0.2022369 | 0.0073693 |
no_agency | la | 259 | 0.0307418 | 54 | 71 | 1.314815 | 0.2736958 | 0.0084139 |
no_agency | le | 206 | 0.0244510 | 51 | 71 | 1.392157 | 0.3308542 | 0.0080897 |
no_agency | luxembourg | 205 | 0.0243323 | 41 | 71 | 1.731707 | 0.5491078 | 0.0133611 |
no_agency | pour | 149 | 0.0176855 | 44 | 71 | 1.613636 | 0.4784902 | 0.0084623 |
no_agency | et | 145 | 0.0172107 | 50 | 71 | 1.420000 | 0.3506569 | 0.0060350 |
no_agency | les | 144 | 0.0170920 | 38 | 71 | 1.868421 | 0.6250937 | 0.0106841 |
no_agency | l | 129 | 0.0153116 | 50 | 71 | 1.420000 | 0.3506569 | 0.0053691 |
no_agency | à | 125 | 0.0148368 | 42 | 71 | 1.690476 | 0.5250103 | 0.0077895 |
no_agency | au | 104 | 0.0123442 | 35 | 71 | 2.028571 | 0.7073318 | 0.0087315 |
no_agency | du | 98 | 0.0116320 | 35 | 71 | 2.028571 | 0.7073318 | 0.0082277 |
no_agency | des | 95 | 0.0112760 | 26 | 71 | 2.730769 | 1.0045833 | 0.0113276 |
no_agency | avec | 88 | 0.0104451 | 51 | 71 | 1.392157 | 0.3308542 | 0.0034558 |
no_agency | en | 87 | 0.0103264 | 34 | 71 | 2.088235 | 0.7363194 | 0.0076035 |
no_agency | d | 79 | 0.0093769 | 38 | 71 | 1.868421 | 0.6250937 | 0.0058614 |
concept_factory | avec | 73 | 0.0808416 | 51 | 71 | 1.392157 | 0.3308542 | 0.0267468 |
no_agency | campagne | 73 | 0.0086647 | 38 | 71 | 1.868421 | 0.6250937 | 0.0054162 |
agence_vous | avec | 70 | 0.0727651 | 51 | 71 | 1.392157 | 0.3308542 | 0.0240746 |
no_agency | media | 68 | 0.0080712 | 14 | 71 | 5.071429 | 1.6236225 | 0.0131046 |
no_agency | un | 66 | 0.0078338 | 33 | 71 | 2.151515 | 0.7661723 | 0.0060021 |
Pour nous faciliter la vie, la fonction bind_tf_idf
du package tidytext
permet de calculer ces valeurs directement.
tidy_title_agency %>%
mutate(agency = replace_na(agency, "no_agency")) %>%
group_by(agency) %>%
count(word, sort = TRUE) %>%
# anti_join(enframe(agency, value = "word", NULL), by = "word") %>%
bind_tf_idf(term = word, document = agency, n = n) %>% # <-
head(20) %>%
kable("html", escape = FALSE, align = "l", caption = "Calcul tf-idf avec tidytext") %>%
kable_styling(bootstrap_options = c("striped", "condensed", "bordered"), full_width = T) %>%
scroll_box(width = "100%", height = "400px")
agency | word | n | tf | idf | tf_idf |
---|---|---|---|---|---|
no_agency | de | 307 | 0.0364392 | 0.2022369 | 0.0073693 |
no_agency | la | 259 | 0.0307418 | 0.2736958 | 0.0084139 |
no_agency | le | 206 | 0.0244510 | 0.3308542 | 0.0080897 |
no_agency | luxembourg | 205 | 0.0243323 | 0.5491078 | 0.0133611 |
no_agency | pour | 149 | 0.0176855 | 0.4784902 | 0.0084623 |
no_agency | et | 145 | 0.0172107 | 0.3506569 | 0.0060350 |
no_agency | les | 144 | 0.0170920 | 0.6250937 | 0.0106841 |
binsfeld | binsfeld | 133 | 0.0993279 | 1.6236225 | 0.1612709 |
no_agency | l | 129 | 0.0153116 | 0.3506569 | 0.0053691 |
no_agency | à | 125 | 0.0148368 | 0.5250103 | 0.0077895 |
mikado_publicis | mikado_publicis | 114 | 0.0945274 | 1.7777732 | 0.1680482 |
agence_vous | agence_vous | 112 | 0.1028466 | 1.8647846 | 0.1917868 |
no_agency | au | 104 | 0.0123442 | 0.7073318 | 0.0087315 |
concept_factory | concept_factory | 102 | 0.1006910 | 2.6532420 | 0.2671576 |
no_agency | du | 98 | 0.0116320 | 0.7073318 | 0.0082277 |
no_agency | des | 95 | 0.0112760 | 1.0045833 | 0.0113276 |
no_agency | avec | 88 | 0.0104451 | 0.3308542 | 0.0034558 |
no_agency | en | 87 | 0.0103264 | 0.7363194 | 0.0076035 |
no_agency | d | 79 | 0.0093769 | 0.6250937 | 0.0058614 |
vanksen | vanksen | 78 | 0.0973783 | 1.8647846 | 0.1815895 |
4.3.5 Quel est le terme avec la valeur tf_idf la plus élevée par agence ?
agency | word | n | tf | idf | tf_idf |
---|---|---|---|---|---|
binsfeld | binsfeld | 133 | 0.0993279 | 1.623622 | 0.1612709 |
mikado_publicis | mikado_publicis | 114 | 0.0945274 | 1.777773 | 0.1680482 |
agence_vous | agence_vous | 112 | 0.1028466 | 1.864785 | 0.1917868 |
concept_factory | concept_factory | 102 | 0.1006910 | 2.653242 | 0.2671576 |
vanksen | vanksen | 78 | 0.0973783 | 1.864785 | 0.1815895 |
comed | comed | 62 | 0.0885714 | 2.876386 | 0.2547656 |
plan_k | plan_k | 49 | 0.1004098 | 2.653242 | 0.2664116 |
no_agency | médias | 44 | 0.0052226 | 2.653242 | 0.0138567 |
noosphere | noosphere | 39 | 0.0884354 | 2.183238 | 0.1930755 |
idp | idp | 33 | 0.0976331 | 3.164068 | 0.3089178 |
wili | wili | 33 | 0.0854922 | 2.183238 | 0.1866499 |
lola | lola | 32 | 0.1189591 | 2.876386 | 0.3421723 |
moskito | moskito | 29 | 0.0873494 | 2.653242 | 0.2317591 |
h2a | h2a | 26 | 0.1052632 | 2.876386 | 0.3027774 |
maison_moderne | maison_moderne | 25 | 0.0899281 | 3.569533 | 0.3210011 |
nvision | nvision | 25 | 0.0905797 | 1.960095 | 0.1775448 |
bizart | bizart | 24 | 0.1132075 | 3.569533 | 0.4040980 |
dechmann | dechmann | 21 | 0.1014493 | 2.876386 | 0.2918072 |
advantage | advantage | 19 | 0.1484375 | 3.569533 | 0.5298525 |
takaneo | takaneo | 18 | 0.0952381 | 4.262680 | 0.4059695 |
betocee | betocee | 17 | 0.0890052 | 4.262680 | 0.3794008 |
moast | moast | 16 | 0.0733945 | 3.569533 | 0.2619841 |
101_studios | 101_studios | 15 | 0.0949367 | 3.569533 | 0.3388797 |
a3com | a3com | 15 | 0.0872093 | 4.262680 | 0.3717453 |
apart | apart | 15 | 0.0955414 | 4.262680 | 0.4072624 |
bunker_palace | bunker_palace | 12 | 0.0909091 | 3.569533 | 0.3245030 |
fish_and_chips | fish_and_chips | 12 | 0.1176471 | 3.164068 | 0.3722432 |
skill_lab | skill_lab | 12 | 0.0784314 | 2.653242 | 0.2080974 |
cropmark | cropmark | 11 | 0.0839695 | 3.164068 | 0.2656851 |
mad_about | mad_about_soul | 11 | 0.1037736 | 3.569533 | 0.3704232 |
mad_about_soul | mad_about_soul | 11 | 0.1037736 | 3.569533 | 0.3704232 |
push_the_brand | push_the_brand | 11 | 0.1018519 | 3.569533 | 0.3635635 |
explose | explose | 10 | 0.0943396 | 4.262680 | 0.4021396 |
graphisterie_générale | graphisterie_générale | 10 | 0.1000000 | 4.262680 | 0.4262680 |
interact | interact | 10 | 0.0800000 | 2.876386 | 0.2301108 |
granduchy | granduchy | 9 | 0.0927835 | 3.569533 | 0.3311938 |
groupe_get | groupe_get | 9 | 0.1216216 | 4.262680 | 0.5184340 |
human_made | human_made | 9 | 0.0857143 | 3.569533 | 0.3059599 |
accentaigu | accentaigu | 8 | 0.0919540 | 4.262680 | 0.3919706 |
knewledge | knewledge | 8 | 0.0888889 | 2.183238 | 0.1940656 |
mediation | mediation | 8 | 0.1159420 | 3.569533 | 0.4138589 |
shine_a_light | shine_a_light | 6 | 0.1071429 | 4.262680 | 0.4567157 |
ludwig | ludwig | 5 | 0.1111111 | 3.569533 | 0.3966147 |
studio_polenta | studio_polenta | 5 | 0.1041667 | 4.262680 | 0.4440292 |
quattro_creative | quattro_creative | 4 | 0.0754717 | 4.262680 | 0.3217117 |
antidote | antidote | 3 | 0.1304348 | 4.262680 | 0.5560017 |
brainmade | brainmade | 3 | 0.0769231 | 4.262680 | 0.3278985 |
georges | georges | 3 | 0.0731707 | 4.262680 | 0.3119034 |
intrepide_studio | intrepide_studio | 3 | 0.0967742 | 3.569533 | 0.3454386 |
vidale_gloesener | vidale_gloesener | 3 | 0.0909091 | 3.569533 | 0.3245030 |
apollo strategists | apollo | 2 | 0.0909091 | 4.262680 | 0.3875164 |
apollo strategists | strategists | 2 | 0.0909091 | 4.262680 | 0.3875164 |
e_connect | e_connect | 2 | 0.1428571 | 4.262680 | 0.6089543 |
gotcha | gotcha | 2 | 0.0800000 | 4.262680 | 0.3410144 |
kosmo | kosmo | 2 | 0.1666667 | 4.262680 | 0.7104466 |
mefa | contern | 2 | 0.0645161 | 4.262680 | 0.2750116 |
mefa | mefa | 2 | 0.0645161 | 4.262680 | 0.2750116 |
piranha | piranha | 2 | 0.1538462 | 4.262680 | 0.6557969 |
pointcomm | aral | 2 | 0.0740741 | 4.262680 | 0.3157541 |
pointcomm | pointcomm | 2 | 0.0740741 | 4.262680 | 0.3157541 |
tapage | tapage | 2 | 0.2500000 | 4.262680 | 1.0656700 |
addedvalue | addedvalue | 1 | 0.1000000 | 4.262680 | 0.4262680 |
addedvalue | alleva | 1 | 0.1000000 | 4.262680 | 0.4262680 |
addedvalue | démolition | 1 | 0.1000000 | 4.262680 | 0.4262680 |
agacom | agacom | 1 | 0.0833333 | 4.262680 | 0.3552233 |
agacom | roby | 1 | 0.0833333 | 4.262680 | 0.3552233 |
dotcom | dotcom | 1 | 0.1111111 | 4.262680 | 0.4736311 |
dotcom | light | 1 | 0.1111111 | 4.262680 | 0.4736311 |
lightbulb | 101_studios | 1 | 0.1428571 | 3.569533 | 0.5099332 |
lightbulb | creativecluster.lu | 1 | 0.1428571 | 3.569533 | 0.5099332 |
lightbulb | lightbulb | 1 | 0.1428571 | 3.569533 | 0.5099332 |
meanings | meanings | 1 | 0.0833333 | 4.262680 | 0.3552233 |
myagency | belux | 1 | 0.1666667 | 4.262680 | 0.7104466 |
myagency | myagency | 1 | 0.1666667 | 4.262680 | 0.7104466 |
neopixl | chaves | 1 | 0.2500000 | 4.262680 | 1.0656700 |
neopixl | neopixl | 1 | 0.2500000 | 4.262680 | 1.0656700 |
plugandcom | airstrip | 1 | 0.1000000 | 4.262680 | 0.4262680 |
plugandcom | plugandcom | 1 | 0.1000000 | 4.262680 | 0.4262680 |
rose_de_claire | cnl | 1 | 0.1111111 | 4.262680 | 0.4736311 |
rose_de_claire | ed | 1 | 0.1111111 | 4.262680 | 0.4736311 |
rose_de_claire | rose_de_claire | 1 | 0.1111111 | 4.262680 | 0.4736311 |
scalp | collaborative | 1 | 0.1000000 | 4.262680 | 0.4262680 |
scalp | scalp | 1 | 0.1000000 | 4.262680 | 0.4262680 |
smart media | dussort | 1 | 0.1111111 | 4.262680 | 0.4736311 |
smart media | petitjean | 1 | 0.1111111 | 4.262680 | 0.4736311 |
standart | associent | 1 | 0.0769231 | 4.262680 | 0.3278985 |
standart | créer | 1 | 0.0769231 | 4.262680 | 0.3278985 |
standart | kugener | 1 | 0.0769231 | 4.262680 | 0.3278985 |
standart | standart | 1 | 0.0769231 | 4.262680 | 0.3278985 |
standart | steve | 1 | 0.0769231 | 4.262680 | 0.3278985 |
wide | wide | 1 | 0.1428571 | 4.262680 | 0.6089543 |
Sans grande surprise, c’est le nom de l’agence qui a le tf_idf
le plus élevé. C’est normal, car le terme n’apparait que dans le document le concernant et il a la fréquence la plus élevée. Que se passe-t-il si nous enlevons les noms d’agences des titres ?
agency | word | n | tf | idf | tf_idf |
---|---|---|---|---|---|
neopixl | chaves | 1 | 0.3333333 | 4.262680 | 1.4208933 |
myagency | belux | 1 | 0.2000000 | 4.262680 | 0.8525360 |
lightbulb | creativecluster.lu | 1 | 0.2000000 | 3.569533 | 0.7139065 |
tapage | bénédicte | 1 | 0.1666667 | 4.262680 | 0.7104466 |
wide | photographe | 1 | 0.1666667 | 3.569533 | 0.5949221 |
dotcom | light | 1 | 0.1250000 | 4.262680 | 0.5328350 |
rose_de_claire | cnl | 1 | 0.1250000 | 4.262680 | 0.5328350 |
addedvalue | alleva | 1 | 0.1111111 | 4.262680 | 0.4736311 |
plugandcom | airstrip | 1 | 0.1111111 | 4.262680 | 0.4736311 |
scalp | collaborative | 1 | 0.1111111 | 4.262680 | 0.4736311 |
smart media | dussort | 1 | 0.1111111 | 4.262680 | 0.4736311 |
antidote | immotop.lu | 2 | 0.1000000 | 4.262680 | 0.4262680 |
kosmo | houillon | 1 | 0.1000000 | 4.262680 | 0.4262680 |
apollo strategists | apollo | 2 | 0.0909091 | 4.262680 | 0.3875164 |
agacom | roby | 1 | 0.0909091 | 4.262680 | 0.3875164 |
piranha | white | 1 | 0.0909091 | 4.262680 | 0.3875164 |
e_connect | activités | 1 | 0.0833333 | 4.262680 | 0.3552233 |
standart | associent | 1 | 0.0833333 | 4.262680 | 0.3552233 |
pointcomm | aral | 2 | 0.0800000 | 4.262680 | 0.3410144 |
mefa | contern | 2 | 0.0689655 | 4.262680 | 0.2939779 |
intrepide_studio | briquemont | 2 | 0.0740741 | 3.569533 | 0.2644098 |
meanings | com | 1 | 0.0909091 | 2.876386 | 0.2614896 |
quattro_creative | police | 3 | 0.0612245 | 3.569533 | 0.2185428 |
fish_and_chips | auchan | 5 | 0.0568182 | 3.569533 | 0.2028144 |
gotcha | fausse | 1 | 0.0434783 | 4.262680 | 0.1853339 |
ludwig | adidas | 2 | 0.0512821 | 3.569533 | 0.1830530 |
takaneo | kpmg | 6 | 0.0350877 | 4.262680 | 0.1495677 |
dechmann | ierace | 6 | 0.0331492 | 4.262680 | 0.1413043 |
vidale_gloesener | lsa | 1 | 0.0357143 | 3.569533 | 0.1274833 |
knewledge | 3 | 0.0400000 | 3.164068 | 0.1265627 | |
brainmade | benelux | 1 | 0.0277778 | 4.262680 | 0.1184078 |
moast | createam | 8 | 0.0398010 | 2.876386 | 0.1144830 |
human_made | infographies | 3 | 0.0315789 | 3.569533 | 0.1127221 |
georges | flavor | 1 | 0.0263158 | 4.262680 | 0.1121758 |
accentaigu | dépistage | 2 | 0.0253165 | 4.262680 | 0.1079159 |
mad_about | dété | 3 | 0.0319149 | 3.164068 | 0.1009809 |
mad_about_soul | dété | 3 | 0.0319149 | 3.164068 | 0.1009809 |
apart | bcee | 4 | 0.0281690 | 3.569533 | 0.1005502 |
studio_polenta | alimentaire | 1 | 0.0232558 | 4.262680 | 0.0991321 |
granduchy | centaure | 2 | 0.0229885 | 4.262680 | 0.0979926 |
graphisterie_générale | confiées | 2 | 0.0222222 | 4.262680 | 0.0947262 |
push_the_brand | street | 3 | 0.0312500 | 2.876386 | 0.0898870 |
explose | sonotron | 2 | 0.0208333 | 4.262680 | 0.0888058 |
mediation | 1er | 2 | 0.0333333 | 2.653242 | 0.0884414 |
shine_a_light | costantini | 1 | 0.0200000 | 4.262680 | 0.0852536 |
advantage | remercie | 2 | 0.0185185 | 4.262680 | 0.0789385 |
betocee | kichechef | 3 | 0.0172414 | 4.262680 | 0.0734945 |
cropmark | visuel | 3 | 0.0254237 | 2.876386 | 0.0731284 |
wili | dudelange | 7 | 0.0204678 | 3.569533 | 0.0730606 |
bunker_palace | commun | 2 | 0.0168067 | 4.262680 | 0.0716417 |
groupe_get | absorbe | 1 | 0.0153846 | 4.262680 | 0.0655797 |
skill_lab | présentent | 2 | 0.0145985 | 4.262680 | 0.0622289 |
interact | interactive | 2 | 0.0188679 | 3.164068 | 0.0596994 |
nvision | bofferding | 5 | 0.0205761 | 2.876386 | 0.0591849 |
h2a | rapport | 4 | 0.0184332 | 3.164068 | 0.0583238 |
concept_factory | autopolis | 16 | 0.0177187 | 3.164068 | 0.0560632 |
a3com | attractive | 2 | 0.0127389 | 4.262680 | 0.0543017 |
idp | losch | 5 | 0.0165563 | 3.164068 | 0.0523852 |
maison_moderne | direction | 4 | 0.0158730 | 3.164068 | 0.0502233 |
moskito | yellow.lu | 4 | 0.0133779 | 3.569533 | 0.0477529 |
bizart | destinations | 2 | 0.0106952 | 4.262680 | 0.0455902 |
101_studios | 1ere | 2 | 0.0140845 | 3.164068 | 0.0445643 |
agence_vous | bnp | 17 | 0.0176715 | 2.316770 | 0.0409408 |
plan_k | moutarderie | 4 | 0.0092593 | 4.262680 | 0.0394693 |
mikado_publicis | orange | 14 | 0.0130841 | 2.876386 | 0.0376350 |
comed | winwin | 5 | 0.0078740 | 4.262680 | 0.0335644 |
binsfeld | enovos | 15 | 0.0126369 | 2.653242 | 0.0335288 |
lola | tango | 3 | 0.0128205 | 2.316770 | 0.0297022 |
vanksen | stratégie | 8 | 0.0112994 | 2.470920 | 0.0279200 |
noosphere | losch | 3 | 0.0077121 | 3.164068 | 0.0244015 |
no_agency | médias | 44 | 0.0052226 | 2.653242 | 0.0138567 |
4.4 Wordcloud
Pour visualiser les termes par agence, nous pouvons utiliser le package wordcloud
avec la fonction map
.
Je ne vais pas vous indiquer à quel agence appartient le cloud, à vous de deviner.