0% ont trouvé ce document utile (0 vote)
0 vues199 pages

pres_R

Le document présente un cours d'introduction à R, destiné aux personnes ayant des bases en programmation, probabilités et statistiques. Il couvre des objectifs tels que l'importation, la manipulation et la visualisation de données, ainsi que l'utilisation de packages comme dplyr et ggplot2. Des ressources supplémentaires et des exemples pratiques, y compris l'utilisation de R pour des applications web via Shiny, sont également fournis.

Transféré par

nklamas0
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
0 vues199 pages

pres_R

Le document présente un cours d'introduction à R, destiné aux personnes ayant des bases en programmation, probabilités et statistiques. Il couvre des objectifs tels que l'importation, la manipulation et la visualisation de données, ainsi que l'utilisation de packages comme dplyr et ggplot2. Des ressources supplémentaires et des exemples pratiques, y compris l'utilisation de R pour des applications web via Shiny, sont également fournis.

Transféré par

nklamas0
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduction à R

Laurent Rouvière
septembre 2021

1
Présentation du cours

2
Présentation

• Prérequis : bases en programmation, probabilités et statistique.

3
Présentation

• Prérequis : bases en programmation, probabilités et statistique.


• Objectifs : comprendre et utiliser les outils R classiques en datascience :
• importer et assembler des tables, manipuler des individus et des variables.
• visualiser des données.
• outils classiques et tidyverse.

3
Présentation

• Prérequis : bases en programmation, probabilités et statistique.


• Objectifs : comprendre et utiliser les outils R classiques en datascience :
• importer et assembler des tables, manipuler des individus et des variables.
• visualiser des données.
• outils classiques et tidyverse.

• Enseignant : Laurent Rouvière, [Link]@[Link]


• Recherche : statistique non paramétrique, apprentissage statistique.
• Enseignement : statistique et probabilités (Université, école d’ingénieur,
formation continue).
• Consulting : énergie (ERDF), finance, marketing.

3
Documents de cours

• Slides disponibles à l’url [Link]

4
Documents de cours

• Slides disponibles à l’url [Link]

• Tutoriel : compléments de cours et exercises disponibles à


[Link]

4
Ressources

• Le net : de nombreux tutoriels


• Livre : R pour la statistique et la science des données, PUR

5
Pourquoi R ?

• De plus en plus de données, dans de plus en plus de domaines (énergie,


santé, sport, économie. . . .)

• La science des données contient tous les outils qui permettent


d’extraitre de l’information à partir de données. Elle comprend :

6
Pourquoi R ?

• De plus en plus de données, dans de plus en plus de domaines (énergie,


santé, sport, économie. . . .)

• La science des données contient tous les outils qui permettent


d’extraitre de l’information à partir de données. Elle comprend :
• l’importation de données
• la manipulation
• la visualisation
• le choix et l’entrainement de modèles
• la visualisation de modèles (ils sont de plus en plus complexes. . . )
• la restitution et la visualisation des résultats (applications web)

6
Pourquoi R ?

• De plus en plus de données, dans de plus en plus de domaines (énergie,


santé, sport, économie. . . .)

• La science des données contient tous les outils qui permettent


d’extraitre de l’information à partir de données. Elle comprend :
• l’importation de données
• la manipulation
• la visualisation
• le choix et l’entrainement de modèles
• la visualisation de modèles (ils sont de plus en plus complexes. . . )
• la restitution et la visualisation des résultats (applications web)

Remarque importante
• Toutes ces notions peuvent être réalisées avec R.
• R (data scientits) et Python (informaticiens) font partie des outils les
6
plus utilisés en sciences des données.
Quelques mots sur R

• R est un logiciel libre et gratuit.

7
Quelques mots sur R

• R est un logiciel libre et gratuit.


• Il est distribué par le CRAN (Comprehensive R Archive Network) à l’url
suivante : [Link]

7
Quelques mots sur R

• R est un logiciel libre et gratuit.


• Il est distribué par le CRAN (Comprehensive R Archive Network) à l’url
suivante : [Link]
• Tous les statisticiens (notamment) peuvent contribuer en créant des
fonctions et en les distribuant à la communauté (packages).

7
Quelques mots sur R

• R est un logiciel libre et gratuit.


• Il est distribué par le CRAN (Comprehensive R Archive Network) à l’url
suivante : [Link]
• Tous les statisticiens (notamment) peuvent contribuer en créant des
fonctions et en les distribuant à la communauté (packages).

Conséquence
• Le logiciel est toujours à jour.
• Une des principales raisons de son succés.

7
Exemple : Les Iris de Fisher

> data(iris)
> summary(iris)
## [Link] [Link] [Link] [Link]
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##

8
Objectifs

La problématique
Expliquer species par les autres variables.

9
Objectifs

La problématique
Expliquer species par les autres variables.

• Species est variable qualitative.

• Confronté à un problème de classification supervisée.

9
Manipulation des données

> apply(iris[,1:4],2,mean)
## [Link] [Link] [Link] [Link]
## 5.843333 3.057333 3.758000 1.199333
> apply(iris[,1:4],2,var)
## [Link] [Link] [Link] [Link]
## 0.6856935 0.1899794 3.1162779 0.5810063

10
Manipulation des données

> apply(iris[,1:4],2,mean)
## [Link] [Link] [Link] [Link]
## 5.843333 3.057333 3.758000 1.199333
> apply(iris[,1:4],2,var)
## [Link] [Link] [Link] [Link]
## 0.6856935 0.1899794 3.1162779 0.5810063

Remarque
Non informatif pour le problème (expliquer Species).

10
Manipulation avec dplyr

• dplyr est un package de tidyverse qui permet de faciliter la


manipulation des données, notamment en terme de syntaxe.
> library(dplyr)
> iris %>% group_by(Species) %>% summarise_all(mean)
## # A tibble: 3 x 5
## Species [Link] [Link] [Link] [Link]
## * <fct> <dbl> <dbl> <dbl> <dbl>
## 1 setosa 5.01 3.43 1.46 0.246
## 2 versicolor 5.94 2.77 4.26 1.33
## 3 virginica 6.59 2.97 5.55 2.03

• Plus intéressant : nous obtenons les moyennes pour chaque espèce.

11
Visualisation

> boxplot([Link]~Species,data=iris)
8.0
7.5
7.0
[Link]

6.5
6.0
5.5
5.0
4.5

setosa versicolor virginica

Species

12
Visualisation avec ggplot2
> library(ggplot2)
> ggplot(iris)+aes(x=Species,y=[Link])+geom_boxplot()

7
[Link]

setosa versicolor virginica


Species 13
Un modèle d’arbre

> library(rpart)
> tree <- rpart(Species~.,data=iris)
> library([Link])
> [Link](tree)

setosa
versicolor
setosa virginica
.33 .33 .33
100%
yes [Link] < 2.5 no

versicolor
.00 .50 .50
67%
[Link] < 1.8

setosa versicolor virginica


1.00 .00 .00 .00 .91 .09 .00 .02 .98
33% 36% 31%

14
Carte avec ggmap

• Objectif : visualiser les températures en france pour une date donnée.

15
Chargement des données + fond de carte

• Données téléchargées sur le site de meteofrance (temperatures d’à peu


près 60 stations).
> donnees <- fread("[Link]
+ donnees_libres/Txt/Synop/[Link]")
> station <- fread("[Link]
+ donnees_libres/Txt/Synop/[Link]")
> fond <- get_map("France",maptype="toner",zoom=6)
> ggmap(fond)+geom_point(data=D,
+ aes(y=Latitude,x=Longitude,color=t),size=5)+
+ scale_color_continuous(low="yellow",high="red")

16
Une première carte

17
Modèle de prévision

• Algorithme de plus proche voisins pour estimer la température sur


toutes les longitudes et latitudes du territoires.
> library(FNN)
> mod <- [Link](train=D[,.(Latitude,Longitude)],y=D[,t],
+ test=Test1[,.(Latitude,Longitude)],k=1)$pred

• Visualisation avec ggmap.


> library(ggmap)
> ggmap(fond)+geom_polygon(data=Test5,
+ aes(y=Latitude,x=Longitude,
+ fill=temp1,color=temp1,group=dept),size=1)+
+ scale_fill_continuous(low="yellow",high="red")+
+ scale_color_continuous(low="yellow",high="red")

18
La carte finale

19
Application web avec shiny

• Shiny est un package R qui permet la création de pages web


interactives.

• Exemple : graphiques standards pour un jeu de données.


• Graphiques descriptifs pour un jeu de données :
[Link]
• Visualisation des stations velib à Rennes :
[Link]

20
Dans cette partie

• 10 heures pour 4 thèmes :


• Rstudio et Rmarkdown
• Objets R
• Importation et manipulation de données avec dplyr
• Visualisation de données avec ggplot

21
Dans cette partie

• 10 heures pour 4 thèmes :


• Rstudio et Rmarkdown
• Objets R
• Importation et manipulation de données avec dplyr
• Visualisation de données avec ggplot

• 1 thème = slides + Tutoriel (complément de cours + exercices)

21
Rstudio, Rmarkdown et packages R

22
Rstudio

• RStudio est une interface facilitant l’utilisation de R.

• Également libre et gratuit : [Link]

23
Rstudio

• RStudio est une interface facilitant l’utilisation de R.

• Également libre et gratuit : [Link]

L’écran est divisé en 4 parties :

• Console : pour entrer les commandes et visualiser les sorties.


• Workspace and History : visualiser l’historique des objets créés.
• Files Plots... : voir les répertoires et fichiers dans l’environnement de
travail, les graphes de sortie, installer les packages. . .
• Script : éditeur pour entrer les commandes R et les commentaires.
Penser à régulièrement sauvegarder ce fichier !

23
Rmarkdown
Fichier Rmarkdown
• Un fichier Rmarkdown (.Rmd) permet de produire un document de
travail.
• Il contient le code, les sorties et des commentaires sur le travail réalisé.
• Il produit des rapports de grande qualité sous différentes formes
(documents, diaporama, etc...).

• Ce diaporama est du Rmarkdwon.

24
Rmarkdown
Fichier Rmarkdown
• Un fichier Rmarkdown (.Rmd) permet de produire un document de
travail.
• Il contient le code, les sorties et des commentaires sur le travail réalisé.
• Il produit des rapports de grande qualité sous différentes formes
(documents, diaporama, etc...).

• Ce diaporama est du Rmarkdwon.

• Recherche Reproductible : en cliquant sur un bouton, on peut


ré-executer tout le code du fichier et exporter les résultats sous un
format rapport.

• Documents dynamiques: possibilité d’exporter le rapport final dans


différents formats : html, pdf, rtf, slides, notebook... 24
Packages

• Ensemble de programmes R qui complètent et améliorent les fonctions


de R.
• Un package est généralement dédié à des méthodes ou domaines
d’application spécifiques.
• Plus de 18 000 packages actuellement.
• Contribue au succès de R (toujours à jour).

25
Packages

• Ensemble de programmes R qui complètent et améliorent les fonctions


de R.
• Un package est généralement dédié à des méthodes ou domaines
d’application spécifiques.
• Plus de 18 000 packages actuellement.
• Contribue au succès de R (toujours à jour).
2 phases
• Installation: [Link]([Link]) (une seule fois).
• Chargement: library([Link]) (chaque fois).

25
Packages

• Ensemble de programmes R qui complètent et améliorent les fonctions


de R.
• Un package est généralement dédié à des méthodes ou domaines
d’application spécifiques.
• Plus de 18 000 packages actuellement.
• Contribue au succès de R (toujours à jour).
2 phases
• Installation: [Link]([Link]) (une seule fois).
• Chargement: library([Link]) (chaque fois).
• On peut aussi utiliser le bouton package dans Rstudio.

25
Packages

• Ensemble de programmes R qui complètent et améliorent les fonctions


de R.
• Un package est généralement dédié à des méthodes ou domaines
d’application spécifiques.
• Plus de 18 000 packages actuellement.
• Contribue au succès de R (toujours à jour).
2 phases
• Installation: [Link]([Link]) (une seule fois).
• Chargement: library([Link]) (chaque fois).
• On peut aussi utiliser le bouton package dans Rstudio.

=⇒ Chapitre 1 du tuto.

25
Objets R

26
Numérique et caractères

• Numérique (facile)
> x <- pi
> x
## [1] 3.141593
> [Link](x)
## [1] TRUE

• Caractères
> b <- "X"
> paste(b,1:5,sep="")
## [1] "X1" "X2" "X3" "X4" "X5"

27
Vecteurs

• Création: c, seq, rep


> x1 <- c(1,3,4)
> x2 <- 1:5
> x3 <- seq(0,10,by=2)
> x4 <- rep(x1,3)
> x5 <- rep(x1,3,each=3)

• Extraction: []
> x3[c(1,3,4)] # pareil que x3[x1]
## [1] 0 4 6

28
Logique

• Vrai ou Faux
> 1<2
## [1] TRUE
> 1==2
## [1] FALSE
> 1!=2
## [1] TRUE

29
Logique

• Vrai ou Faux
> 1<2
## [1] TRUE
> 1==2
## [1] FALSE
> 1!=2
## [1] TRUE

• Souvent utile pour sélectionner des composantes d’un vecteur


> x <- 1:3
> test <- c(TRUE,FALSE,TRUE)
> x[test]
## [1] 1 3

29
> size <- runif(5,150,190) #5 tailles générées aléatoirement entre
> #150 and 190
> size
## [1] 178.8362 185.0309 180.4393 185.4450 168.2592

Problème
Sélectionner les tailles plus grandes que 174.

30
> size <- runif(5,150,190) #5 tailles générées aléatoirement entre
> #150 and 190
> size
## [1] 178.8362 185.0309 180.4393 185.4450 168.2592

Problème
Sélectionner les tailles plus grandes que 174.
> size>174
## [1] TRUE TRUE TRUE TRUE FALSE
> size[size>174]
## [1] 178.8362 185.0309 180.4393 185.4450

30
Facteurs

• Pour représenter les variables qualitatives :


> x1 <- factor(c("a","b","b","a","a"))
> x1
## [1] a b b a a
## Levels: a b
> levels(x1)
## [1] "a" "b"

31
Variable mal définie

• On suppose que les données sont codées : 0=homme, 1=femme


> X <- c(1,1,0,0,1)
> summary(X)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0 0.0 1.0 0.6 1.0 1.0

32
Variable mal définie

• On suppose que les données sont codées : 0=homme, 1=femme


> X <- c(1,1,0,0,1)
> summary(X)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0 0.0 1.0 0.6 1.0 1.0

• Problème : R interprète X comme un vecteur continu =⇒ cela peut


générer des problèmes dans l’étude statistique.

32
Variable mal définie

• On suppose que les données sont codées : 0=homme, 1=femme


> X <- c(1,1,0,0,1)
> summary(X)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0 0.0 1.0 0.6 1.0 1.0

• Problème : R interprète X comme un vecteur continu =⇒ cela peut


générer des problèmes dans l’étude statistique.

• Solution :
> X <- [Link](X)
> levels(X) <- c("man","woman")
> X
## [1] woman woman man man woman
## Levels: man woman
> summary(X)
## man woman
## 2 3 32
Matrice

• Création
> m <- matrix(1:4,nrow=2,byrow=TRUE)
> m
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4

• Extraction
> m[1,2]
> m[1,] #Première ligne
> m[,2] #Seconde colonne

33
Liste

• Permet de regrouper plusieurs objets de différents types dans un même


objet :
> mylist <- list(vector=1:5,mat=matrix(1:8,nrow=2))
> mylist
## $vector
## [1] 1 2 3 4 5
##
## $mat
## [,1] [,2] [,3] [,4]
## [1,] 1 3 5 7
## [2,] 2 4 6 8

• Extraction:
> mylist[[1]]
> mylist$vector
> mylist[["vector"]]
34
Dataframe

• Objets pour représenter des données dans R.


> name <- c("Paul","Mary","Steven","Charlotte","Peter")
> sex <- c(0,1,0,1,0)
> size <- c(180,165,168,170,175)
> data <- [Link](name,sex,size)
> data
## name sex size
## 1 Paul 0 180
## 2 Mary 1 165
## 3 Steven 0 168
## 4 Charlotte 1 170
## 5 Peter 0 175

35
> summary(data)
## name sex size
## Length:5 Min. :0.0 Min. :165.0
## Class :character 1st Qu.:0.0 1st Qu.:168.0
## Mode :character Median :0.0 Median :170.0
## Mean :0.4 Mean :171.6
## 3rd Qu.:1.0 3rd Qu.:175.0
## Max. :1.0 Max. :180.0

36
> summary(data)
## name sex size
## Length:5 Min. :0.0 Min. :165.0
## Class :character 1st Qu.:0.0 1st Qu.:168.0
## Mode :character Median :0.0 Median :170.0
## Mean :0.4 Mean :171.6
## 3rd Qu.:1.0 3rd Qu.:175.0
## Max. :1.0 Max. :180.0

Problème 1
sex est interprété comme une variable continue. C’est une variable
qualitative.

36
Solution
Il faut la convertir en facteur.
> data$sex <- [Link](data$sex)
> levels(data$sex) <- c("man","woman")
> summary(data)
## name sex size
## Length:5 man :3 Min. :165.0
## Class :character woman:2 1st Qu.:168.0
## Mode :character Median :170.0
## Mean :171.6
## 3rd Qu.:175.0
## Max. :180.0

37
Solution
Il faut la convertir en facteur.
> data$sex <- [Link](data$sex)
> levels(data$sex) <- c("man","woman")
> summary(data)
## name sex size
## Length:5 man :3 Min. :165.0
## Class :character woman:2 1st Qu.:168.0
## Mode :character Median :170.0
## Mean :171.6
## 3rd Qu.:175.0
## Max. :180.0

Problème 2
name est interprété comme une variable. C’est plutôt un identifiant.

37
> [Link](data) <- data$name
> data <- data[,-1] #suppression de la colonne name
> data
## sex size
## Paul man 180
## Mary woman 165
## Steven man 168
## Charlotte woman 170
## Peter man 175

Conclusion
Il est crucial de toujours vérifier que les données sont correctement
interprétées par R (avec summary ou mode par exemple).

38
Tibbles

• Un tibble est une version moderne du dataframe, qui conserve les


avantages et supprime les inconvénients (selon les créateurs du tibble).

• C’est la version dataframe du tidyverse (nécessité de charger ce


package).

• Deux différences notables :


• les variables qualitatives sont par défaut des caractères (et non des
facteurs) ;
• pas de rownames.

39
Exemple : data frame

> name <- c("Paul","Mary","Steven","Charlotte","Peter")


> sex <- c(0,1,0,1,0)
> size <- c(180,165,168,170,175)
> age <- c("old","young","young","old","old")
> data <- [Link](sex,size,age)
> rownames(data) <- name
> summary(data)
## sex size age
## Min. :0.0 Min. :165.0 Length:5
## 1st Qu.:0.0 1st Qu.:168.0 Class :character
## Median :0.0 Median :170.0 Mode :character
## Mean :0.4 Mean :171.6
## 3rd Qu.:1.0 3rd Qu.:175.0
## Max. :1.0 Max. :180.0

40
Example : tibble

> library(tidyverse)
> data1 <- tibble(name,sex,size,age)
> #data1 <- column_to_rownames(data1,var="name")
> summary(data1)
## name sex size age
## Length:5 Min. :0.0 Min. :165.0 Length:5
## Class :character 1st Qu.:0.0 1st Qu.:168.0 Class :character
## Mode :character Median :0.0 Median :170.0 Mode :character
## Mean :0.4 Mean :171.6
## 3rd Qu.:1.0 3rd Qu.:175.0
## Max. :1.0 Max. :180.0

dataframe vs tibbles
Principale différence : pas de facteur dans les tibbles (par défaut).

=⇒ Chapitre 2 du tuto.

41
Gérer des données

42
Gérer des données

Importer des données

43
• Les données sont généralement contenues dans des fichiers avec les
individus en ligne et les variables en colonnes.

44
• Les données sont généralement contenues dans des fichiers avec les
individus en ligne et les variables en colonnes.

• Les fonctions [Link] et [Link] permettent d’importer des données


à partir de fichiers .txt et .csv.

44
• Les données sont généralement contenues dans des fichiers avec les
individus en ligne et les variables en colonnes.

• Les fonctions [Link] et [Link] permettent d’importer des données


à partir de fichiers .txt et .csv.
> data <- [Link]("file",...)
> data <- [Link]("file",...)

44
• Les données sont généralement contenues dans des fichiers avec les
individus en ligne et les variables en colonnes.

• Les fonctions [Link] et [Link] permettent d’importer des données


à partir de fichiers .txt et .csv.
> data <- [Link]("file",...)
> data <- [Link]("file",...)

• . . . correspondent à un ensemble d’options souvent très importantes


car les fichiers de données contiennent toujours des spécificités
(données manquantes, noms de variables. . . )

44
• Les données sont généralement contenues dans des fichiers avec les
individus en ligne et les variables en colonnes.

• Les fonctions [Link] et [Link] permettent d’importer des données


à partir de fichiers .txt et .csv.
> data <- [Link]("file",...)
> data <- [Link]("file",...)

• . . . correspondent à un ensemble d’options souvent très importantes


car les fichiers de données contiennent toujours des spécificités
(données manquantes, noms de variables. . . )

• Fichiers .xls : on pourra les convertir en .csv ou utiliser des packages


spécifiques.

44
Indiquer le chemin

• Le fichier des données doit être placé dans le répertoire de travail.


Sinon, il faut indiquer le chemin à [Link].

• Exemple: importer le fichier [Link] enregistré dans /lectureR/Part1 :


• Changement du répertoire de travail
> setwd("~/lectureR/Part1")
> df <- [Link]("[Link]",...)

45
Indiquer le chemin

• Le fichier des données doit être placé dans le répertoire de travail.


Sinon, il faut indiquer le chemin à [Link].

• Exemple: importer le fichier [Link] enregistré dans /lectureR/Part1 :


• Changement du répertoire de travail
> setwd("~/lectureR/Part1")
> df <- [Link]("[Link]",...)

• Spécification du chemin dans [Link]


> df <- [Link]("~/lecture_R/Part1/[Link]",...)

45
Indiquer le chemin

• Le fichier des données doit être placé dans le répertoire de travail.


Sinon, il faut indiquer le chemin à [Link].

• Exemple: importer le fichier [Link] enregistré dans /lectureR/Part1 :


• Changement du répertoire de travail
> setwd("~/lectureR/Part1")
> df <- [Link]("[Link]",...)

• Spécification du chemin dans [Link]


> df <- [Link]("~/lecture_R/Part1/[Link]",...)

• Utilisation de la fonction [Link]


> path <- [Link]("~/lecture_R/Part1/", "[Link]")
> df <- [Link](path,...)

45
Quelques options importantes

Il y a plusieurs options importantes dans [Link] et [Link] :

• sep : le caractère de séparation (espace, virgule. . . )

46
Quelques options importantes

Il y a plusieurs options importantes dans [Link] et [Link] :

• sep : le caractère de séparation (espace, virgule. . . )


• dec : le caractère pour le séparateur décimal (virgule, point. . . )

46
Quelques options importantes

Il y a plusieurs options importantes dans [Link] et [Link] :

• sep : le caractère de séparation (espace, virgule. . . )


• dec : le caractère pour le séparateur décimal (virgule, point. . . )
• header : logique pour indiquer si le nom des variables est spécifié à la
première ligne du fichier

46
Quelques options importantes

Il y a plusieurs options importantes dans [Link] et [Link] :

• sep : le caractère de séparation (espace, virgule. . . )


• dec : le caractère pour le séparateur décimal (virgule, point. . . )
• header : logique pour indiquer si le nom des variables est spécifié à la
première ligne du fichier
• [Link] : vecteurs des identifiants (si besoin)

46
Quelques options importantes

Il y a plusieurs options importantes dans [Link] et [Link] :

• sep : le caractère de séparation (espace, virgule. . . )


• dec : le caractère pour le séparateur décimal (virgule, point. . . )
• header : logique pour indiquer si le nom des variables est spécifié à la
première ligne du fichier
• [Link] : vecteurs des identifiants (si besoin)
• [Link] : vecteur de caractères pour identifier les données
manquantes.
• ...

46
Exemple

• Fichier data_imp.txt
name;size;age
John;174;32
Peter;?;28
Mary;165.5;NA

47
Exemple

• Fichier data_imp.txt
name;size;age
John;174;32
Peter;?;28
Mary;165.5;NA

Caractéristiques
• 3 variables (ou plutôt 2...)
• Première ligne = nom des variables
• Données manquantes = NA, ?

47
Un premier essai

> path <- [Link]("~COURS/RENNES2/R/SLIDES/", "data_imp.txt")

> df <- [Link](path)


> summary(df)
## V1
## Length:4
## Class :character
## Mode :character

48
Un premier essai

> path <- [Link]("~COURS/RENNES2/R/SLIDES/", "data_imp.txt")

> df <- [Link](path)


> summary(df)
## V1
## Length:4
## Class :character
## Mode :character

Problème
R lit quatre lignes et une colonne !

48
Solution

> df <- [Link](path,header=TRUE,sep=";",dec=".",


+ [Link] = c("NA","?"),[Link] = 1)
> df
## size age
## John 174.0 32
## Peter NA 28
## Mary 165.5 NA
> summary(df)
## size age
## Min. :165.5 Min. :28
## 1st Qu.:167.6 1st Qu.:29
## Median :169.8 Median :30
## Mean :169.8 Mean :30
## 3rd Qu.:171.9 3rd Qu.:31
## Max. :174.0 Max. :32
## NA's :1 NA's :1

49
Package readr

• Version tidyverse pour l’importation.

• Il contient read_table et read_csv à la place de [Link] et


[Link] (underscores à la place des points).

• Dans Rstudio, on peut lire des données avec readr en cliquant sur
Import Dataset (pas toujours efficace pour des données complexes).

50
Autres outils importations

• readxl : fichier au format Excel.


• sas7bdat : importation depuis SAS.
• foreign : formats SPSS ou STATA
• jsonlite : format JSON
• rvest : webscrapping

51
Concaténer des données

• L’information utile pour une analyse provient (souvent) de plusieurs


tableaux de données.

52
Concaténer des données

• L’information utile pour une analyse provient (souvent) de plusieurs


tableaux de données.

• Besoin de correctement assembler ces tables avant l’étude statistique.

52
Concaténer des données

• L’information utile pour une analyse provient (souvent) de plusieurs


tableaux de données.

• Besoin de correctement assembler ces tables avant l’étude statistique.

• Fonctions R standard : rbind, cbind, [Link], merge. . .

• Fonctions R tidyverse: bind_rows, bind_cols, left_join, inner_join.

52
Un exemple avec 2 tables
> df1
## # A tibble: 4 x 2
## name nation
## <chr> <chr>
## 1 Peter USA
## 2 Mary GB
## 3 John Aus
## 4 Linda USA
> df2
## # A tibble: 3 x 2
## name age
## <chr> <dbl>
## 1 John 35
## 2 Mary 41
## 3 Fred 28

53
Un exemple avec 2 tables
> df1
## # A tibble: 4 x 2
## name nation
## <chr> <chr>
## 1 Peter USA
## 2 Mary GB
## 3 John Aus
## 4 Linda USA
> df2
## # A tibble: 3 x 2
## name age
## <chr> <dbl>
## 1 John 35
## 2 Mary 41
## 3 Fred 28

Objectif
Un tableau de données avec 3 colonnes : name, nation et age.
53
bind_rows

> bind_rows(df1,df2)
## # A tibble: 7 x 3
## name nation age
## <chr> <chr> <dbl>
## 1 Peter USA NA
## 2 Mary GB NA
## 3 John Aus NA
## 4 Linda USA NA
## 5 John <NA> 35
## 6 Mary <NA> 41
## 7 Fred <NA> 28

54
bind_rows

> bind_rows(df1,df2)
## # A tibble: 7 x 3
## name nation age
## <chr> <chr> <dbl>
## 1 Peter USA NA
## 2 Mary GB NA
## 3 John Aus NA
## 4 Linda USA NA
## 5 John <NA> 35
## 6 Mary <NA> 41
## 7 Fred <NA> 28

=⇒ Mauvais choix ici (2 lignes pour certains individus).

54
full_join

> full_join(df1,df2)
## # A tibble: 5 x 3
## name nation age
## <chr> <chr> <dbl>
## 1 Peter USA NA
## 2 Mary GB 41
## 3 John Aus 35
## 4 Linda USA NA
## 5 Fred <NA> 28

55
full_join

> full_join(df1,df2)
## # A tibble: 5 x 3
## name nation age
## <chr> <chr> <dbl>
## 1 Peter USA NA
## 2 Mary GB 41
## 3 John Aus 35
## 4 Linda USA NA
## 5 Fred <NA> 28

=⇒ tous les individus sont conservés (NA sont ajoutés pour les quantités
non mesurées.)

55
left_join

> left_join(df1,df2)
## # A tibble: 4 x 3
## name nation age
## <chr> <chr> <dbl>
## 1 Peter USA NA
## 2 Mary GB 41
## 3 John Aus 35
## 4 Linda USA NA

=⇒ seuls les individus du premier tableau (gauche) sont conservés.

56
inner_join

> inner_join(df1,df2)
## # A tibble: 2 x 3
## name nation age
## <chr> <chr> <dbl>
## 1 Mary GB 41
## 2 John Aus 35

=⇒ on garde les individus pour lesquels nation et age sont mesurés.

57
inner_join

> inner_join(df1,df2)
## # A tibble: 2 x 3
## name nation age
## <chr> <chr> <dbl>
## 1 Mary GB 41
## 2 John Aus 35

=⇒ on garde les individus pour lesquels nation et age sont mesurés.


Conclusion
• Plusieurs possibilités pour assembler des données.
• Important de faire le bon choix en fonction du contexte.

=⇒ Partie 3.1 du tuto.

57
Gérer des données

Manipuler les données avec Dplyr

58
• dplyr est un package efficace pour transformer et résumer des tableaux
de données.

• Il propose une syntaxe claire (basée sur une grammaire) permettant de


manipuler les données.

59
• dplyr est un package efficace pour transformer et résumer des tableaux
de données.

• Il propose une syntaxe claire (basée sur une grammaire) permettant de


manipuler les données.

• Par exemple, pour calculer le moyenne de [Link] de l’espèce


setosa, on utilise généralement

59
• dplyr est un package efficace pour transformer et résumer des tableaux
de données.

• Il propose une syntaxe claire (basée sur une grammaire) permettant de


manipuler les données.

• Par exemple, pour calculer le moyenne de [Link] de l’espèce


setosa, on utilise généralement
> mean(iris[iris$Species=="setosa",]$[Link])
## [1] 5.006

59
• dplyr est un package efficace pour transformer et résumer des tableaux
de données.

• Il propose une syntaxe claire (basée sur une grammaire) permettant de


manipuler les données.

• Par exemple, pour calculer le moyenne de [Link] de l’espèce


setosa, on utilise généralement
> mean(iris[iris$Species=="setosa",]$[Link])
## [1] 5.006

• La même chose en dplyr s’obtient avec


> library(dplyr)
> iris %>% filter(Species=="setosa") %>%
+ summarise(mean([Link]))
## mean([Link])
## 1 5.006

59
Grammaire dplyr

dplyr propose une grammaire dont les principaux verbes sont :

• select() : sélectionner des colonnes (variables)


• filter() : filtrer des lignes (individus)
• arrange() : ordonner des lignes
• mutate() : créer des nouvelles colonnes (nouvelles variables)
• summarise() : calculer des résumés numériques (ou résumés
statistiques)
• group_by() : effectuer des opérations pour des groupes d’individus

Penser à consulter la cheat sheet.

60
Select

But
Sélectionner des variables.
> df <- select(iris,[Link],[Link])
> head(df)
## [Link] [Link]
## 1 5.1 1.4
## 2 4.9 1.4
## 3 4.7 1.3
## 4 4.6 1.5
## 5 5.0 1.4
## 6 5.4 1.7

61
Filter

But
Filtrer des individus.
> df <- filter(iris,Species=="versicolor")
> head(df)
## [Link] [Link] [Link] [Link] Species
## 1 7.0 3.2 4.7 1.4 versicolor
## 2 6.4 3.2 4.5 1.5 versicolor
## 3 6.9 3.1 4.9 1.5 versicolor
## 4 5.5 2.3 4.0 1.3 versicolor
## 5 6.5 2.8 4.6 1.5 versicolor
## 6 5.7 2.8 4.5 1.3 versicolor

62
Arrange

But
Ordonner des individus en fonction d’une variable.
> df <- arrange(iris,[Link])
> head(df)
## [Link] [Link] [Link] [Link] Species
## 1 4.3 3.0 1.1 0.1 setosa
## 2 4.4 2.9 1.4 0.2 setosa
## 3 4.4 3.0 1.3 0.2 setosa
## 4 4.4 3.2 1.3 0.2 setosa
## 5 4.5 2.3 1.3 0.3 setosa
## 6 4.6 3.1 1.5 0.2 setosa

63
Mutate

But
Définir des nouvelles variables dans le jeu de données.

> df <- mutate(iris,diff_petal=[Link])


> head(select(df,[Link],[Link],diff_petal))
## [Link] [Link] diff_petal
## 1 1.4 0.2 1.2
## 2 1.4 0.2 1.2
## 3 1.3 0.2 1.1
## 4 1.5 0.2 1.3
## 5 1.4 0.2 1.2
## 6 1.7 0.4 1.3

64
Summarise

But
Calculer des résumés statistiques.

> summarise(iris,mean=mean([Link]),var=var([Link]))
## mean var
## 1 3.758 3.116278

65
Summarise_all et summarise_at

On peut également calculer des résumés pour des groupes de variables :

• summarize_all : toutes les variables du tibble


> iris1 <- select(iris,-Species)
> summarise_all(iris1,mean)
## [Link] [Link] [Link] [Link]
## 1 5.843333 3.057333 3.758 1.199333

66
Summarise_all et summarise_at

On peut également calculer des résumés pour des groupes de variables :

• summarize_all : toutes les variables du tibble


> iris1 <- select(iris,-Species)
> summarise_all(iris1,mean)
## [Link] [Link] [Link] [Link]
## 1 5.843333 3.057333 3.758 1.199333

• summarize_at : choisir les variables du tibble


> summarise_at(iris,1:3,mean)
## [Link] [Link] [Link]
## 1 5.843333 3.057333 3.758

66
group_by

But
Faire des opérations pour des groupes de données.

> summarise(group_by(iris,Species),mean([Link]))
## # A tibble: 3 x 2
## Species `mean([Link])`
## * <fct> <dbl>
## 1 setosa 1.46
## 2 versicolor 4.26
## 3 virginica 5.55

67
L’opérateur pipe %>%

• L’opérateur pipe %>% permet d’enchaîner les commandes pour une


syntaxe plus claire.

• Par exemple,
> mean(iris[iris$Species=="setosa","[Link]"])
## [1] 5.006

ou (un peu plus lisible)


> df1 <- iris[iris$Species=="setosa",]
> df2 <- df1$[Link]
> mean(df2)
## [1] 5.006

68
ou (un peu plus lisible avec dplyr)
> df1 <- filter(iris,Species=="setosa")
> df2 <- select(df1,[Link])
> summarize(df2,mean([Link]))
## mean([Link])
## 1 5.006

69
ou (un peu plus lisible avec dplyr)
> df1 <- filter(iris,Species=="setosa")
> df2 <- select(df1,[Link])
> summarize(df2,mean([Link]))
## mean([Link])
## 1 5.006

Pas satisfaisant
Création de deux objets dataframe (inutiles) pour un calcul "simple".

69
• Avec le pipe, on décompose et enchaîne les opérations:
1. Les données
> iris

70
• Avec le pipe, on décompose et enchaîne les opérations:
1. Les données
> iris

2. On filtre les individus setosa


> iris %>% filter(Species=="setosa")

70
3. On garde la variable d’intérêt
> iris %>% filter(Species=="setosa") %>% select([Link])

71
3. On garde la variable d’intérêt
> iris %>% filter(Species=="setosa") %>% select([Link])

4. On calcule la moyenne
> iris %>% filter(Species=="setosa") %>%
+ select([Link])%>% summarize_all(mean)
## [Link]
## 1 5.006

71
Plus généralement

• L’opérateur pipe %>% applique l’objet de droite en considérant que le


premier argument est l’objet de gauche (non symétrique).
> X <- [Link](c(1:10,"NA"))
> mean(X,[Link] = TRUE)
## [1] 5.5

ou, de façon équivalente,

72
Plus généralement

• L’opérateur pipe %>% applique l’objet de droite en considérant que le


premier argument est l’objet de gauche (non symétrique).
> X <- [Link](c(1:10,"NA"))
> mean(X,[Link] = TRUE)
## [1] 5.5

ou, de façon équivalente,


> X %>% mean([Link]=TRUE)
## [1] 5.5

72
Reformater les données

• Certaines analyses statistiques nécessitent un format particulier pour les


données.

• Un exemple jouet
> df <- iris %>% group_by(Species) %>%
+ summarize_all(mean)
> head(df)
## # A tibble: 3 x 5
## Species [Link] [Link] [Link] [Link]
## <fct> <dbl> <dbl> <dbl> <dbl>
## 1 setosa 5.01 3.43 1.46 0.246
## 2 versicolor 5.94 2.77 4.26 1.33
## 3 virginica 6.59 2.97 5.55 2.03

73
pivot_longer

• Assembler des colonnes en lignes avec pivot_longer (anciennement


gather) :
> df1 <- df %>% pivot_longer(-Species,names_to="variable",
+ values_to="valeur")
> head(df1)
## # A tibble: 6 x 3
## Species variable valeur
## <fct> <chr> <dbl>
## 1 setosa [Link] 5.01
## 2 setosa [Link] 3.43
## 3 setosa [Link] 1.46
## 4 setosa [Link] 0.246
## 5 versicolor [Link] 5.94
## 6 versicolor [Link] 2.77

Remarque
Même information avec un format différent.
74
pivot_wider

• Décomposer une ligne en plusieurs colonnes avec pivot_wider


(anciennement spread).
> df1 %>% pivot_wider(names_from=variable,values_from=valeur)
## # A tibble: 3 x 5
## Species [Link] [Link] [Link] [Link]
## <fct> <dbl> <dbl> <dbl> <dbl>
## 1 setosa 5.01 3.43 1.46 0.246
## 2 versicolor 5.94 2.77 4.26 1.33
## 3 virginica 6.59 2.97 5.55 2.03

75
Separate

• Séparer une colonne en plusieurs.


> df <- tibble(date=[Link](c("01/03/2015","05/18/2017",
+ "09/14/2018"),"%m/%d/%Y"),temp=c(18,21,15))

76
Separate

• Séparer une colonne en plusieurs.


> df <- tibble(date=[Link](c("01/03/2015","05/18/2017",
+ "09/14/2018"),"%m/%d/%Y"),temp=c(18,21,15))

> df1 <- df %>% separate(date,into = c("year","month","day"))


> df1
## # A tibble: 3 x 4
## year month day temp
## <chr> <chr> <chr> <dbl>
## 1 2015 01 03 18
## 2 2017 05 18 21
## 3 2018 09 14 15

76
Unite

• Assembler des colonnes.


> df1 %>% unite(date,year,month,day,sep="/")
## # A tibble: 3 x 2
## date temp
## <chr> <dbl>
## 1 2015/01/03 18
## 2 2017/05/18 21
## 3 2018/09/14 15

77
Unite

• Assembler des colonnes.


> df1 %>% unite(date,year,month,day,sep="/")
## # A tibble: 3 x 2
## date temp
## <chr> <dbl>
## 1 2015/01/03 18
## 2 2017/05/18 21
## 3 2018/09/14 15

=⇒ Partie 3.2 du tuto.

77
Visualiser des données

78
Visualiser des données

Graphes conventionnels

79
• Visualisation : cruciale à toutes les étapes d’une étude statistique.
• R Permet de créer un très grand nombre de type de graphes.
• On propose une (courte) présentation des graphes classiques,
• suivie par les graphes ggplot.

80
La fonction plot

• Fonction générique pour représenter (presque) tous les types de


données.

• Pour un nuage de points, il suffit de renseigner un vecteur pour l’axe


des x , et un autre vecteur pour celui des y .
> x <- seq(-2*pi,2*pi,by=0.1)
> plot(x,sin(x),type="l",xlab="x",ylab="sin(x)")
> abline(h=c(-1,1))
1.0
sin(x)

−1.0 0.0

−6 −4 −2 0 2 4 6
81
Graphes classiques pour visualiser des variables

• Histogramme pour une variable continue, diagramme en barre pour une


variable qualitative.

• Nuage de points pour 2 variables continues.

• Boxplot pour une distribution continue.

82
Graphes classiques pour visualiser des variables

• Histogramme pour une variable continue, diagramme en barre pour une


variable qualitative.

• Nuage de points pour 2 variables continues.

• Boxplot pour une distribution continue.

Constat (positif)
Il existe une fonction R pour toutes les représentations.

82
Nuage de points sur un jeu de données

> plot([Link]~[Link],data=iris)

7.5
[Link]

6.0
4.5

2.0 2.5 3.0 3.5 4.0

[Link]
> #pareil que
> plot(iris$[Link],iris$[Link])

83
Histogramme (variable continue)

> hist(iris$[Link],col="red")

Histogram of iris$[Link]
10 20 30
Frequency

4 5 6 7 8

iris$[Link]

84
Diagramme en barres (variable qualitative)

> barplot(table(iris$Species))
10 20 30 40 50
0

setosa versicolor virginica

85
Boxplot (distribution)

> boxplot([Link]~Species,data=iris)
7.5
[Link]

6.5
5.5
4.5

setosa versicolor virginica

Species

86
Visualiser des données

Visualisation avec ggplot2

87
• ggplot2 permet de faire des graphes R en s’appuyant sur une grammaire
des graphiques (équivalent de dplyr pour manipuler les données).

• Les graphes produits sont de très bonnes qualités (pas toujours le cas
avec les graphes conventionnels).

• La grammaire ggplot permet d’obtenir des graphes "complexes" avec


une syntaxe claire et lisible.

88
Assembler des couches

Pour un tableau de données fixé, un graphe est défini comme une succession
de couches. Il faut toujours spécifier :

• les données
• les variables à représenter
• le type de représentation (nuage de points, boxplot. . . ).

89
Assembler des couches

Pour un tableau de données fixé, un graphe est défini comme une succession
de couches. Il faut toujours spécifier :

• les données
• les variables à représenter
• le type de représentation (nuage de points, boxplot. . . ).

Les graphes ggplot sont construits à partir de ces couches. On indique

• les données avec ggplot


• les variables avec aes (aesthetics)
• le type de représentation avec geom_

89
La grammaire

Les principaux verbes sont

• Data (ggplot) : les données, un dataframe ou un tibble.

90
La grammaire

Les principaux verbes sont

• Data (ggplot) : les données, un dataframe ou un tibble.


• Aesthetics (aes) : façon dont les variables doivent être représentées.

90
La grammaire

Les principaux verbes sont

• Data (ggplot) : les données, un dataframe ou un tibble.


• Aesthetics (aes) : façon dont les variables doivent être représentées.
• Geometrics (geom_. . . ) : type de représentation.

90
La grammaire

Les principaux verbes sont

• Data (ggplot) : les données, un dataframe ou un tibble.


• Aesthetics (aes) : façon dont les variables doivent être représentées.
• Geometrics (geom_. . . ) : type de représentation.
• Statistics (stat_. . . ) : spécifier les transformations des données.

90
La grammaire

Les principaux verbes sont

• Data (ggplot) : les données, un dataframe ou un tibble.


• Aesthetics (aes) : façon dont les variables doivent être représentées.
• Geometrics (geom_. . . ) : type de représentation.
• Statistics (stat_. . . ) : spécifier les transformations des données.
• Scales (scale_. . . ) : modifier certains paramètres du graphe (changer
de couleurs, de taille. . . ).

90
La grammaire

Les principaux verbes sont

• Data (ggplot) : les données, un dataframe ou un tibble.


• Aesthetics (aes) : façon dont les variables doivent être représentées.
• Geometrics (geom_. . . ) : type de représentation.
• Statistics (stat_. . . ) : spécifier les transformations des données.
• Scales (scale_. . . ) : modifier certains paramètres du graphe (changer
de couleurs, de taille. . . ).

Tous ces éléments sont séparés par un +.

90
Un premier exemple

> ggplot(iris)+aes(x=[Link],y=[Link])+geom_point()
4.5

4.0
[Link]

3.5

3.0

2.5

2.0
5 6 7 8
[Link]

91
Couleur et taille

> ggplot(iris)+aes(x=[Link],y=[Link])+
+ geom_point(color="blue",size=2)
4.5

4.0
[Link]

3.5

3.0

2.5

2.0
5 6 7 8
[Link]

92
Couleur avec une variable qualitative

> ggplot(iris)+aes(x=[Link],y=[Link],
+ color=Species)+geom_point()
4.5

4.0

Species
[Link]

3.5
setosa
versicolor
3.0
virginica

2.5

2.0
5 6 7 8
[Link]

93
Couleur avec une variable continue

> ggplot(iris)+aes(x=[Link],y=[Link],
+ color=[Link])+geom_point()
4.5

4.0

[Link]
2.5
[Link]

3.5
2.0
1.5
3.0 1.0
0.5

2.5

2.0
5 6 7 8
[Link]

94
Changer la couleur

> ggplot(iris)+aes(x=[Link],y=[Link],
+ color=[Link])+geom_point()+
+ scale_color_continuous(low="yellow",high="red")
4.5

4.0

[Link]
2.5
[Link]

3.5
2.0
1.5
3.0 1.0
0.5

2.5

2.0
5 6 7 8
[Link]

95
Histogramme

> ggplot(iris)+aes(x=[Link])+geom_histogram(fill="red")
12.5

10.0

7.5
count

5.0

2.5

0.0
5 6 7 8
[Link]

96
Diagramme en barres

> ggplot(iris)+aes(x=Species)+geom_bar(fill="blue")

50

40

30
count

20

10

0
setosa versicolor virginica
Species

97
Facetting (plus compliqué)

> ggplot(iris)+aes(x=[Link],y=[Link])+geom_point()+
+ geom_smooth(method="lm")+facet_wrap(~Species)

setosa versicolor virginica


4.5

4.0
[Link]

3.5

3.0

2.5

2.0
5 6 7 8 5 6 7 8 5 6 7 8
[Link]

98
Combiner ggplot et dplyr

• Souvent important de construire un bon jeu de données pour obtenir un


bon graphe.

• Par exemple
> head(df)
## # A tibble: 6 x 3
## size weight.20 weight.50
## <dbl> <dbl> <dbl>
## 1 153 61.2 81.4
## 2 169 67.5 81.4
## 3 168 69.4 80.3
## 4 169 66.1 81.9
## 5 176 70.4 79.2
## 6 169 67.6 88.9

99
Objectif

90

80
age
weight

20

70 50

60

150 160 170


size
100
Etape dplyr

• Assembler les colonnes weight.M et weight.W en une colonne weight :


> df1 <- df %>% pivot_longer(-size,names_to="age",values_to="weight")
> df1 %>% head()
## # A tibble: 6 x 3
## size age weight
## <dbl> <chr> <dbl>
## 1 153 weight.20 61.2
## 2 153 weight.50 81.4
## 3 169 weight.20 67.5
## 4 169 weight.50 81.4
## 5 168 weight.20 69.4
## 6 168 weight.50 80.3
> df1 <- df1 %>% mutate(age=recode(age,
+ "weight.20"="20","weight.50"="50"))

101
Etape ggplot

> ggplot(df1)+aes(x=size,y=weight,color=age)+
+ geom_point()+geom_smooth(method="lm")+theme_classic()

90

80 age
weight

20
70 50

60

150 160 170


size

102
Compléments : quelques démos

> demo(image)
> example(contour)
> demo(persp)
> library("lattice");demo(lattice)
> example(wireframe)
> library("rgl");demo(rgl)
> example(persp3d)
> demo(plotmath);demo(Hershey)

103
Compléments : quelques démos

> demo(image)
> example(contour)
> demo(persp)
> library("lattice");demo(lattice)
> example(wireframe)
> library("rgl");demo(rgl)
> example(persp3d)
> demo(plotmath);demo(Hershey)

=⇒ Chapitre 4 du tuto.

103
Cartes leaflet

104
Introduction

• De nombreuses applucations nécessitent des cartes pour visualiser des


données ou les résultats d’un modèle.

• De nombreux packages R : ggmap, RgoogleMaps, maps. . .

• Dans cette partie : leaflet.

105
Fond de carte

• Leaflet est une des librairies open-source JavaScript les plus populaires
pour faire des cartes interactives.
• Documentation: here
> library(leaflet)
> leaflet() %>% addTiles()

+

106
Différents styles de fonds de carte
> Paris <- c(2.35222,48.856614)
> leaflet() %>% addTiles() %>%
+ setView(lng = Paris[1], lat = Paris[2],zoom=12)

+

Leaflet | © OpenStreetMap contributors, CC-BY-SA


107
> leaflet() %>% addProviderTiles("[Link]") %>%
+ setView(lng = Paris[1], lat = Paris[2], zoom = 12)

+

108
Leaflet | Map tiles by Stamen Design, CC BY 3.0 — Map data ©
Avec des données

• Localiser 1000 séismes près des Fiji


> data(quakes)
> head(quakes)
## lat long depth mag stations
## 1 -20.42 181.62 562 4.8 41
## 2 -20.62 181.03 650 4.2 15
## 3 -26.00 184.10 42 5.4 43
## 4 -17.97 181.66 626 4.1 19
## 5 -20.42 181.96 649 4.0 11
## 6 -19.68 184.31 195 4.0 12

109
Séismes avec une magnitude plus grande que 5.5
> quakes1 <- quakes %>% filter(mag>5.5)
> leaflet(data = quakes1) %>% addTiles() %>%
+ addMarkers(~long, ~lat, popup = ~[Link](mag))

+

Leaflet | © OpenStreetMap contributors, CC-BY-SA

Remarque
110
La magnitude apparaît lorsqu’on cliquer sur un marker.
addCircleMarkers
> leaflet(data = quakes1) %>% addTiles() %>%
+ addCircleMarkers(~long, ~lat, popup=~[Link](mag),
+ radius=3,fillOpacity = 0.8,color="red")

+

Leaflet | © OpenStreetMap contributors, CC-BY-SA

111
=⇒ Fiche 5.
Modèle de régression avec R

112
Données

Y X1 X2 ... Xp
y1 x1,1 x1,2 ... x1,p
.. .. .. .. ..
. . . . .
.. .. .. .. ..
. . . . .
yn xn,1 xn,2 ... xn,p

But
Expliquer ou prédire la sortie Y par les entrées X1 , . . . , Xp .

113
Exemple : ozone

> ozone <- [Link]("[Link]")


> head(ozone %>% select(1:5))
## maxO3 T9 T12 T15 Ne9
## 20010601 87 15.6 18.5 18.4 4
## 20010602 82 17.0 18.4 17.7 5
## 20010603 92 15.3 17.6 19.5 2
## 20010604 114 16.2 19.7 22.5 1
## 20010605 94 17.4 20.5 20.4 8
## 20010606 80 17.7 19.8 18.3 6

But
Expliquer ou prédire la concentration maximale quotidienne en O3
(colonne maxO3) par les autres variables.

114
Modélisation statistique

• Il existe une fonction inconnue m : Rp → R telle que

Y = m(X1 , . . . , Xp ) + ε.

• ε : termes d’erreur (petits).

115
Modélisation statistique

• Il existe une fonction inconnue m : Rp → R telle que

Y = m(X1 , . . . , Xp ) + ε.

• ε : termes d’erreur (petits).

• Job du statisticien : trouver un bon estimateur m b de m à partir des


p
données (x1 , y1 ), . . . , (xn , yn ) où xi ∈ R et yi ∈ R.
Modèle statistique
Permet de construire des estimateurs.

115
Un exemple : le modèle linéaire

• Hypothèse : la fonction inconnue m est linéaire

Y = β0 + β1 X1 + . . . + βp Xp + ε,

β = (β0 , β1 , . . . , βp ) sont les paramètres inconnus.

116
Un exemple : le modèle linéaire

• Hypothèse : la fonction inconnue m est linéaire

Y = β0 + β1 X1 + . . . + βp Xp + ε,

β = (β0 , β1 , . . . , βp ) sont les paramètres inconnus.

• Moindres carrés :
βb = (X t X )−1 X t Y .

• Estimateur de m :

m(x
b ) = βb0 + βb1 x1 + . . . βbp xp .

116
Structure

• Les modèles sur R sont souvent entrainés de la même façon :


> method(formula,data=...,options)

avec

• method : nom de la méthode ;


• formula : sortie Y et les entrées Xj ;
• data : jeu de données ;
• options : options en fonction de la méthode.

117
La méthode (ou le modèle)

Remarque
Chaque modèle correspond à un fonction R.

fonction R algorithme Package Problème


lm modèle linéaire Reg
glm modèle logistique Class
lda analyse discriminante linéaire MASS Class
svm Support Vector Machine e1071 Class
[Link] plus proches voisins FNN Reg
knn plus prohces voisins class Class
rpart arbres rpart Reg and Class
glmnet ridge et lasso glmnet Reg and Class

118
Formules

Remarque
Pour spécifier les entrées et la sortie.

> lm(Y~X1+X3,data=df)

119
Formules

Remarque
Pour spécifier les entrées et la sortie.

> lm(Y~X1+X3,data=df)

=⇒ Y = β0 + β1 X1 + β3 X3 + ε

119
Formules

Remarque
Pour spécifier les entrées et la sortie.

> lm(Y~X1+X3,data=df)

=⇒ Y = β0 + β1 X1 + β3 X3 + ε
> lm(Y~X1+I(X3)^2,data=df)

119
Formules

Remarque
Pour spécifier les entrées et la sortie.

> lm(Y~X1+X3,data=df)

=⇒ Y = β0 + β1 X1 + β3 X3 + ε
> lm(Y~X1+I(X3)^2,data=df)

=⇒ Y = β0 + β1 X1 + β3 X32 + ε

119
Formules

Remarque
Pour spécifier les entrées et la sortie.

> lm(Y~X1+X3,data=df)

=⇒ Y = β0 + β1 X1 + β3 X3 + ε
> lm(Y~X1+I(X3)^2,data=df)

=⇒ Y = β0 + β1 X1 + β3 X32 + ε
> lm(Y~.,data=df)

119
Formules

Remarque
Pour spécifier les entrées et la sortie.

> lm(Y~X1+X3,data=df)

=⇒ Y = β0 + β1 X1 + β3 X3 + ε
> lm(Y~X1+I(X3)^2,data=df)

=⇒ Y = β0 + β1 X1 + β3 X32 + ε
> lm(Y~.,data=df)

=⇒ Y = β0 + β1 X1 + . . . + βp Xp + ε

119
Exemple
> [Link] <- lm(maxO3~T12+Ne9,data=ozone)
> [Link]
##
## Call:
## lm(formula = maxO3 ~ T12 + Ne9, data = ozone)
##
## Coefficients:
## (Intercept) T12 Ne9
## 7.638 4.457 -2.696

120
Exemple
> [Link] <- lm(maxO3~T12+Ne9,data=ozone)
> [Link]
##
## Call:
## lm(formula = maxO3 ~ T12 + Ne9, data = ozone)
##
## Coefficients:
## (Intercept) T12 Ne9
## 7.638 4.457 -2.696

• Modèle : maxO3 = β0 + β1 T 12 + β2 Ne9 + ε.


• Estimateurs : βb0 = 7.638, βb1 = 4.457, βb2 = −2.696.

120
Exemple
> [Link] <- lm(maxO3~T12+Ne9,data=ozone)
> [Link]
##
## Call:
## lm(formula = maxO3 ~ T12 + Ne9, data = ozone)
##
## Coefficients:
## (Intercept) T12 Ne9
## 7.638 4.457 -2.696

• Modèle : maxO3 = β0 + β1 T 12 + β2 Ne9 + ε.


• Estimateurs : βb0 = 7.638, βb1 = 4.457, βb2 = −2.696.
Estimateur de m

b ) = 7.638 + 4.457 T 12 − 2.696 Ne9.


m(x

120
Faire des prévisions

• Une fois le modèle ajusté, on peut l’utiliser pour pédire.


Exemple
• Météofrance prédit pour demain: T12=20 et Ne9=4.9.
• Concentration en ozone prédite par le modèle pour demain ?

121
Faire des prévisions

• Une fois le modèle ajusté, on peut l’utiliser pour pédire.


Exemple
• Météofrance prédit pour demain: T12=20 et Ne9=4.9.
• Concentration en ozone prédite par le modèle pour demain ?

• Réponse :

b 12 = 20, Ne9 = 4.9) = 7.638 + 4.457 ∗ 20 − 2.696 ∗ 4.9 = 83.5676


m(T

121
Fonction predict

• predict est une fonction générique : on peut l’utiliser pour n’importe


quel modèle de régression (linéaire, logistique, arbre. . . )
> predict([Link],newdata=newdataset,...)

122
Fonction predict

• predict est une fonction générique : on peut l’utiliser pour n’importe


quel modèle de régression (linéaire, logistique, arbre. . . )
> predict([Link],newdata=newdataset,...)

• Exemple
> [Link] <- [Link](T12=20,Ne9=4.9)
> predict([Link],newdata=[Link])
## 1
## 83.57509

Très important
Utiliser la même structure pour les 2 data-frames.

122
Estimer l’erreur quadratique de prédiction

• La performance d’un estimateur m


b est souvent mesurée par son erreur
quadratique moyenne:

b ))2 ].
b = E [(Y − m(X
MSE (m)

123
Estimer l’erreur quadratique de prédiction

• La performance d’un estimateur m


b est souvent mesurée par son erreur
quadratique moyenne:

b ))2 ].
b = E [(Y − m(X
MSE (m)

• Cette erreur (inconnue) peut être calculée par validation hold out :
• Séparer les données en un échantillon d’apprentissage et un échantillon
test.
• Entrainer le modèle sur les données d’apprentissage =⇒ m.b
• Calculer la MSE
1 X
b i ))2 .
(yi − m(x
ntest i∈test

123
Un exemple

• Data splitting
> library(caret)
> [Link](12345)
> [Link] <- createDataPartition(1:nrow(ozone),p=2/3)
> train <- ozone %>% slice([Link]$Resample1)
> test <- ozone %>% slice(-[Link]$Resample1)

124
Un exemple

• Data splitting
> library(caret)
> [Link](12345)
> [Link] <- createDataPartition(1:nrow(ozone),p=2/3)
> train <- ozone %>% slice([Link]$Resample1)
> test <- ozone %>% slice(-[Link]$Resample1)
• Ajustement du modèle
> mod <- lm(maxO3~.,data=train)

124
Un exemple

• Data splitting
> library(caret)
> [Link](12345)
> [Link] <- createDataPartition(1:nrow(ozone),p=2/3)
> train <- ozone %>% slice([Link]$Resample1)
> test <- ozone %>% slice(-[Link]$Resample1)
• Ajustement du modèle
> mod <- lm(maxO3~.,data=train)
• Calcul de la MSE
> pred <- predict(mod,newdata=test)
> df <- [Link](pred=pred,obs=test$maxO3)
> df %>% summarize(MSE=mean((pred-obs)^2))
## MSE
## 1 387.5472

124
En pratique

• Très utile pour choisir un modèle.

• Exemple : plusieurs modèles (linéaire, arbre, forêt aléatoire. . . )


Méthode
1. Estimer la MSE pour tous les algorithmes ;
2. Choisir celui avec la plus petite MSE.

125
En pratique

• Très utile pour choisir un modèle.

• Exemple : plusieurs modèles (linéaire, arbre, forêt aléatoire. . . )


Méthode
1. Estimer la MSE pour tous les algorithmes ;
2. Choisir celui avec la plus petite MSE.

=⇒ fiche 6.

125
Merci

126

Vous aimerez peut-être aussi