--- title: "Autour du SARS-CoV-2 (Covid-19)" author: "Valerie C" date: "22 juillet 2020" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` ```{r libraries, echo=FALSE, warning=FALSE, message=FALSE} library(data.table) # extension to data.frame format, optimized for huge datasets library(ggplot2) # for graphics library(plotly) ``` ## Récupération des données Le fichier est téléchargé à partir de l'url [https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv](https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv) puis lu via la fonction fread pour avoir un objet de type data.table afin de faire facilement des graphiques avec ggplot2. Le nom des colonnes est vérifié pour remplacer les caractères spéciaux par des ".". ```{r data_dwld} url <- "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv" destfile <- "./time_series_covid19_confirmed_global.csv" download.file(url, destfile) covid_data <- fread(destfile, sep = ",", h = T, check.names=FALSE) setnames(covid_data, "Country/Region", "Country.Region") setnames(covid_data, "Province/State", "Province.State") ``` ## Pré-traitement des données ### Réannotation des pays pour une meilleure extraction des données On commence par réannoter les pays pour mieux extraire ceux d'intérêts : - la province de Hong Kong prend pour nom de pays China, Hong-Kong - la france hors DOM-TOM est renommée France Metropolitaine - les colonies des pays bas sont renommées Netherlands, colonies ```{r modify_country} ## change China to China, Hong Kong for Hong Kong covid_data[covid_data$Country.Region == "China" & covid_data$Province.State == "Hong Kong", ]$Country.Region <- "China, Hong-Kong" ## change France into France Metropolitaine covid_data[covid_data$Country.Region == "France" & covid_data$Province.State == "", ]$Country.Region <- "France Metropolitaine" ## Filter Netherlands colonies covid_data[covid_data$Country.Region == "Netherlands" & covid_data$Province.State != "", ]$Country.Region <- "Netherlands, colonies" ## Filter UK colonies covid_data[covid_data$Country.Region == "United Kingdom" & covid_data$Province.State != "", ]$Country.Region <- "United Kingdom, colonies" ``` ### Creation d'un sous jeu de données pour analyse des pays d'intérêts Création d'un sous jeu de données avec les pays d'intérêts. ```{r select_country} ## Filter only countries of interest covid.subset <- filter(covid_data, Country.Region %in% c("Belgium","China","China, Hong-Kong", "France","Germany","Iran","Italy", "Japan","Korea, South","Netherlands","Portugal","Spain", "United Kingdom", "US")) ``` ### transformation de la table pour faire les graphiques Ce sera plus facile et rapide pour l'utilisation de ggplot2 d'avoir tous les comptages regroupés dans une colonne par date. L'idée est donc d'avoir une colonne "Date" et les comptages dans une autre colonne "Case_number". Pour cela nous utilisons fonction melt. ```{r table_melt} covid.subset <- melt(covid.subset , id.vars = c("Province.State", "Country.Region", "Lat", "Long"), variable.name = "Date", value.name = "Case_number") covid.subset$Date <- as.Date(covid.subset$Date, format = "%m/%d/%y") covid.subset$Date <- as.factor(covid.subset$Date) covid.subset$Country.Region <- as.factor(covid.subset$Country.Region) ``` ### Fusion des lignes pour un même pays Afin de n'avoir qu'une valeur par pays, nous fusionnons les lignes ```{r sum_cases} covid.byCountry <- covid.subset[, list(Case_number=sum(Case_number)),by=c("Country.Region","Date")] ``` ## Visualisation des données Représentation du nombre de cas cumulés par jour par pays. ```{r plot, echo=FALSE, warning=FALSE, fig.height=12, fig.width=10} p <- ggplot(covid.byCountry, aes(x = as.Date(Date), y = Case_number, group = Country.Region)) + geom_line(aes(color = Country.Region), size=1) + scale_color_manual(values = c("#00008B","#33a02c","#e31a1c","#8470FF","#FF7F24","#7A378B","#00688B","#FFF68F","#FF82AB","#5C5C5C","#87CEEB","#D9D9D9","#8B5A00","#9ACD32","#8EE5EE","#20B2AA","#FFF0F5","#FFFF00","#FFFFFF")) + scale_x_date(date_breaks = 'week') + theme_minimal() + theme(plot.title = element_text(hjust = 0.5)) + theme(axis.text.x = element_text(angle = 90, hjust = 1))+ ggtitle("Number of Covid Cases by Country") + xlab("Date") + ylab("Number of cases") + labs(color = "Country") #p ggplotly(p) ``` Reproduction du graphique en log10 : ```{r plot_log, echo=FALSE, warning=FALSE, fig.height=12, fig.width=10} p <- ggplot(covid.byCountry, aes(x = as.Date(Date), y = Case_number, group = Country.Region)) + geom_line(aes(color = Country.Region), size = 1) + scale_color_manual(values = c("#00008B","#33a02c","#e31a1c","#8470FF","#FF7F24","#7A378B","#00688B","#FFF68F","#FF82AB","#5C5C5C","#87CEEB","#D9D9D9","#8B5A00","#9ACD32","#8EE5EE","#20B2AA","#FFF0F5","#FFFF00","#FFFFFF")) + scale_x_date(date_breaks = 'week') + scale_y_log10() + theme_minimal() + theme(plot.title = element_text(hjust = 0.5)) + theme(axis.text.x = element_text(angle = 90, hjust = 1))+ ggtitle("Number of Covid Cases by Country") + xlab("Date") + ylab("Number of cases (log10)") + labs(color = "Country") #p ggplotly(p) ```