analyse de données avec r : une petite introduction

66
. . 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

Upload: ahmadou-dicko

Post on 27-Dec-2014

231 views

Category:

Education


3 download

DESCRIPTION

Il s'agit d'une introduction aux méthodes factorielles en utilisant le package FactoMineR du langage/logiciel R

TRANSCRIPT

Page 1: Analyse de données avec R : Une petite introduction

.

......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

Page 2: Analyse de données avec R : Une petite introduction

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

Page 3: Analyse de données avec R : Une petite introduction

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

Page 4: Analyse de données avec R : Une petite introduction

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

Page 5: Analyse de données avec R : Une petite introduction

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

Page 6: Analyse de données avec R : Une petite introduction

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

Page 7: Analyse de données avec R : Une petite introduction

Environnement de travail

Rstudio

1

2

3

4

Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 7 / 66

Page 8: Analyse de données avec R : Une petite introduction

Environnement de travail

Emacs ESS

Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 8 / 66

Page 9: Analyse de données avec R : Une petite introduction

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

Page 10: Analyse de données avec R : Une petite introduction

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

Page 11: Analyse de données avec R : Une petite introduction

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

Page 12: Analyse de données avec R : Une petite introduction

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

Page 13: Analyse de données avec R : Une petite introduction

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

Page 14: Analyse de données avec R : Une petite introduction

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

Page 15: Analyse de données avec R : Une petite introduction

Analyse en composantesprincipales

Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 15 / 66

Page 16: Analyse de données avec R : Une petite introduction

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

Page 17: Analyse de données avec R : Une petite introduction

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

Page 18: Analyse de données avec R : Une petite introduction

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

Page 19: Analyse de données avec R : Une petite introduction

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

Page 20: Analyse de données avec R : Une petite introduction

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

Page 21: Analyse de données avec R : Une petite introduction

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

Page 22: Analyse de données avec R : Une petite introduction

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

Page 23: Analyse de données avec R : Une petite introduction

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

Page 24: Analyse de données avec R : Une petite introduction

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

Page 25: Analyse de données avec R : Une petite introduction

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

Page 26: Analyse de données avec R : Une petite introduction

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

Page 27: Analyse de données avec R : Une petite introduction

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

Page 28: Analyse de données avec R : Une petite introduction

Analyse factorielles descorrespondances

Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 28 / 66

Page 29: Analyse de données avec R : Une petite introduction

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

Page 30: Analyse de données avec R : Une petite introduction

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

Page 31: Analyse de données avec R : Une petite introduction

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

Page 32: Analyse de données avec R : Une petite introduction

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

Page 33: Analyse de données avec R : Une petite introduction

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

Page 34: Analyse de données avec R : Une petite introduction

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

Page 35: Analyse de données avec R : Une petite introduction

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

Page 36: Analyse de données avec R : Une petite introduction

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

Page 37: Analyse de données avec R : Une petite introduction

Analyse des correspondancesmultiples

Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 37 / 66

Page 38: Analyse de données avec R : Une petite introduction

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

Page 39: Analyse de données avec R : Une petite introduction

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

Page 40: Analyse de données avec R : Une petite introduction

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

Page 41: Analyse de données avec R : Une petite introduction

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

Page 42: Analyse de données avec R : Une petite introduction

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

Page 43: Analyse de données avec R : Une petite introduction

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

Page 44: Analyse de données avec R : Une petite introduction

Classification hierarchique

Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 44 / 66

Page 45: Analyse de données avec R : Une petite introduction

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

Page 46: Analyse de données avec R : Une petite introduction

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

Page 47: Analyse de données avec R : Une petite introduction

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

Page 48: Analyse de données avec R : Une petite introduction

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

Page 49: Analyse de données avec R : Une petite introduction

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

Page 50: Analyse de données avec R : Une petite introduction

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

Page 51: Analyse de données avec R : Une petite introduction

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

Page 52: Analyse de données avec R : Une petite introduction

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

Page 53: Analyse de données avec R : Une petite introduction

Titre exemple

Un exemple pour conclure

Ahmadou H. DICKO (R meetup) Analyse de données avec R Janvier 2014 53 / 66

Page 54: Analyse de données avec R : Une petite introduction

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

Page 55: Analyse de données avec R : Une petite introduction

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

Page 56: Analyse de données avec R : Une petite introduction

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

Page 57: Analyse de données avec R : Une petite introduction

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

Page 58: Analyse de données avec R : Une petite introduction

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

Page 59: Analyse de données avec R : Une petite introduction

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

Page 60: Analyse de données avec R : Une petite introduction

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

Page 61: Analyse de données avec R : Une petite introduction

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

Page 62: Analyse de données avec R : Une petite introduction

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

Page 63: Analyse de données avec R : Une petite introduction

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

Page 64: Analyse de données avec R : Une petite introduction

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

Page 65: Analyse de données avec R : Une petite introduction

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

Page 66: Analyse de données avec R : Une petite introduction

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