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

Machine Learning

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.

Auteur·rice
Date de publication

24 juin 2026

Modifié

24 juin 2026

AstuceCe que vous trouverez ici
  • eclust() — le wrapper factoextra qui 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.

install.packages("factoextra")
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)

A heatmap of the pairwise distances between US states, ordered so similar states cluster along the diagonal; red marks small distances, blue marks large distances.

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)

A ggplot2 cluster plot of the US states projected onto the first two principal components, with each cluster drawn in a distinct colour and a shaded convex hull.

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)

The gap statistic plotted against the number of clusters, with a dashed line marking the optimal k that eclust selected automatically.

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

A silhouette plot for the k-means clusters: one horizontal bar per state grouped by cluster colour, with the average silhouette width reported.

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

A colour-coded hierarchical clustering dendrogram of the US states with rectangles drawn around the clusters that eclust identified.

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

A silhouette plot for the hierarchical clusters of US states, one bar per state grouped and coloured by cluster.

fviz_cluster(res.hc)             # cluster scatter plot

A ggplot2 cluster scatter plot of the hierarchical clustering result, states grouped into colour-coded clusters on the first two principal components.

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 :

Pour aller plus loin

🟢 Avec un agent IA

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 →

Cette page vous a-t-elle été utile ?

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN

Citation

BibTeX
@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}
}
Veuillez citer ce travail comme suit :
Kassambara, Alboukadel. 2026. “Analyse de clusters dans R avec eclust() de factoextra.” June 24. https://www.datanovia.com/blog/cluster-analysis-in-r-eclust.