SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
Nicolas PERU 12/06/2013
Un cas pratique et pragmatique
• Contexte de l’étude
• Utilisation de R : pourquoi et comment ?
• Utilisation de la BDD : utilisation
détournée de R
• Mise en forme des données : plyr
• Modèles de mélange : flexmix
• Quelques suites/améliorations à donner
12/06/2013 Utiliser R au quotidien 2
Contexte de l’étude
12/06/2013 Utiliser R au quotidien 3
Photos G. Carrel/N. Stolzenberg
12/06/2013 Utiliser R au quotidien 4
Prélèvements
Laboratoire +
BDD
Analyses + rapports
Contexte de l’étude
~ 4 mois14 mois 12 mois
peut tout faire !!
• S’interfacer avec MySQL
• Import/export de données
• Mise en forme des données
• Traitement statistique
• Sorties graphiques
12/06/2013 Utiliser R au quotidien 5
Les besoins ?
• Rappel : avant tout un logiciel de stats
• Générer du temps ?
– Compromis efficacité/délais
• Optimisation des pratiques selon l’utilisation
• Ne peut pas pallier à toutes les contraintes
• Outil riche (> 4500 packages)
•  On se fait sa propre boîte
12/06/2013 Utiliser R au quotidien 6
…ou presque
• 120 000 individus (3 mesures)
• 8000 points GPS + ~20 variables
12/06/2013 Utiliser R au quotidien 7
Base de données
• Server MySQL (externe) couplé à
phpmyadmin
• Interface php de saisie
• RODBC
• ROracle
• RJDBC
RMySQL
12/06/2013 Utiliser R au quotidien 8
Base de données
- saisie -
• Interface php lente et peu optimisable (durée d’étude courte 2 ans ½)
• Impossibilité d’import de tableaux complets
• Approche pragmatique
- Saisie sous excel (plus rapide)
- Utilisation « détournée » de R
• R sait écrire !
• Fonction paste()
• -> on peut « écrire » du code de n’importe quel langage
• Combinaison avec apply()
9
head(bddtot)
id_point cespece taillefixee_saisie taillestandard_saisie St_larvaire zoom eff convzoom
1295 337 GAR 88 84 1 1.25 5099 0.08081
1296 337 GAR 77 73 1 1.25 5099 0.08081
1297 337 GAR 94 90 1 1.60 5099 0.06316
1298 337 GAR 83 79 1 1.25 5099 0.08081
1299 337 GAR 90 86 1 1.25 5099 0.08081
1300 337 GAR 89 84 1 1.25 5099 0.08081
taillefixee taillestandard
1295 7.11 6.79
1296 6.22 5.90
1297 5.94 5.68
1298 6.71 6.38
1299 7.27 6.95
1300 7.19 6.79
write.csv(
data.frame(
sql=apply(bddtot,1,
function(x) x <-
paste("INSERT INTO bp_poisson (id_point, cespece, taille,saisie,
taillefixee,taillestandard,taille_saisie,St_larvaire,
taillestandard_saisie,taillefixee_saisie,zoom)",
" VALUES(",x[1],",'",x[2],"',","0.00,-1,",x[9],
",",x[10],",0.00,",x[5],",",x[4],",",x[3],",'",x[6],"');",
"UPDATE bp_poisson SET saisie =
WHERE saisie = -1;",sep="")
)
)
,file="requeteSQL_ss_ech.csv",quote=FALSE,row.names=FALSE)
Base de données
- saisie -
Saisieexcel
10
write.csv(
data.frame(
sql=apply(bddtot,1,
function(x) x <-
paste("INSERT INTO bp_poisson (id_point, cespece, taille,saisie,
taillefixee,taillestandard,taille_saisie,St_larvaire,
taillestandard_saisie,taillefixee_saisie,zoom)",
" VALUES(",x[1],",'",x[2],"',","0.00,-1,",x[9],
",",x[10],",0.00,",x[5],",",x[4],",",x[3],",'",x[6],"');",
"UPDATE bp_poisson SET saisie =
WHERE saisie = -1;",sep="")
)
)
,file="requeteSQL_ss_ech.csv",quote=FALSE,row.names=FALSE)
Base de données
- saisie -
sql
INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,14.22,12.00,0.00,2, 81.0, 96.0,'0.7')
INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,14.07,12.89,0.00,2, 87.0, 95.0,'0.7')
INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,13.63,12.59,0.00,2, 85.0, 92.0,'0.7')
INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,12.74,11.85,0.00,2, 80.0, 86.0,'0.7')
INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,14.07,13.04,0.00,2, 88.0, 95.0,'0.7')
INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,14.07,12.89,0.00,2, 87.0, 95.0,'0.7')
INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,14.67,13.63,0.00,2, 92.0, 99.0,'0.7')
INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,14.37,13.33,0.00,2, 90.0, 97.0,'0.7')
INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,14.67,13.33,0.00,2, 90.0, 99.0,'0.7')
• 60 000 requêtes unitaires
générées en un script
• Insertion dans la BDD via
phpmyadmin
12/06/2013 Utiliser R au quotidien 11
Base de données
- interfacer R et MySQL -
library(RMySQL)
Connexion <-
dbConnect(MySQL(),dbname="rhonejuv",user="root",password= "MdP"
,host="localhost")
dbGetQuery(connexion,"select * from bp_poisson")->bp_poisson
dbGetQuery(connexion,"select * from bp_point")->bp_point db
GetQuery(connexion,"select * from bp_peche")->bp_peche
dbGetQuery(connexion,"select * from bp_station")->bp_station
RMySQL est un enfer à paramétrer !!!
Différence entre machine pour un même OS
Approche pragmatique
- dump de la base et travail en local (ex : Wampserver)
- Export des tables en .csv via SQL (phpmyadmin)
- Import des données sous R
12/06/2013 Utiliser R au quotidien 12
Mise en forme des données
- package plyr -require(plyr)
for (m in 1:nlevels(edfjuvtaille_4sp$id_secteur)){
site <-
subset(edfjuvtaille_4sp,id_secteur==levels(edfjuvtaille_4sp$id_secteur)[m]
& typeStation=="RCC")
nomsite <- levels(edfjuvtaille_4sp$id_secteur)[m]
for (k in 1:nlevels(edfjuvtaille_4sp$id_campagne)){
camp <- subset(site,id_campagne==levels(site$id_campagne)[k])
nomcamp <- levels(edfjuvtaille_4sp$id_campagne)[k]
for (i in 1:nlevels(camp$cespece)){
sp <- subset(camp,cespece==levels(camp$cespece)[i] & LS<110)
nomsp <- levels(camp$cespece)[i]
sp$LS[sp$LS>=40] <- ((sp$LS[sp$LS>=40]-40)/3)+40
hist_global <- hist(sp$LS,breaks=clas1,plot=F,warn.unused =
FALSE,freq=T)
hist_global$counts <- sqrt(hist_global$counts) #échelle rac. carrée
bmp(paste("1histo",nomsp,"_",nomsite,nomcamp,"RCC.bmp",sep=""),width=1100)
par(las=1,lwd=1,mar=c(5,5,3,1),cex.axis=1.5,cex.lab=1.5,bty='n',mgp=c(2.5,1
,0))
if(nrow(sp)!=0){
plot(1,type='n',xlim=c(0,70),ylim=c(0,round_any(max(hist_global$counts),5,c
eiling)),xlab="Taille (mm)",ylab="nb. (sqrt scale)",yaxt='n',xaxt='n')
a <- (seq(50,120,by=10)-40)/3+40
axis(1,pos=c(0,0),at=c(seq(0,40,by=5),a),labels=c(seq(0,40,by=5),seq(50,120
,by=10)))
axis(2,pos=c(0,0),at=seq(0,round_any(max(hist_global$counts),5,ceiling),by=
5),labels=seq(0,round_any(max(hist_global$counts),5,ceiling),by=5)^2)
text(35,round_any(max(hist_global$counts),5,ceiling),labels=paste("C",k,":
",datep_peage$PRCC1[k,2],sep=""),cex=2,font=2)
legend(x=1,y=round_any(max(hist_global$counts),5,ceiling),pch=22,col=colSt,
legend=paste("St",0:5),pt.bg=colSt,pt.cex = 3,xpd=TRUE,cex=1.5)
for(j in 1:nlevels(sp$St_larvaire)){
options(warn=-1)
stade <- subset(sp,St_larvaire==levels(sp$St_larvaire)[j])
hist_st <- hist(stade$LS,breaks=clas1,freq=T,plot=F)
hist_st$counts <- sqrt(hist_st$counts)
lines(hist_st,col=rgb(t(col2rgb(colSt[j],alpha=T)),maxColorValue =
255,alpha=127),freq=T)
options(warn=0)
}
}
else{
a <- (seq(50,120,by=10)-40)/3+40
plot(1,type='n',xlim=c(0,70),ylim=c(0,10),xlab="Taille
(mm)",ylab="nb.",yaxt='n',xaxt='n')
axis(1,pos=c(0,0),at=c(seq(0,40,by=5),a),labels=c(seq(0,40,by=5),seq(50,120
,by=10)))
axis(2,pos=c(0,0),at=seq(0,10,by=5),labels=seq(0,10,5))
Distribution de taille
Objectif : obtenir les distributions de
taille par espèce à chaque site et à
chaque date.
« mise en forme » est sous-jacente
(nécessaire à l’objectif)
12/06/2013 Utiliser R au quotidien 13
require(plyr)
for (m in 1:nlevels(edfjuvtaille_4sp$id_secteur)){
site <-
subset(edfjuvtaille_4sp,id_secteur==levels(edfjuvtaille_4sp$id_secteur)[m]
& typeStation=="RCC")
nomsite <- levels(edfjuvtaille_4sp$id_secteur)[m]
for (k in 1:nlevels(edfjuvtaille_4sp$id_campagne)){
camp <- subset(site,id_campagne==levels(site$id_campagne)[k])
nomcamp <- levels(edfjuvtaille_4sp$id_campagne)[k]
for (i in 1:nlevels(camp$cespece)){
sp <- subset(camp,cespece==levels(camp$cespece)[i] & LS<110)
nomsp <- levels(camp$cespece)[i]
sp$LS[sp$LS>=40] <- ((sp$LS[sp$LS>=40]-40)/3)+40
hist_global <- hist(sp$LS,breaks=clas1,plot=F,warn.unused =
FALSE,freq=T)
hist_global$counts <- sqrt(hist_global$counts) #échelle rac. carrée
bmp(paste("1histo",nomsp,"_",nomsite,nomcamp,"RCC.bmp",sep=""),width=1100)
par(las=1,lwd=1,mar=c(5,5,3,1),cex.axis=1.5,cex.lab=1.5,bty='n',mgp=c(2.5,1
,0))
if(nrow(sp)!=0){
plot(1,type='n',xlim=c(0,70),ylim=c(0,round_any(max(hist_global$counts),5,c
eiling)),xlab="Taille (mm)",ylab="nb. (sqrt scale)",yaxt='n',xaxt='n')
a <- (seq(50,120,by=10)-40)/3+40
axis(1,pos=c(0,0),at=c(seq(0,40,by=5),a),labels=c(seq(0,40,by=5),seq(50,120
,by=10)))
axis(2,pos=c(0,0),at=seq(0,round_any(max(hist_global$counts),5,ceiling),by=
5),labels=seq(0,round_any(max(hist_global$counts),5,ceiling),by=5)^2)
text(35,round_any(max(hist_global$counts),5,ceiling),labels=paste("C",k,":
",datep_peage$PRCC1[k,2],sep=""),cex=2,font=2)
legend(x=1,y=round_any(max(hist_global$counts),5,ceiling),pch=22,col=colSt,
legend=paste("St",0:5),pt.bg=colSt,pt.cex = 3,xpd=TRUE,cex=1.5)
for(j in 1:nlevels(sp$St_larvaire)){
options(warn=-1)
stade <- subset(sp,St_larvaire==levels(sp$St_larvaire)[j])
hist_st <- hist(stade$LS,breaks=clas1,freq=T,plot=F)
hist_st$counts <- sqrt(hist_st$counts)
lines(hist_st,col=rgb(t(col2rgb(colSt[j],alpha=T)),maxColorValue =
255,alpha=127),freq=T)
options(warn=0)
}
}
else{
a <- (seq(50,120,by=10)-40)/3+40
plot(1,type='n',xlim=c(0,70),ylim=c(0,10),xlab="Taille
(mm)",ylab="nb.",yaxt='n',xaxt='n')
axis(1,pos=c(0,0),at=c(seq(0,40,by=5),a),labels=c(seq(0,40,by=5),seq(50,120
,by=10)))
axis(2,pos=c(0,0),at=seq(0,10,by=5),labels=seq(0,10,5))
Mise en forme des données
- package plyr -
ddply(subset(edfjuvtaille_4sp,typeStation=="RCC"),~id_secteur+id_campagne+c
espece,
Allègement sensible
data
site
espèce
• Conserve le format global
• Ajout de colonne
• Synthèse (moyenne…)
• Toute sortie possible
• Il suffit de définir la fonction
• Plyr ≠ optimisation de temps de calcul
• Calcul parallèle possible (.parallel) avec les
packages foreach et doParallel
Mise en forme du
graphique
12/06/2013 Utiliser R au quotidien 14
Mise en forme des données
- package plyr -
Au final :
~300 graphiques générés dans un format commun
Phase suivante :
Les analyses stats
lines(hist_st,col=rgb(t(col2rgb(colSt[j],alpha=
T)),maxColorValue = 255,alpha=127),freq=T)
Transparence des couleurs : dépend du périphérique choisi
NB : pour les graphiques, toujours avoir un exemplaire de :
« Les paramètre graphiques ». Fiche tdr75 du pbil écrite par J. Lobry
12/06/2013 Utiliser R au quotidien 15
Modèles de mélange
- package flexmix -
ApparitiondeA
ApparitiondeB
chronique <- vector("list",4)
names(chronique) <- tps
chronique[[1]] <- rnorm(300,taillemu[1],taillesd[1])
chronique[[2]] <- rnorm(250,taillemu[2],taillesd[2])
chronique[[3]] <- rnorm(200,taillemu[3],taillesd[3])
chronique[[4]] <- rnorm(150,taillemu[4],taillesd[4])
chronique_hist <- lapply(chronique,
function(x) hist(x,plot=F,breaks=seq(0,55,by=1)))
N <- length(chronique_hist)
for(j in 2:N) {
HIST <- chronique_hist[[j]]
n <- length(HIST$counts)
for(i in 1:n){
y <- rep(tps[j],4)
x <- rep(HIST$breaks[c(i,i+1)],each=2)
z <- rep(c(0,HIST$counts[i]),2)
coord <- data.frame(x,y,z)
segments3d(coord,col='black')
y <- rep(tps[j],2)
x <- HIST$breaks[c(i,i+1)]
z <- rep(HIST$counts[i],2)
coord <- data.frame(x,y,z)
segments3d(coord)
}
}
rgl.postscript("test.eps")
Couleurs via logiciel graphique
- Possibilité via polygon()
On peut faire de la 3D sous R : exemple avec le package rgl
Théorie
12/06/2013 Utiliser R au quotidien 16
Modèles de mélange
- package flexmix -
stepflexmix(LS~1,data=ABLbaix2011[[i]][[2]],control=list(iter.max=1000,
classify="SEM"),concomitant=FLXPmultinom(~C(factor(St_larvaire,levels=1:6),
poly,1)),k=1:4)
• Mélange de différentes lois
• Chaque composante à un poids
• Prédicteurs pour
 Les paramètres de chaque
composante
 Le poids de chaque
composante
• Processus itératif pour tester 1
à k composantes
• Algorithme EM
• Sélection par AIC, BIC…
12/06/2013 Utiliser R au quotidien 17
Modèles de mélange
- package flexmix -
Sortie du modèle : proba d’appartenance à
une composante k
Hypothèse:
Mélange de k gaussienne
au sein de la distribution de
taille
12/06/2013 Utiliser R au quotidien 18
Quelques suites/améliorations
Optimisation du code
- Boucle/apply : retour d’expérience pas si évident que ça
- Eviter les stockages en mémoire
- Vectorisation (calcul matriciel)
- Limiter l’usage des listes surtout dans les étapes intermédiaires
Reporting (construction automatique du rapport final)
- Sweave
- Knitr
- Très pratique dans les études avec des rapports intermédiaires
12/06/2013 Utiliser R au quotidien 19
Conclusion
• très pratique, très puissant
• Sans limite ?
• Finalement il ne faut qu’une chose :
du temps !

Más contenido relacionado

La actualidad más candente

BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : SparkLilia Sfaxi
 
Stats web avec Hive chez Scoop.it
Stats web avec Hive chez Scoop.itStats web avec Hive chez Scoop.it
Stats web avec Hive chez Scoop.ithibnico
 
Spark, ou comment traiter des données à la vitesse de l'éclair
Spark, ou comment traiter des données à la vitesse de l'éclairSpark, ou comment traiter des données à la vitesse de l'éclair
Spark, ou comment traiter des données à la vitesse de l'éclairAlexis Seigneurin
 
Spark - Alexis Seigneurin (Français)
Spark - Alexis Seigneurin (Français)Spark - Alexis Seigneurin (Français)
Spark - Alexis Seigneurin (Français)Alexis Seigneurin
 
BigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceBigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceLilia Sfaxi
 
R2DOCX : R + WORD
R2DOCX : R + WORDR2DOCX : R + WORD
R2DOCX : R + WORDCdiscount
 
Bases de données Spatiales - POSTGIS
Bases de données Spatiales - POSTGISBases de données Spatiales - POSTGIS
Bases de données Spatiales - POSTGISOmar El Kharki
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introOlivier Mallassi
 
Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5Amal Abid
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPrestaShop
 
Softshake 2013 - Yarn dans la vraie vie, retour d'expérience et bonnes pratiq...
Softshake 2013 - Yarn dans la vraie vie, retour d'expérience et bonnes pratiq...Softshake 2013 - Yarn dans la vraie vie, retour d'expérience et bonnes pratiq...
Softshake 2013 - Yarn dans la vraie vie, retour d'expérience et bonnes pratiq...OCTO Technology
 
Base de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvreBase de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvreMICHRAFY MUSTAFA
 
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnelsUSI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnelsJoseph Glorieux
 
FLTauR - Construction de modèles de prévision sous r avec le package caret
FLTauR - Construction de modèles de prévision sous r avec le package caretFLTauR - Construction de modèles de prévision sous r avec le package caret
FLTauR - Construction de modèles de prévision sous r avec le package caretjfeudeline
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2Amal Abid
 

La actualidad más candente (19)

BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
Tech day hadoop, Spark
Tech day hadoop, SparkTech day hadoop, Spark
Tech day hadoop, Spark
 
Stats web avec Hive chez Scoop.it
Stats web avec Hive chez Scoop.itStats web avec Hive chez Scoop.it
Stats web avec Hive chez Scoop.it
 
Spark, ou comment traiter des données à la vitesse de l'éclair
Spark, ou comment traiter des données à la vitesse de l'éclairSpark, ou comment traiter des données à la vitesse de l'éclair
Spark, ou comment traiter des données à la vitesse de l'éclair
 
Spark - Alexis Seigneurin (Français)
Spark - Alexis Seigneurin (Français)Spark - Alexis Seigneurin (Français)
Spark - Alexis Seigneurin (Français)
 
BigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceBigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-Reduce
 
R2DOCX : R + WORD
R2DOCX : R + WORDR2DOCX : R + WORD
R2DOCX : R + WORD
 
Bases de données Spatiales - POSTGIS
Bases de données Spatiales - POSTGISBases de données Spatiales - POSTGIS
Bases de données Spatiales - POSTGIS
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
 
Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
 
Softshake 2013 - Yarn dans la vraie vie, retour d'expérience et bonnes pratiq...
Softshake 2013 - Yarn dans la vraie vie, retour d'expérience et bonnes pratiq...Softshake 2013 - Yarn dans la vraie vie, retour d'expérience et bonnes pratiq...
Softshake 2013 - Yarn dans la vraie vie, retour d'expérience et bonnes pratiq...
 
Base de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvreBase de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvre
 
Hadoop Graph Analysis par Thomas Vial
Hadoop Graph Analysis par Thomas VialHadoop Graph Analysis par Thomas Vial
Hadoop Graph Analysis par Thomas Vial
 
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnelsUSI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
 
FLTauR - Construction de modèles de prévision sous r avec le package caret
FLTauR - Construction de modèles de prévision sous r avec le package caretFLTauR - Construction de modèles de prévision sous r avec le package caret
FLTauR - Construction de modèles de prévision sous r avec le package caret
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
 
Introduction spark
Introduction sparkIntroduction spark
Introduction spark
 
Php et Mariadb dans le libre - JDLL
Php et Mariadb dans le libre - JDLLPhp et Mariadb dans le libre - JDLL
Php et Mariadb dans le libre - JDLL
 

Destacado

Dossier de Production - perspectives d'avenir des écoquartiers dans la métrop...
Dossier de Production - perspectives d'avenir des écoquartiers dans la métrop...Dossier de Production - perspectives d'avenir des écoquartiers dans la métrop...
Dossier de Production - perspectives d'avenir des écoquartiers dans la métrop...Léa Csi
 
Réalisez efficacement vos inventaires municipaux avec l’utilisation de la car...
Réalisez efficacement vos inventaires municipaux avec l’utilisation de la car...Réalisez efficacement vos inventaires municipaux avec l’utilisation de la car...
Réalisez efficacement vos inventaires municipaux avec l’utilisation de la car...VisionGEOMATIQUE2014
 
Pancréatites héréditaires (hereditary pancreatitis)
Pancréatites héréditaires (hereditary pancreatitis)Pancréatites héréditaires (hereditary pancreatitis)
Pancréatites héréditaires (hereditary pancreatitis)Salim KHELIF
 
Solutions géospatiales mobiles pour décisions d'affaire
Solutions géospatiales mobiles pour décisions d'affaireSolutions géospatiales mobiles pour décisions d'affaire
Solutions géospatiales mobiles pour décisions d'affaireVisionGEOMATIQUE2014
 
Les fiches de préparations
Les fiches de préparationsLes fiches de préparations
Les fiches de préparationseoz33
 
Infographie_Innovation Marché_Alsace BioValley
Infographie_Innovation Marché_Alsace BioValleyInfographie_Innovation Marché_Alsace BioValley
Infographie_Innovation Marché_Alsace BioValleyAlsace BioValley
 
Importancia del bloque cierre
Importancia del bloque cierreImportancia del bloque cierre
Importancia del bloque cierresaturniano
 
Carta irulla definitiva
Carta  irulla definitivaCarta  irulla definitiva
Carta irulla definitivauamericas
 
Ordinnancement des processus
Ordinnancement des processusOrdinnancement des processus
Ordinnancement des processusSelman Dridi
 
E commerce - comment utiliser google + pour vendre plus
E commerce - comment utiliser google + pour vendre plusE commerce - comment utiliser google + pour vendre plus
E commerce - comment utiliser google + pour vendre plusSébastien BLERIOT
 
Ouverture du gîte Ty Yuna à Ploumilliau le 18 juillet 2015
Ouverture du gîte Ty Yuna  à Ploumilliau le 18 juillet 2015Ouverture du gîte Ty Yuna  à Ploumilliau le 18 juillet 2015
Ouverture du gîte Ty Yuna à Ploumilliau le 18 juillet 2015effelbe
 

Destacado (20)

COP CARMEN YELA
COP CARMEN YELACOP CARMEN YELA
COP CARMEN YELA
 
Dossier de Production - perspectives d'avenir des écoquartiers dans la métrop...
Dossier de Production - perspectives d'avenir des écoquartiers dans la métrop...Dossier de Production - perspectives d'avenir des écoquartiers dans la métrop...
Dossier de Production - perspectives d'avenir des écoquartiers dans la métrop...
 
Réalisez efficacement vos inventaires municipaux avec l’utilisation de la car...
Réalisez efficacement vos inventaires municipaux avec l’utilisation de la car...Réalisez efficacement vos inventaires municipaux avec l’utilisation de la car...
Réalisez efficacement vos inventaires municipaux avec l’utilisation de la car...
 
Pancréatites héréditaires (hereditary pancreatitis)
Pancréatites héréditaires (hereditary pancreatitis)Pancréatites héréditaires (hereditary pancreatitis)
Pancréatites héréditaires (hereditary pancreatitis)
 
La ville de Lecce en Italie
La ville de Lecce en ItalieLa ville de Lecce en Italie
La ville de Lecce en Italie
 
Solutions géospatiales mobiles pour décisions d'affaire
Solutions géospatiales mobiles pour décisions d'affaireSolutions géospatiales mobiles pour décisions d'affaire
Solutions géospatiales mobiles pour décisions d'affaire
 
Les fiches de préparations
Les fiches de préparationsLes fiches de préparations
Les fiches de préparations
 
Computraining (2)
Computraining (2)Computraining (2)
Computraining (2)
 
Infographie_Innovation Marché_Alsace BioValley
Infographie_Innovation Marché_Alsace BioValleyInfographie_Innovation Marché_Alsace BioValley
Infographie_Innovation Marché_Alsace BioValley
 
La persona más allá de la inmigración
La persona más allá de la inmigraciónLa persona más allá de la inmigración
La persona más allá de la inmigración
 
Elearning
ElearningElearning
Elearning
 
Animes
AnimesAnimes
Animes
 
Redes
RedesRedes
Redes
 
Importancia del bloque cierre
Importancia del bloque cierreImportancia del bloque cierre
Importancia del bloque cierre
 
Carta irulla definitiva
Carta  irulla definitivaCarta  irulla definitiva
Carta irulla definitiva
 
Ordinnancement des processus
Ordinnancement des processusOrdinnancement des processus
Ordinnancement des processus
 
E commerce - comment utiliser google + pour vendre plus
E commerce - comment utiliser google + pour vendre plusE commerce - comment utiliser google + pour vendre plus
E commerce - comment utiliser google + pour vendre plus
 
Ouverture du gîte Ty Yuna à Ploumilliau le 18 juillet 2015
Ouverture du gîte Ty Yuna  à Ploumilliau le 18 juillet 2015Ouverture du gîte Ty Yuna  à Ploumilliau le 18 juillet 2015
Ouverture du gîte Ty Yuna à Ploumilliau le 18 juillet 2015
 
Liste de figures
Liste de figuresListe de figures
Liste de figures
 
E learning-por jorge roldan
E learning-por jorge roldanE learning-por jorge roldan
E learning-por jorge roldan
 

Similar a Meetup juin2013

Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCChristophe Villeneuve
 
Sécuriser & chiffrer Mariadb - JDLL 2017
Sécuriser & chiffrer Mariadb - JDLL 2017Sécuriser & chiffrer Mariadb - JDLL 2017
Sécuriser & chiffrer Mariadb - JDLL 2017Christophe Villeneuve
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) univalence
 
04 Introduction au logiciel R
04 Introduction au logiciel R04 Introduction au logiciel R
04 Introduction au logiciel RBoris Guarisma
 
Automatisation des gestionnaires de contenus (CMS)
Automatisation des gestionnaires de contenus (CMS)Automatisation des gestionnaires de contenus (CMS)
Automatisation des gestionnaires de contenus (CMS)Christophe Villeneuve
 
Open XKE - Google Compute Engine par Jean-Baptiste Claramonte et Eric Briand
Open XKE - Google Compute Engine par Jean-Baptiste Claramonte et Eric BriandOpen XKE - Google Compute Engine par Jean-Baptiste Claramonte et Eric Briand
Open XKE - Google Compute Engine par Jean-Baptiste Claramonte et Eric BriandPublicis Sapient Engineering
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Kenny Dits
 
Premier pas de web scrapping avec R
Premier pas de  web scrapping avec RPremier pas de  web scrapping avec R
Premier pas de web scrapping avec RCdiscount
 
Faire le pont entre designers et développeurs au Guardian
Faire le pont entre designers et développeurs au GuardianFaire le pont entre designers et développeurs au Guardian
Faire le pont entre designers et développeurs au GuardianKaelig Deloumeau-Prigent
 
SAS Forum Soft Computing Théâtre
SAS Forum Soft Computing ThéâtreSAS Forum Soft Computing Théâtre
SAS Forum Soft Computing ThéâtreSoft Computing
 
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...Sébastien Prunier
 
BBL - Monitoring - kyriba
BBL - Monitoring - kyribaBBL - Monitoring - kyriba
BBL - Monitoring - kyribaOlivier BAZOUD
 
Morning with MongoDB Paris 2012 - Fast Connect
Morning with MongoDB Paris 2012 - Fast ConnectMorning with MongoDB Paris 2012 - Fast Connect
Morning with MongoDB Paris 2012 - Fast ConnectMongoDB
 
Architecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de DrupalArchitecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de DrupalThomas Delerm
 

Similar a Meetup juin2013 (20)

Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDC
 
PHP et MariaDB dans le Cloud
PHP et MariaDB dans le CloudPHP et MariaDB dans le Cloud
PHP et MariaDB dans le Cloud
 
Sécuriser & chiffrer Mariadb - JDLL 2017
Sécuriser & chiffrer Mariadb - JDLL 2017Sécuriser & chiffrer Mariadb - JDLL 2017
Sécuriser & chiffrer Mariadb - JDLL 2017
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
 
Presentation Map Reduce
Presentation Map ReducePresentation Map Reduce
Presentation Map Reduce
 
04 Introduction au logiciel R
04 Introduction au logiciel R04 Introduction au logiciel R
04 Introduction au logiciel R
 
Automatisation des gestionnaires de contenus (CMS)
Automatisation des gestionnaires de contenus (CMS)Automatisation des gestionnaires de contenus (CMS)
Automatisation des gestionnaires de contenus (CMS)
 
Open XKE - Google Compute Engine par Jean-Baptiste Claramonte et Eric Briand
Open XKE - Google Compute Engine par Jean-Baptiste Claramonte et Eric BriandOpen XKE - Google Compute Engine par Jean-Baptiste Claramonte et Eric Briand
Open XKE - Google Compute Engine par Jean-Baptiste Claramonte et Eric Briand
 
Google Compute Engine
Google Compute EngineGoogle Compute Engine
Google Compute Engine
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?
 
Premier pas de web scrapping avec R
Premier pas de  web scrapping avec RPremier pas de  web scrapping avec R
Premier pas de web scrapping avec R
 
Hug janvier 2016 -EDF
Hug   janvier 2016 -EDFHug   janvier 2016 -EDF
Hug janvier 2016 -EDF
 
Faire le pont entre designers et développeurs au Guardian
Faire le pont entre designers et développeurs au GuardianFaire le pont entre designers et développeurs au Guardian
Faire le pont entre designers et développeurs au Guardian
 
SAS Forum Soft Computing Théâtre
SAS Forum Soft Computing ThéâtreSAS Forum Soft Computing Théâtre
SAS Forum Soft Computing Théâtre
 
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
 
Retour d'expérience sur PowerShell
Retour d'expérience sur PowerShellRetour d'expérience sur PowerShell
Retour d'expérience sur PowerShell
 
BBL - Monitoring - kyriba
BBL - Monitoring - kyribaBBL - Monitoring - kyriba
BBL - Monitoring - kyriba
 
Morning with MongoDB Paris 2012 - Fast Connect
Morning with MongoDB Paris 2012 - Fast ConnectMorning with MongoDB Paris 2012 - Fast Connect
Morning with MongoDB Paris 2012 - Fast Connect
 
Architecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de DrupalArchitecture PHP 3 tier avec Zend en backend de Drupal
Architecture PHP 3 tier avec Zend en backend de Drupal
 
MySQL et MariaDB dans le web‎
MySQL et MariaDB dans le web‎ MySQL et MariaDB dans le web‎
MySQL et MariaDB dans le web‎
 

Meetup juin2013

  • 2. Un cas pratique et pragmatique • Contexte de l’étude • Utilisation de R : pourquoi et comment ? • Utilisation de la BDD : utilisation détournée de R • Mise en forme des données : plyr • Modèles de mélange : flexmix • Quelques suites/améliorations à donner 12/06/2013 Utiliser R au quotidien 2
  • 3. Contexte de l’étude 12/06/2013 Utiliser R au quotidien 3 Photos G. Carrel/N. Stolzenberg
  • 4. 12/06/2013 Utiliser R au quotidien 4 Prélèvements Laboratoire + BDD Analyses + rapports Contexte de l’étude ~ 4 mois14 mois 12 mois
  • 5. peut tout faire !! • S’interfacer avec MySQL • Import/export de données • Mise en forme des données • Traitement statistique • Sorties graphiques 12/06/2013 Utiliser R au quotidien 5 Les besoins ?
  • 6. • Rappel : avant tout un logiciel de stats • Générer du temps ? – Compromis efficacité/délais • Optimisation des pratiques selon l’utilisation • Ne peut pas pallier à toutes les contraintes • Outil riche (> 4500 packages) •  On se fait sa propre boîte 12/06/2013 Utiliser R au quotidien 6 …ou presque
  • 7. • 120 000 individus (3 mesures) • 8000 points GPS + ~20 variables 12/06/2013 Utiliser R au quotidien 7 Base de données • Server MySQL (externe) couplé à phpmyadmin • Interface php de saisie • RODBC • ROracle • RJDBC RMySQL
  • 8. 12/06/2013 Utiliser R au quotidien 8 Base de données - saisie - • Interface php lente et peu optimisable (durée d’étude courte 2 ans ½) • Impossibilité d’import de tableaux complets • Approche pragmatique - Saisie sous excel (plus rapide) - Utilisation « détournée » de R • R sait écrire ! • Fonction paste() • -> on peut « écrire » du code de n’importe quel langage • Combinaison avec apply()
  • 9. 9 head(bddtot) id_point cespece taillefixee_saisie taillestandard_saisie St_larvaire zoom eff convzoom 1295 337 GAR 88 84 1 1.25 5099 0.08081 1296 337 GAR 77 73 1 1.25 5099 0.08081 1297 337 GAR 94 90 1 1.60 5099 0.06316 1298 337 GAR 83 79 1 1.25 5099 0.08081 1299 337 GAR 90 86 1 1.25 5099 0.08081 1300 337 GAR 89 84 1 1.25 5099 0.08081 taillefixee taillestandard 1295 7.11 6.79 1296 6.22 5.90 1297 5.94 5.68 1298 6.71 6.38 1299 7.27 6.95 1300 7.19 6.79 write.csv( data.frame( sql=apply(bddtot,1, function(x) x <- paste("INSERT INTO bp_poisson (id_point, cespece, taille,saisie, taillefixee,taillestandard,taille_saisie,St_larvaire, taillestandard_saisie,taillefixee_saisie,zoom)", " VALUES(",x[1],",'",x[2],"',","0.00,-1,",x[9], ",",x[10],",0.00,",x[5],",",x[4],",",x[3],",'",x[6],"');", "UPDATE bp_poisson SET saisie = WHERE saisie = -1;",sep="") ) ) ,file="requeteSQL_ss_ech.csv",quote=FALSE,row.names=FALSE) Base de données - saisie - Saisieexcel
  • 10. 10 write.csv( data.frame( sql=apply(bddtot,1, function(x) x <- paste("INSERT INTO bp_poisson (id_point, cespece, taille,saisie, taillefixee,taillestandard,taille_saisie,St_larvaire, taillestandard_saisie,taillefixee_saisie,zoom)", " VALUES(",x[1],",'",x[2],"',","0.00,-1,",x[9], ",",x[10],",0.00,",x[5],",",x[4],",",x[3],",'",x[6],"');", "UPDATE bp_poisson SET saisie = WHERE saisie = -1;",sep="") ) ) ,file="requeteSQL_ss_ech.csv",quote=FALSE,row.names=FALSE) Base de données - saisie - sql INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,14.22,12.00,0.00,2, 81.0, 96.0,'0.7') INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,14.07,12.89,0.00,2, 87.0, 95.0,'0.7') INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,13.63,12.59,0.00,2, 85.0, 92.0,'0.7') INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,12.74,11.85,0.00,2, 80.0, 86.0,'0.7') INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,14.07,13.04,0.00,2, 88.0, 95.0,'0.7') INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,14.07,12.89,0.00,2, 87.0, 95.0,'0.7') INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,14.67,13.63,0.00,2, 92.0, 99.0,'0.7') INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,14.37,13.33,0.00,2, 90.0, 97.0,'0.7') INSERT INTO bp_poisson (id_point, cespece, taille,saisie,taillefixee,taillestandard,taille_saisie,St_larvaire,taillestandard_saisie,taillefixee_saisie,zoom) VALUES(1021,'HOT',0.00,-1,14.67,13.33,0.00,2, 90.0, 99.0,'0.7') • 60 000 requêtes unitaires générées en un script • Insertion dans la BDD via phpmyadmin
  • 11. 12/06/2013 Utiliser R au quotidien 11 Base de données - interfacer R et MySQL - library(RMySQL) Connexion <- dbConnect(MySQL(),dbname="rhonejuv",user="root",password= "MdP" ,host="localhost") dbGetQuery(connexion,"select * from bp_poisson")->bp_poisson dbGetQuery(connexion,"select * from bp_point")->bp_point db GetQuery(connexion,"select * from bp_peche")->bp_peche dbGetQuery(connexion,"select * from bp_station")->bp_station RMySQL est un enfer à paramétrer !!! Différence entre machine pour un même OS Approche pragmatique - dump de la base et travail en local (ex : Wampserver) - Export des tables en .csv via SQL (phpmyadmin) - Import des données sous R
  • 12. 12/06/2013 Utiliser R au quotidien 12 Mise en forme des données - package plyr -require(plyr) for (m in 1:nlevels(edfjuvtaille_4sp$id_secteur)){ site <- subset(edfjuvtaille_4sp,id_secteur==levels(edfjuvtaille_4sp$id_secteur)[m] & typeStation=="RCC") nomsite <- levels(edfjuvtaille_4sp$id_secteur)[m] for (k in 1:nlevels(edfjuvtaille_4sp$id_campagne)){ camp <- subset(site,id_campagne==levels(site$id_campagne)[k]) nomcamp <- levels(edfjuvtaille_4sp$id_campagne)[k] for (i in 1:nlevels(camp$cespece)){ sp <- subset(camp,cespece==levels(camp$cespece)[i] & LS<110) nomsp <- levels(camp$cespece)[i] sp$LS[sp$LS>=40] <- ((sp$LS[sp$LS>=40]-40)/3)+40 hist_global <- hist(sp$LS,breaks=clas1,plot=F,warn.unused = FALSE,freq=T) hist_global$counts <- sqrt(hist_global$counts) #échelle rac. carrée bmp(paste("1histo",nomsp,"_",nomsite,nomcamp,"RCC.bmp",sep=""),width=1100) par(las=1,lwd=1,mar=c(5,5,3,1),cex.axis=1.5,cex.lab=1.5,bty='n',mgp=c(2.5,1 ,0)) if(nrow(sp)!=0){ plot(1,type='n',xlim=c(0,70),ylim=c(0,round_any(max(hist_global$counts),5,c eiling)),xlab="Taille (mm)",ylab="nb. (sqrt scale)",yaxt='n',xaxt='n') a <- (seq(50,120,by=10)-40)/3+40 axis(1,pos=c(0,0),at=c(seq(0,40,by=5),a),labels=c(seq(0,40,by=5),seq(50,120 ,by=10))) axis(2,pos=c(0,0),at=seq(0,round_any(max(hist_global$counts),5,ceiling),by= 5),labels=seq(0,round_any(max(hist_global$counts),5,ceiling),by=5)^2) text(35,round_any(max(hist_global$counts),5,ceiling),labels=paste("C",k,": ",datep_peage$PRCC1[k,2],sep=""),cex=2,font=2) legend(x=1,y=round_any(max(hist_global$counts),5,ceiling),pch=22,col=colSt, legend=paste("St",0:5),pt.bg=colSt,pt.cex = 3,xpd=TRUE,cex=1.5) for(j in 1:nlevels(sp$St_larvaire)){ options(warn=-1) stade <- subset(sp,St_larvaire==levels(sp$St_larvaire)[j]) hist_st <- hist(stade$LS,breaks=clas1,freq=T,plot=F) hist_st$counts <- sqrt(hist_st$counts) lines(hist_st,col=rgb(t(col2rgb(colSt[j],alpha=T)),maxColorValue = 255,alpha=127),freq=T) options(warn=0) } } else{ a <- (seq(50,120,by=10)-40)/3+40 plot(1,type='n',xlim=c(0,70),ylim=c(0,10),xlab="Taille (mm)",ylab="nb.",yaxt='n',xaxt='n') axis(1,pos=c(0,0),at=c(seq(0,40,by=5),a),labels=c(seq(0,40,by=5),seq(50,120 ,by=10))) axis(2,pos=c(0,0),at=seq(0,10,by=5),labels=seq(0,10,5)) Distribution de taille Objectif : obtenir les distributions de taille par espèce à chaque site et à chaque date. « mise en forme » est sous-jacente (nécessaire à l’objectif)
  • 13. 12/06/2013 Utiliser R au quotidien 13 require(plyr) for (m in 1:nlevels(edfjuvtaille_4sp$id_secteur)){ site <- subset(edfjuvtaille_4sp,id_secteur==levels(edfjuvtaille_4sp$id_secteur)[m] & typeStation=="RCC") nomsite <- levels(edfjuvtaille_4sp$id_secteur)[m] for (k in 1:nlevels(edfjuvtaille_4sp$id_campagne)){ camp <- subset(site,id_campagne==levels(site$id_campagne)[k]) nomcamp <- levels(edfjuvtaille_4sp$id_campagne)[k] for (i in 1:nlevels(camp$cespece)){ sp <- subset(camp,cespece==levels(camp$cespece)[i] & LS<110) nomsp <- levels(camp$cespece)[i] sp$LS[sp$LS>=40] <- ((sp$LS[sp$LS>=40]-40)/3)+40 hist_global <- hist(sp$LS,breaks=clas1,plot=F,warn.unused = FALSE,freq=T) hist_global$counts <- sqrt(hist_global$counts) #échelle rac. carrée bmp(paste("1histo",nomsp,"_",nomsite,nomcamp,"RCC.bmp",sep=""),width=1100) par(las=1,lwd=1,mar=c(5,5,3,1),cex.axis=1.5,cex.lab=1.5,bty='n',mgp=c(2.5,1 ,0)) if(nrow(sp)!=0){ plot(1,type='n',xlim=c(0,70),ylim=c(0,round_any(max(hist_global$counts),5,c eiling)),xlab="Taille (mm)",ylab="nb. (sqrt scale)",yaxt='n',xaxt='n') a <- (seq(50,120,by=10)-40)/3+40 axis(1,pos=c(0,0),at=c(seq(0,40,by=5),a),labels=c(seq(0,40,by=5),seq(50,120 ,by=10))) axis(2,pos=c(0,0),at=seq(0,round_any(max(hist_global$counts),5,ceiling),by= 5),labels=seq(0,round_any(max(hist_global$counts),5,ceiling),by=5)^2) text(35,round_any(max(hist_global$counts),5,ceiling),labels=paste("C",k,": ",datep_peage$PRCC1[k,2],sep=""),cex=2,font=2) legend(x=1,y=round_any(max(hist_global$counts),5,ceiling),pch=22,col=colSt, legend=paste("St",0:5),pt.bg=colSt,pt.cex = 3,xpd=TRUE,cex=1.5) for(j in 1:nlevels(sp$St_larvaire)){ options(warn=-1) stade <- subset(sp,St_larvaire==levels(sp$St_larvaire)[j]) hist_st <- hist(stade$LS,breaks=clas1,freq=T,plot=F) hist_st$counts <- sqrt(hist_st$counts) lines(hist_st,col=rgb(t(col2rgb(colSt[j],alpha=T)),maxColorValue = 255,alpha=127),freq=T) options(warn=0) } } else{ a <- (seq(50,120,by=10)-40)/3+40 plot(1,type='n',xlim=c(0,70),ylim=c(0,10),xlab="Taille (mm)",ylab="nb.",yaxt='n',xaxt='n') axis(1,pos=c(0,0),at=c(seq(0,40,by=5),a),labels=c(seq(0,40,by=5),seq(50,120 ,by=10))) axis(2,pos=c(0,0),at=seq(0,10,by=5),labels=seq(0,10,5)) Mise en forme des données - package plyr - ddply(subset(edfjuvtaille_4sp,typeStation=="RCC"),~id_secteur+id_campagne+c espece, Allègement sensible data site espèce • Conserve le format global • Ajout de colonne • Synthèse (moyenne…) • Toute sortie possible • Il suffit de définir la fonction • Plyr ≠ optimisation de temps de calcul • Calcul parallèle possible (.parallel) avec les packages foreach et doParallel Mise en forme du graphique
  • 14. 12/06/2013 Utiliser R au quotidien 14 Mise en forme des données - package plyr - Au final : ~300 graphiques générés dans un format commun Phase suivante : Les analyses stats lines(hist_st,col=rgb(t(col2rgb(colSt[j],alpha= T)),maxColorValue = 255,alpha=127),freq=T) Transparence des couleurs : dépend du périphérique choisi NB : pour les graphiques, toujours avoir un exemplaire de : « Les paramètre graphiques ». Fiche tdr75 du pbil écrite par J. Lobry
  • 15. 12/06/2013 Utiliser R au quotidien 15 Modèles de mélange - package flexmix - ApparitiondeA ApparitiondeB chronique <- vector("list",4) names(chronique) <- tps chronique[[1]] <- rnorm(300,taillemu[1],taillesd[1]) chronique[[2]] <- rnorm(250,taillemu[2],taillesd[2]) chronique[[3]] <- rnorm(200,taillemu[3],taillesd[3]) chronique[[4]] <- rnorm(150,taillemu[4],taillesd[4]) chronique_hist <- lapply(chronique, function(x) hist(x,plot=F,breaks=seq(0,55,by=1))) N <- length(chronique_hist) for(j in 2:N) { HIST <- chronique_hist[[j]] n <- length(HIST$counts) for(i in 1:n){ y <- rep(tps[j],4) x <- rep(HIST$breaks[c(i,i+1)],each=2) z <- rep(c(0,HIST$counts[i]),2) coord <- data.frame(x,y,z) segments3d(coord,col='black') y <- rep(tps[j],2) x <- HIST$breaks[c(i,i+1)] z <- rep(HIST$counts[i],2) coord <- data.frame(x,y,z) segments3d(coord) } } rgl.postscript("test.eps") Couleurs via logiciel graphique - Possibilité via polygon() On peut faire de la 3D sous R : exemple avec le package rgl Théorie
  • 16. 12/06/2013 Utiliser R au quotidien 16 Modèles de mélange - package flexmix - stepflexmix(LS~1,data=ABLbaix2011[[i]][[2]],control=list(iter.max=1000, classify="SEM"),concomitant=FLXPmultinom(~C(factor(St_larvaire,levels=1:6), poly,1)),k=1:4) • Mélange de différentes lois • Chaque composante à un poids • Prédicteurs pour  Les paramètres de chaque composante  Le poids de chaque composante • Processus itératif pour tester 1 à k composantes • Algorithme EM • Sélection par AIC, BIC…
  • 17. 12/06/2013 Utiliser R au quotidien 17 Modèles de mélange - package flexmix - Sortie du modèle : proba d’appartenance à une composante k Hypothèse: Mélange de k gaussienne au sein de la distribution de taille
  • 18. 12/06/2013 Utiliser R au quotidien 18 Quelques suites/améliorations Optimisation du code - Boucle/apply : retour d’expérience pas si évident que ça - Eviter les stockages en mémoire - Vectorisation (calcul matriciel) - Limiter l’usage des listes surtout dans les étapes intermédiaires Reporting (construction automatique du rapport final) - Sweave - Knitr - Très pratique dans les études avec des rapports intermédiaires
  • 19. 12/06/2013 Utiliser R au quotidien 19 Conclusion • très pratique, très puissant • Sans limite ? • Finalement il ne faut qu’une chose : du temps !