# Lecture du fichier CSV
# Remplacez "votre_fichier.csv" par le chemin de votre fichier
donnees <- read.csv("Fichier-Laurence.csv", header = TRUE, sep = ",", 
                    stringsAsFactors = FALSE, fileEncoding = "UTF-8")
                    # 2. Sauvegarde des noms des élèves et préparation des données pour le clustering
noms_eleves <- donnees$Nom
donnees_clustering <- donnees[, -1]  # Supprime la colonne "Nom"
# Normalisation des données (important pour k-means)
donnees_normalisees <- scale(donnees_clustering)
# 3. Détermination du nombre optimal de clusters avec la méthode du coude
set.seed(123)  # Pour la reproductibilité
# Calcul de la somme des carrés intra-classe pour différents nombres de clusters
wss <- numeric(10)
for (i in 1:10) {
  kmeans_result <- kmeans(donnees_normalisees, centers = i, nstart = 25)
  wss[i] <- kmeans_result$tot.withinss
}
# Graphique du coude
plot(1:10, wss, type = "b", pch = 19, frame = FALSE,
     xlab = "Nombre de clusters", ylab = "Somme des carrés intra-classe",
     main = "Méthode du coude pour déterminer k optimal")
# 4. Application du k-means avec un nombre de clusters choisi (par exemple 3)
k_choisi <- 3
kmeans_result <- kmeans(donnees_normalisees, centers = k_choisi, nstart = 25)
# Ajout des résultats du clustering au dataframe original
donnees$Cluster <- as.factor(kmeans_result$cluster)
# 5. Visualisation des résultats
# Afficher les clusters assignés à chaque élève
cat("\n=== ASSIGNATION DES ÉLÈVES AUX CLUSTERS ===\n")
print(donnees[, c("Nom", "Cluster", "Moyenne")])
# Statistiques par cluster
cat("\n=== STATISTIQUES PAR CLUSTER ===\n")
for (i in 1:k_choisi) {
  cat("\nCluster", i, ":", sum(donnees$Cluster == i), "élèves\n")
  cat("Moyenne générale moyenne :", 
      round(mean(donnees$Moyenne[donnees$Cluster == i]), 2), "\n")
# Réalisation de l'ACP
acp_result <- PCA(donnees_clustering, graph = FALSE)
# Visualisation des individus colorés par cluster
# Version complète avec tous les paramètres
fviz_pca_ind(acp_result,
             col.ind = donnees$Cluster,
             palette = "Set1",
             addEllipses = TRUE,
             ellipse.type = "confidence",
             ellipse.level = 0.9999999,      # Niveau de confiance (0 à 1)
             ellipse.alpha = 0.2,       # Transparence (0 transparent, 1 opaque)
             ellipse.linewidth = 1.5,   # Épaisseur du contour
             pointsize = 3,             # Taille des points
             pointshape = 19,           # Forme des points
             mean.point = TRUE,         # Afficher le centre de l'ellipse
             mean.point.size = 4,       # Taille du point central
             repel = TRUE,              # Éviter le chevauchement des labels
             legend.title = "Cluster",
             title = "Clustering k-means des élèves - Visualisation détaillée",
             xlab = "Composante 1",
             ylab = "Composante 2") +
  theme_minimal()
# 10. Résumé final
cat("\n=== RÉSUMÉ DE L'ANALYSE ===\n")
cat("Nombre d'élèves analysés :", nrow(donnees), "\n")
cat("Nombre de clusters choisi :", k_choisi, "\n")
cat("Inertie intra-classe totale :", round(kmeans_result$tot.withinss, 2), "\n")
cat("Inertie inter-classe :", round(kmeans_result$betweenss, 2), "\n")
cat("Ratio d'inertie (betweenss/totss) :", 
    round(kmeans_result$betweenss/kmeans_result$totss * 100, 1), "%\n")        

