Projet classification 1 Charlotte Salvador
Pour cette classificaion j’ai choisie d’uiliser la methode Ward.D2 car elle minimise l’inertie intrea classe et elle maximise l’inertie inter classe . Et je trouve qu’elle est plus adapter a mon jeux de données .
Importation
Copier les noms des villes dans les noms de lignes …
n=data[,2] #On déclare un nom à la premier colonne qui contient les noms
rownames(data)=n #On déclare les noms des lignes Suppression des colonne
Suppression de Mayotte
## [1] 49206050
Changement nom des variables
colnames(data)=c("Pharmacie","Medecin_generaliste","Boulangerie","Hypermarche_supermarche","Nbhotel",
"Nbchambrehotel","Nbnuiteehotel","Txactivite15_24ans","Pas_peu_diplomes","CAP_BEP","BAC","Enseignantsup",
"Txchomage15_24ans","Salairenet18_25ans")Centrage-réduction
Vérif : nouvelles moyennes et nouveaux ecarts-type
## Pharmacie Medecin_generaliste Boulangerie
## -2.575211e-17 -1.043333e-16 -1.095478e-17
## Hypermarche_supermarche Nbhotel Nbchambrehotel
## -1.210059e-16 5.113125e-17 5.490427e-17
## Nbnuiteehotel Txactivite15_24ans Pas_peu_diplomes
## -2.943568e-17 1.408533e-16 -9.797718e-17
## CAP_BEP BAC Enseignantsup
## -3.805292e-17 3.911707e-17 5.508587e-17
## Txchomage15_24ans Salairenet18_25ans
## 3.354522e-17 -8.718287e-17
## Pharmacie Medecin_generaliste Boulangerie
## 1 1 1
## Hypermarche_supermarche Nbhotel Nbchambrehotel
## 1 1 1
## Nbnuiteehotel Txactivite15_24ans Pas_peu_diplomes
## 1 1 1
## CAP_BEP BAC Enseignantsup
## 1 1 1
## Txchomage15_24ans Salairenet18_25ans
## 1 1
Classification
##Classification1
affichage de l’arbre : option hang = -1 (part de la fenetre graphique reservée aux labels)
les hauteurs (sauts)
## [1] 0.3391237 0.3631421 0.3802258 0.4521208 0.4573623 0.4624465
## [7] 0.4859937 0.5147568 0.5305622 0.5837449 0.5891048 0.5990525
## [13] 0.6149705 0.6250852 0.6631387 0.6702229 0.6765028 0.6908710
## [19] 0.7072257 0.7381019 0.7696998 0.7862483 0.7865378 0.8194040
## [25] 0.8504778 0.8532662 0.8788376 0.8874582 0.9012268 0.9048190
## [31] 0.9184876 0.9538998 1.0025662 1.0393030 1.0395775 1.0501953
## [37] 1.1158183 1.1161142 1.1280410 1.1534111 1.1682386 1.1955133
## [43] 1.2003376 1.2326835 1.2710043 1.2917641 1.3356358 1.3524820
## [49] 1.3564358 1.3637540 1.3662721 1.5677440 1.5690407 1.5748746
## [55] 1.7034813 1.7214788 1.7454856 1.8781207 1.9576712 2.0232001
## [61] 2.0385016 2.0695714 2.0826527 2.1113241 2.1405025 2.1611921
## [67] 2.2575105 2.2653698 2.2916188 2.2975063 2.3037773 2.3792741
## [73] 2.5349712 2.6441258 2.6450712 2.7425412 2.8073145 2.9992460
## [79] 3.0917029 3.2505044 3.5533256 3.6048347 3.6913726 3.8216300
## [85] 3.8905642 4.4198613 4.4660548 4.6189416 4.6356069 4.7499628
## [91] 4.9807714 6.2198660 6.6759113 7.3151332 11.8901754 12.1361605
## [97] 13.9500071 22.9971256 35.0793490
Afficher le nombre de classes en abscisse, les sauts en ordonnées
Grace a ce graphique on constate qu’il y a 3 classes
Choix du nombre de classe
q=3 #Choix de classes
# re-afficher l'arbre, avec les classes choisies
plot(cah, hang =- 1)
rect.hclust(cah, q) # classifier (= couper l'arbre)
classif=cutree(cah,q) #On coupe l'arbre cah en q classes
#afficher les villes par classe
sort(classif) #Trier dans l'ordre ## Ain Aisne Allier
## 1 1 1
## Alpes-de-Haute-Provence Hautes-Alpes Ardèche
## 1 1 1
## Ardennes Ariège Aube
## 1 1 1
## Aude Aveyron Calvados
## 1 1 1
## Cantal Charente Charente-Maritime
## 1 1 1
## Cher Corrèze Côte-d'Or
## 1 1 1
## Côtes-d'Armor Creuse Dordogne
## 1 1 1
## Doubs Drôme Eure
## 1 1 1
## Eure-et-Loir Finistère Corse-du-Sud
## 1 1 1
## Haute-Corse Gard Gers
## 1 1 1
## Ille-et-Vilaine Indre Indre-et-Loire
## 1 1 1
## Jura Landes Loir-et-Cher
## 1 1 1
## Loire Haute-Loire Loiret
## 1 1 1
## Lot Lot-et-Garonne Lozère
## 1 1 1
## Maine-et-Loire Manche Marne
## 1 1 1
## Haute-Marne Mayenne Meurthe-et-Moselle
## 1 1 1
## Meuse Morbihan Nièvre
## 1 1 1
## Oise Orne Puy-de-Dôme
## 1 1 1
## Pyrénées-Atlantiques Hautes-Pyrénées Pyrénées-Orientales
## 1 1 1
## Haut-Rhin Haute-Saône Saône-et-Loire
## 1 1 1
## Sarthe Savoie Haute-Savoie
## 1 1 1
## Deux-Sèvres Somme Tarn
## 1 1 1
## Tarn-et-Garonne Vaucluse Vendée
## 1 1 1
## Vienne Haute-Vienne Vosges
## 1 1 1
## Yonne Territoire de Belfort Guadeloupe
## 1 1 1
## Martinique Guyane La Réunion
## 1 1 1
## Alpes-Maritimes Bouches-du-Rhône Haute-Garonne
## 2 2 2
## Gironde Hérault Isère
## 2 2 2
## Loire-Atlantique Moselle Nord
## 2 2 2
## Pas-de-Calais Bas-Rhin Rhône
## 2 2 2
## Seine-Maritime Seine-et-Marne Yvelines
## 2 2 2
## Var Essonne Hauts-de-Seine
## 2 2 2
## Seine-Saint-Denis Val-de-Marne Val-d'Oise
## 2 2 2
## Paris
## 3
On constate que sur cette 1ere classification qu’il y a 3 classe qui sont inegalement repartie la classe 3 qui ne contier que paris , la classe 2 qui contient Alpes-Maritimes, Bouches-du-Rhône , Haute-Garonne,Gironde ,Hérault ,Isère,Loire-Atlantique, Moselle,Nord,Pas-de-Calais ,Bas-Rhin,Rhône,Seine-Maritime, Seine-et-Marne , Yvelines ,Var,Essonne, Hauts-de-Seine ,Seine-Saint-Denis,Val-de-Marne, Val-d’Oise et la classe 1 qui contient touts les autre departement . on peut constater que la classe 3 qui ne contient que Paris est un outiler .
Profil classes : 1. analyse spatiale
## classif
## 1 2 3
## 78 21 1
## [1] 100
## [1] 13.86
## [1] 0 0 0
for (k in 1:q) {
n=sum(classif==k)
variances_classes[k] = sum(diag(var(data[classif==k,])))*(n-1)/n
}
round(variances_classes,2) ## [1] 4.20 8.52 0.00
## [1] 13.86
## [1] 2.05 2.92 0.00
## [1] 3.72
### Distances inter-classes (sur centres de gravite)
# i. calcul des individus moyens (= moyennes, centres de gravite, centroids)
moyennes=aggregate(data,list(classif),mean)[,-1] ;moyennes #Les individus moyens de chaque classe c'est à dire individus ## Pharmacie Medecin_generaliste Boulangerie Hypermarche_supermarche Nbhotel
## 1 -0.4165842 -0.4231812 -0.410191 -0.3960179 -0.2075237
## 2 1.3285623 1.3937777 1.307504 1.2304251 0.4002423
## 3 4.5937630 3.7388012 4.537317 5.0504714 7.7817584
## Nbchambrehotel Nbnuiteehotel Txactivite15_24ans Pas_peu_diplomes CAP_BEP
## 1 -0.2708407 -0.2593678 0.2479355 -0.4147983 -0.3982152
## 2 0.6052644 0.5453375 -0.8370661 1.4672264 1.4675973
## 3 8.4150199 8.7786005 -1.7605838 1.5425094 0.2412395
## BAC Enseignantsup Txchomage15_24ans Salairenet18_25ans
## 1 -0.4521648 -0.4188962 0.1125597 -0.2988317
## 2 1.5680746 1.2878425 -0.3244002 0.8186648
## 3 2.3392919 5.6292149 -1.9672497 6.1169129
#On met [,-1] pour enlever la colonnes "group" qui fausse les résultats puisque R calcule avec
round(moyennes,2) #Arrondir le résultat à 2 chiffres après la virgule## Pharmacie Medecin_generaliste Boulangerie Hypermarche_supermarche Nbhotel
## 1 -0.42 -0.42 -0.41 -0.40 -0.21
## 2 1.33 1.39 1.31 1.23 0.40
## 3 4.59 3.74 4.54 5.05 7.78
## Nbchambrehotel Nbnuiteehotel Txactivite15_24ans Pas_peu_diplomes CAP_BEP
## 1 -0.27 -0.26 0.25 -0.41 -0.40
## 2 0.61 0.55 -0.84 1.47 1.47
## 3 8.42 8.78 -1.76 1.54 0.24
## BAC Enseignantsup Txchomage15_24ans Salairenet18_25ans
## 1 -0.45 -0.42 0.11 -0.30
## 2 1.57 1.29 -0.32 0.82
## 3 2.34 5.63 -1.97 6.12
# ii. matrice des distances entre individus moyens
round(dist(moyennes),2) #Distance entre les individus moyens## 1 2
## 2 5.51
## 3 20.39 16.64
Profil classes : 2. individus moyens
graphique
matplot(t(moyennes),type="b")
abline(h=0)
abline(h=c(-1,1),lty=2) #Les deux autres axes pour voir les valeurs significatives
text(1:ncol(data),max(moyennes)*1.1,colnames(data),xpd=NA,srt=-20) #Pour ajouter les E en haut. srt=l'inclinaison# Distributions-classes d'une variable ici le boulangerie
boxplot(data[,4]~classif,main="Distribution classes de la variable boulangerie ")# Distributions-classes de toutes les variables
par(mfrow=c(3,4))
for(i in 1:12) boxplot(data[,i]~classif,main=i)##Calculer les silhouettes
couleurs=c("black","red","green")
plot(data,col=couleurs[unclass(classif)],pch=19,xlab="V1",ylab="V2")
text(data,pos=3,labels=rownames(data),col=couleurs[unclass(classif)], cex=0.8)
legend("bottomright",c("1","2","3"),col=couleurs,pch=19)library(cluster)
sil=silhouette(x=classif,dist=dist(data))
plot(sil)
rownames(sil)=rownames(data) #Afficher les noms
plot(sil,nmax=60,cex.names=0.7)## cluster neighbor sil_width
## Ain 1 2 0.543328158
## Aisne 1 2 0.566203666
## Allier 1 2 0.692512684
## Alpes-de-Haute-Provence 1 2 0.684879806
## Hautes-Alpes 1 2 0.664292928
## Alpes-Maritimes 2 1 0.333566390
## Ardèche 1 2 0.703057804
## Ardennes 1 2 0.680851777
## Ariège 1 2 0.668168666
## Aube 1 2 0.678935793
## Aude 1 2 0.631441187
## Aveyron 1 2 0.694069608
## Bouches-du-Rhône 2 1 0.442050120
## Calvados 1 2 0.331965342
## Cantal 1 2 0.634011581
## Charente 1 2 0.686484243
## Charente-Maritime 1 2 0.437867261
## Cher 1 2 0.696726046
## Corrèze 1 2 0.675824728
## Côte-d'Or 1 2 0.515519349
## Côtes-d'Armor 1 2 0.544189292
## Creuse 1 2 0.643445886
## Dordogne 1 2 0.648450386
## Doubs 1 2 0.608346863
## Drôme 1 2 0.647260156
## Eure 1 2 0.596001905
## Eure-et-Loir 1 2 0.653651585
## Finistère 1 2 0.003519433
## Corse-du-Sud 1 2 0.650879768
## Haute-Corse 1 2 0.625194443
## Gard 1 2 0.307533005
## Haute-Garonne 2 1 0.449246208
## Gers 1 2 0.676221599
## Gironde 2 1 0.516883092
## Hérault 2 1 0.306797699
## Ille-et-Vilaine 1 2 -0.191002082
## Indre 1 2 0.690053027
## Indre-et-Loire 1 2 0.528274497
## Isère 2 1 0.390504852
## Jura 1 2 0.667058502
## Landes 1 2 0.674867114
## Loir-et-Cher 1 2 0.685258235
## Loire 1 2 0.373164616
## Haute-Loire 1 2 0.682513908
## Loire-Atlantique 2 1 0.445910490
## Loiret 1 2 0.519714143
## Lot 1 2 0.694415758
## Lot-et-Garonne 1 2 0.696636424
## Lozère 1 2 0.601899757
## Maine-et-Loire 1 2 0.392924765
## Manche 1 2 0.586881486
## Marne 1 2 0.545502255
## Haute-Marne 1 2 0.623341038
## Mayenne 1 2 0.659679508
## Meurthe-et-Moselle 1 2 0.321521714
## Meuse 1 2 0.679853516
## Morbihan 1 2 0.302136735
## Moselle 2 1 0.107894523
## Nièvre 1 2 0.699518445
## Nord 2 1 0.366922832
## Oise 1 2 0.403007637
## Orne 1 2 0.704021538
## Pas-de-Calais 2 1 0.411291635
## Puy-de-Dôme 1 2 0.408256390
## Pyrénées-Atlantiques 1 2 0.323422951
## Hautes-Pyrénées 1 2 0.590642846
## Pyrénées-Orientales 1 2 0.500918289
## Bas-Rhin 2 1 0.303593096
## Haut-Rhin 1 2 0.371593626
## Rhône 2 1 0.519734824
## Haute-Saône 1 2 0.677873500
## Saône-et-Loire 1 2 0.565030185
## Sarthe 1 2 0.623270378
## Savoie 1 2 0.436576561
## Haute-Savoie 1 2 0.151019521
## Paris 3 2 0.000000000
## Seine-Maritime 2 1 0.363934131
## Seine-et-Marne 2 1 0.390474427
## Yvelines 2 1 0.373308780
## Deux-Sèvres 1 2 0.658304375
## Somme 1 2 0.548449220
## Tarn 1 2 0.663646100
## Tarn-et-Garonne 1 2 0.677132594
## Var 2 1 0.271248886
## Vaucluse 1 2 0.569371994
## Vendée 1 2 0.476000936
## Vienne 1 2 0.593059691
## Haute-Vienne 1 2 0.612695809
## Vosges 1 2 0.686612513
## Yonne 1 2 0.686919406
## Territoire de Belfort 1 2 0.659481947
## Essonne 2 1 0.289304018
## Hauts-de-Seine 2 1 0.353675773
## Seine-Saint-Denis 2 1 0.434579866
## Val-de-Marne 2 1 0.394886910
## Val-d'Oise 2 1 0.243233422
## Guadeloupe 1 2 0.312807086
## Martinique 1 2 0.349001992
## Guyane 1 2 0.433785407
## La Réunion 1 2 0.257565851
## attr(,"Ordered")
## [1] FALSE
## attr(,"call")
## silhouette.default(x = classif, dist = dist(data))
## attr(,"class")
## [1] "silhouette"
CONCLUSION
On constate que la classe 3 qui comporte seulement Paris est tres isolée des deux autre classes. Alors que la classe 1 et 2 sont pluto proche . La classe 3 qui repressente Paris est tres significativement superieure pour toute les variables saufe pour les variable peut diplomer et CAP-BEP ou elle est dans la norme . Mais pour paris le taux d’activité des 18-25ans et le taux de chomage et significativement inferieur . . La 2eme classe et significativement superieur pour toute les variable sauf pour 5 varible ou elle est dans la norme qui sont les variable nombres d’hotel , nombre de nuits d’hotel , nombre de chambre d’hotel mais la classe 2 a aussi des valeur significativement inferieur a la moyenne notament les variable salaire nete des 18-25 ans et le taux de chomage .
Grace au graphique des silhouette on constate que la classe 1 a 78 individue et une silhouette de 0.55 se qui n’est pas tres elever . Et que la classe 2 a 21 individue et une silouhette de 0.37 se qui n’est pas tres elever non plus se qui nous pousse a continuer notre classification .
2eme Classification
On refait une classification en enlevant les valeur absurde
library(readr)
data=read.csv("data.csv",sep=";", header=TRUE, dec=".",encoding = "utf-8")
#Copier les noms des villes dans les noms de lignes ...
n=data[,2] #On déclare un nom à la premier colonne qui contient les noms
rownames(data)=n #On déclare les noms des lignes
#Suppression des colonne
data=data[,-c(1:3)]
#Suppression de Mayotte
data=data[-101,]
sum(data)## [1] 49206050
#Changement nom des variables
colnames(data)=c("Pharmacie","Medecin_generaliste","Boulangerie","Hypermarche_supermarche","Nbhotel",
"Nbchambrehotel","Nbnuiteehotel","Txactivite15_64ans","Pas_peu_diplomes","CAP_BEP","BAC","Enseignantsup",
"Txchomage15_24ans","Salairenet18_25ans")
noms=rownames(data)[classif==1]
data2=subset(data,rownames(data) %in% noms)
#Centrage-réduction
data2=scale(data2) NOUVELLE CLASSIFICATION
cah = hclust(d=dist(data2),method="ward.D2")
# affichage de l'arbre : option hang = -1 (part de la fenetre graphique reservée aux labels)
plot(cah, hang = -1)## [1] 0.4535881 0.6290793 0.6369185 0.7054403 0.7146703 0.7556632
## [7] 0.7849736 0.9347770 1.0026518 1.0101069 1.0682698 1.0761683
## [13] 1.1038787 1.1128596 1.1192612 1.1448931 1.1463119 1.1703971
## [19] 1.2876847 1.3201754 1.3212325 1.3636064 1.3657726 1.3998266
## [25] 1.4806966 1.6044188 1.6255075 1.7841332 1.8073967 1.8121829
## [31] 1.8175656 1.8506231 1.8658445 1.8751187 1.8789220 1.8837593
## [37] 1.8884170 1.9610881 1.9758446 2.0809355 2.1503489 2.1531603
## [43] 2.1642891 2.2387272 2.2431770 2.2637981 2.3109315 2.3807491
## [49] 2.5023941 2.5080130 2.5326820 2.6590528 2.8110449 2.8273371
## [55] 3.0426703 3.1962609 3.3052421 3.5448703 3.6626546 3.6673569
## [61] 3.8631354 4.3269633 4.4120551 4.5701173 4.8627395 5.1407589
## [67] 5.3676833 6.2858603 6.3029290 7.4436566 7.7449429 8.1587787
## [73] 9.5553139 11.0876367 11.6329296 12.0381730 31.8594218
#Afficher le nombre de classes en abscisse, les sauts en ordonnées
plot(rev(cah$height),type="b",main="Arbre de classification",xlab="Départements",ylab="Hauteurs") #Choix du nombre de classe
q=4 #Choix de classes
# re-afficher l'arbre, avec les classes choisies
plot(cah, hang = -1) #hang=-1 pour que R est de la place pour écrire les labels en bas
rect.hclust(cah, q) # classifier (= couper l'arbre)
classif2=cutree(cah,q) #On coupe l'arbre cah en classes
#afficher les villes par classe
sort(classif2) #Trier dans l'ordre donc toutes les départements qui appartiennent à la classe numéro 1, puis numéro 2, puis 3 ect...## Ain Aisne Calvados
## 1 1 1
## Charente-Maritime Côte-d'Or Côtes-d'Armor
## 1 1 1
## Doubs Drôme Eure
## 1 1 1
## Finistère Gard Ille-et-Vilaine
## 1 1 1
## Indre-et-Loire Loire Loiret
## 1 1 1
## Maine-et-Loire Manche Marne
## 1 1 1
## Meurthe-et-Moselle Morbihan Oise
## 1 1 1
## Puy-de-Dôme Pyrénées-Atlantiques Pyrénées-Orientales
## 1 1 1
## Haut-Rhin Saône-et-Loire Sarthe
## 1 1 1
## Somme Vaucluse Vendée
## 1 1 1
## La Réunion Allier Alpes-de-Haute-Provence
## 1 2 2
## Hautes-Alpes Ardèche Ardennes
## 2 2 2
## Ariège Aube Aude
## 2 2 2
## Aveyron Cantal Charente
## 2 2 2
## Cher Corrèze Creuse
## 2 2 2
## Dordogne Eure-et-Loir Corse-du-Sud
## 2 2 2
## Haute-Corse Gers Indre
## 2 2 2
## Jura Landes Loir-et-Cher
## 2 2 2
## Haute-Loire Lot Lot-et-Garonne
## 2 2 2
## Lozère Haute-Marne Mayenne
## 2 2 2
## Meuse Nièvre Orne
## 2 2 2
## Hautes-Pyrénées Haute-Saône Deux-Sèvres
## 2 2 2
## Tarn Tarn-et-Garonne Vienne
## 2 2 2
## Haute-Vienne Vosges Yonne
## 2 2 2
## Territoire de Belfort Savoie Haute-Savoie
## 2 3 3
## Guadeloupe Martinique Guyane
## 4 4 4
## classif2
## 1 2 3 4
## 31 42 2 3
## [1] 78
## [1] 0
## [1] 0 0 0 0
for (k in 1:q) {
n=sum(classif2==k)
variances_classes[k] = sum(diag(var(data2[classif2==k,])))*(n-1)/n
}
round(variances_classes,2) #Arrondir le résultat à 2 chiffres après la virgule #Variances des classes## [1] 7.44 4.20 4.68 4.62
## [1] 0
## [1] 2.73 2.05 2.16 2.15
## [1] 0
Distances inter-classes
# calcul des individus moyens (= moyennes, centres de gravite, centroids)
moyennes=aggregate(data2,list(classif2),mean)[,-1] ;moyennes #Les individus moyens de chaque classe c'est à dire 3 individus ## Pharmacie Medecin_generaliste Boulangerie Hypermarche_supermarche Nbhotel
## 1 0.9841518 0.9680577 0.9508526 1.0019173 0.4010042
## 2 -0.7277610 -0.7177219 -0.7228526 -0.6778916 -0.3955506
## 3 0.5666358 1.1150070 0.7047122 0.3454137 3.7223381
## 4 -0.3586721 -0.6984952 -0.1753490 -1.0929385 -1.0875614
## Nbchambrehotel Nbnuiteehotel Txactivite15_64ans Pas_peu_diplomes CAP_BEP
## 1 0.4248559 0.5278984 -0.2641916 0.98354267 1.0007932
## 2 -0.4498569 -0.5303194 0.3602288 -0.74127709 -0.7021618
## 3 3.6000449 3.2721008 0.8543399 0.18009610 0.7025006
## 4 -0.4922113 -0.2118801 -2.8827829 0.09454097 -0.9795977
## BAC Enseignantsup Txchomage15_24ans Salairenet18_25ans
## 1 0.9840915 0.9404492 -0.09218505 0.3061454
## 2 -0.7267835 -0.7107498 -0.11872281 -0.2683829
## 3 0.9545343 1.3462443 -1.33731853 2.0327551
## 4 -0.6303328 -0.6649739 3.50624384 -0.7613121
#On met [,-1] pour enlever la colonnes "group" qui fausse les résultats puisque R calcule avec
round(moyennes,2) #Arrondir le résultat à 2 chiffres après la virgule## Pharmacie Medecin_generaliste Boulangerie Hypermarche_supermarche Nbhotel
## 1 0.98 0.97 0.95 1.00 0.40
## 2 -0.73 -0.72 -0.72 -0.68 -0.40
## 3 0.57 1.12 0.70 0.35 3.72
## 4 -0.36 -0.70 -0.18 -1.09 -1.09
## Nbchambrehotel Nbnuiteehotel Txactivite15_64ans Pas_peu_diplomes CAP_BEP
## 1 0.42 0.53 -0.26 0.98 1.00
## 2 -0.45 -0.53 0.36 -0.74 -0.70
## 3 3.60 3.27 0.85 0.18 0.70
## 4 -0.49 -0.21 -2.88 0.09 -0.98
## BAC Enseignantsup Txchomage15_24ans Salairenet18_25ans
## 1 0.98 0.94 -0.09 0.31
## 2 -0.73 -0.71 -0.12 -0.27
## 3 0.95 1.35 -1.34 2.03
## 4 -0.63 -0.66 3.51 -0.76
# matrice des distances entre individus moyens
round(dist(moyennes),2) #Distance entre les individus moyens## 1 2 3
## 2 5.12
## 3 6.00 8.53
## 4 6.68 5.09 10.66
Profil classes : 2. individus moyens
graphique
matplot(t(moyennes),type="b")
abline(h=0)
abline(h=c(-1,1),lty=2) #Les deux autres axes pour voir les valeurs significatives
text(1:ncol(data2),max(moyennes)*1.1,colnames(classif2),xpd=NA,srt=-20) #Pour ajouter les E en haut. srt=l'inclinaisonCalculer des silhouettes
library(cluster)
plot(sil)
rownames(sil)=rownames(classif2) #Afficher les noms
plot(sil,nmax=60,cex.names=0.7)matplot(t(moyennes),type="b")
abline(h=0)
abline(h=c(-1,1),lty=2) #Les deux autres axes pour voir les valeurs significatives
text(1:ncol(data2),max(moyennes)*1.1,colnames(data2),xpd=NA,srt=-20) Voicie quelque Boxplot qui represente les classe selon differente variables .
# Distributions-classes de toutes les variables
par(mfrow=c(1,3))
for (i in 1:3) {
boxplot(data2[,i]~classif2,main=colnames(data2)[i])
} On peut constater qu’il y a 4 classe dans cette clssification la 1re et la 2eme classe qui se compose respectivement de 31 et 42 individu chaqu’une et la 3 eet 4 qui sont des outiler qui comporte 3 et 4 individue .
Les classes 1 et 2 sont dans la moyenne La classe 3 est significativement superieur pour les variable nombre de nuit d’hotel , nombre de chambre d’hotel et nombre d’hotel .ce qui peut vouloire dire que c’est une zone tourristique mais elle est aussi significativement superieur pour le l’ansegnement sup et le salaire des 18-25ans elle represnate les departement Savoie et Haute-Savoie .
La classe 4 represente les departement Guadeloupe ,Martinique ,Guyane qui sont des dom tom qui a un taux d’activité des 15 -64 ans qui est significativement negatife .Et le taux de chomage des 15-24ans qui est significativement positife se qui peut etre du au faite que se ne soit pas des departement de la metropole est que les condition de vie sont differente .
3eme Classification
On refait une classification en enlevant une fois de plus les valeur extreme .
Réimportation
library(readr)
data=read.csv("data.csv",sep=";", header=TRUE, dec=".",encoding = "utf-8")
#Copier les noms des villes dans les noms de lignes ...
n=data[,2] #On déclare un nom à la premier colonne qui contient les noms
rownames(data)=n #On déclare les noms des lignes
#Suppression de la colonne des noms
data=data[,-c(1:3)]
#Suppression de Mayotte
data=data[-101,]
sum(data)## [1] 49206050
#Changement nom des variables
colnames(data)=c("Pharmacie","Medecin_generaliste","Boulangerie","Hypermarche_supermarche","Nbhotel",
"Nbchambrehotel","Nbnuiteehotel","Txactivite15_64ans","Pas_peu_diplomes","CAP_BEP","BAC","Enseignantsup",
"Txchomage15_24ans","Salairenet18_25ans")
## On garde que la classes 1
noms=rownames(data2)[classif==1 ]
data3=subset(data2,rownames(data2) %in% noms)
#Centrage-réduction
data3=scale(data3) NOUVELLE CLASSIFICATION
cah = hclust(d=dist(data3),method="ward.D2")
# affichage de l'arbre : option hang = -1 (part de la fenetre graphique reservée aux labels)
plot(cah, hang = -1)## [1] 0.6836867 0.7204153 0.8089507 0.8149089 0.8300680 0.9743928
## [7] 1.0455819 1.0731776 1.1060774 1.1584622 1.1655196 1.2667010
## [13] 1.2901943 1.4539312 1.5870980 1.5873827 1.5875355 1.5903078
## [19] 1.6938807 1.7301134 1.7544946 1.7596685 1.7709863 1.8397796
## [25] 1.8937160 1.9360736 1.9557301 1.9709290 1.9729566 2.0826345
## [31] 2.1695480 2.2223063 2.2935186 2.3142455 2.3952721 2.4050940
## [37] 2.5376775 2.5692496 2.5833773 2.7136938 2.7501790 2.8164715
## [43] 3.0434068 3.1214896 3.2626623 3.3409097 3.4748148 3.6124343
## [49] 4.1045111 4.2407373 4.8816570 5.1403784 5.6152244 6.5072594
## [55] 6.5552010 6.8606332 7.3716242 8.1426807 10.3819015 11.2735520
## [61] 12.7421364 27.5936147
#Afficher le nombre de classes en abscisse, les sauts en ordonnées
plot(rev(cah$height),type="b",main="Arbre de classification",xlab="Départements",ylab="Hauteurs") On peut conster grace a ce graphique qu’il y a 3 classe differnte
Choix du nombre de classe
q=3 #Choix des classes
# re-afficher l'arbre, avec les classes choisies
plot(cah, hang = -1) #hang=-1 pour que R est de la place pour écrire les labels en bas
rect.hclust(cah, q) # classifier (= couper l'arbre)
classif3=cutree(cah,q) #On coupe l'arbre cah en 4 classes
#afficher les villes par classe
sort(classif3) #Trier dans l'ordre## Ain Calvados Charente-Maritime
## 1 1 1
## Côte-d'Or Côtes-d'Armor Doubs
## 1 1 1
## Drôme Eure Finistère
## 1 1 1
## Gard Ille-et-Vilaine Indre-et-Loire
## 1 1 1
## Loire Maine-et-Loire Manche
## 1 1 1
## Meurthe-et-Moselle Morbihan Oise
## 1 1 1
## Puy-de-Dôme Pyrénées-Atlantiques Sarthe
## 1 1 1
## Vendée Aisne Allier
## 1 2 2
## Aude Aveyron Dordogne
## 2 2 2
## Corse-du-Sud Haute-Corse Lot-et-Garonne
## 2 2 2
## Hautes-Pyrénées Pyrénées-Orientales Savoie
## 2 2 2
## Somme Tarn Haute-Vienne
## 2 2 2
## Vosges Guadeloupe Alpes-de-Haute-Provence
## 2 2 3
## Hautes-Alpes Ardennes Ariège
## 3 3 3
## Aube Charente Cher
## 3 3 3
## Corrèze Creuse Eure-et-Loir
## 3 3 3
## Gers Loir-et-Cher Haute-Loire
## 3 3 3
## Lot Lozère Haute-Marne
## 3 3 3
## Mayenne Meuse Nièvre
## 3 3 3
## Orne Haute-Saône Deux-Sèvres
## 3 3 3
## Tarn-et-Garonne Yonne Territoire de Belfort
## 3 3 3
Profil classes : 1. analyse spatiale
## classif3
## 1 2 3
## 22 16 25
## [1] 63
## [1] 13.77778
## [1] 0 0 0
for (k in 1:q) {
n=sum(classif3==k)
variances_classes[k] = sum(diag(var(data3[classif3==k,])))*(n-1)/n
}
round(variances_classes,2) #Arrondir le résultat à 2 chiffres après la virgule #Variances des classes## [1] 7.12 10.82 3.05
## [1] 13.78
## [1] 2.67 3.29 1.75
## [1] 3.71
### Distances inter-classes (sur centres de gravite)
# i. calcul des individus moyens (= moyennes, centres de gravite, centroids)
moyennes=aggregate(data3,list(classif3),mean)[,-1] ;moyennes #Les individus moyens de chaque classe c'est à dire 3 individus ## Pharmacie Medecin_generaliste Boulangerie Hypermarche_supermarche Nbhotel
## 1 1.0649867 1.0781812 1.0761351 1.0862495 0.5786952
## 2 -0.1036573 -0.1612420 -0.1315954 -0.2340655 0.3114380
## 3 -0.8708476 -0.8456046 -0.8627779 -0.8060977 -0.7085721
## Nbchambrehotel Nbnuiteehotel Txactivite15_64ans Pas_peu_diplomes CAP_BEP
## 1 0.5486507 0.7006406 -0.3967886 1.0474662 1.1374806
## 2 0.3743957 0.2294597 -0.3813860 -0.1316127 -0.3325807
## 3 -0.7224258 -0.7634179 0.5932610 -0.8375381 -0.7881313
## BAC Enseignantsup Txchomage15_24ans Salairenet18_25ans
## 1 1.1323547 1.1339662 -0.3956692 0.4766252
## 2 -0.2347762 -0.3072764 0.7717764 -0.4020062
## 3 -0.8462154 -0.8012333 -0.1457480 -0.1621462
#On met [,-1] pour enlever la colonnes "group" qui fausse les résultats puisque R calcule avec
round(moyennes,2) #Arrondir le résultat à 2 chiffres après la virgule## Pharmacie Medecin_generaliste Boulangerie Hypermarche_supermarche Nbhotel
## 1 1.06 1.08 1.08 1.09 0.58
## 2 -0.10 -0.16 -0.13 -0.23 0.31
## 3 -0.87 -0.85 -0.86 -0.81 -0.71
## Nbchambrehotel Nbnuiteehotel Txactivite15_64ans Pas_peu_diplomes CAP_BEP
## 1 0.55 0.70 -0.40 1.05 1.14
## 2 0.37 0.23 -0.38 -0.13 -0.33
## 3 -0.72 -0.76 0.59 -0.84 -0.79
## BAC Enseignantsup Txchomage15_24ans Salairenet18_25ans
## 1 1.13 1.13 -0.40 0.48
## 2 -0.23 -0.31 0.77 -0.40
## 3 -0.85 -0.80 -0.15 -0.16
# ii. matrice des distances entre individus moyens
round(dist(moyennes),2) #Distance entre les individus moyens## 1 2
## 2 4.01
## 3 6.05 2.88
Profil classes : 2. individus moyens
graphique
matplot(t(moyennes),type="b")
abline(h=0)
abline(h=c(-1,1),lty=2) #Les deux autres axes pour voir les valeurs significatives
text(1:ncol(data3),max(moyennes)*1.1,colnames(data3),xpd=NA,srt=-20) #Pour ajouter les E en haut. srt=l'inclinaisonmatplot(t(moyennes),type="b")
abline(h=0)
abline(h=c(-1,1),lty=2) #Les deux autres axes pour voir les valeurs significatives
text(1:ncol(data3),max(moyennes)*1.1,colnames(data3),xpd=NA,srt=-20) Voicie quelque Boxplot qui represente les classe selon differente variables .
# Distributions-classes de toutes les variables
par(mfrow=c(1,3))
for (i in 1:3) {
boxplot(data3[,i]~classif3,main=colnames(data3)[i])
} ##Calculer les silhouettes
couleurs=c("black","red","green")
plot(data3,col=couleurs[unclass(classif3)],pch=19,xlab="V1",ylab="V2")
text(data3,pos=3,labels=rownames(data3),col=couleurs[unclass(classif3)], cex=0.8)
legend("bottomright",c("1","2","3"),col=couleurs,pch=19)library(cluster)
sil=silhouette(x=classif3,dist=dist(data3))
plot(sil)
rownames(sil)=rownames(data3) #Afficher les noms
plot(sil,nmax=60,cex.names=0.7)## cluster neighbor sil_width
## Ain 1 2 0.29646086
## Aisne 2 3 0.03727473
## Allier 2 3 -0.24942042
## Alpes-de-Haute-Provence 3 2 0.43150240
## Hautes-Alpes 3 2 0.37475988
## Ardennes 3 2 0.43187905
## Ariège 3 2 0.48457846
## Aube 3 2 0.34645747
## Aude 2 3 0.07593773
## Aveyron 2 3 -0.33022792
## Calvados 1 2 0.36221393
## Charente 3 2 0.38619983
## Charente-Maritime 1 2 0.34886171
## Cher 3 2 0.41451092
## Corrèze 3 2 0.49193570
## Côte-d'Or 1 2 0.25292989
## Côtes-d'Armor 1 2 0.36357757
## Creuse 3 2 0.42543574
## Dordogne 2 3 0.09084379
## Doubs 1 2 0.16248473
## Drôme 1 2 0.07208816
## Eure 1 3 0.08730401
## Eure-et-Loir 3 2 0.25747332
## Finistère 1 2 0.42925419
## Corse-du-Sud 2 3 -0.16866534
## Haute-Corse 2 3 -0.18199509
## Gard 1 2 0.37381626
## Gers 3 2 0.47001421
## Ille-et-Vilaine 1 2 0.39334147
## Indre-et-Loire 1 2 0.34613836
## Loir-et-Cher 3 2 0.38035087
## Loire 1 2 0.40508740
## Haute-Loire 3 2 0.52997367
## Lot 3 2 0.51749348
## Lot-et-Garonne 2 3 -0.37427729
## Lozère 3 2 0.34521853
## Maine-et-Loire 1 2 0.46398639
## Manche 1 3 0.14013974
## Haute-Marne 3 2 0.50310388
## Mayenne 3 2 0.50238510
## Meurthe-et-Moselle 1 2 0.39345250
## Meuse 3 2 0.57964960
## Morbihan 1 2 0.49092680
## Nièvre 3 2 0.56851536
## Oise 1 2 0.40137190
## Orne 3 2 0.51880169
## Puy-de-Dôme 1 2 0.42928727
## Pyrénées-Atlantiques 1 2 0.39341340
## Hautes-Pyrénées 2 3 0.10281530
## Pyrénées-Orientales 2 1 0.06210198
## Haute-Saône 3 2 0.56402754
## Sarthe 1 2 0.13359474
## Savoie 2 1 -0.11337505
## Deux-Sèvres 3 2 0.40628963
## Somme 2 1 -0.15396949
## Tarn 2 3 -0.13263611
## Tarn-et-Garonne 3 2 0.42776073
## Vendée 1 2 0.29520032
## Haute-Vienne 2 3 -0.06740742
## Vosges 2 3 -0.10836720
## Yonne 3 2 0.39384639
## Territoire de Belfort 3 2 0.50752909
## Guadeloupe 2 3 0.10242005
## attr(,"Ordered")
## [1] FALSE
## attr(,"call")
## silhouette.default(x = classif3, dist = dist(data3))
## attr(,"class")
## [1] "silhouette"
clusplot(data3,classif3,labels=2,lines=0,span=F,col.txt=couleurs[unclass(classif3)],main="Clusplot") CONCLUSION
Pour cette dernière classification on trouve 3 parties qui sont également répartis. La classe 1 qui a 22 individus , la classe 2 qui a 16 individus et la classe 3 qui a 25 individus .
Grâce à l’étude du graphique des silhouettes on peut constater que la classe 1 a un nombre d’individus égale à 22 et une silhouette de 32 , que la classe 2 elle a 16 individus et une silhouette égale à -0.09 ce qui est très bas et la classe 3 elle a 25 individus et une silhouette de 0.45 ces trous valeur de silhouette sont faible voire négative pour la 2eme classe ce que peut vouloir dire qu’elle pourrait toutes être regroupées en une seule classe .
La classe 1 est significativement supérieure pour les variables Pharmacie, Médecin Généraliste , Boulangerie , Hypermarché Supermarché, Pas et/ou peu de diplômes, CAP, BEP,BAC, Enseignement sup. Les villes qui composent la classe 1 sont des villes qui se trouve majoritairement dans la partie nord de la france . On y trouve beaucoup de commerces tels que les pharmacies , les boulangeries et les supermarchés, mais il y a aussi beaucoup de médecins et de personnes peu ou pas diplômées , de personnes qui ont un CAP la BAC et qui on fait des étude supérieure .
La classe 2 et la classe 3 ont toutes leurs valeurs dans la moyenne elle n’ont aucune valeur significative . Ce qui peut vouloir dire qu’elles pourraient être regroupées en une seule classe, comme on peut le voir dans le graphique des silhouettes ou la silhouette de la classe 2 est négative ce qui veut dire que ce sont des valeurs qui sont dans une classe mais qui pourraient aussi être dans une autre classe notamment la 2 .