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

TP1 Introduction R

Transféré par

skhairi2020
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)
32 vues19 pages

TP1 Introduction R

Transféré par

skhairi2020
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

TP 1 : Traitement et manipulation des données avec R

Module : Économétrie des séries temporelles


Master : Analyse Économique et Modélisation

Année Universitaire : 2021-2022


Version du 22/10/2021

Objectifs
Le présent TP a pour objectif de passer en revue certaines structures de données de R et les fonctions
d’importation des données dans votre espace de travail. Nous supposons que vous êtes familier avec la
syntaxe de base de R (déclaration de variable, arithmétique simple ...).
Le TP est divisé en 3 sections. Nous allons d’abord examiner les structures de données telles que les vecteurs
et data.frames. Dans la deuxième section, nous utilisons des fonctions R de base pour importer des données
à partir des fichiers, et nous présenterons par la suite un package assez complet pour importer et manipuler
des données dans R. La dernière section sera consacrée à une étude de cas. Nous utiliserons une base de
données réelles pour faire une analyse de données exploratoire simple avec les notions que nous avons vues.
Nous vous recommandons d’utiliser Rstudio pour suivre ce TP plutôt que l’éditeur de base R.

Table des matières


1 Structures de données de base de R 2
1.1 Les vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Les Data Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Importer des données dans R 4


2.1 Avec les fonctions de base R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Avec tidyverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3 Etude de cas : Analyse des données avec R 8

4 Travail à faire 19

1
Master AEM

1 Structures de données de base de R


1.1 Les vecteurs
Il existe deux types de vecteur dans R :
— Les Vecteurs atomiques, dont il existe six types : logique, entier, double, caractère, complexe et
brut. Les vecteurs entiers et doubles sont collectivement appelés vecteurs numériques.
— Les listes, parfois appelées vecteurs récursifs car les listes peuvent contenir d’autres listes.
La principale différence entre les vecteurs atomiques et les listes est que les vecteurs atomiques sont ho-
mogènes, tandis que les listes peuvent être hétérogènes.
Les quatre types des vecteurs les plus importants sont les suivants : logique, entier, double et caractère. Les
vecteurs brut et complexe sont rarement utilisés.

1.1.1 Vecteur numérique


Les vecteurs entiers et doubles sont connus collectivement sous le nom de vecteurs numériques. Un vecteur
double stocke des nombres réguliers. Les nombres peuvent être positifs ou négatifs, grands ou petits, et
comporter ou non des chiffres à droite de la décimale. On peut créer un vecteur atomique en regroupant
certaines valeurs de données avec c :
x <- c(1,3,5,7,9)
is.vector(x)
## [1] TRUE

is.vector est une fonction prédéfinie en R qui teste si un objet est un vecteur atomique ou pas. Il renvoie
TRUE si l’objet est un vecteur atomique et FALSE sinon. Pour connaı̂tre le type de l’objet (doubles, entier,
caractère,· · ·) on utilise la fonction typeof :
typeof(x)
## [1] "double"

Dans R, les nombres sont de type doubles par défaut. Pour créer un entier on place un L après le nombre :

x1 <- c(1L, 3L, -5L)


typeof(x1)
## [1] "integer"

La distinction entre les entiers et les doubles n’est généralement pas importante. La seule différence entre
1 et 1L est la façon dont R enregistre le numéro dans la mémoire de l’ordinateur. Les nombres entiers sont
définis plus précisément dans la mémoire que les doubles.

1.1.2 Vecteurs de caractères


Les vecteurs de caractères sont le type le plus complexe de vecteur atomique, car chaque élément d’un vecteur
de caractères est une chaı̂ne et une chaı̂ne peut contenir une quantité arbitraire de données. Un vecteur de
caractères stocke de petits morceaux de texte. On peut créer un vecteur de caractères dans R en tapant un
caractère ou une chaı̂ne de caractères entre guillemets :
text <- c("économétrie","des", "séries", "chronologiques")
text
## [1] "économétrie" "des" "séries" "chronologiques"

À l’aide de la fonction is.vector on peut vérifier que text est bien un vecteur et pour connaitre le type du
vecteur on utilise la fonction typeof :

2
Master AEM

is.vector(text)
## [1] TRUE
typeof(text)
## [1] "character"

Les éléments individuels d’un vecteur de caractères sont appelés string Un vecteur de caractères peut contenir
des lettres, des nombres ou des symboles.
text1 <- c("AEM","+","S3","2020")
text1
## [1] "AEM" "+" "S3" "2020"

1.1.3 Vecteurs logiques


Les vecteurs logiques sont le type le plus simple de vecteur atomique car ils ne peuvent prendre que trois
valeurs possibles : FALSE, TRUE et NA.
L <- c(TRUE,TRUE,NA,FALSE)
L
## [1] TRUE TRUE NA FALSE
typeof(L)
## [1] "logical"

Les vecteurs logiques sont très utiles pour faire des c comparaisons. Par exemple considérons un vecteur qui
contient les notes du module de statistique, on veut connaı̂tre les étudiants ayant une note supérieure à 12 :

note <- c(12,10,5,17,2,13.5,14,7)


note > 12
## [1] FALSE FALSE FALSE TRUE FALSE TRUE TRUE FALSE

Les valeurs TRUE indiquent que l’élément du vecteur vérifie la condition demandée (note> 12), et évidemment
la valeur FALSE indique que la condition n’est pas vérifiée.

1.2 Les listes


Les listes sont comme les vecteurs car elles regroupent les données dans un ensemble. La différence se trouve
dans le fait que les listes ne regroupent pas des valeurs individuelles (string, doubles,· · ·), elles regroupent
des objets R, tels que des vecteurs atomiques et d’autres listes. Pour créer une liste on utilise la fonction
list :
list1 <- list(c("Mounir","Lamiaa","Abir","Youness"),
c(5,12,10,14),
c(TRUE,FALSE,FALSE,TRUE))
list1
## [[1]]
## [1] "Mounir" "Lamiaa" "Abir" "Youness"
##
## [[2]]
## [1] 5 12 10 14
##
## [[3]]

3
Master AEM

## [1] TRUE FALSE FALSE TRUE

Ici on crée une liste nommée liste1 contenant trois vecteurs : le premier est un vecteur de caractère contenant
les noms de 4 étudiants, le second est un vecteur numérique avec leur note pour le module de statistique et
le dernier est vecteur logique décrivant si l’étudiant est un garçon.
Pour connaı̂tre le type de chaque élément de la liste on utilise la fonctionstr :
str(list1)
## List of 3
## $ : chr [1:4] "Mounir" "Lamiaa" "Abir" "Youness"
## $ : num [1:4] 5 12 10 14
## $ : logi [1:4] TRUE FALSE FALSE TRUE

1.3 Les Data Frames


Les Data frames sont une version bidimensionnelle des listes. C’est la structure de stockage la plus utile pour
l’analyse des données. On peut imaginer les Data frames comme l’équivalent de R à la feuille de calcul Excel,
car il stocke les données dans le même format. Les blocs de données regroupent les vecteurs dans un tableau
bidimensionnel. Chaque vecteur devient une colonne dans le tableau. Par conséquent, chaque colonne d’un
bloc de données peut contenir un type de données différent.
Les Data frames regroupent les vecteurs dans un tableau. Chaque vecteur devient une colonne dans le
tableau. Par conséquent, chaque colonne d’un Data frame peut contenir un type de données différent.
Pour créer un Data frame on utilise la fonction data.frame à laquelle on donne n’importe quel nombre de
vecteurs, chacun séparé par une virgule.
df <- data.frame(Nom=c("Mounir","Lamiaa","Abir","Youness"),
Note = c(5,12,10,14),
EstMale = c(TRUE,FALSE,FALSE,TRUE))
class(df)
## [1] "data.frame"

Nous devons nous assurer que chaque vecteur a la même longueur. Comme vous pouvez le voir dans le code
ci-dessus, nous pouvons nommer les arguments dans data.frame, afin de pouvoir interpréter plus facilement
les données lors de l’affichage :
df
## Nom Note EstMale
## 1 Mounir 5 TRUE
## 2 Lamiaa 12 FALSE
## 3 Abir 10 FALSE
## 4 Youness 14 TRUE

2 Importer des données dans R


Lors de l’analyse de série chronologique (ou d’analyse de données en général) on utilise des données recueillies
sur des bases de données externes. Il serait très fastidieux de créer à la main un data.frame avec des données
mensuelles couvrant 50 années (soit 50 × 12 = 600 valeurs à entrer).
Du coup on s’intéresse dans cette section aux fonctions qui permettent d’importer les données dans l’envi-
ronnement de travail R.D’abord on verra des fonctions de base prédéfinie dans R, par la suite on explorera
des packages plus performant que les fonctions de base.

4
Master AEM

2.1 Avec les fonctions de base R


2.1.1 Importer un fichier CSV
Un fichier CSV (valeurs séparées par des virgules) est un fichier de texte brut qui contient une liste de données.
Ce type de fichier utilise la virgule pour séparer les données, mais on peut trouver d’autres caractères, comme
des points-virgules ou des tabulations.
Considérons l’exemple d’un fichier csv contenant la production agricole, la température et la précipitation
moyenne pour le Maroc sur une période allant de 1961 à 1980. Si on ouvre le fichier dans un éditeur de texte,
il a la forme suivante :

Figure 1 – Exemple d’un fichier csv

La première ligne contient les noms des colonnes et les valeurs d’une colonne à l’autre sont séparées par des
points-virgules. Pour importer ce type de donnée on utilise la fonction read.csv2 :
data <- read.csv2(file="data.csv",header=TRUE)
data
## Annee Production Température Precipitation
## 1 1961 1537830 18.12369 19.65468
## 2 1962 3511979 17.48824 31.46182
## 3 1963 3856071 17.14823 41.40100
## 4 1964 3403305 17.53572 24.57906
## 5 1965 3486365 17.08257 33.40013
## 6 1966 2179840 17.33252 18.83009
## 7 1967 3523200 16.99553 31.86922
## 8 1968 6352730 17.18368 29.44816
## 9 1969 4089600 17.09723 35.58974
## 10 1970 4251560 17.39056 26.58683
## 11 1971 5352461 16.39025 34.38428
## 12 1972 5167140 16.32070 30.69492
## 13 1973 3228970 17.06613 24.38894
## 14 1974 4809380 16.95625 23.26605

5
Master AEM

## 15 1975 3728620 16.95068 25.02294


## 16 1976 5713380 16.80099 36.27125
## 17 1977 2888140 17.14791 27.30522
## 18 1978 4744560 17.45249 24.04890
## 19 1979 4103160 17.31068 27.63005
## 20 1980 4514720 17.46736 26.22780

Cette fonction prend deux arguments le premier est le nom du fichier avec l’extension entre deux guille-
mets(”data.csv”). Le deuxième argument est une valeur logique TRUE si la première ligne contient les noms
des colonnes et FALSE sinon.
Si vous rencontrez une erreur comme l’exemple ci-dessous. Il se peut que le fichier que vous essayez d’importer
ne soit pas dans le même répertoire que le projet R. Pour le corriger vous devez mettre le fichier dans le bon
répertoire et appeler de nouveau la fonction read.csv2.
## Warning in file(file, "rt"): impossible d’ouvrir le fichier ’donner.csv’ : No such file
or directory
## Error in file(file, "rt"): impossible d’ouvrir la connexion

2.1.2 Importer un fichier EXCEL


Un autre type de fichier qui est très populaire et sur lequel vous travaillerez souvent est les fichiers EXCEL.
Contrairement au fichier CSV, R ne contient pas une fonction de base qui permet d’importer un fichier
EXCEL. On doit utiliser des fonctions externes, aussi appelé packages. Les packages R sont des collections
de fonctions et de données développés par la communauté. Ils augmentent la puissance de R en améliorant
les fonctionnalités de base R existantes ou en en ajoutant de nouvelles fonctionnalités. Pour importer un
fichier excel on aura besoin du package readxl, un package R très puissant qui permet de lire, écrire
et formater des fichiers Excel (Il fait partie du package tidyverse qu’on discutera dans la section suivante).
La première étape consiste à installer ce package à l’aide de la fonction install.packages :
install.packages("readxl")

Après avoir terminé l’installation, l’étape suivante consiste à appeler le package pour qu’on puisse utiliser
ces fonctions :
library(readxl)

Désormais on peut utiliser la fonction readexcel et on importe les données comme suit :
data<- read_excel("data.xlsx")
data
## # A tibble: 20 x 4
## Année Production Température Précipitation
## <dbl> <dbl> <dbl> <dbl>
## 1 1961 1537830 18.1 19.7
## 2 1962 3511979 17.5 31.5
## 3 1963 3856071 17.1 41.4
## 4 1964 3403305 17.5 24.6
## 5 1965 3486365 17.1 33.4
## 6 1966 2179840 17.3 18.8
## 7 1967 3523200 17.0 31.9
## 8 1968 6352730 17.2 29.4
## 9 1969 4089600 17.1 35.6
## 10 1970 4251560 17.4 26.6
## 11 1971 5352461 16.4 34.4
## 12 1972 5167140 16.3 30.7

6
Master AEM

## 13 1973 3228970 17.1 24.4


## 14 1974 4809380 17.0 23.3
## 15 1975 3728620 17.0 25.0
## 16 1976 5713380 16.8 36.3
## 17 1977 2888140 17.1 27.3
## 18 1978 4744560 17.5 24.0
## 19 1979 4103160 17.3 27.6
## 20 1980 4514720 17.5 26.2

2.2 Avec tidyverse


tidyverse est une collection de packages R essentiels pour l’analyse des données. Les packages qui sont
inclus dans tidyverse aident à exécuter et à interagir avec tous les types de données qui existent. Il existe
une multitude de choses qu’on peut faire avec une base de données, telle que les diviser en sous-ensemble,
effectuer des transformations, la visualisation, · · · D’abord on doit installer ce package avec la fonction
install.packages :
install.packages("tidyverse")

On peut par la suite charger le package dans l’environnement de travail. Sur la console on peut voir un
aperçu des packages inclus dans tidyverse. ggplot2 gère la visualisation des données, dplyr s’occupe de
toutes les manipulations et transformation des données, tibble est la structure de données de base pour les
objets de ce package :
library(tidyverse)

2.2.1 Importer un fichier CSV avec tidyverse


Pour importer un fichier csv avec tidyverse on utilise la fonction read csv2, qui importe les données dans
R sous forme de tibble, tandis que read.csv importe les données sous la forme d’un data.frame.
Les tibble sont meilleurs que les data.frame car ils : se chargent plus rapidement, permettent d’avoir des
colonnes sous forme de listes, autorisent les noms de variables non standard (les variables peuvent commencer
par un nombre et peuvent contenir des espaces), on n’a pas besoin de créer un nom pour les lignes.
La principale distinction est que : read csv2 crée un tibble et read.csv crée une data.frame basique.
data <- read_csv2("data.csv")
data
## # A tibble: 20 x 4
## Annee Production `Temp\xe9rature` Precipitation
## <dbl> <dbl> <dbl> <dbl>
## 1 1961 1537830 18.1 19.7
## 2 1962 3511979 17.5 31.5
## 3 1963 3856071 17.1 41.4
## 4 1964 3403305 17.5 24.6
## 5 1965 3486365 17.1 33.4
## 6 1966 2179840 17.3 18.8
## 7 1967 3523200 17.0 31.9
## 8 1968 6352730 17.2 29.4
## 9 1969 4089600 17.1 35.6
## 10 1970 4251560 17.4 26.6
## 11 1971 5352461 16.4 34.4
## 12 1972 5167140 16.3 30.7
## 13 1973 3228970 17.1 24.4
## 14 1974 4809380 17.0 23.3

7
Master AEM

## 15 1975 3728620 17.0 25.0


## 16 1976 5713380 16.8 36.3
## 17 1977 2888140 17.1 27.3
## 18 1978 4744560 17.5 24.0
## 19 1979 4103160 17.3 27.6
## 20 1980 4514720 17.5 26.2

read csv2 importe les données du fichier sous la forme d’un tibble. Une information supplémentaire qu’on
peut voir dans la sortie, sous le nom de chaque colonne la fonction indique la nature des données de cette
colonne. <dbl> ⇐⇒ double, les données sont de nature numérique .
Si on veut avoir une idée globale de la structure des données avec lesquelles on travaille, on appelle la fonction
glimpse :
glimpse(data)
## Rows: 20
## Columns: 4
## $ Annee <dbl> 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 19...
## $ Production <dbl> 1537830, 3511979, 3856071, 3403305, 3486365, 21798...
## $ `Temp\xe9rature` <dbl> 18.12369, 17.48824, 17.14823, 17.53572, 17.08257, ...
## $ Precipitation <dbl> 19.65468, 31.46182, 41.40100, 24.57906, 33.40013, ...

On a comme sortie le nombre de lignes, de colonnes, les noms des colonnes, le type des données pour chaque
colonne et les premiers éléments de chaque colonne.

2.2.2 Importer un fichier EXCEL avec tidyverse


On’a utilisé dans la section précédente la fonction readexcel pour importer un fichier excel. C’est une
fonction du package tidyverse.

3 Etude de cas : Analyse des données avec R


Dans cette dernière section, nous travaillerons avec une base de données réelle, afin d’appliquer les notions
que nous avons vues et d’en découvrir de nouvelles. La base de données qu’on utilisera est celle contenant
un résumé quotidien des cas confirmés de coronavirus par pays.
Notre objectif ici est de faire une analyse exploratoire des données, une étape préliminaire dans tout projet
où on travaille avec des données réelles. Nous allons effectuer cette tâche en deux étapes, d’abord nous
n’utiliserons que les fonctions de base de R, puis nous utiliserons les fonctions tidyverse pour voir la
distinction entre les deux.
Avant de commencer on télécharge la base de données, qu’on peut faire directement dans R en appelant la
fonction install.package :
install.packages("coronavirus")

Ensuite on charge les données dans l’environnement de travail avec la fonction data,qui permet de charger
des bases de données à partir de packages :
library(coronavirus)
data("coronavirus")

Les données étant présentes dans l’environnement de travail, on s’intéresse à connaı̂tre les noms de va-
riables de la base de données. On appelle la fonction names qui retourne les noms des colonnes de l’objet
demandé :

8
Master AEM

3.0.1 Analyse avec les fonctions de bases de R


names(coronavirus)
## [1] "date" "province" "country" "lat" "long" "type" "cases"

Comme on peut le voir sur la sortie la base de données coronavirus contiennent 7 variables. date donne la
date de l’observation, on sait que les données sont journalières. province et country indiquent respective-
ment la province et le pays auquel appartient l’observation. lat et long sont latitude et longitude du pays.
type est une variable qui contient deux modalités : si l’observation correspond à un cas d’infection confirmée
elle est représentée par confirmed et si l’observation correspond à un cas de décès elle est représentée par
Death. Finalement la variable cases représentant le nombre de cas confirmés ou de décès.
Jetons un coup d’oeil sur la structure global des données :
str(coronavirus)
## 'data.frame': 150720 obs. of 7 variables:
## $ date : Date, format: "2020-01-22" "2020-01-23" ...
## $ province: chr "" "" "" "" ...
## $ country : chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ lat : num 33.9 33.9 33.9 33.9 33.9 ...
## $ long : num 67.7 67.7 67.7 67.7 67.7 ...
## $ type : chr "confirmed" "confirmed" "confirmed" "confirmed" ...
## $ cases : int 0 0 0 0 0 0 0 0 0 0 ...

La base de données est du type data.frame avec 150720 observations et 7 variables. Le reste de la sortie donne
la nature des différentes colonnes : date est du type Date, une structure de données de R qui permet de stocker
les dates sous la forme Anne-mois-jour. province, coutry et type sont des vecteurs de caractères.lat et
long sont des vecteurs numériques et cases est un vecteur d’entiers.
Les variables province, lat et long n’ont pas beaucoup d’intérêt pour notre analyse, il convient de les
éliminer. Pour supprimer des colonnes d’une data.frame, on appelle la data.frame suivi de deux crochets.À
l’intérieur de ces derniers un signe moins et un vecteur numérique avec la position des colonnes qu’on souhaite
supprimer, comme suit :
data <- coronavirus[-c(2,4,5)]

On peut lire le code ci-dessus de la manière suivante ”je veux la data.frame coronavirus moins les colonnes
2, 4 et 5. Le résultat de cette sélection est stocké dans une variable qu’on nomme data. Si on regarde la
structure de cette nouvelle data.frame, les variables province, lat et long ont été bien éliminées :
str(data)
## 'data.frame': 150720 obs. of 4 variables:
## $ date : Date, format: "2020-01-22" "2020-01-23" ...
## $ country: chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ type : chr "confirmed" "confirmed" "confirmed" "confirmed" ...
## $ cases : int 0 0 0 0 0 0 0 0 0 0 ...

On s’intéresse à savoir le lapse de temps que parcourent les données. Pour cela on analysera la variable date
qui contient les dates des observations. Pour sélectionner une colonne d’une data.frame on utilise l’opérateur
$ suivit du nom de la colonne souhaité comme suit :
data$date

En appliquant les fonctions min et max à la colonne date, on peut avoir la date de début qui correspond à
la valeur minimale et celle de fin qui correspond à la valeur maximale.
min(data$date)

9
Master AEM

## [1] "2020-01-22"
max(data$date)
## [1] "2020-07-31"

Donc les observations de la base de données coronavirus commencent du 22 janvier 2020 (2020-01-22) au
31 juillet 2020 (2020-07-31).
On veut savoir quels sont les pays présents dans cette base. Or comme les données ont une fréquence
journalière on doit s’attendre que les noms des pays ne soient répétés autant que fois qu’il y a d’observation.
Pour cela on utilisera la fonction R unique qui permet de retourner les éléments uniques dans un vecteur.
Ainsi on sélectionne la colonne country avec l’opérateur $ et on met cette colonne à l’intérieur de la fonction
unique :
unique(data$country)

Pour connaitre la longueur de ce vecteur de nom de pays, on utilise la fonction length qui retourne la
longueur d’un vecteur :
length(unique(data$country))
## [1] 188

Donc la base de données coronavirus contient les données pour 188 pays sur une période allant du 22
janvier 2020 au 31 juillet 2020 .
Dans la suite on veut étudier uniquement les données du Maroc. Pour cela on doit sélectionner uniquement les
observations correspondant au Maroc, c’est-à-dire maintenir que les lignes de data ou la valeur de country
est égale à Morocco. Ceci peut être fait avec la fonction subet, le premier argument de la fonction est la
data.frame sur laquelle on veut travailler. Le second argument est la condition qu’on veut appliquer à la
data.frame :
subset(data,country=="Morocco")

On stocke ce résultat dans une nouvelle data.frame qu’on nomme cas Maroc :
cas_Maroc <- subset(data,country=="Morocco")

Par la suite on souhaite faire une analyse sur les cas d’infection confirmé au Maroc, donc un deuxième filtrage
de la data.frame est nécessaire. La condition qu’on appliquera dans cette situation sera au niveau de la
colonne type. On veut conserver que les lignes ou la valeur de type est égale à confirmed :
subset(cas_Maroc, type=="confirmed")

On stocke ce nouveau résultat dans une nouvelle data.frame qu’on nomme cas Maroc inf :
cas_Maroc_inf <- subset(cas_Maroc, type=="confirmed")

str(cas_Maroc_inf)
## 'data.frame': 192 obs. of 4 variables:
## $ date : Date, format: "2020-01-22" "2020-01-23" ...
## $ country: chr "Morocco" "Morocco" "Morocco" "Morocco" ...
## $ type : chr "confirmed" "confirmed" "confirmed" "confirmed" ...
## $ cases : int 0 0 0 0 0 0 0 0 0 0 ...

Comme on peut le voir cette nouvelle data.frame contient 192 observations. Traçons une représentation
graphique des cas d’infection au maroc à l’aide de la fonction plot. Cette fonction prend comme arguments
l’axe des x, ici ça serait la colonne des dates. L’axe des y, on utilisera ici la colonne cases. Les arguments
xlab et ylab permettent de donner des noms aux axes. Le dernier argument est type du graphique souhaité,

10
Master AEM

la valeur l indique qu’on veut des lignes (un argument facultatif est col pour la couleur ) :
plot(x=cas_Maroc_inf$date,
y=cas_Maroc_inf$cases,
type = "l",
xlab="Temps",
ylab="Cas confirmé",
col="red")
1000
800
Cas confirmé

600
400
200
0

févr. mars avr. mai juin juil. août

Temps

Une autre question qu’on peut se poser : comment a varié le nombre de cas confirmé au Maroc de mois en
mois. Tout d’abord on créera des variables pour stocker les données pour chaque mois, on utilisera encore
une fois la fonction subset :
cas_Maroc_Janvier <- subset(cas_Maroc_inf,
date>=as.Date("2020-01-01") & date<=as.Date("2020-01-31"))
cas_Maroc_Fevrier <- subset(cas_Maroc_inf,
date>=as.Date("2020-02-01") & date<=as.Date("2020-02-29"))
cas_Maroc_Mars <- subset(cas_Maroc_inf,
date>=as.Date("2020-03-01") & date<=as.Date("2020-03-31"))
cas_Maroc_Avril <- subset(cas_Maroc_inf,
date>=as.Date("2020-04-01") & date<=as.Date("2020-04-30"))
cas_Maroc_Mai<- subset(cas_Maroc_inf,
date>=as.Date("2020-05-01") & date<=as.Date("2020-05-31"))
cas_Maroc_Juin <- subset(cas_Maroc_inf,
date>=as.Date("2020-06-01") & date<=as.Date("2020-06-30"))
cas_Maroc_Juillet<- subset(cas_Maroc_inf,
date>=as.Date("2020-06-01") & date<=as.Date("2020-07-31"))

11
Master AEM

Ce qui change dans la fonction subset est la condition. On peut lire la condition dans la fonction subset de
la première ligne comme suit dans la data.frame sélectionne les lignes ou la valeur de date est supérieure
ou égale au 1er janvier 2020 ET est inférieur ou égale au 31 janvier 2020. La fonction as.Date permet
d’indiquer à R que la valeur entre parenthèses doit être traitée comme une date. On fait de même pour
chaque mois.
On s’intéresse au nombre de cas total par mois, ainsi on doit calculer la somme de la colonne cases pour
chaque mois. On réalise ceci avec la fonction sum, par exemple pour le mois de janvier on a 0 cas :
sum(cas_Maroc_Janvier$cases)
## [1] 0

On fait appel à la fonction cbind qui permet de combiner des vecteurs, des matrices ou data.frame par
colonnes. On créera ainsi un vecteur contenant les cas confirmés au Maroc par mois. Pour plus de lisibilité
on donne un nom pour chaque colonne :
cas_mois <- cbind(Janvier=sum(cas_Maroc_Janvier$cases),
Fevrier=sum(cas_Maroc_Fevrier$cases),
Mars=sum(cas_Maroc_Mars$cases),
Avril=sum(cas_Maroc_Avril$cases),
Mai=sum(cas_Maroc_Mai$cases),
Juin= sum(cas_Maroc_Juin$cases),
Juillet=sum(cas_Maroc_Juillet$cases))
cas_mois
## Janvier Fevrier Mars Avril Mai Juin Juillet
## [1,] 0 0 617 3806 3384 4726 16515

Un diagramme en bâton permettra d’analyser graphique l’évolution des infections au Maroc d’un mois
à l’autre. La fonction cbind permet de générer un diagramme en bâton, elle prend comme argument un
vecteur des valeurs qu’on souhaite représenter. Les arguments main col sont facultatifs, ils permettent
respectivement de donner un titre et une couleur au graphique :
barplot(cas_mois,
main="Cas par mois",
col="darkblue")

12
Master AEM

Cas par mois


15000
10000
5000
0

Janvier Fevrier Mars Avril Mai Juin Juillet

3.0.2 Analyse avec tidyverse


tidyverse est devenue le package clé pour toutes les taches d’analyse de données avec R. C’est un système
cohérent de packages pour la manipulation, l’exploration et la visualisation de données qui partagent une
philosophie de conception commune. Les packages tidyverse sont destinés à rendre le travail d’analyse plus
productifs en à travers des flux de travail qui facilitent la communication.
On reproduira l’analyse effectuée sur la base de données coronavirus mais cette fois avec tidyverse. Pour
avoir ce qui différencie ce package. On commence par charger le package avec la fonction library, on charge
de même les données coronavirus si ce n’est pas déjà fait :
library(tidyverse)
library(coronavirus)
data("coronavirus")

La fonction glimpse fonctionne comme la fonction de base de R str, elle donne une description globale des
données et des variables :
glimpse(coronavirus)
## Rows: 150,720
## Columns: 7
## $ date <date> 2020-01-22, 2020-01-23, 2020-01-24, 2020-01-25, 2020-01-2...
## $ province <chr> "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""...
## $ country <chr> "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan"...
## $ lat <dbl> 33.93911, 33.93911, 33.93911, 33.93911, 33.93911, 33.93911...
## $ long <dbl> 67.70995, 67.70995, 67.70995, 67.70995, 67.70995, 67.70995...
## $ type <chr> "confirmed", "confirmed", "confirmed", "confirmed", "confi...

13
Master AEM

## $ cases <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...

On élimine les trois colonnes qui ne nous intéressent pas province, lat et long. On stocke le résultat dans
la variable data :
data <- coronavirus%>%
select(-c(province,long, lat))

%>% est l’opérateur pipe du package, il prend le résultat de ce qui le précède et l’injecte dans la fonction
qui suit. Par exemple si on veut calculer le sinus de π en R on exécute le code suivant sin(pi). En uti-
lisant l’opérateur pipe on a une expression équivalente pi%>%sin(). Le code R contient souvent beaucoup
de parenthèses. Lorsque vous avez un code complexe, cela signifie souvent que vous devrez imbriquer ces
parenthèses ensemble. Cela rend votre code R difficile à lire et à comprendre. Ainsi cet opérateur résout cette
difficulté.
Le code précédent peut se lire comme suit dans coronavirus sélectionne toutes les colonnes sauf
province, lat et long. Le signe - indique l’élimination, s’il n’était pas présent on ne conservera que ces
trois colonnes et on éliminerait le reste. La fonction select permet, comme l’indique son nom de sélectionner
des variables/colonnes dans une base de données.
On peut convertir la data.frame en un tibble, une structure de données de tidyverse. Convertir des
données d’un type à un autre (int vers char, data.frame vers matrix,· · ·) est le principe de coercion en
R. Pour notre cas on appelle la fonction as tibble() pour réaliser cette conversion :
data <- as_tibble(data)
data
## # A tibble: 150,720 x 4
## date country type cases
## <date> <chr> <chr> <int>
## 1 2020-01-22 Afghanistan confirmed 0
## 2 2020-01-23 Afghanistan confirmed 0
## 3 2020-01-24 Afghanistan confirmed 0
## 4 2020-01-25 Afghanistan confirmed 0
## 5 2020-01-26 Afghanistan confirmed 0
## 6 2020-01-27 Afghanistan confirmed 0
## 7 2020-01-28 Afghanistan confirmed 0
## 8 2020-01-29 Afghanistan confirmed 0
## 9 2020-01-30 Afghanistan confirmed 0
## 10 2020-01-31 Afghanistan confirmed 0
## # ... with 150,710 more rows

On a plus un data.frame mais un tibble. Pour déterminer la date de début et de fin de la base on appliquera
la fonction summarise, qui permet de résumer l’information dans la base de données d’une manière efficace
et selon notre besoin. On appliquera la fonction sur data pour déterminer le min et le max de la colonne
date :
data%>%summarise(date_debut = min(date), date_fin = max(date))
## # A tibble: 1 x 2
## date_debut date_fin
## <date> <date>
## 1 2020-01-22 2020-07-31

Pour connaitre le nombre de pays dans la base de données on utilise la fonction group by. Cette fonction
permet de créer des groupes une base de données selon la valeur d’une ou plusieurs colonnes, ici on veut
grouper selon les noms des pays présents dans la colonne country. Après avoir groupé les différents pays on
appelle la fonction count qui permet de compter le nombre de répétition de chaque groupe.

14
Master AEM

data%>%group_by(country)%>%count()
## # A tibble: 188 x 2
## # Groups: country [188]
## country n
## <chr> <int>
## 1 Afghanistan 576
## 2 Albania 576
## 3 Algeria 576
## 4 Andorra 576
## 5 Angola 576
## 6 Antigua and Barbuda 576
## 7 Argentina 576
## 8 Armenia 576
## 9 Australia 4608
## 10 Austria 576
## # ... with 178 more rows

Les observations pour l’Australie ont été collectées par province, qui sont au nombre de 8 (8×576 = 4608), ce
qui explique le nombre d’observation élevé par rapport aux premiers pays de la table. Pour filtrer uniquement
les cas d’infection confirmé au Maroc, on utilise la fonction filter à laquelle on donne les conditions à
appliquer :
data_Maroc <- data%>%
filter(country=="Morocco" & type=="confirmed")
data_Maroc
## # A tibble: 192 x 4
## date country type cases
## <date> <chr> <chr> <int>
## 1 2020-01-22 Morocco confirmed 0
## 2 2020-01-23 Morocco confirmed 0
## 3 2020-01-24 Morocco confirmed 0
## 4 2020-01-25 Morocco confirmed 0
## 5 2020-01-26 Morocco confirmed 0
## 6 2020-01-27 Morocco confirmed 0
## 7 2020-01-28 Morocco confirmed 0
## 8 2020-01-29 Morocco confirmed 0
## 9 2020-01-30 Morocco confirmed 0
## 10 2020-01-31 Morocco confirmed 0
## # ... with 182 more rows

Pour tracer une représentation graphique de ces données on utilise le package ggplot2 inclus dans tidyverse.
La fonction ggplot prend en premier argument les données sur lesquelles on travaille. Ensuite aes permet
de spécifier les valeurs des axes et finalement à l’aide du signe + on ajoute geom line pour tracer une ligne
(col permet de spécifier la couleur ) :
ggplot(data=data_Maroc, aes(x=date,y=cases))+
geom_line(color="red")

La puissance de tidyverse est dans sa capacité de regrouper un appel de fonctions assez complexe d’une
manière lisible et cohérente. Ainsi en partant de data on peut regrouper les codes précédents comme suit :

data%>%
filter(country=="Morocco" & type=="confirmed")%>%
ggplot( aes(x=date,y=cases))+

15
Master AEM

geom_line(color="red")

900

600
cases

300

avr. juil.
date

Si on veut visualiser les cas d’infections confirmés dans un autre pays, par exemple la Mauritanie, on doit
juste changer la valeur sur laquelle on filtre les pays :
data%>%
filter(country=="Mauritania" & type=="confirmed")%>%
ggplot( aes(x=date,y=cases))+
geom_line(color="green")

16
Master AEM

200

150
cases

100

50

avr. juil.
date

Pour grouper les cas confirmés au Maroc on utilisera les deux fonctions group by et summarise. La fonction
format permet d’extraire le mois dans chaque date, qui est de la forme "%y-%m-%d". On appelle la fonction
group by pour grouper sur les mois qu’on a extrait et finalement avec la fonction summerise on calcule la
somme des cas confirmés pour chaque mois :
data_Maroc_mois <- data_Maroc%>%
group_by(Mois = format(date, "%m"))%>%
summarise(Total = sum(cases))
data_Maroc_mois
## # A tibble: 7 x 2
## Mois Total
## * <chr> <int>
## 1 01 0
## 2 02 0
## 3 03 617
## 4 04 3806
## 5 05 3384
## 6 06 4726
## 7 07 11789

On stocke le résultat dans la variable data Maroc mois et on donne un diagramme en bâton pour ces
données mensuelles. On ajoute la fonction geom bar pour préciser qu’on veut le diagramme en bâton de
ggplot2. L’argument fill permet d’indiquer qu’on veut une couleur pour chaque mois. L’argument stat
= "identity" indique que la hauteur de chaque bar soit égale au nombre de cas de chaque ligne :
ggplot(data = data_Maroc_mois,aes(x=Mois,y=Total,fill=Mois))+
geom_bar(stat = "identity")

De même on peut aussi avoir cette représentation en bâton en partant de data avec une seule ligne de
code :

17
Master AEM

data%>%
filter(country=="Morocco" & type=="confirmed")%>%
group_by(Mois = format(date, "%m"))%>%
summarise(Total = sum(cases))%>%
ggplot(aes(x=Mois,y=Total,fill=Mois))+
geom_bar(stat = "identity")

12000

9000

Mois
01
02
03
Total

6000
04
05
06
07

3000

01 02 03 04 05 06 07
Mois

18
Master AEM

4 Travail à faire
Vous pouvez traiter les questions suivantes avec les notions vues dans ce TP ou toutes autres méthodes sur
R.
1. Dans la base de données coronavirus, donner les cas d’infections confirmés pour tous les pays durant les
mois de janvier, février et mars.
2. Donner une représentation graphique de cette évolution de cas d’infections confirmés pour les dix premiers
pays de la liste.
3. Dans la base de données coronavirus, donner les cas de décès totaux pour tous les pays.
4. Donner une représentation graphique de cette évolution pour les dix premiers pays de la liste.
5. Filtrer la base de données coronavirus pour conserver les pays suivants : Chine, Etats-unis, Mexique,
Russie, Maroc, Tunisie, Cameroun et l’Egypte.
(a) Conservez-les données de chaque pays dans une variable (le nom du pays par exemple).
(b) Pour chaque pays conservez que les données de cas d’infection confirmés, sur la période allant de mars
jusqu’au mois de juillet.
(c) Pour chaque pays tracer une représentation graphique pour montrer l’évolution des cas d’infection
confirmés.
(d) Intrepréter les résultats pour chaque pays. Existent-ils des baisses dans le nombre d’infections ? Pour
quelle pays ? Quel sont les raisons de ces baisses ?

19

Vous aimerez peut-être aussi