Charlotte Salcador
Projet 2 de classification
Lors de notre projet Tutoré nous avon du travailler sur une base de donnée intitulé “Base de données accidents corporels de la circulation” je vais donc faire un etude de classification sur c’est données .
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 .
Récupération du fichier usagers de la base postgres
library(DBI)
library(RPostgres)
library(RPostgreSQL)
c=dbConnect(RPostgres::Postgres()) # connection entre R et Postgres
r=dbGetQuery(c,'show all')
usagers=dbGetQuery(c,'select * from "usagers_2010" LIMIT 100')
lieux_2010=dbGetQuery(c,'select * from "lieux_2010" LIMIT 100')
caracteristiques_2010=dbGetQuery(c,'select * from "caracteristiques_2010" LIMIT 100')
vehicules_2010=dbGetQuery(c,'select * from "vehicules_2010" LIMIT 100')Creation d’une variable age et creation d’une base de donnée qui comporte toute les variable .
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
age=2010-usagers$an_nais
usagers_2010=cbind(usagers,age)
A=full_join(caracteristiques_2010, usagers_2010, by="Num_Acc")
A=full_join(A,lieux_2010, by="Num_Acc")
A=full_join(A,vehicules_2010, by="Num_Acc")
colnames(A)## [1] "Num_Acc" "an" "mois" "jour" "hrmn" "lum"
## [7] "agg" "int" "atm" "col" "com" "adr"
## [13] "gps" "lat" "long" "dep" "place" "catu"
## [19] "grav" "sexe" "trajet" "secu" "locp" "actp"
## [25] "etatp" "an_nais" "num_veh.x" "age" "catr" "voie"
## [31] "v1" "v2" "circ" "nbv" "pr" "pr1"
## [37] "vosp" "prof" "plan" "lartpc" "larrout" "surf"
## [43] "infra" "situ" "env1" "senc" "catv" "occutc"
## [49] "obs" "obsm" "choc" "manv" "num_veh.y"
Pour une meilleure étude de la base de donnée nous avons du changer l’ordre des indices de gravité pour les ranger par ordre de gravité.
Changement des des indice de gravité classification par ordre de gravité
A$grav[A$grav==1]<-6
A$grav[A$grav==2]<-12
A$grav[A$grav==3]<-18
A$grav[A$grav==4]<-24
A$grav[A$grav==6]<-0
A$grav[A$grav==12]<-3
A$grav[A$grav==18]<-2
A$grav[A$grav==24]<-1Choix des variable . Pour ma base de donnée j’ai choisie les varable ( lum , atm , catu , grave , sexe , age , catr , trajet ) ce qui me fait au totale 8 variable .
- lum (Lumière : conditions d’éclairage dans lesquelles l’accident s’est produit)
- atm (Conditions atmosphériques)
- catu (Catégorie d’usager)
- grave (Gravité de l’accident)
- sexe (Sexe de l’usager)
- age (age des individu impliquer dans l’accident)
- catr (Catégorie de route )
- trajet (Motif du déplacement au moment de l’accident )
# , lum(6) ,atm(9),catu (18), grave (19) , sexe(20) , age (28) , catr (29) , trajet(21)
A=A[1:100,c(6,9,18,19,20,21,28,29)]Je trensforme toute les variable qualitatie en variable quantitative dans ce cas la seul variable qui n’est pas qualitative est la variable age .
### Mise en disjonctif
#install.packages("ade4")
library(ade4)
indices=c(1,2,3,4,5,6,8) # les indices des colonnes-variables qualitatives
A=data.frame(A[,-indices],acm.disjonctif(A[,indices]))Cette comande trensforme la table . Le nombre de variable passe de 8 a 27 variable .
Pour pouvoire faire un etude de classe il faut centrée reduire la table .
La lassification peut alors commencer
## [1] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [7] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [13] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [19] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [25] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [31] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [37] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [43] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [49] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [55] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
## [61] 0.2492985 0.2878651 0.3525614 0.4551547 0.5757303 0.6093964
## [67] 1.5305449 1.9943882 1.9978477 2.4274920 3.4910739 4.9856220
## [73] 5.0879526 5.9029904 6.2582593 6.4331490 6.4970238 6.8188032
## [79] 7.1221952 7.4802660 7.9577020 8.3676459 10.1958867 10.6473613
## [85] 11.3475399 12.0117982 12.2114012 12.2884872 12.8003267 13.4936392
## [91] 15.2419587 15.6409351 16.0547581 17.1743875 18.1555459 18.6467720
## [97] 21.0817075 25.6441304 29.5986087
# afficher le nombre de classes en abscisse, les sauts en ordonnees
plot(rev(cah$height)[1:100],type="b")Grace a ce plot on peut deduire qu’il y a 7 classe.
# classifier (= couper l'arbre)
classif=cutree(cah,q)
# afficher les villes par classe
sort(classif)## 1 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 48
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 49 50 51 52 53 54 55 62 63 64 68 78 79 80 81 84 85 91 92 93
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 94 95 96 97 98 99 100 3 46 47 21 22 23 24 25 26 27 28 29 30
## 1 1 1 1 1 1 1 2 2 2 3 3 3 3 3 3 3 3 3 3
## 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 69 70 71 72 73
## 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## 74 75 76 77 56 57 58 59 60 61 65 66 67 82 83 86 87 88 89 90
## 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 6 7 7 7 7
## classif
## 1 2 3 4 5 6 7
## 47 3 34 9 2 1 4
### Distances inter-classes (sur centres de gravite)
# i. calcul des individus moyens (= moyennes, centres de gravite, centroids)
moyennes= aggregate(A,list(classif),mean)[,-1]
#aggregate applique une fonction mathématique aux variables quantitative de certaine catégorie
round(moyennes,2)## A....indices. lum.1 lum.2 lum.5 atm.1 atm.2 atm.4 catu.1 catu.2 catu.3 grav.0
## 1 0.29 0.70 -0.71 0.01 0.23 -0.1 -0.20 0.37 -0.31 -0.17 -0.07
## 2 0.71 0.75 -0.71 -0.14 0.23 -0.1 -0.20 -2.69 -0.31 5.66 -1.24
## 3 -0.26 -1.33 1.39 -0.14 0.23 -0.1 -0.20 0.37 -0.31 -0.17 0.14
## 4 -0.38 0.75 -0.71 -0.14 0.23 -0.1 -0.20 -2.69 3.16 -0.17 0.80
## 5 -1.40 0.75 -0.71 -0.14 0.23 -0.1 -0.20 0.37 -0.31 -0.17 -1.24
## 6 0.03 -1.33 -0.71 6.96 -4.34 9.9 -0.20 0.37 -0.31 -0.17 -1.24
## 7 -0.21 0.75 -0.71 -0.14 -4.34 -0.1 4.87 0.37 -0.31 -0.17 -0.22
## grav.1 grav.2 grav.3 sexe.1 sexe.2 trajet.0 trajet.1 trajet.2 trajet.3
## 1 -0.33 0.28 0.11 -0.18 0.18 -0.28 -0.29 -0.14 0.23
## 2 -0.33 1.60 -0.10 -0.74 0.74 2.47 -0.54 -0.14 -0.20
## 3 0.45 -0.42 -0.10 0.68 -0.68 -0.40 0.57 -0.14 -0.20
## 4 -0.33 -0.62 -0.10 -1.45 1.45 2.47 -0.54 -0.14 -0.20
## 5 2.98 -0.62 -0.10 0.68 -0.68 -0.40 -0.54 6.96 -0.20
## 6 -0.33 1.60 -0.10 0.68 -0.68 -0.40 -0.54 -0.14 -0.20
## 7 -0.33 0.49 -0.10 -0.38 0.38 -0.40 0.64 -0.14 -0.20
## trajet.4 trajet.5 trajet.9 catr.2 catr.3 catr.4 catr.9
## 1 -0.26 0.67 0.01 -0.67 0.57 0.23 0.06
## 2 -0.56 -0.64 -0.20 -1.06 1.27 -0.20 -0.23
## 3 0.67 -0.64 -0.20 0.94 -0.78 -0.20 -0.23
## 4 -0.56 -0.64 -0.20 0.94 -0.78 -0.20 -0.23
## 5 -0.56 -0.64 -0.20 -1.06 -0.78 -0.20 4.34
## 6 -0.56 1.56 -0.20 0.94 -0.78 -0.20 -0.23
## 7 -0.56 -0.64 2.34 -1.06 1.27 -0.20 -0.23
## 1 2 3 4 5 6
## 2 7.61
## 3 4.45 9.10
## 4 6.41 8.10 7.17
## 5 9.52 12.31 9.82 11.42
## 6 13.56 15.64 13.78 15.12 16.54
## 7 7.50 10.46 8.68 9.84 12.12 14.35
# graphique general des individus moyens
matplot(t(moyennes),type="b")
abline(h=0)
abline(h=c(-1,1),lty=2)
text(1:ncol(A),max(moyennes)*1.1,colnames(A),xpd=NA,srt=15) #srt## A....indices. lum.1 lum.2 lum.5 atm.1 atm.2 atm.4
## 1 0.2919158 0.7021365 -0.7141428 0.009072834 0.2282658 -0.1 -0.203101
## catu.1 catu.2 catu.3 grav.0 grav.1 grav.2 grav.3
## 1 0.3674235 -0.3129091 -0.1749816 -0.07248347 -0.3316625 0.2753514 0.112766
## sexe.1 sexe.2 trajet.0 trajet.1 trajet.2 trajet.3 trajet.4
## 1 -0.1797155 0.1797155 -0.2794293 -0.2922716 -0.1421411 0.2290287 -0.2617226
## trajet.5 trajet.9 catr.2 catr.3 catr.4 catr.9
## 1 0.6704221 0.01296389 -0.6748435 0.5730961 0.2290287 0.06313734
## A....indices. lum.1 lum.2 lum.5 atm.1 atm.2 atm.4
## 2 0.7076803 0.7462406 -0.7141428 -0.1421411 0.2282658 -0.1 -0.203101
## catu.1 catu.2 catu.3 grav.0 grav.1 grav.2 grav.3 sexe.1
## 2 -2.694439 -0.3129091 5.657738 -1.244372 -0.3316625 1.595529 -0.1 -0.7394354
## sexe.2 trajet.0 trajet.1 trajet.2 trajet.3 trajet.4 trajet.5
## 2 0.7394354 2.466055 -0.5437962 -0.1421411 -0.203101 -0.5591347 -0.6358979
## trajet.9 catr.2 catr.3 catr.4 catr.9
## 2 -0.203101 -1.05659 1.27093 -0.203101 -0.2282658
## A....indices. lum.1 lum.2 lum.5 atm.1 atm.2 atm.4
## 3 -0.2601866 -1.32665 1.386277 -0.1421411 0.2282658 -0.1 -0.203101
## catu.1 catu.2 catu.3 grav.0 grav.1 grav.2 grav.3
## 3 0.3674235 -0.3129091 -0.1749816 0.1355969 0.4487198 -0.4249531 -0.1
## sexe.1 sexe.2 trajet.0 trajet.1 trajet.2 trajet.3 trajet.4
## 3 0.6825558 -0.6825558 -0.4014509 0.5688303 -0.1421411 -0.203101 0.6742506
## trajet.5 trajet.9 catr.2 catr.3 catr.4 catr.9
## 3 -0.6358979 -0.203101 0.9369763 -0.7789571 -0.203101 -0.2282658
## A....indices. lum.1 lum.2 lum.5 atm.1 atm.2 atm.4
## 4 -0.3779271 0.7462406 -0.7141428 -0.1421411 0.2282658 -0.1 -0.203101
## catu.1 catu.2 catu.3 grav.0 grav.1 grav.2 grav.3
## 4 -2.694439 3.163858 -0.1749816 0.7955821 -0.3316625 -0.6204837 -0.1
## sexe.1 sexe.2 trajet.0 trajet.1 trajet.2 trajet.3 trajet.4
## 4 -1.450431 1.450431 2.466055 -0.5437962 -0.1421411 -0.203101 -0.5591347
## trajet.5 trajet.9 catr.2 catr.3 catr.4 catr.9
## 4 -0.6358979 -0.203101 0.9369763 -0.7789571 -0.203101 -0.2282658
## A....indices. lum.1 lum.2 lum.5 atm.1 atm.2 atm.4
## 5 -1.395684 0.7462406 -0.7141428 -0.1421411 0.2282658 -0.1 -0.203101
## catu.1 catu.2 catu.3 grav.0 grav.1 grav.2 grav.3
## 5 0.3674235 -0.3129091 -0.1749816 -1.244372 2.984962 -0.6204837 -0.1
## sexe.1 sexe.2 trajet.0 trajet.1 trajet.2 trajet.3 trajet.4
## 5 0.6825558 -0.6825558 -0.4014509 -0.5437962 6.964912 -0.203101 -0.5591347
## trajet.5 trajet.9 catr.2 catr.3 catr.4 catr.9
## 5 -0.6358979 -0.203101 -1.05659 -0.7789571 -0.203101 4.33705
## A....indices. lum.1 lum.2 lum.5 atm.1 atm.2 atm.4 catu.1
## 6 0.0291757 -1.32665 -0.7141428 6.964912 -4.33705 9.9 -0.203101 0.3674235
## catu.2 catu.3 grav.0 grav.1 grav.2 grav.3 sexe.1
## 6 -0.3129091 -0.1749816 -1.244372 -0.3316625 1.595529 -0.1 0.6825558
## sexe.2 trajet.0 trajet.1 trajet.2 trajet.3 trajet.4 trajet.5
## 6 -0.6825558 -0.4014509 -0.5437962 -0.1421411 -0.203101 -0.5591347 1.556854
## trajet.9 catr.2 catr.3 catr.4 catr.9
## 6 -0.203101 0.9369763 -0.7789571 -0.203101 -0.2282658
## A....indices. lum.1 lum.2 lum.5 atm.1 atm.2 atm.4
## 7 -0.2083009 0.7462406 -0.7141428 -0.1421411 -4.33705 -0.1 4.874423
## catu.1 catu.2 catu.3 grav.0 grav.1 grav.2 grav.3
## 7 0.3674235 -0.3129091 -0.1749816 -0.2243949 -0.3316625 0.4875229 -0.1
## sexe.1 sexe.2 trajet.0 trajet.1 trajet.2 trajet.3 trajet.4
## 7 -0.3839376 0.3839376 -0.4014509 0.6383694 -0.1421411 -0.203101 -0.5591347
## trajet.5 trajet.9 catr.2 catr.3 catr.4 catr.9
## 7 -0.6358979 2.335661 -1.05659 1.27093 -0.203101 -0.2282658
#Silouhette des individus
library(cluster)
sil=silhouette(classif,dist(A))
library(cluster)
clusplot(A,classif,labels=2,lines=0,span=F,main="Clusplot")#Affichier un graphique de la silouhette
rownames(sil)=rownames(A)
plot(sil , nmax=100 , cex.names=0.5, col="grey") Conclusion
Dans la classe 1, il y a 47 individus pour une silhouette globale de 0.11 ce qui est faible en effet on peut constater que 11 individus ont une silhouette négative ce qui fait baisser la silhouette globale . La classe 2 se compose de 3 individu et a une silhouette de 0.76 ce qui est plustot élever en effet elle n’as que des individus auxsilhouette positive . La classe 3 a 34 individus et une silhouette de 0.52 ce qui est dans la moyenne. Les classe 4 , 5 , 6 et 7 comporte peut d’individu et ont une silhouette élever ce qui est bien.
On peut conclure de ce diagramme des silhouettes est que la classe 1 pourrait encore être classifié, car elle comporte des individus qui pourraient être rangés dans d’autres classes. Cela permettrez d’enlever des valeur négative et d’avoirs ainsi une valeur de silhouette élevée.
La classe 1 et la classe 3 ont toutes leurs valeurs dans la moyenne.
En revanche la classe 2 a beaucoup de valeurs dans la moyenne sauf qu’il y a significativement plus de piétons qui sont impliqués dans des accidents .
La classe 4 est significativement supérieur pour la variable femme , qui sont des piétons qui vont au travail et cette classe est significativement inférieur pour les classes hommes qui sont à la place du conducteur, on peut conclure que les personnes qui ont eu des accidents dans cette classe sont majoritairement des femme qui vont au travail à pieds .
La classe 5 a des valeurs qui sont globalement dans la moyenne, mais qui ont un âge et une utilisation de route nationale significativement inférieur . Alors que la variable trajet domicile - école ,ainsi que la variable les victime de l’accident sont indemne et également celle qu’elles utilisent des routes différentes sont significativement supérieur. On peut en déduire que la
classe 5 représente des personnes jeunes qui se rendent à l’école ou qui rentrent de l’école par des chemins non qualifiés qui ne prennent pas les route nationale .
La classe 6 a comme valeur significativement supérieur pour des accidents qui se sont déroulés la nuit, mais ou il y avait les éclairages allumés .Il y a significativement moins d’accident durant des conditions météorologiques normales . Et on constate aussi qu’il y a significativement plus de blessés léger durant les trajets qui mènent vers les activités ou loisirs .
La classe 7 est significativement supérieur pour la variable temps neige et grêle et trajet autre. on peut en conclure que c’est surement un région ou il y a plus de neige et de grêle donc une région au temps froid .