library(R.temis)Analyser une question ouverte avec R.temis
Données
Le corpus utilisé dans cet exemple contient un extrait des réponses à une question ouverte issue de l’enquête Populations, Espaces de Vie, Environnements (Ined, 1992). L’intitulé de la question est celui-ci :Si je vous dis Environnement, qu’est ce que cela évoque pour vous ?.
Pour chaque enquêté, on dispose de caractéristiques socio-démographiques (https://data.ined.fr/index.php/catalog/41).
Les données sont stockées dans un tableau, dit individus x variables, contenant 2017 lignes (le nombre de répondants) et 16 colonnes. Ces colonnes correspondent aux variables suivantes : identifiant du questionnaire, caractéristiques des répondants (ou métadonnées) et en 16ème colonne la variable correspondant à la question ouverte (variable textuelle). Les textes des réponses constituent le corpus.
Appel du package
corpus <- import_corpus("data/PEE_K1_extract.csv", format="csv",textcolumn=16,language="fr")Création du tableau lexical
La fonction build_dtm crée le tableau lexical (Document Term Matrix dans R).
dtm <-build_dtm(corpus, remove_stopwords=F,min_length=2)
dtm<<DocumentTermMatrix (documents: 2017, terms: 1157)>>
Non-/sparse entries: 11298/2322371
Sparsity : 100%
Maximal term length: 17
Weighting : term frequency (tf)
Les lignes du tableau lexical correspondent ici aux 2017 réponses extraites de l’enquête “Populations, Espaces de Vie, Environnements (PEE), Ined 1992) et les colonnes aux 1157 mots distincts du corpus.
Affichage
# des metadonnées
View(meta(corpus))
# des réponses à la QO
View(sapply(corpus,as.character))
# d'un extrait du Tableau lexical
inspect(dtm)
#as.matrix(dtm[1:10, c("de", "abus")])Occurrences
Explorer le lexique
La fonction dictionary crée le dictionnaire associé au lexique. On peut explorer via RStudio : affichage des mots par ordre alphabétique ou par fréquence.
On affiche la liste des mots les plus fréquents avec la fonction frequent_terms.
dic<-dictionary(dtm,remove_stopwords = F)
frequent_terms(dtm, n=20) Global occ. Global %
la 1112 9.0983472
nature 888 7.2655866
de 823 6.7337588
les 417 3.4118802
le 406 3.3218786
vie 382 3.1255114
ce 362 2.9618720
qui 352 2.8800524
autour 193 1.5791196
est 192 1.5709377
tout 190 1.5545737
entoure 183 1.4973000
cadre 173 1.4154803
pollution 146 1.1945672
nous 135 1.1045655
on 129 1.0554737
où 119 0.9736541
campagne 111 0.9081983
qualité 108 0.8836524
bien 105 0.8591065
Le mot nature est évoqué 888 fois dans cet extrait des réponses à la question ouverte (PEE) et représente plus de 7% des occurrences.
Global % correspond à l’occurrence du mot (nature 888) rapportée à l’ensemble des “mots” du corpus des réponses. p_global <- (888 / sum(col_sums(dtm))) * 100 = 7.26
Le nombre total de mots du corpus est obtenu en additionnant les fréquences de chaque mot du tableau lexical par `sum(col_sums(dtm))` soit 12222. nature représente 7,26% des mots du corpus.
Afficher le nuage de mots
Ici affiche les mots de plus de 20 occurrences et on choisit de ne pas afficher les mots-outils (fonction word_cloud),
cloud<-word_cloud(dtm, color="black", n=100, min.freq=10,remove_stopwords=T)Les occurrences de quelques mots doivent être précisées dans la légende de ce graphique pour aider sa compréhension.
Concordances
Les concordances permettent, pour chaque mot, de rassembler l’ensemble des textes (ici les réponses à la question ouverte) dans lesquels il apparaît (fonction concordances).
Ici par exemple on cherche comprendre pourquoi le mot enquêté apparait dans les réponses.
concordances(corpus,dtm,"enquêté")X158
tout ce qui ce passe à l'extérieur du logement de l'enquêté
X1487
ce qui entoure l'enquêté, voir, sentir
#concordances(corpus,dtm,"alentour")
#concordances(corpus,dtm,"sur")
#concordances(corpus,dtm,"que")On doit afficher les concordances à chaque étape d’interprétation des résultats.
Cooccurrences
Terme le plus associé (positivement ou négativement) à un terme
On utilise la fonction cooc_terms qui affiche les termes coocurrents à un mots choisi (ici logement) dans l’ensemble du corpus.
cooc_terms(dtm,"logement", n=10) % Term/Cooc. % Cooc./Term Global % Cooc. Global t value Prob.
logement 10.6194690 100.0000000 0.09818360 12 12 Inf 0.0000
du 4.4247788 11.9047619 0.34364261 5 42 3.944244 0.0000
mon 3.5398230 10.0000000 0.32727868 4 40 3.296309 0.0005
alentours 2.6548673 9.6774194 0.25364098 3 31 2.762872 0.0029
personnes 1.7699115 16.6666667 0.09818360 2 12 2.558003 0.0053
enquêté 0.8849558 50.0000000 0.01636393 1 2 2.087832 0.0184
principal 0.8849558 50.0000000 0.01636393 1 2 2.087832 0.0184
vivent 0.8849558 50.0000000 0.01636393 1 2 2.087832 0.0184
--------- NA NA NA NA NA NA NA
la 3.5398230 0.3597122 9.09834724 4 1112 -2.063841 0.0195
nature 0.8849558 0.1126126 7.26558665 1 888 -2.894881 0.0019
% Term/Cooc. — Fréquence relative du mots parmi les mots du sous-corpus (contenant le terme choisi)
# Calcul du nombre de mots dans les réponses contenant le mot "logement"
rs <- row_sums(dtm) # somme des occurrences par document
# regroupement selon présence de "famille"
groupe <- as.vector(dtm[, "logement"] > 0)
sum(rs[groupe])[1] 113
(12/113)*100=10.619- 10,6% de logement parmi l’ensemble de mots dans les réponses contenant logement. (3/113)*100=2.65 - 2,65% des occurrences de alentours dans l’ensemble de mots dans les réponses contenant logement.
% Cooc./Term — Part des cooccurrences dans les occurrences du mot choisi (3/31)*100=9.67 -9,67,1 % des réponses contiennent logement et alentours
Global % — Fréquence globale du mot dans le corpus (idem plus haut)
Les mots sont classés par t value décroissante. La “t value” est la transformation de la p-value en score z (quantile de la loi normale standard) : t.val <- qnorm(p.val). Plus le t value est élevée, plus l’association est forte et non aléatoire. Le test hypergéométrique répond à la question : la cooccurrence observée est-elle due au hasard ? ou, en d’autres termes, Ce “mot” apparaît-il significativement plus souvent qu’attendu dans les titres contenant “logement” ?. Ici, le test est significatif pour quasiement tous les mots (t value >1.96) et proba faible.
On verra par la suite qu’on peut produire un graphe de mots pour présenter des cooccurrences.
Analyse factorielle sur un tableau lexical entier
L’analyse factorielle sur un tableau lexical met en évidence les mots les plus cooccurrents. La lecture des mots les plus contributifs aux axes et les concordances permettent d’identifier des champs lexicaux. Par la suite, elle peut aider à de justifier (ou non) la lemmatisation de certains mots (partie suivante).
resTLE <-corpus_ca(corpus,dtm, sparsity=0.985)37 documents have been skipped because they do not include any occurrence of the terms retained in the final document-term matrix. Increase the value of the 'sparsity' parameter if you want to include them. These documents are: X75, X114, X130, X197, X284, X377, X402, X554, X561, X585, X725, X776, X844, X861, X909, X911, X917, X940, X1026, X1108, X1141, X1148, X1154, X1396, X1470, X1512, X1522, X1565, X1576, X1608, X1720, X1743, X1789, X1796, X1871, X1877, X1983.
Variable(s) X, qnumq have been skipped since they contain more than 100 levels.
#explor(resTLE)
res <- explor::prepare_results(resTLE)
explor::CA_var_plot(res, xax = 1, yax = 2, lev_sup = TRUE, var_sup = FALSE,
var_sup_choice = , var_hide = "Row", var_lab_min_contrib = 0, col_var = "Position",
symbol_var = "Type", size_var = "Contrib", size_range = c(23.4375, 312.5),
labels_size = 10, point_size = 25, transitions = TRUE, labels_positions = NULL,
xlim = c(-3, 2.91), ylim = c(-2.42, 3.49))Les aides à l’interprétation classiques (valeurs propres, contributions, coordonnées, …) sont stockées dans resTLE que l’on explore avec grâce à la fonction explor. Dans la fenêtre graphe de l’interface graphique, masquer les lignes et décocher modalités supplémentaires pour afficher uniquement les mots.
Mettre les QO en regard avec les métadonnées
On dispose des variables suivantes : sexe, age en classes (aget), situation matrimoniale(matrim), pratique religieuse (pratique), avoir des enfants oui/non(enf), activite, profession regroupée (prof), diplôme (dipl), vote écolo oui/non (vote), type d’habitat, type de localité (local), revenu, region.
Répartitions
Vérifier la répartition des caractéristiques des enquêté pour chaque métadonnée.
library (questionr)
table(meta(corpus)$sexe)
table(meta(corpus)$aget)
table(meta(corpus)$matrim)
table(meta(corpus)$pratique)
table(meta(corpus)$enf)
table(meta(corpus)$activite)
table(meta(corpus)$prof)
table(meta(corpus)$dipl)
table(meta(corpus)$vote)
table(meta(corpus)$habitat)
table(meta(corpus)$localite)
table(meta(corpus)$revenu)
table(meta(corpus)$region)Nombre de mots par sous-corpus
Ici on compte les mots de chaque sous-corpus (ou catégorie) crée à partir de la variable Region de l’enquête.
lexical_summary(dtm, corpus,"region", unit = "global")
Per category total: Bretagne Centre Jura_Alpes
Number of terms 2142.000000 686.000000 1702.000000
Number of unique terms 411.000000 162.000000 383.000000
Percent of unique terms 19.187675 23.615160 22.502938
Number of hapax legomena 239.000000 95.000000 244.000000
Percent of hapax legomena 11.157796 13.848397 14.336075
Number of words 2142.000000 686.000000 1702.000000
Per category total: Mediterrannée Nord S_BassinParis
Number of terms 1256.000000 1907.000000 842.000000
Number of unique terms 304.000000 361.000000 237.000000
Percent of unique terms 24.203822 18.930257 28.147268
Number of hapax legomena 181.000000 204.000000 156.000000
Percent of hapax legomena 14.410828 10.697431 18.527316
Number of words 1256.000000 1907.000000 842.000000
Per category total: S_Ouest Seine Corpus total
Number of terms 1445.000000 2242.000000 12222.000000
Number of unique terms 306.000000 472.000000 1157.000000
Percent of unique terms 21.176471 21.052632 9.466536
Number of hapax legomena 182.000000 279.000000 650.000000
Percent of hapax legomena 12.595156 12.444246 5.318279
Number of words 1445.000000 2242.000000 12222.000000
Le corpus contient 12 222 mots dont 1 157 mots distincts, alors que le corpus des enquêtés de la région Seine contient 2 242 mots dont 472 mots distints. On pourrait comparer ici le % de mots distincts (indicateur de richesse du vocabulaire) 9,5% vs 21% en région Seine.
Specificités
Mots spécifiques par modalités
# selon lla tranche d'age
specific_terms(dtm,meta(corpus)$aget, n=5)$`20-29ans`
% Term/Level % Level/Term Global % Level Global occ. t value
pollution 2.3171615 21.917808 1.1945672 32 146 3.597375
nature 9.7031137 15.090090 7.2655866 134 888 3.520068
la 11.4409848 14.208633 9.0983472 158 1112 3.079918
écologie 1.0861694 23.437500 0.5236459 15 64 2.622351
--------- NA NA NA NA NA NA
pas 0.0724113 1.587302 0.5154639 1 63 -2.600224
Prob.
pollution 0.0002
nature 0.0002
la 0.0010
écologie 0.0044
--------- NA
pas 0.0047
$`30-39ans`
% Term/Level % Level/Term Global % Level Global occ. t value Prob.
espace 1.5224913 44.89796 0.80183276 44 98 4.535542 0.0000
vert 0.5536332 48.48485 0.27000491 16 33 2.949616 0.0016
travail 0.3114187 56.25000 0.13091147 9 16 2.575370 0.0050
aux 0.2422145 63.63636 0.09000164 7 11 2.548321 0.0054
------- NA NA NA NA NA NA NA
des 0.3460208 10.75269 0.76092293 10 93 -3.020565 0.0013
$`40-49ans`
% Term/Level % Level/Term Global % Level Global occ. t value
vie 3.8917717 27.48691 3.12551137 105 382 2.476145
odeurs 0.2594514 58.33333 0.09818360 7 12 2.459497
cela 0.1482580 80.00000 0.04090983 4 5 2.335376
produits 0.1111935 100.00000 0.02454590 3 3 2.299162
-------- NA NA NA NA NA NA
espaces 0.1482580 8.00000 0.40909835 4 50 -2.420948
Prob.
vie 0.0066
odeurs 0.0070
cela 0.0098
produits 0.0107
-------- NA
espaces 0.0077
$`50-59ans`
% Term/Level % Level/Term Global % Level Global occ. t value
plaisir 0.4329004 41.176471 0.1390934 7 17 2.647314
autour 2.2881880 19.170984 1.5791196 37 193 2.253119
sur 0.3092146 41.666667 0.0981836 5 12 2.190012
--------- NA NA NA NA NA NA
pollution 0.5565863 6.164384 1.1945672 9 146 -2.603730
eau 0.0000000 0.000000 0.3845524 0 47 -3.022971
Prob.
plaisir 0.0041
autour 0.0121
sur 0.0143
--------- NA
pollution 0.0046
eau 0.0013
$`60ans+`
% Term/Level % Level/Term Global % Level Global occ. t value Prob.
coin 0.1100110 100.00000 0.03272787 4 4 2.417029 0.0078
------- NA NA NA NA NA NA NA
espace 0.4950495 18.36735 0.80183276 18 98 -2.450984 0.0071
qualité 0.5500550 18.51852 0.88365243 20 108 -2.549664 0.0054
vie 2.2827283 21.72775 3.12551137 83 382 -3.519802 0.0002
nature 5.8580858 23.98649 7.26558665 213 888 -3.932301 0.0000
% Term/Level indique le % du mot par rapport à l’ensemble de mots de cette catégorie (ici les 20-29ans).
# Nb de mots total des réponses des 20-29ans
lexical_summary(dtm, corpus,"aget", unit = "global")
# 1381 mots dans les réponses des 20-29 ansPollution représente 2,31 % (32/1381) des mots des 20-29ans.
% Level/Term indique le % du mot pour cette catégorie (ici les 20-29ans) par rapport son occurrence global.
21,92% (32/146) des mots pollution sont évoqués par des 20-29ans.
Global indique le % du mot par rapport à l’ensemble des mots du corpus(cf plus haut).
La t value permet d’évaluer la significativité du test hypergéométrique pour déterminer si la fréquence d’un “mot” dans une catégorie donnée est significativement plus élevée que sa fréquence globale dans l’ensemble du corpus Les “mots” sont ordonnés selon leur significativité et une valeur négative de la significativité indique un sous-emploi du mot dans la catégorie (par exemple espaces pour les 40-49ans). En pratique, une valeur test supérieure à 1,96 permet d’interpréter une sur-représentation significative d’une catégorie donnée (p < 0,05) et supérieure à 3,09 une sur-repésentation très significative. Quand la t_value est négative, on conclue à une sous-représentation de ce “mot”.
Les mots pollution et nature sont spécifiques des répondants jeunes (moins de 30ans)…
Réponses spécifiques par modalités
La fonction characteristic_docs affiche les documents représentatifs d’une catégorie donnée de répondants ici.
Remarque : Le calcul de la distance est fondé sur la métrique du Khi2 et mesure l’écart entre le profil d’une réponse (ici) et le profil moyen de la réponse de la catégorie. Ce critère a tendance à favoriser les textes longs car plus ils contiennent de “mots”, plus ils ont de chance de contenir de “mots” communs, et donc de se rapprocher du profil moyen.
#Réponses spécifiques selon la région
characteristic_docs(corpus,dtm,meta(corpus)$region, ndocs=3)Documents characteristic of: Bretagne
X1426: distance 4.44
la nature, le cadre de vie
X1499: distance 4.505
la nature, ce qui est autour de nous
X21: distance 5.345
la nature, cadre de vie
Documents characteristic of: Centre
X1262: distance 4.234
la nature, tout ce qui est autour de moi
X1303: distance 4.234
tout ce qui est autour de moi, la nature
X1025: distance 4.446
tout ce qui est autour de moi, les gens, la nature
Documents characteristic of: Jura_Alpes
X978: distance 4.388
le cadre de vie, la nature
X1777: distance 4.667
tout ce qui est autour de nous, la nature
X264: distance 4.934
tout ce qui est autour de moi, la nature
Documents characteristic of: Mediterrannée
X1787: distance 5.44
la qualité de vie, tout ce qui nous entoure
X299: distance 6.101
cadre de vie, tout ce qui nous entoure
X103: distance 6.237
la nature
Documents characteristic of: Nord
X988: distance 4.565
c'est le cadre de vie, la qualité de la vie
X464: distance 5.121
cadre de vie, la nature
X1832: distance 5.121
cadre de vie, la nature
Documents characteristic of: S_BassinParis
X171: distance 4.469
le cadre de vie, la pollution, la nature
X491: distance 5.596
ce qui est autour de moi, la nature
X100: distance 6.188
la nature
Documents characteristic of: S_Ouest
X516: distance 4.349
la nature, le cadre de vie
X193: distance 4.667
la nature, ce qui est autour de nous
X1766: distance 5.055
tout ce qui nous entoure, la nature, la pollution
Documents characteristic of: Seine
X461: distance 4.415
le cadre de vie, la nature
X763: distance 4.415
le cadre de vie, la nature
X118: distance 6.047
la nature
Analyse factorielle sur tableau de contingence
La fonction corpus_ca permet d’effectuer une AFC qui met en relation les “mots” et un ensemble de variables qualitatives (les métadonnées).
On choisit les variables (ici : sexe, aget, matrim, pratique, enf, activite, prof, dipl, vote, habitat, localite, revenu) pour créer le tableau de contingence croisant les mots du corpus et les modalités des métadonnées sur lequel on calcule l’AFC. Comme des “mots” rares peuvent créer des axes articifiels, nous gardons uniquement les “mots” qui apparaissent dans au moins 2% des réponses. Pour cela, on réduit le tableau lexical (dtm) aux “mots” les plus fréquents avec l’option sparsity=0.98. Plus la valeur de sparsity est base, moins on garde de “mot” pour l’AFC.
resTLA<-corpus_ca(corpus,dtm, variables =c("sexe","aget", "matrim","pratique","enf","activite","prof","dipl","vote", "habitat" ,"localite","revenu"),sparsity=0.98)71 documents have been skipped because they do not include any occurrence of the terms retained in the final document-term matrix. Increase the value of the 'sparsity' parameter if you want to include them. These documents are: X22, X29, X32, X75, X114, X128, X130, X131, X140, X142, X197, X284, X360, X377, X402, X496, X514, X532, X554, X561, X563, X583, X585, X609, X619, X632, X685, X725, X766, X768, X776, X777, X787, X798, X844, X861, X909, X911, X917, X940, X971, X1010, X1026, X1065, X1086, X1108, X1116, X1141, X1148, X1154, X1186, X1239, X1280, X1370, X1377, X1396, X1470, X1512, X1522, X1565, X1576, X1608, X1657, X1720, X1743, X1779, X1789, X1796, X1871, X1877, X1983.
Variable(s) X, qnumq have been skipped since they contain more than 100 levels.
# explor(resTLA)On ouvre l’interface graphique via explor( ).
Décocher l’affichage des modalités supplémentaires dans l’interface graphique de la fenêtre Graphique pour ne pas afficher les numéros des textes mais seulement les “mots” et les modalités des variables.
res <- explor::prepare_results(resTLA)
explor::CA_var_plot(res, xax = 1, yax = 2, lev_sup = FALSE, var_sup = FALSE,
var_sup_choice = , var_hide = "None", var_lab_min_contrib = 2, col_var = "Position",
symbol_var = "Type", size_var = "Contrib", size_range = c(26.25, 350), labels_size = 10,
point_size = 28, transitions = TRUE, labels_positions = NULL, xlim = c(-0.393,
0.447), ylim = c(-0.413, 0.426))Ici encore on regarde les aides à l’interprétation classiques (valeurs propres, contributions, coordonnées, …) stockées dans resTLA avec la fonction explor
On affiche les réponses les plus contributives aux axes 1 à 3 (fonction extreme_docs).
# Documents les plus illustratifs par axe
extreme_docs(corpus,resTLA,axis=1,ndocs=2)Most extreme documents on the positive side of axis 1:
Most extreme documents on the negative side of axis 1:
X53
écologie
X417
écologie
extreme_docs(corpus,resTLA,axis=2,ndocs=2)Most extreme documents on the positive side of axis 2:
Most extreme documents on the negative side of axis 2:
X155
espaces verts, bois, rivières
X635
espaces verts
extreme_docs(corpus,resTLA,axis=3,ndocs=2)Most extreme documents on the positive side of axis 3:
X259
destruction des biens, poubelles, égouts
X696
des champs, des bois
Most extreme documents on the negative side of axis 3:
Graphe de mots
arbre <- terms_graph(dtm, min_occ = 30, interactive=T)Et pour aller plus loin
Analyser des sous-corpus
On créer des sous corpus à l’aide des métadonnées ou de mots au choix.
Classifications du tableau lexical
Va regrouper les réponses contenant des mots cooccurrents et permet ainsi de repérer des champs lexicaux.
Avec R.temis
clusTLE <- corpus_ca(corpus, dtm,variables = NULL, ncp = 6, sparsity = 0.98)71 documents have been skipped because they do not include any occurrence of the terms retained in the final document-term matrix. Increase the value of the 'sparsity' parameter if you want to include them. These documents are: X22, X29, X32, X75, X114, X128, X130, X131, X140, X142, X197, X284, X360, X377, X402, X496, X514, X532, X554, X561, X563, X583, X585, X609, X619, X632, X685, X725, X766, X768, X776, X777, X787, X798, X844, X861, X909, X911, X917, X940, X971, X1010, X1026, X1065, X1086, X1108, X1116, X1141, X1148, X1154, X1186, X1239, X1280, X1370, X1377, X1396, X1470, X1512, X1522, X1565, X1576, X1608, X1657, X1720, X1743, X1779, X1789, X1796, X1871, X1877, X1983.
Variable(s) X, qnumq have been skipped since they contain more than 100 levels.
#Afficher le dendrogramme
#plot(clusTLE$call$tree)
#clusTLE$desc.varIci on selectionne 7 classes
clus <- corpus_clustering(clusTLE,7)Description des classes
Pour chaque numéro de classe déterminé dans l’étape précédente, R affiche les mots et textes spécifiques qui vont permettre de déterminer les champs lexicaux de chacune.
On ajoute la variable de classe (clus) aux métadonnées initiales.
corpus_cl <- add_clusters(corpus,clus)
#View(meta(corpus_cl))
#clusTLE$desc.varMots spécifiques
On se sert de cette variable issue de la classification pour calculer les spécificités
specific_terms(dtm,meta(corpus_cl)$clus, n=5)Warning in rollup.simple_triplet_matrix(t(x), 2L, INDEX[as.character(k)], :
NA(s) in 'index'
$`1`
% Term/Level % Level/Term Global % Level Global occ. t value
écologie 36.956522 53.125000 0.53094408 34 64 Inf
pollution 6.521739 4.109589 1.21121619 6 146 3.133503
problèmes 2.173913 18.181818 0.09125601 2 11 2.744472
--------- NA NA NA NA NA NA
de 0.000000 0.000000 6.82760909 0 823 -2.976769
la 0.000000 0.000000 9.22515348 0 1112 -3.650148
Prob.
écologie 0.0000
pollution 0.0009
problèmes 0.0030
--------- NA
de 0.0015
la 0.0001
$`2`
% Term/Level % Level/Term Global % Level Global occ. t value Prob.
air 2.011331 71.71717 0.8213041 71 99 Inf 0
calme 2.351275 80.58252 0.8544881 83 103 Inf 0
campagne 2.436261 77.47748 0.9208561 86 111 Inf 0
la 18.583569 58.99281 9.2251535 656 1112 Inf 0
nature 17.223796 68.46847 7.3668492 608 888 Inf 0
$`3`
% Term/Level % Level/Term Global % Level Global occ. t value Prob.
arbres 4.411765 56.896552 0.4811681 33 58 Inf 0
espaces 6.283422 94.000000 0.4148001 47 50 Inf 0
les 17.647059 31.654676 3.4594326 132 417 Inf 0
verts 5.614973 91.304348 0.3816161 42 46 Inf 0
------- NA NA NA NA NA NA NA
de 1.470588 1.336574 6.8276091 11 823 -6.989877 0
$`4`
% Term/Level % Level/Term Global % Level Global occ. t value
entourage 66.666667 34.146341 0.34013605 14 41 Inf
secteur 4.761905 25.000000 0.03318401 1 4 2.459769
habitation 4.761905 6.250000 0.13273602 1 16 1.918399
naturel 4.761905 5.882353 0.14103202 1 17 1.892283
milieu 4.761905 2.777778 0.29865605 1 36 1.547024
Prob.
entourage 0.0000
secteur 0.0070
habitation 0.0275
naturel 0.0292
milieu 0.0609
$`5`
% Term/Level % Level/Term Global % Level Global occ. t value Prob.
cadre 5.6864338 80.924855 1.4352082 140 173 Inf 0
de 17.2623883 51.640340 6.8276091 425 823 Inf 0
qualité 3.5337124 80.555556 0.8959681 87 108 Inf 0
vie 12.3883022 79.842932 3.1690725 305 382 Inf 0
------- NA NA NA NA NA NA NA
ce 0.2437043 1.657459 3.0031525 6 362 -10.95007 0
$`6`
% Term/Level % Level/Term Global % Level Global occ. t value Prob.
bien 5.103858 81.90476 0.8710801 86 105 Inf 0
dans 2.492582 62.68657 0.5558321 42 67 Inf 0
être 4.094955 72.63158 0.7881201 69 95 Inf 0
on 5.578635 72.86822 1.0701842 94 129 Inf 0
où 5.044510 71.42857 0.9872242 85 119 Inf 0
$`7`
% Term/Level % Level/Term Global % Level Global occ. t value Prob.
autour 4.835040 88.08290 1.6011283 170 193 Inf 0
ce 9.812287 95.30387 3.0031525 345 362 Inf 0
entoure 5.005688 96.17486 1.5181682 176 183 Inf 0
est 4.095563 75.00000 1.5928323 144 192 Inf 0
il 1.251422 86.27451 0.4230961 44 51 Inf 0
Réponses specifiques
characteristic_docs(corpus_cl,dtm,meta(corpus_cl)$clu, ndocs=3)Warning in rollup.simple_triplet_matrix(t(x), 2L, INDEX[as.character(k)], :
NA(s) in 'index'
Documents characteristic of: 1
X47: distance 19.13
nature, écologie
X294: distance 19.13
nature, écologie
X359: distance 19.13
nature, écologie
Documents characteristic of: 2
X24: distance 3.751
la nature
X65: distance 3.751
la nature
X80: distance 3.751
la nature
Documents characteristic of: 3
X630: distance 9.34
ce qui nous entoure, la nature, les espaces verts, la mer
X727: distance 14.02
la nature, le calme, les espaces verts, le bon air
X1091: distance 14.6
les arbres, la nature
Documents characteristic of: 4
X1053: distance 21.69
nature, entourage
X1255: distance 21.69
entourage, nature
X115: distance 44.4
entourage
Documents characteristic of: 5
X241: distance 2.511
la nature, qualité de la vie, cadre de vie
X988: distance 2.63
c'est le cadre de vie, la qualité de la vie
X461: distance 2.871
le cadre de vie, la nature
Documents characteristic of: 6
X1756: distance 7.402
le cadre de vie où on est
X1482: distance 8.899
la nature, le bien être, le calme
X814: distance 8.902
c'est où on vit, le respect de la nature
Documents characteristic of: 7
X1777: distance 2.428
tout ce qui est autour de nous, la nature
X264: distance 2.736
tout ce qui est autour de moi, la nature
X1262: distance 2.736
la nature, tout ce qui est autour de moi
Avec Rainette (type Alceste)
On pourrait également faire une classification avec le package Rainette. En savoir plus sur https://juba.github.io/rainette/articles/introduction_usage.html
Son utilisation nesessite aussi d’appeler le package quanteda.
Attention risque de conflit entre les packages tm (chargé par R.temis) et quanteda : ne pas lancer library(quanteda).
Ici on utilise le corpus non lemmatisé.
library(rainette)
corpus
# On adapte le TLE pour quanteda
dfm <- quanteda::as.dfm(dtm)
quanteda::docvars(dfm, "doc_id") <- 1:nrow(dfm)
# On exécute rainette
resrai <- rainette(dfm, min_uc_size = 3, k = 10, doc_id = "doc_id", cc_test = 0.3,
tsj = 3)Exploration interactive
rainette_explor(resrai,dfm)
groups <-cutree_rainette(resrai, k = 10)Description des classes
rainette_stats(groups, dfm, n_terms = 5)On récupère la variable issue de la classification Rainette pour des traitements ultérieurs
meta(corpus, "classe") <- cutree_rainette(resrai, k = 10)
#View(meta(corpus))library(knitr)
purl("PEEK1b.qmd")