r for data analysis
TRANSCRIPT
.
......R : un langage pour l’analyse des donnees
Ahmadou H. Dicko
FASEG
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 1 / 1
Introduction
On est entoure de donnees (data deluge)
On a besoin de prendre des decisions de maniere objective
els sont les outils qu’on peut utiliser ?
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 2 / 1
R to the rescue
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 3 / 1
Historique
R est un langage qui tirent ses racines de S, Lisp, schemeelques dates importantes :
▶ 1990 : Ross Ihaka et Robert Gentleman developpe R▶ 1996 : le projet devient open source▶ 2013 : R 3.0 est sorti et il y a plus de 5000 packages (librarie)
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 4 / 1
R comme une calculatrice
Les fonctions sont des objets par exemple2 * 3 + 10
R output[1] 16
x <- c(pi, 4*pi / 3)
log(-cos(x))
R output[1] 0.0000 -0.6931
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 5 / 1
Dans R tout est objet
Les fonctions sont des objets par exemplemean(1:5)
R output[1] 3
mamoyenne <- mean
mamoyenne(1:5)
R output[1] 3
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 6 / 1
Programmation fonctionnelle avec R
Supporte les lambda(function(x) toupper(x))("a")
R output[1] "A"
R ou Lisp ?'*'(2, '+'(10, 4))
R output[1] 28
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 7 / 1
Programmation OOP avec R
Systeme de classe avec ReferencePolygone <- setRefClass("Polygone", fields = c("cotes"))
carre <- Polygone$new(cotes = 4)
triangle <- carre
triangle$cotes <- 3
carre$cotes
R outputR> R> R> [1] 3
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 8 / 1
Programmation OOP avec R
Systeme de classe sans ReferencePolygone1 <- setClass("Polygone1", representation(cotes = "integer"))
carre1 <- new("Polygone1", cotes = 4L)
triangle1 <- carre1
triangle1@cotes <- 3L
carre1@cotes
R outputR> R> R> [1] 4
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 9 / 1
R un langage matriciel
Creer une matriceA <- matrix(c(1, 4, 6, 3, 0, 3, 5, 8, 9), ncol = 3)
A
R output[,1] [,2] [,3]
[1,] 1 3 5
[2,] 4 0 8
[3,] 6 3 9
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 10 / 1
R un langage matriciel
Decomposition en valeur singulieresvd(A)
R output$d
[1] 15.17 2.86 1.66
$u
[,1] [,2] [,3]
[1,] -0.3562 -0.79150 0.4966
[2,] -0.5754 0.60458 0.5508
[3,] -0.7362 -0.08954 -0.6708
$v
[,1] [,2] [,3]
[1,] -0.4665 0.38100 -0.7983
[2,] -0.2161 -0.92422 -0.3148
[3,] -0.8578 0.02562 0.5134Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 11 / 1
R un langage matriciel
Une autre decomposition utileqr(A)
R output$qr
[,1] [,2] [,3]
[1,] -7.2801 -2.8846 -12.500
[2,] 0.5494 3.1111 1.910
[3,] 0.8242 0.4063 -3.179
$rank
[1] 3
$qraux
[1] 1.137 1.914 3.179
$pivot
[1] 1 2 3
attr(,"class")
[1] "qr"
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 12 / 1
Et les donnees dans tous ca ?
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 13 / 1
Importation des donnees
voiture <- read.csv("voiture.csv", row.names = 1)
names(voiture) <- tolower(names(voiture))
str(voiture)
R outputR> 'data.frame': 18 obs. of 8 variables:
$ cyl : int 1350 1588 1294 1222 1585 1297 1796 1565 2664 1166 ...
$ puis : int 79 85 68 59 98 82 79 55 128 55 ...
$ lon : int 393 468 424 412 439 429 449 424 452 399 ...
$ lar : int 161 177 168 161 164 169 169 163 173 157 ...
$ poids : int 870 1110 1050 930 1105 1080 1160 1010 1320 815 ...
$ vitesse : int 165 160 152 151 165 160 154 140 180 140 ...
$ finition: Factor w/ 3 levels "B","M","TB": 1 3 2 2 1 3 1 1 3 2 ...
$ prix : int 30570 39990 29600 28250 34900 35480 32300 32000 47700 26540 ...
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 14 / 1
Exploration des donnees
ALFASUD-TI-1350AUDI-100-L
SIMCA-1307-GLSCITROEN-GS-CLUB
FIAT-132-1600GLSLANCIA-BETA-1300
PEUGEOT-504RENAULT-16-TL
RENAULT-30-TSTOYOTA-COROLLA
ALFETTA-1.66PRINCESS-1800-HL
DATSUN-200LTAUNUS-2000-GL
RANCHOMAZDA-9295
OPEL-REKORD-LLADA-1300
cylpuis
lon
larpoids
vitesse
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 15 / 1
Exploration des donnees
d = 2
ALFASUD-TI-1350
AUDI-100-L
SIMCA-1307-GLS
CITROEN-GS-CLUB
FIAT-132-1600GLS
LANCIA-BETA-1300
PEUGEOT-504 RENAULT-16-TL
RENAULT-30-TS
TOYOTA-COROLLA
ALFETTA-1.66
PRINCESS-1800-HL
DATSUN-200L
TAUNUS-2000-GL
RANCHO
MAZDA-9295 OPEL-REKORD-L LADA-1300
cyl
puis
lon
lar
poids
vitesse
prix
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 16 / 1
Modelisation
fit <- lm(prix ~ puis + lon + poids + vitesse,
data = voiture)
summary(fit)$coefficient
R outputR> Estimate Std. Error t value Pr(>|t|)
(Intercept) 9686.367 31605.59 0.3065 0.7641
puis 245.372 155.21 1.5809 0.1379
lon 22.920 99.67 0.2300 0.8217
poids 9.362 21.70 0.4314 0.6732
vitesse -103.140 192.28 -0.5364 0.6007
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 17 / 1
Export vers BDD
require(RSQLite)
drv <- dbDriver("SQLite")
con <- dbConnect(drv, dbname = ":memory:")
dbGetInfo(con)
R outputR> R> $dbname
[1] ":memory:"
$serverVersion
[1] "3.7.14"
$rsId
integer(0)
$loadableExtensions
[1] "on"
$flags
[1] 6
$vfs
[1] ""
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 18 / 1
Export vers BDD
dbWriteTable(con, "voiture", voiture)
voiture_chere <- dbGetQuery(con, "SELECT * FROM voiture
WHERE prix > 30000")
head(voiture_chere, 3)
R output[1] TRUE
R> row_names cyl puis lon lar poids vitesse finition
1 ALFASUD-TI-1350 1350 79 393 161 870 165 B
2 AUDI-100-L 1588 85 468 177 1110 160 TB
3 FIAT-132-1600GLS 1585 98 439 164 1105 165 B
prix
1 30570
2 39990
3 34900
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 19 / 1
La boite a outils du data hacker
un langage pour l’analyse de donnee : R, Python, Julia
un systeme de BDD (Spatial) : PostgreSQL, SQLite, (GRASS)
Version control : git
Graphique : R, D3.js, Vega.js
un editeur de texte : Emacs (org-mode, ESS, etc)
Unix tool (sed, grep, tail, etc)
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 20 / 1
Liens pour aller plus loin
Stackoverflow : hp://stackoverflow.com
R-blogger : hp://www.r-bloggers.com
Kaggle : hp://www.kaggle.com/Coursera :
▶ Machine learning (Standford)▶ Computing for data analysis (John Hopkins U)▶ Data analysis (John Hopkins U)
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 21 / 1
Conclusion
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 22 / 1
Conclusion
R est de facto le langage pour l’analyse de donneesPossible d’utiliser d’autres outils :
▶ Python (scikit-learn, pandas, etc)▶ Julia (the new kid on the block)▶ C++ (inevitable quand on veut de la puissance, Rcpp)
Plus d’excuse pour utiliser MS Excel
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 23 / 1
Merci de votre aention
Ahmadou H. Dicko (FASEG) R : un langage pour l’analyse des donnees 24 / 1