From 82fef8724c90b7d6e0d034ac62f3bef28394f2b6 Mon Sep 17 00:00:00 2001 From: 274a20f162e271e8246667efe0c200af <274a20f162e271e8246667efe0c200af@app-learninglab.inria.fr> Date: Mon, 1 Mar 2021 08:53:39 +0000 Subject: [PATCH] Update exercice_fr.Rmd --- module3/exo3/exercice_fr.Rmd | 354 +++++++++++++++++++++++++++++++++-- 1 file changed, 338 insertions(+), 16 deletions(-) diff --git a/module3/exo3/exercice_fr.Rmd b/module3/exo3/exercice_fr.Rmd index 7eece5e..d0a4c50 100644 --- a/module3/exo3/exercice_fr.Rmd +++ b/module3/exo3/exercice_fr.Rmd @@ -1,33 +1,355 @@ --- -title: "Votre titre" -author: "Votre nom" -date: "La date du jour" -output: html_document +title: "Devoir évalué par les pairs" +author: "Tiffany" +date: "25/02/2021" +output: + pdf_document : + keep_tex: yes + fig_caption: yes + highlight: tango + geometry : margin=1in + fontsize : 11pt --- - ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` -## Quelques explications +library(parsedate) version 1.2.0 + +library(dplyr) version 1.0.4 + +library(tidyverse) version 1.3.0 + + +## Quel est l'objet de l'étude ? + +Autour de la SARS-CoV-2 + +Présentation des données ++----------------+----------------+--------+--------+---------+---------+--------+ +| Province.State | Country.Region | Lat | Long | X1.1.20 | X1.2.20 | etc | ++----------------+----------------+--------+--------+---------+---------+--------+ +| | | | | | | | ++----------------+----------------+--------+--------+---------+---------+--------+ + +Variables : + +- Province.State : provinces des différents pays (DOM/TOM par exemple pour la France) + +- Country.Region : pays dans lesquels ont été effectuées les mesures + +- Lat : latitude du lieu en question + +- Long : longitude du lieu en question + +- Colonnes X1.1.20 (etc.) : dates (01/01/2020 ici soit Xmois.jour.année) + +Pour chaque date, nous avons le nombre de cas de covid-19 par pays. + +But de l'étude : voir le nombre de cas covid au cours du temps pour les pays suivants : la Belgique (Belgium), la Chine - toutes les provinces sauf Hong-Kong (China), Hong Kong (China, Hong-Kong), la France métropolitaine (France), l'Allemagne (Germany), l'Iran (Iran), l'Italie (Italy), le Japon (Japan), la Corée du Sud (Korea, South), la Hollande sans les colonies (Netherlands), le Portugal (Portugal), l'Espagne (Spain), le Royaume-Unis sans les colonies (United Kingdom), les États-Unis (US). + +\newpage +## Obtenir les données + +### Lien de téléchargement des données sur la Covid-19 + +```{r} +data_url = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/ +csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv" +``` + +### Copie locale des données sur la Covid-19 + +```{r} +data_file = "cas_covid.csv" + +if (!file.exists(data_file)){ + download.file(data_url, data_file, method = "auto") +} +``` + +### Chargement du fichier .csv covid-19 : + +```{r} +data_i = read.csv("cas_covid.csv", na.strings = "") +``` + +\newpage + +## Inspection des données + +Regardons ce que nous avons obtenu: + +```{r, results='hide'} +head(data_i) +tail(data_i) +``` -Ceci est un document R markdown que vous pouvez aisément exporter au format HTML, PDF, et MS Word. Pour plus de détails sur R Markdown consultez . +Y a-t-il des points manquants dans nos données ? + +```{r, results='hide'} +na_records = apply(data_i, 1, function (x) any(is.na(x))) +data_i[na_records,] +``` + +Quand on regarde les données, on peut voir que quand la province n'est pas spécifiée, R ne prend pas en compte la valeur manquante comme NA. Lors du chargement du fichier, nous spécifions donc à R que les valeurs "" sont en fait des NA par l'option `na.string = ""`. + +R nous a également indiqué le manque de valeurs pour les variables **lat** et **long** à la ligne [53]. Ce manque de valeur n'est pas important pour le reste de l'étude. Nous pouvons donc garder cette ligne. + +On vérifie la classe de nos différentes variables : + +```{r, results='hide'} +str(data_i) +``` + +On classe les données par pays : + +```{r} +data_i = data_i[order(data_i$Country.Region),] +``` + +On vérifie : + +```{r, results='hide'} +head(data_i) +``` + +\newpage + +## Traitement des données + +Pour l'étude, tous les pays vont être traités sans leurs colonies. On veut tout de même avoir les valeurs pour Hong Kong. Pour facilité le code, nous allons remplacer le pays (chine) à la ligne de Hong Kong par Hong Kong. + +Il faut tout d'abord trouver la ligne ou les lignes correspondant à Hong Kong + +```{r} +colonne <- c(1,2) +subset(data_i, Province.State == "Hong Kong")[colonne] +# [colonne] pour afficher les colonnes qui nous intéresse. +``` + +Il s'agit de la ligne [71]. + +On remplace alors "Chine" par "Hong Kong" dans la variable pays (colonne 2) et on vérifie. + +```{r} +data <- data_i +data[71,2] = "Hong Kong" +data[71,][colonne] +``` + +On veut traiter la France, le Royaume unis et la Hollande sans leurs colonies. Pour cela, nous recherchons dans le tableau les lignes qui nous intéressent et on crée de petit tableau par pays. + +France sans colonies : + +```{r} +France <- subset(data, Country.Region == "France" & is.na(Province.State)) +``` + +Royaume Unis sans colonies : + +```{r} +RU <- subset(data, Country.Region == "United Kingdom" & is.na(Province.State)) +``` -Lorsque vous cliquerez sur le bouton **Knit** ce document sera compilé afin de ré-exécuter le code R et d'inclure les résultats dans un document final. Comme nous vous l'avons montré dans la vidéo, on inclue du code R de la façon suivante: +Hollande sans colonies : -```{r cars} -summary(cars) +```{r} +Netherlands <- subset(data, Country.Region == "Netherlands" & is.na(Province.State)) ``` -Et on peut aussi aisément inclure des figures. Par exemple: +Autres pays : -```{r pressure, echo=FALSE} -plot(pressure) +```{r} +Belgium <- subset(data, Country.Region == "Belgium") +China <- subset(data, Country.Region == "China") +Hong_Kong <- subset(data, Country.Region == "Hong Kong") +Germany <-subset(data, Country.Region == "Germany") +Iran <- subset(data, Country.Region == "Iran") +Italy <- subset(data, Country.Region == "Italy") +Japan <-subset(data, Country.Region == "Japan") +KS <- subset(data, Country.Region == "Korea, South") +Portugal <-subset(data, Country.Region == "Portugal") +Spain <- subset(data, Country.Region == "Spain") +US <- subset(data, Country.Region == "US") ``` -Vous remarquerez le paramètre `echo = FALSE` qui indique que le code ne doit pas apparaître dans la version finale du document. Nous vous recommandons dans le cadre de ce MOOC de ne pas utiliser ce paramètre car l'objectif est que vos analyses de données soient parfaitement transparentes pour être reproductibles. +On construit un nouveau tableau avec la totalité des pays qui nous intéressent : -Comme les résultats ne sont pas stockés dans les fichiers Rmd, pour faciliter la relecture de vos analyses par d'autres personnes, vous aurez donc intérêt à générer un HTML ou un PDF et à le commiter. +```{r, results='hide'} +pays_test <- rbind(Belgium, China, Hong_Kong, France, Germany, Iran, Italy, Japan, KS, + Netherlands, Portugal, Spain, RU, US) +head(pays_test) +``` + +Certaines de nos colonnes sont inutiles maintenant : Province.State, lat et long. On les enlève (ça pollue): + +```{r, results='hide', message=F, warning=F} +library(dplyr) +variable_rm <- c("Province.State", "Lat", "Long") +pays_test <- pays_test %>% select(-variable_rm) +head(pays_test) +``` + +On regroupe les données de cas par pays : + +```{r, message=F, warning=F} +library(dplyr) +cas_pays <- pays_test %>% group_by(Country.Region) %>% summarise_if(is.numeric, sum) +``` + +On vérifie que nous avons bien les 14 pays demandés : + +```{r} +nrow(cas_pays) +``` + +\newpage + +## Réarranger le tableau + +Il existe trois règles pour avoir des données bien rangées qui peuvent être traitées : + + - chaque ligne doit correspondre à une observation + - chaque colonne doit correspondre à une variable + - chaque valeur est présente dans une unique case de la table + +Le troisième point a été traité avec la fonction `group_by` de la librairy *dplyr* mais pour les deux premiers points, on peut dire que notre tableau est totalement à l'envers ! + +Let's go faire du tidyverse ! Voici le lien pour les curieux : [lien](https://juba.github.io/tidyverse/index.html) + +ça date un peu mais c'est plutôt bien expliqué ! + +```{r, message=F, warning=F} +library(tidyverse) +test <- cas_pays %>% pivot_longer(-Country.Region) +colnames(test)<- c("Country.Region", "Date", "Cas") #on rename les colonnes +head(test) +``` + +\newpage + +## Format des dates + +Pour modifier la date, on utilise la fonction `as.Date` et on spécifie le format de la date dans nos données. Comme l'année est indiqué 0020 (pour 2020 par exemple), on change le premier caractère par un 2 pour donner 2020. La fonction `substring()` ne reconnait que la classe *character*. On modifie donc la classe puis on la rechange en *date*. + +```{r} +# on spécifie à la fonction as.date() le format de la date +test$date_modif = as.Date(test$Date, format="X%m.%d.%Y") +test$date_modif <- as.character(test$date_modif) +substring(test$date_modif, 1) <- "2" +test$date_modif <- as.Date(test$date_modif) +``` + +On vérifie si les dates sont correctes en appelant le tableau : + +```{r} +head(test) +tail(test) +class(test$date_modif) +``` + +Vérification visuelle : + +```{r, fig.height=5} +plot(test$Cas~test$date_modif, col = "mistyrose", xlab="Date", ylab="") +``` + +En fonction de l'echelle on peut voir si ça a fonctionné. + +\newpage + +## Représentations graphiques + +### Nombre de cas par jour pour chaque pays (échelle linéaire) + +```{r, fig.align='left'} +library(ggplot2) + +ggplot(test,aes(x=date_modif, y=Cas, color = Country.Region))+ + geom_line() + + labs(x = "", y = "Nombre de cas")+ + facet_wrap(~Country.Region) + + theme_bw()+ + theme(axis.text.x = element_text(size =10, angle = 90), + legend.position = "none", + strip.background = element_rect(color = "black", fill = "white", linetype = "solid")) +``` + +\newpage + +On peut même faire un histogramme colorisé en fonction des pays pour pouvoir visualiser ce que représente les proportions du nombre de cas aux différentes dates : + +```{r, fig.align='left'} +library(ggplot2) +ggplot(test, aes(x=date_modif, y=Cas, fill=Country.Region), position = "fill")+ + labs(fill = "Pays sélectionnés")+ + geom_bar(stat = "identity") + + labs(x = "", y = "Nombre de cas")+ + theme_bw() + +``` + +\newpage + +### Nombre de cas par jour pour chaque pays (échelle logarithmique) + +```{r, message=F, warning=F,fig.align='left'} +library(ggplot2) +ggplot(test,aes(x=date_modif, y=Cas, color=Country.Region))+ + geom_line() + + scale_y_continuous(trans = "log10")+ + labs(x = "", y = "Nombre de cas (log10)")+ + facet_wrap(~Country.Region) + + theme_bw()+ + theme(axis.text.x = element_text(size =10, angle = 90), + legend.position = "none", + strip.background = element_rect(color = "black", fill = "white", linetype = "solid")) +``` + +\newpage + +### Mondialement, ça donne quoi ? + +On crée un nouveau tableau à partir du tableau initiale *data_i* et on garde seulement les colonnes qui nous intéressent : + +```{r, results='hide'} +library(dplyr) +variable_rm <- c("Province.State", "Lat", "Long") +data_mondiale <- data_i %>% select(-variable_rm) +head(data_mondiale) +``` + +On réarrange le tableau pour avoir une valeur par ligne plutôt que par colonne : + +```{r, results='hide'} +library(tidyverse) +data_mondiale <- data_mondiale %>% pivot_longer(-Country.Region) +colnames(data_mondiale)<- c( "Country.Region", "Date", "Cas") #on rename les colonnes +head(data_mondiale) +``` + +On modifie le format des dates tout en gardant la colonne initiale pour vérifier : + +Pour modifier la date, on utilise la fonction `as.Date` et on spécifie le format de la date dans nos données. Comme l'année est indiqué 0020 (pour 2020 par exemple), on change le premier caractère par un 2 pour donner 2020. La fonction `substring()` ne reconnait que la classe *character*. On modifie donc la classe puis on la rechange en *date*. + +```{r, results='hide'} +# on spécifie à la fonction as.date() le format de la date +data_mondiale$date_modif = as.Date(data_mondiale$Date, format="X%m.%d.%Y") +data_mondiale$date_modif <- as.character(data_mondiale$date_modif) +substring(data_mondiale$date_modif, 1) <- "2" +data_mondiale$date_modif <- as.Date(data_mondiale$date_modif) +``` + +Finalement, on fait un graphique coloré en fonction du pays! On a trop de pays, on peut rien en tirer mais c'est joli ! + +```{r,fig.align='left'} +library(ggplot2) +ggplot(data_mondiale, aes(x=date_modif, y=Cas, fill=Country.Region), position = "fill")+ + geom_bar(stat = "identity") + + labs(x = "", y = "Nombre mondial de cas")+ + theme_bw()+ + theme(legend.position = 'none') +``` -Maintenant, à vous de jouer! Vous pouvez effacer toutes ces informations et les remplacer par votre document computationnel. -- 2.18.1