install.packages("factoextra")Analyse de clusters dans R avec eclust() de factoextra
Un seul appel de fonction exécute le clustering, choisit le nombre de regroupements et trace des graphiques prêts à publier
Un guide pratique d’eclust() de factoextra — le wrapper en un appel qui exécute le clustering k-means ou hiérarchique, choisit le nombre optimal de regroupements avec la statistique de l’écart, attache l’information silhouette et renvoie des graphiques ggplot2 de clusters, dendrogramme et silhouette. Avec get_dist()/fviz_dist() pour les matrices de distance, le tout sur les données intégrées USArrests.
eclust()— le wrapperfactoextraqui exécute toute une analyse de clustering en une ligne : k-means ou hiérarchique, la statistique de l’écart pour choisir k, l’info silhouette et les graphiques ggplot2.get_dist()/fviz_dist()— calculer et visualiser une matrice de distance (y compris les distances basées sur la corrélation).- Un exemple complet et exécutable sur les données intégrées USArrests — k-means et hiérarchique, de bout en bout.
- Quand recourir à
eclust()(prototypage rapide) plutôt qu’aux leçons pas à pas (contrôle total).
Le raccourci en une ligne pour l’analyse de clusters
Le clustering standard dans R est un workflow en plusieurs étapes : mettre les données à l’échelle, calculer une matrice de distance, exécuter kmeans() ou hclust(), estimer séparément le meilleur nombre de regroupements, puis construire les graphiques à la main. C’est la bonne façon de l’apprendre — et nos leçons pas à pas parcourent chaque étape — mais quand vous voulez simplement un premier aperçu rapide de la structure de vos données, cela fait beaucoup de code à taper.
Le package factoextra condense toute cette séquence en une seule fonction, eclust() (« enhanced clustering »). Un seul appel :
- exécute k-means, PAM, CLARA, FANNY (partitionnement) ou
hclust, AGNES, DIANA (hiérarchique) ; - pour le partitionnement, choisit automatiquement le nombre de regroupements avec la statistique de l’écart (fini les suppositions sur k) ;
- attache l’information silhouette pour que vous puissiez juger immédiatement de la qualité des clusters ;
- renvoie des graphiques ggplot2 — nuage de clusters, dendrogramme, silhouette — prêts pour un rapport.
Voyez eclust() comme du prototypage rapide : obtenez un clustering défendable et une figure prête à publier en quelques secondes, puis redescendez vers le workflow modulaire quand vous avez besoin de contrôler chaque décision.
Mise en place
Installez factoextra une fois, puis chargez-le. Il tire cluster et ggplot2, qui font le gros du travail.
library(factoextra)Préparer les données
Nous utilisons les données intégrées USArrests (taux de crimes violents et population urbaine pour les 50 États américains). Le clustering est basé sur la distance, alors mettez toujours les variables à l’échelle d’abord — sinon Assault (des centaines) éclipserait Murder (chiffres à un seul digit). scale() centre et standardise chaque colonne :
data("USArrests")
df <- scale(USArrests)
head(df) Murder Assault UrbanPop Rape
Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
Arizona 0.07163341 1.4788032 0.9989801 1.042878388
Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602
California 0.27826823 1.2628144 1.7589234 2.067820292
Colorado 0.02571456 0.3988593 0.8608085 1.864967207
Calculer et visualiser la matrice de distance
Avant le clustering, il est utile de voir les dissimilarités. get_dist() calcule la matrice de distance et — contrairement au dist() de base — prend aussi en charge les distances basées sur la corrélation ("pearson", "kendall", "spearman"), qui regroupent les observations par forme de profil plutôt que par magnitude. fviz_dist() la trace ensuite sous forme de carte de chaleur :
# Correlation-based distance
res.dist <- get_dist(df, method = "pearson")
# Visualize the dissimilarity matrix
fviz_dist(res.dist, lab_size = 8)
Lisez-la ainsi : les cellules rouges marquent les petites distances (États similaires), les cellules bleues marquent les grandes distances. Les États qui se trouvent côte à côte dans des blocs rouges le long de la diagonale sont les regroupements naturels — une vérification utile avant de vous fixer sur un nombre de regroupements.
k-means amélioré en un seul appel
Voici le gain. Un seul appel eclust() ne met plus rien à l’échelle (nous avons déjà mis df à l’échelle), exécute k-means, et calcule la statistique de l’écart pour choisir k automatiquement. nstart = 25 exécute l’algorithme à partir de 25 départs aléatoires et garde le meilleur, ce qui stabilise le résultat :
res.km <- eclust(df, "kmeans", nstart = 25)
L’appel renvoie déjà un graphique de clusters (États projetés sur les deux premières composantes principales, chaque cluster codé par couleur avec une enveloppe ombrée). Le k optimal retenu est stocké sur le résultat :
res.km$nbclust[1] 3
Comme eclust() a exécuté la statistique de l’écart pour vous, vous pouvez tracer la courbe qu’il a utilisée pour décider. Le k choisi est l’endroit où la statistique de l’écart est maximisée (selon la règle standard Tibs2001SEmax) :
fviz_gap_stat(res.km$gap_stat)
Enfin, vérifiez la qualité des clusters avec le graphique silhouette — déjà attaché au résultat. Chaque barre représente un État ; une largeur de silhouette positive et étendue signifie que l’État se situe confortablement dans son cluster, tandis qu’une barre négative signale une affectation probablement erronée :
fviz_silhouette(res.km) cluster size ave.sil.width
1 1 13 0.37
2 2 20 0.26
3 3 17 0.32

L’impression rapporte la largeur de silhouette moyenne par cluster (et globale) — une lecture rapide, en un seul chiffre, de la qualité de séparation de vos clusters.
Classification hiérarchique amélioré
Changez un seul argument pour obtenir un classification hiérarchique à la place. eclust(df, "hclust") calcule le dendrogramme, et eclust() attache de nouveau les informations de silhouette et de clusters, de sorte que vous tracez les trois graphiques directement à partir du résultat :
res.hc <- eclust(df, "hclust") # compute hierarchical clustering
fviz_dend(res.hc, rect = TRUE) # dendrogram with cluster rectangles
fviz_silhouette(res.hc) # silhouette plot cluster size ave.sil.width
1 1 19 0.26
2 2 19 0.28
3 3 12 0.43

fviz_cluster(res.hc) # cluster scatter plot
Pour la classification hiérarchique, vous pouvez aussi passer une métrique basée sur la corrélation via hc_metric (par ex. hc_metric = "spearman") — quelque chose que le hclust() de base ne fera pas sans construire vous-même la matrice de distance.
Choisir vous-même le nombre de regroupements
La statistique de l’écart automatique est une valeur par défaut sensée, mais vous pouvez la remplacer. Passez k = pour fixer le nombre de regroupements directement — pratique quand une connaissance métier ou une contrainte en aval l’impose :
# Fix four clusters instead of letting the gap statistic decide
res.km4 <- eclust(df, "kmeans", k = 4, nstart = 25)Le même argument k = fonctionne pour chaque méthode ("pam", "clara", "hclust", "agnes", "diana", …).
Quand utiliser eclust() plutôt que l’approche pas à pas
eclust() est un wrapper de commodité, pas un substitut à la compréhension du pipeline. Utilisez-le pour aller vite ; utilisez les leçons modulaires quand vous avez besoin de contrôle.
- Recourez à
eclust()quand vous voulez un premier clustering rapide et défendable — analyse exploratoire, un prototype ou une figure de publication rapide — et que la valeur de k choisie par la statistique de l’écart et les réglages par défaut sensés vous conviennent. - Redescendez vers le workflow pas à pas quand vous avez besoin de contrôler chaque décision : une métrique de distance spécifique, une méthode de liaison particulière, une règle différente pour choisir k (coude, silhouette, le vote à 30 indices de NbClust), une validation personnalisée, ou pour comprendre ce que fait chaque étape. C’est exactement ce qu’enseignent les leçons ci-dessous.
Aller plus loin — les leçons complètes
Ce billet est le raccourci. Pour le workflow complet et contrôlable, chaque étape a sa propre leçon :
- Clustering k-means — l’algorithme de partitionnement que
eclust(df, "kmeans")exécute en coulisses. - Déterminer le nombre optimal de regroupements — les méthodes du coude, de la silhouette et de la statistique de l’écart qu’
eclust()automatise. - Statistiques de validation de clusters — silhouette, indice de Dunn et les mesures de qualité incontournables.
- Classification hiérarchique — distance, liaison et le dendrogramme, pas à pas.
- Le clustering dans R — la série — le cursus complet.
Pour aller plus loin
- Clustering k-means · Nombre optimal de regroupements · Statistiques de validation de clusters · Classification hiérarchique · Série sur le clustering.
Demandez à Prova « exécute eclust() sur mon data frame et explique si les largeurs de silhouette justifient les clusters » — elle répond avec du code que vous pouvez exécuter sur vos propres données. The runtime is the judge. Demander à Prova →
Citation
@online{kassambara2026,
author = {Kassambara, Alboukadel},
title = {Analyse de clusters dans R avec eclust() de factoextra},
date = {2026-06-24},
url = {https://www.datanovia.com/blog/cluster-analysis-in-r-eclust},
langid = {fr}
}