From 6247d161132b9957aa3f1e57d1fd18edb75c4a06 Mon Sep 17 00:00:00 2001 From: 1d088a6d40ba36d8ca02f1d09449c98c <1d088a6d40ba36d8ca02f1d09449c98c@app-learninglab.inria.fr> Date: Thu, 27 Aug 2020 15:24:04 +0000 Subject: [PATCH] Upload ex3 - Sujet 7 --- module3/exo3/Covid19.Rmd | 242 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 242 insertions(+) create mode 100644 module3/exo3/Covid19.Rmd diff --git a/module3/exo3/Covid19.Rmd b/module3/exo3/Covid19.Rmd new file mode 100644 index 0000000..d010ceb --- /dev/null +++ b/module3/exo3/Covid19.Rmd @@ -0,0 +1,242 @@ +--- +title: "Autour du SARS-CoV-2 (Covid-19)" +author: "Elia Pérennès" +output: + html_notebook : + toc: true + toc_depth: 2 + number_sections: false + theme: journal + highlight: tango +documentclass: article +classoption: a4paper +header-includes: +- \usepackage[french]{babel} +- \usepackage[upright]{fourier} +- \hypersetup{colorlinks=true,pagebackref=true} +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE, fig.align="center") +``` + +Le but est ici de reproduire des graphes semblables à ceux du [South China Morning Post (SCMP)](https://www.scmp.com/), sur la page [The Coronavirus Pandemic](https://www.scmp.com/coronavirus?src=homepage_covid_widget) et qui montrent pour différents pays le nombre cumulé (c'est-à-dire le nombre total de cas depuis le début de l'épidémie) de personnes atteintes de la maladie à coronavirus 2019. Les données que nous utiliserons sont compilées par le [*Johns Hopkins University Center for Systems Science and Engineering (JHU CSSE)*](https://systems.jhu.edu/). + +Tout d'abord, on nettoie l'espace de travail sur R et on charge les librairies nécessaires à l'exécution de notre code : +```{r} +rm(list = ls()) +library(dplyr) +library(ggplot2) +library(gganimate) +library(reshape2) +``` + + +# Etude du nombre de cas + +## Préparation des données + +Nous téléchargeons les données recensant le nombre de cas de Covid-19 disponibles sur le [Github du JHU CSSE](https://github.com/CSSEGISandData/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" +data = read.csv(data_url, stringsAsFactors=FALSE) +``` + + +Regardons nos données : +```{r} +data +``` + +On retraite dans un premier temps les noms des colonnes de dates en enlevant le *X* devant chaque nom de colonne : +```{r} +names(data)[5:ncol(data)] = substring(names(data)[5:ncol(data)],2) +names(data)[1:10] +``` + +On sépare les données sur Hong-Kong de celles du reste de la Chine : + +```{r} +data[data$Province.State == "Hong Kong","Country.Region"] = "Hong Kong" +``` + + +On filtre la base de données pour ne garder que 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) ainsi que les États-Unis (US). + +```{r} +data = data %>% filter(Country.Region %in% c("Belgium","China", + "Hong Kong","France","Germany","Iran","Italy", + "Japan","Korea, South","Netherlands","Portugal","Spain", + "United Kingdom", "US") ) + +``` + +On enlève les DOM-TOM, ainsi que les colonies du Royaume-Uni et des Pays-Bas : +```{r} +data = data %>% filter(Country.Region == "China" | Country.Region == "Hong Kong" | (Country.Region != "China" & Province.State == "")) +``` + +On supprime les colonnes inutiles pour la suite de l'analyse : +```{r} +data = data %>% select(-c('Province.State', 'Lat', 'Long')) +``` + +On regarde s'il y a des valeurs manquantes dans chaque colonne : +```{r} +sum(colSums(is.na(data))) +``` +Aucune valeur manquante à signaler. + +On regroupe les différentes provinces de Chine au sein d'une seule observation : +```{r} +data = data %>% group_by(Country.Region) %>% summarise_all(sum) +``` + +On transpose la base de données pour avoir les dates en lignes et les noms de pays en colonnes, puis on retraite les noms des lignes pour qu'ils soient au format date : +```{r} +data = as.data.frame(data) # pour éviter que le df soit au format tibble +rownames(data) = data$Country.Region +data$Country.Region = NULL +tdata = as.data.frame(t(data)) +tdata$Date = as.Date(rownames(tdata), format = "%m.%d.%y") +``` + +On visualise le **rendu final de nos données** : +```{r} +rownames(tdata) = c() +tdata = tdata %>% + select(Date, everything()) # On met la colonne de Date en première position +tdata +``` + + +## Visualisation des données + +Avant de réaliser nos graphiques, on change le format de la base de données pour le passer de "Wide" à "Long": +```{r} +meltdf = melt(tdata, id = "Date") +meltdf +``` + +Puis on trace un graphique animé représentant la série temporelle du nombre cumulé de cas de Covid-19 pour les différents pays de notre base de données : +```{r, results = "hide"} +ylab = c(0,1,2,3,4,5,6) +p = ggplot(meltdf,aes(x=Date,y=value,colour=variable,group=variable)) + geom_line(size = 1) + scale_x_date(date_breaks = "1 month", date_labels = "%b-%y") + labs(y="Nombre de cas en cumulé", x = "Mois") + scale_y_continuous(labels = paste0(ylab, "M"), breaks = 10^6 * ylab) + + labs(color='Pays') + transition_reveal(Date) + ggtitle("Evolution du nombre de cas de Covid-19 par pays") +animate(p, duration = 8, fps = 20, width = 800, height = 500, renderer = gifski_renderer()) +anim_save('output.gif') +``` + +