--- 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) ``` 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 | 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) ``` 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)) ``` Hollande sans colonies : ```{r} Netherlands <- subset(data, Country.Region == "Netherlands" & is.na(Province.State)) ``` Autres pays : ```{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") ``` On construit un nouveau tableau avec la totalité des pays qui nous intéressent : ```{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') ```