Vendredi, on continuera en cours la classification (non supervisée) et en particulier les méthodes hiérarchiques, et les arbres. On va utiliser la base suivante, avec les résultats des élections présidentielles (premier tour) de 2012,
elections2012 <- read.csv("http://komodo.regardscitoyens.org/public/presidentielles2012/resultats/resultats_departements_final_T1.csv",
sep=";",header=TRUE,dec=",")
La base qu’on garde contient juste les voix exprimées, en pourcentage
voix <- which(substr(names(elections2012),1,12)=="X..Voix.Exp.")
X <- as.matrix(elections2012[,voix])
colnames(X) <- substr(names(elections2012)[voix],13,nchar(names(elections2012)[voix]))
rownames(X) <- elections2012[,3]
Parfois, il convient de normaliser les données. Ici, sur les département, ça n’est pas nécessaire. Par contre, sur les candidats, ça le serait (comme pour l’ACP en fait). Pour visualiser les distances (entre départements), on peut utiliser
heatmap(X)
On peut faire une CAH, sur notre matrice de distance entre rangs
cah <- hclust(dist(X))
plot(cah,cex=.6)
et si on souhaite garder 5 groupes (par exemple) on utilise
rect.hclust(cah,k=5)
groups.5 <- cutree(cah,5)
On peut aussi visualiser les classes avec la fonction
library(dendroextras)
plot(colour_clusters(cah,k=5))
Pour comprendre qui se trouve dans nos groupes, on peut utiliser
aggregate(X,list(groups.5),mean)
qui va nous renvoyer les “votes moyens” pour chaque candidat, dans chaque groupe. Maintenant, pour en finir avec la visualisation, on peut utiliser le code suivant (un peu long, certes) qui permettra de visualiser sur un carte les différents groupes
carte_classe <- function(groupes){
library(stringr)
elections2012$dep <- elections2012$Libellé.du.département
elections2012$dep <- tolower(elections2012$dep)
elections2012$dep <- str_replace_all(elections2012$dep, pattern = " |-|'|/", replacement = "")
library(maps)
france<-map(database="france")
france$dep <- france$names
france$dep <- tolower(france$dep)
france$dep <- str_replace_all(france$dep, pattern = " |-|'|/", replacement = "")
corresp_noms <- elections2012[, c("Libellé.du.département", "dep")]
corresp_noms$dep[which(corresp_noms$dep %in% "corsesud")] <- "corsedusud"
col2001<-groupes+1
names(col2001) <- corresp_noms$dep[match(names(col2001), corresp_noms$Libellé.du.département)]
color <- col2001[match(france$dep, names(col2001))]
map(database="france", fill=TRUE, col=color)
}
carte_classe(groups.5)
Avec ces fonctions, on devrait pouvoir tester différentes méthodes pour constituer des groupes.