analyse de données avec r : une petite introduction
DESCRIPTION
Il s'agit d'une introduction aux méthodes factorielles en utilisant le package FactoMineR du langage/logiciel RTRANSCRIPT
.
......Analyse de données avec R
Ahmadou H. DICKO
Dakar R User Group
Janvier 2014
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 1 / 66
Plan
...1 Intro
...2 Présentation de R
...3 Méthodes factorielles
...4 Méthodes de classification
...5 Un exemple d’analyse non supervisé
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 2 / 66
Introduction
Avec la révolution numérique on vit un déluge de donnés (facebook,twier, etc.)
Les données à traiter sont de plus en plus volumineux et liés
L’analyse exploratoire (EDA) est une étape nécessaire pour comprendreles données et leurs liaisons potentielles
L’analyse factorielle des données et les méthodes de classificationprésente une cadre efficace d’exploration de telle données
Cee analyse passe par des logiciels spécialisés de plus en plus enperformant
R est l’un des langage pour l’analyse de données les plus utilisés dans lemonde
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 3 / 66
Plan
...1 Intro
...2 Présentation de R
...3 Méthodes factorielles
...4 Méthodes de classification
...5 Un exemple d’analyse non supervisé
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 4 / 66
Historique
R est un langage interpreté qui tirent ses racines de S, Lisp, schemeselques dates importantes :
▶ 1990 : Ross Ihaka et Robert Gentleman développent R▶ 1996 : le projet devient open source▶ 2013 : R 3.0 est sorti et il y a plus de 5000 packages (add-ons)
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 5 / 66
Concepts importants
Un package R est en ensemble de fonctionnalité généralement organiséautour d’un thème (ou pas)
Travailler sur R nécessite d’écrire des lignes de commandes (pastoujours)
Rstudio est un environnement de travail pour R (mais y en d’autres…ESS)
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 6 / 66
Environnement de travail
Rstudio
1
2
3
4
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 7 / 66
Environnement de travail
Emacs ESS
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 8 / 66
Base du langage : R calculatrice ?
x <- c(pi, 4*pi / 3)
log(-cos(x))
R output[1] 0.00000 -0.69315
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 9 / 66
Base du langage : Collection d’éléments (1/2)
c(1, 2, 10)
R output[1] 1 2 10
c("Ali", "Modou", "Marie")
R output[1] "Ali" "Modou" "Marie"
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 10 / 66
Base du langage : Collection d’éléments (2/2)
c(1, 2, "a")
R output[1] "1" "2" "a"
list("Ali", 10, "Marie")
R output[[1]]
[1] "Ali"
[[2]]
[1] 10
[[3]]
[1] "Marie"
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 11 / 66
Base du langage : table (rectangulaire)
df <- data.frame(nom = c("Ali", "Modou", "Marie"),
taille = c(170, 185, 165))
df$nom
R output[1] Ali Modou Marie
Levels: Ali Marie Modou
df[df$taille > 165, ]
R outputnom taille
1 Ali 170
2 Modou 185
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 12 / 66
Analyse de données sous R
R dispose de fonctions pour faire des analyses basiques :▶ prcomp, princomp, etc.▶ hclust, kmeans, etc.
Il existe de nombreux packages mais les principaux sont :▶ FactoMineR▶ ade4
Nous utiliserons principalement FactoMineR pour le reste des analyses
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 13 / 66
Plan
...1 Intro
...2 Présentation de R
...3 Méthodes factorielles
...4 Méthodes de classification
...5 Un exemple d’analyse non supervisé
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 14 / 66
Analyse en composantesprincipales
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 15 / 66
ACP : Objectif
Analyse exploratoire des tables de variables quantitatives
Positionner les individus par rapport à leurs proximités
Positionner les variables par rapport à leurs corrélations
Chercher un petit nombre de variables non corrélées qui résumentl’information de la table originale
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 16 / 66
Mise en oeuvre sous R
auto <- read.csv("data/auto.csv", row.names = 1)
summary(auto)
R outputcylindree puissance vitesse poids
Min. : 698 Min. : 52 Min. :135 Min. : 730
1st Qu.:1735 1st Qu.:109 1st Qu.:175 1st Qu.:1249
Median :2494 Median :170 Median :223 Median :1464
Mean :2722 Mean :207 Mean :215 Mean :1487
3rd Qu.:2958 3rd Qu.:227 3rd Qu.:245 3rd Qu.:1702
Max. :5998 Max. :660 Max. :350 Max. :2385
largeur longueur
Min. :1515 Min. :2500
1st Qu.:1742 1st Qu.:3921
Median :1792 Median :4325
Mean :1838 Mean :4278
3rd Qu.:1860 3rd Qu.:4701
Max. :2650 Max. :5038
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 17 / 66
ACP : Mise en oeuvre sous R
head(auto)
R outputcylindree puissance vitesse poids largeur
Citroën C2 1.1 Base 1124 61 158 932 1659
Smart Fortwo Coupé 698 52 135 730 1515
Mini 1.6 170 1598 170 218 1215 1690
Nissan Micra 1.2 65 1240 65 154 965 1660
Renault Clio 3.0 V6 2946 255 245 1400 1810
Audi A3 1.9 TDI 1896 105 187 1295 1765
longueur
Citroën C2 1.1 Base 3666
Smart Fortwo Coupé 2500
Mini 1.6 170 3625
Nissan Micra 1.2 65 3715
Renault Clio 3.0 V6 3812
Audi A3 1.9 TDI 4203
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 18 / 66
ACP : Mise en oeuvre sous R
Citroën C2 1.1 BaseSmart Fortwo Coupé
Mini 1.6 170Nissan Micra 1.2 65
Renault Clio 3.0 V6
Audi A3 1.9 TDIPeugeot 307 1.4 HDI 70
Peugeot 407 3.0 V6 BVAMercedes Classe C 270 CDI
BMW 530d
Jaguar S-Type 2.7 V6 Bi-TurboBMW 745i
Mercedes Classe S 400 CDICitroën C3 Pluriel 1.6i
BMW Z4 2.5i
Audi TT 1.8T 180Aston Martin Vanquish
Bentley Continental GTFerrari Enzo
Renault Scenic 1.9 dCi 120
Volkswagen Touran 1.9 TDI 105Land Rover Defender Td5
Land Rover Discovery Td5Nissan X-Trail 2.2 dCi
cylindree
puissancevitesse
poids
largeur longueur
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 19 / 66
ACP : Mise en oeuvre sous R
cylindree
puissance
vitesse
poids
largeur
longueur
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 20 / 66
ACP : Mise en oeuvre sous R
library(FactoMineR)
auto_acp <- PCA(auto, ncp = 2, graph = FALSE)
PC6
PC5
PC4
PC3
PC2
PC1
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 21 / 66
ACP : Mise en oeuvre sous R
auto_acp$eig
R outputeigenvalue percentage of variance
comp 1 4.411268 73.52113
comp 2 0.853410 14.22350
comp 3 0.435664 7.26107
comp 4 0.235871 3.93118
comp 5 0.051437 0.85728
comp 6 0.012351 0.20586
cumulative percentage of variance
comp 1 73.521
comp 2 87.745
comp 3 95.006
comp 4 98.937
comp 5 99.794
comp 6 100.000
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 22 / 66
ACP : Mise en oeuvre sous R
cbind(
dist = auto_acp$ind$dist^2,
coord = auto_acp$ind$coord,
cos2 = auto_acp$ind$cos2
)[1 :4, ]
R outputdist Dim.1 Dim.2 Dim.1 Dim.2
Citroën C2 1.1 Base 7.1023 -2.5959 -0.50997 0.94882 0.036618
Smart Fortwo Coupé 20.9302 -4.1501 -1.66591 0.82291 0.132595
Mini 1.6 170 2.9343 -1.3819 -0.81572 0.65082 0.226768
Nissan Micra 1.2 65 6.6117 -2.5133 -0.40359 0.95540 0.024635
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 23 / 66
ACP : Mise en oeuvre sous R
auto_acp$var$coord
R outputDim.1 Dim.2
cylindree 0.96241 -0.12694
puissance 0.92332 -0.35266
vitesse 0.88611 -0.33874
poids 0.75691 0.57571
largeur 0.80123 -0.11102
longueur 0.79526 0.50440
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 24 / 66
ACP : Mise en oeuvre sous R
Dim 1 (73.52%)
Dim
2 (14
.22%
)
Citroën C2 1.1 Base
Smart Fortwo Coupé
Mini 1.6 170
Nissan Micra 1.2 65
Renault Clio 3.0 V6
Audi A3 1.9 TDIPeugeot 307 1.4 HDI 70
Peugeot 407 3.0 V6 BVAMercedes Classe C 270 CDI
BMW 530d
Jaguar S-Type 2.7 V6 Bi-Turbo
BMW 745i
Mercedes Classe S 400 CDI
Citroën C3 Pluriel 1.6i
BMW Z4 2.5i
Audi TT 1.8T 180Aston Martin Vanquish
Bentley Continental GT
Ferrari Enzo
Renault Scenic 1.9 dCi 120
Volkswagen Touran 1.9 TDI 105Land Rover Defender Td5
Land Rover Discovery Td5
Nissan X-Trail 2.2 dCi
-4 -2 0 2 4
-4-2
02
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 25 / 66
ACP : Mise en oeuvre sous R
Dimension 1 (73.52%)
Dim
en
sio
n 2
(1
4.2
2%
)
Variables factor map (PCA)
cylindree
puissancevitesse
poids
largeur
longueur
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 26 / 66
ACP : Mise en oeuvre sous R
PC1
PC
2
Citroën C2 1.1 Base
Smart Fortwo Coupé
Mini 1.6 170
Nissan Micra 1.2 65
Renault Clio 3.0 V6
Audi A3 1.9 TDIPeugeot 307 1.4 HDI 70
Peugeot 407 3.0 V6 BVAMercedes Classe C 270 CDIBMW 530d
Jaguar S-Type 2.7 V6 Bi-Turbo
BMW 745i
Mercedes Classe S 400 CDI
Citroën C3 Pluriel 1.6i
BMW Z4 2.5iAudi TT 1.8T 180
Aston Martin Vanquish
Bentley Continental GT
Ferrari Enzo
Renault Scenic 1.9 dCi 120
Volkswagen Touran 1.9 TDI 105Land Rover Defender Td5
Land Rover Discovery Td5
Nissan X-Trail 2.2 dCi
cylindree
puissancevitesse
poids
largeur
longueur
-0.4 -0.2 0 0.2 0.4
-0.4
-0.2
00
.20
.4
-4 -2 0 2 4
-4-2
02
4
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 27 / 66
Analyse factorielles descorrespondances
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 28 / 66
AFC : Objectif
Analyse exploratoire de tables de contingence
Mise en relief des écarts à l’indépendance du tableau de contigence
Allez au delà du χ2 et autre test d’indépendance
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 29 / 66
AFC : Mise en oeuvre sous R
nice <- read.csv("data/nice.csv")
names(nice) <- tolower(names(nice))
str(nice)
R output'data.frame': 6 obs. of 7 variables:
$ csp : Factor w/ 6 levels "Agriculteur",..: 1 4 2 6 3 5
$ iut : int 9 66 77 50 52 55
$ sciences: int 35 72 139 78 86 103
$ lsh : int 44 171 380 155 274 191
$ droit : int 24 122 195 152 43 40
$ economie: int 8 48 69 57 26 25
$ médecine: int 13 71 233 85 48 46
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 30 / 66
AFC : Mise en oeuvre sous R
library(reshape2)
nice <- melt(nice, id = "csp", variable.name = "filiere")
str(nice)
R output'data.frame': 36 obs. of 3 variables:
$ csp : Factor w/ 6 levels "Agriculteur",..: 1 4 2 6 3 5 1 4 2 6 ...
$ filiere: Factor w/ 6 levels "iut","sciences",..: 1 1 1 1 1 1 2 2 2 2 ...
$ value : int 9 66 77 50 52 55 35 72 139 78 ...
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 31 / 66
AFC : Mise en oeuvre sous R
cont_table <- xtabs(value ~ csp + filiere, data = nice)
cont_table
R outputfiliere
csp iut sciences lsh droit economie médecine
Agriculteur 9 35 44 24 8 13
Cadres 77 139 380 195 69 233
Employés 52 86 274 43 26 48
Indépendants 66 72 171 122 48 71
Ouvriers 55 103 191 40 25 46
Prof. inter. 50 78 155 152 57 85
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 32 / 66
AFC :Mise en oeuvre sous R
chisq.test(cont_table)
R output
Pearson's Chi-squared test
data: cont_table
X-squared = 256.01, df = 25, p-value < 2.2e-16
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 33 / 66
AFC :Mise en oeuvre sous R
nice_afc <- CA(cont_table, graph = FALSE)
Dim 1 (68.60%)
Dim
2 (
21
.20
%)
Agriculteur
Cadres
Employés
Indépendants
Ouvriers
Prof. inter.
iut
sciences
lsh
droiteconomie
médecine
-0.4 -0.2 0 0.2 0.4
-0.2
00
.2
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 34 / 66
AFC :Mise en oeuvre sous R
rbind(
nice_afc$row$contrib[ ,1 :3],
nice_afc$col$contrib[ ,1 :3]
)
R outputDim 1 Dim 2 Dim 3
Agriculteur 0.58122 6.94491 41.01525
Cadres 7.01907 55.70760 3.12380
Employés 39.44170 0.84044 24.34516
Indépendants 5.22233 16.28117 15.52434
Ouvriers 23.97869 5.74860 15.76031
Prof. inter. 23.75698 14.47727 0.23114
iut 1.30525 12.83230 8.81539
sciences 8.71843 10.71249 65.06416
lsh 28.64715 6.50715 15.86942
droit 42.57064 9.21883 0.78294
economie 5.81289 7.41395 3.06994
médecine 12.94564 53.31529 6.39815
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 35 / 66
AFC :Mise en oeuvre sous R
rbind(
nice_afc$row$cos2[ ,1 :3],
nice_afc$col$cos2[ ,1 :3]
)
R outputDim 1 Dim 2 Dim 3
Agriculteur 0.071781 0.265039 0.55201612
Cadres 0.285208 0.699478 0.01383267
Employés 0.915171 0.006026 0.06156014
Indépendants 0.413949 0.398790 0.13410216
Ouvriers 0.839285 0.062176 0.06011591
Prof. inter. 0.825516 0.155453 0.00087528
iut 0.150971 0.458651 0.11111768
sciences 0.455903 0.173102 0.37077989
lsh 0.871778 0.061192 0.05262910
droit 0.925526 0.061934 0.00185501
economie 0.678399 0.267374 0.03904481
médecine 0.423402 0.538837 0.02280468
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 36 / 66
Analyse des correspondancesmultiples
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 37 / 66
ACM : Objectif
Analyse exploratoire de tables de variables qualitatives
Mere en évidence des proximités (non linéaire) entre individus, entremodalités et entre les deux
Développer une typologie des individus et des modalités
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 38 / 66
ACM : Mise en oeuvre sous R
chien <- read.csv("data/chien.csv", row.names = 1, colClasses = "factor")
names(chien) <- tolower(names(chien))
str(chien)
R output'data.frame': 27 obs. of 7 variables:
$ taille : Factor w/ 3 levels "1","2","3": 3 1 3 2 1 3 1 1 2 3 ...
$ poids : Factor w/ 3 levels "1","2","3": 2 1 2 2 1 3 1 1 1 2 ...
$ velocité : Factor w/ 3 levels "1","2","3": 3 1 3 2 1 1 2 1 1 3 ...
$ intelligence: Factor w/ 3 levels "1","2","3": 2 1 3 2 2 3 3 1 2 2 ...
$ affection : Factor w/ 2 levels "1","2": 2 1 2 2 2 1 2 2 2 2 ...
$ agressivité : Factor w/ 2 levels "1","2": 2 2 2 2 1 2 1 1 2 1 ...
$ fonction : Factor w/ 3 levels "1","2","3": 3 2 3 1 1 3 1 1 1 1 ...
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 39 / 66
ACM : Mise en oeuvre sous R
library(ade4)
acm.disjonctif(chien)[1 :6, 1 :5]
R outputtaille.1 taille.2 taille.3 poids.1 poids.2
beauceron 0 0 1 0 1
basset 1 0 0 1 0
berger allemand 0 0 1 0 1
boxer 0 1 0 0 1
bull-dog 1 0 0 1 0
bull-mastiff 0 0 1 0 0
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 40 / 66
ACM : Mise en oeuvre sous R
chien_acm <- MCA(chien,
quali.sup = match("fonction", names(chien)),
graph = FALSE)
axes 10
axes 9
axes 8
axes 7
axes 6
axes 5
axes 4
axes 3
axes 2
axes 1
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 41 / 66
ACM : Mise en oeuvre sous R
Dim 1 (28.90%)
Dim
2 (
23
.08
%)
beauceron
basset
berger allemand
boxer
bull-dogbull-mastiff
caniche
chihuahua
cocker
colley
dalmatien
dobermann
dogue allemand
epagneul breton
epagneul français
fox-houndfox-terrier
grd bleu de gasc
labrador
levrier
mastiff
pékinois
pointer
saint-bernard
setter
teckelterre-neuve
taille_1
taille_2
taille_3
poids_1
poids_2
poids_3 velocité_1
velocité_2
velocité_3
intelligence_1
intelligence_2
intelligence_3
affection_1
affection_2agressivité_1
agressivité_2fonction_1
fonction_2
fonction_3
-1.5 -1 -0.5 0 0.5 1 1.5
-1.5
-1-0
.50
0.5
1
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 42 / 66
Plan
...1 Intro
...2 Présentation de R
...3 Méthodes factorielles
...4 Méthodes de classification
...5 Un exemple d’analyse non supervisé
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 43 / 66
Classification hierarchique
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 44 / 66
CAH : Objectif
Créez des groupes en agrégreant successivement les individus
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 45 / 66
CAH : Mise en oeuvre sous R
tempsen <- read.csv("data/tempsen.csv", row.names = 1)
tempsen[1 :8, 1 :6]
R outputJan Feb Mar Apr May Jun
Bakel 34.017 37.017 41.058 43.292 43.442 40.525
Bambey 33.075 35.025 37.792 38.050 37.992 36.592
Cap-skiring 31.950 32.483 31.933 30.208 30.058 31.608
Dakar-yoff 26.158 25.442 25.700 25.358 26.575 29.150
Diourbel 34.083 35.958 38.992 39.908 40.792 38.008
Fatick 34.283 36.183 39.150 39.642 39.192 36.792
Goudiry 34.420 37.360 40.480 41.380 41.900 38.280
Kaolack 34.850 36.908 39.992 40.800 40.275 37.292
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 46 / 66
CAH : Mise en oeuvre sous R
mat_dist <- dist(tempsen)
as.matrix(mat_dist)[1 :5, 1 :5]
R outputBakel Bambey Cap-skiring Dakar-yoff Diourbel
Bakel 0.0000 10.1929 25.641 37.296 5.8866
Bambey 10.1929 0.0000 15.561 27.693 4.5734
Cap-skiring 25.6410 15.5614 0.000 13.790 20.0178
Dakar-yoff 37.2961 27.6932 13.790 0.000 32.0160
Diourbel 5.8866 4.5734 20.018 32.016 0.0000
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 47 / 66
CAH : Mise en oeuvre sous R
tempclust <- hclust(mat_dist, method = "average")D
akar-
yoff
Mbour
Thie
s
Cap-s
kir
ing
Sain
t-lo
uis
Podor
Lin
guer
e
Ran
erou
Bakel
Mat
am
Bam
bey
Louga
Ked
ougou
Zig
uin
chor
Koungheu
l
Vel
ingar
a
Nio
ro
Sim
enti
Kold
a
Goudir
y
Tam
baco
unda
Fati
ck
Dio
urb
el
Kao
lack
0
5
10
15
20
25
30
hclust (*, "average")mat_dist
Hei
ght
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 48 / 66
CAH : Mise en oeuvre sous R
0
5
10
15
20
25
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 49 / 66
CAH : Mise en oeuvre sous R
temphcut <- cutree(tempclust, k = 3)D
akar-
yoff
Mbour
Thie
s
Cap-s
kir
ing
Sain
t-lo
uis
Podor
Lin
guer
e
Ran
erou
Bakel
Mat
am
Bam
bey
Louga
Ked
ougou
Zig
uin
chor
Koungheu
l
Vel
ingar
a
Nio
ro
Sim
enti
Kold
a
Goudir
y
Tam
baco
unda
Fati
ck
Dio
urb
el
Kao
lack
0
5
10
15
20
25
30
hclust (*, "average")mat_dist
Hei
ght
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 50 / 66
CAH : Mise en oeuvre sous R
Dim 1 (74.59%)
Dim
2 (
20
.19
%)
Dakar-yoff
Cap-skiring
Saint-louis
Thies
Mbour
Ziguinchor
Kedougou
Louga
Bambey
VelingaraSimenti
Fatick
Nioro
TambacoundaGoudiry
Kolda
Kaolack
Diourbel
Linguere
Koungheul
Ranerou
Podor
Bakel
Matam
cluster 1
cluster 2
cluster 3
cluster 1 cluster 2 cluster 3
-10 -5 0 5
0
5
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 51 / 66
Plan
...1 Intro
...2 Présentation de R
...3 Méthodes factorielles
...4 Méthodes de classification
...5 Un exemple d’analyse non supervisé
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 52 / 66
Titre exemple
Un exemple pour conclure
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 53 / 66
Classification des ménages Sénégalais selon leur niveau devie
étape 1 : Analyse factorielle : ACM
étape 2 : K-means sur les axes factorielles
étape 3 : CAH sur les centres de gravités des groupes formés
étape 4 : K-means pour consolider les groupes
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 54 / 66
Mise en oeuvre sous R
household <- readRDS("data/household.rds")
summary(household)
R outputregion location gender age
dakar :1598 urban:8576 male :10684 15-30yrs: 775
diourbel :1200 rural:4989 female: 2881 30-45yrs:3983
kolda :1200 45-60yrs:5043
saint-louis:1200 60+ :3764
tamba :1200
kaolack :1199
(Other) :5968
hh_size literacy job housing_status
low :3563 yes:5582 yes:9312 owner :10853
medium:4948 no :7983 no :4253 location: 2013
high :5054 free : 638
other : 61
possess_cellphone electricity school_access health_access
no :10614 yes:6694 0 - 14 :4123 0 - 14 :5997
yes: 2951 no :6871 15 - 29:3352 15 - 29:3203
30 - 44:1814 30 - 44:1519
45 - 59: 748 45 - 59: 609
60+ :3528 60+ :2237
econsit_percep deptotjr cons_tot
worse :6229 low :4522 low :4522
same :3563 medium:4521 medium:4521
better :3713 high :4522 high :4522
dont_know: 60
job_categ
occupied :9588
unemp :1125
student : 34
housejob : 680
retired :1705
other_unoccup: 433
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 55 / 66
Mise en oeuvre sous R
naxes_max <- sum(sapply(household[ ,-1], nlevels)) - ncol(household[ ,-1])
mca <- dudi.acm(household[,-1], nf = naxes_max, scannf = FALSE)
location.urbanlocation.rural
gender.male
gender.female
age.15.30yrs
age.30.45yrs
age.45.60yrs
age.60.
hh_size.low
hh_size.medium
hh_size.high
literacy.yes
literacy.no
job.yes
job.no
housing_status.owner
housing_status.location
housing_status.freehousing_status.other
possess_cellphone.no
possess_cellphone.yeselectricity.yes
electricity.noschool_access.0...14
school_access.15...29school_access.30...44school_access.45...59
school_access.60.
health_access.0...14health_access.15...29health_access.30...44health_access.45...59
health_access.60.
econsit_percep.worse econsit_percep.same
econsit_percep.better
econsit_percep.dont_know
deptotjr.lowdeptotjr.medium
deptotjr.high
cons_tot.low
cons_tot.medium
cons_tot.high
job_categ.occupied
job_categ.unemp
job_categ.student
job_categ.housejob
job_categ.retired
job_categ.other_unoccup
0
1
2
-1 0 1axe 1
axe
2
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 56 / 66
Mise en oeuvre sous R
0.00
0.05
0.10
0.15
0.20
0.25
0 10 20 30axes
eig
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 57 / 66
Mise en oeuvre sous R
On va donc travailler avec les 4 premiers axes et vérifier qu’ils sont biencentrés et réduits.
mcadata <- mca$l1[ ,1 :4]
sapply(mcadata, function(x) list(mean = round(mean(x), 2), std = sd(x)))
R outputRS1 RS2 RS3 RS4
mean 0 0 0 0
std 1 1 1 1
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 58 / 66
Mise en oeuvre sous R
Utilisation des K-means sur les axes factorielles
Ne pas oublier d’initialiser le seed pour rendre les résultatsreproductibles
set.seed(1234)
hh_part <- kmeans(mcadata, centers = 100,
nstart = 20, iter.max = 500)
CAH sur les centres de gravités des classes
hh_hclust <- hclust(dist(hh_part$centers), method = "ward")
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 59 / 66
Mise en oeuvre sous R33
84
88
31
90
74
81 3
93
68
100
10
54
61
16
23
44
76
41
57
49
18
35
47
11
40 6
25
42
34
53
26
59
75
89 4
77
65
19
48
69 7
36
60
21
94
43
72
24
46
22
97
67
32
73
45
71
38
14
83 1
17
51
13
98
82
99
37
62
29
52 9
55
96
66
20
28
79
86
70
87 2
50
85
12
58
91
30
56
39
78
27 5 8
63
15
64
92
80
95
0
5
10
15
20
25
30
hclust (*, "ward")dist(hh_part$centers)
Hei
ght
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 60 / 66
Mise en oeuvre sous R
0
5
10
15
20
25
30
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 61 / 66
Mise en oeuvre sous R
Nombre de centre par groupe
hh_tree <- cutree(hh_hclust, k = 3)
table(hh_tree)
R outputhh_tree
1 2 3
43 35 22
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 62 / 66
Mise en oeuvre sous R
Associer à chaque ménage à son nouveau groupe
dataclust <- data.frame(kclust = seq_along(hh_tree), hclust = hh_tree)
household$kclust <- hh_part$cluster
household <- merge(household, dataclust, by = "kclust")
Nombre final de ménages par groupe
table(household$hclust)
R output
1 2 3
6894 3253 3418
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 63 / 66
Mise en oeuvre sous R
Étape finale de consolidation des groupes précedemment formés.
Utilisation de la médianne pour rendre les résultats moins sensibles auxvaleurs extrêmes
centers <- by(mcadata, household$hclust, function(x) apply(x, 2, median))
centers <- matrix(unlist(centers), ncol = ncol(mcadata), byrow = TRUE)consol <- kmeans(mcadata, centers = centers, iter.max = 50, nstart = 10)
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 64 / 66
Mise en oeuvre sous R
-0.5
0.0
0.5
1.0
-1.0 -0.5 0.0 0.5 1.0axe 1
axe 2
cluster 1 2 3
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 65 / 66
Conclusion
R est une option viable et performante pour l’analyse de données
R est libre et gratuit donc le seul coût est celui d’apprentissage
Il s’agit juste d’une introduction plusieurs méthodes n’ont pas étéexplorées
Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 66 / 66