diff --git a/module3/exo3/doevi_exo3.Rmd b/module3/exo3/doevi_exo3.Rmd new file mode 100644 index 0000000000000000000000000000000000000000..5e66f8118d3922b6680f7151f189762f5f85009f --- /dev/null +++ b/module3/exo3/doevi_exo3.Rmd @@ -0,0 +1,173 @@ +--- +title: "Autour du SARS-CoV-2 (Covid-19)" +author: "Doévi BIAOU" +date: "`r Sys.Date()`" +output: + pdf_document: + toc: yes + toc_depth: 3 + number_sections: yes + fig_caption: yes +--- + + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + +# Présentation +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. + +# Exercice proprement dit + +## Méthodes +Les données utilisées sont celles fournies par le Johns Hopkins University Center for Systems Science and Engineering (JHU CSSE) et accessibles sous ce [lien](https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv). + +Les données ainsi recueillies ont été épurées puis analysées avec `r R.Version()$version.string` s'exécutant sous `r R.Version()$os`. Les graphiques ont été générés avec le package {ggplot2}. + +## Import des données + +```{r data_import} +# Enregistrement du lien de la base dans l'objet "link" +link <- "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv" + +# Import du contenu du fichier csv dans une base de données : +df <- read.csv(file = link, header = TRUE, sep = ",") +df <- as.data.frame(df) # Transformation en base de données +``` + + +## Manipulation des données +Nous utiliserons essentiellement le packet {dplyr} de {Tidyverse} à cet effet. + +En premier un aperçu de la base. + +```{r} +head(df[1:8]) # Affiche les dix premières lignes des colonnes 1 à 8. +``` + +la manipulation va consister à : +- filtrer la base initiale pour ne retenir que les lignes concernant les pays qui nous intéressent +- pivoter de sorte à avoir trois colonnes : Pays ou région, date et incidence journalière. +- calculer les incidences nationales journalières (certains pays comme la Chine ont des données provenant de différentes provinces) +- mettre en forme les dates sous format iso : les dates étant sous format "Xmm.jj.aa" + +```{r data_wrangling, include=FALSE} +# Outils +library(tidyverse) + +# Filtrer la base +dff <- filter(df, Country.Region == "Belgium"| + Country.Region == "China" | + Country.Region == "China, Hong-Kong" | + Country.Region == "France" | + Country.Region == "Germany" | + Country.Region == "Iran" | + Country.Region == "Italy" | + Country.Region == "Japan" | + Country.Region == "Korea, South" | + Country.Region == "Netherlands" | + Country.Region == "Portugal" | + Country.Region == "Spain" | + Country.Region == "United Kingdom" | + Country.Region == "US") + +# Pivoter la base +dff_p <- dff %>% + select(Country.Region, starts_with("X")) %>% # Sélection des colonnes utiles + pivot_longer(cols = !Country.Region, + names_to = "Dates", + values_to = "Incidence") + +# Nettoyage - mise en forme de la colonne "Dates" +dff_p <- dff_p %>% + mutate(Dates = substr(Dates, start = 2, stop = 100000L), # élimine le "X" + Dates = as.Date(Dates, "%m.%d.%y") + ) + +# Calcul des incidences nationales +dff_p <- dff_p %>% + arrange(Dates) %>% # Trier les lignes selon la date + group_by(Dates, Country.Region) %>% + summarise(Incidence = sum(Incidence)) + +# Aperçu de la base +head(dff_p) +``` + +## Représentation graphique proprement dite + +Le graphique sera réalisé avec le paquet {ggplot2} déjà chargé au sein du {Tidyverse}. + +Un aperçu du graphique de la Belgique. + +```{r fig.cap="Nombre de cas confirmés, Belgique"} +dff_p %>% + filter(Country.Region == "Belgium") %>% + ggplot(aes(x = Dates, y = Incidence)) + + geom_line() + + theme_bw() + scale_y_continuous(labels = scales::label_number()) + + labs(title = "Nombre de cas confirmés, Belgique") +``` + +L'on se rend compte que les incidences présentées dans la base de données sont des incidences cumulées. + +Nous pouvons recalculer les incidences quotidiennes. + +```{r} +# Calcul des incidences journalières +dff_p <- dff_p %>% + group_by(Country.Region) %>% + mutate(Incidence_journaliere = Incidence - lag(Incidence)) + +# Aperçu de la base +tail(dff_p) +``` + +## Graphique des incidences journalières + +```{r} +dff_p %>% + ggplot(aes(x = Dates, y = Incidence_journaliere, color = Country.Region)) + + geom_line() +``` + +Quelques cas d'incidences négatives pouvant correspondre en réalité à des rectifications de statistiques nationales. Nous les définirons comme données manquantes. + +```{r} +# Aperçu, dates problématiques : +subset(dff_p, Incidence_journaliere < 0, c(Dates, Country.Region, Incidence_journaliere)) + +# Les définir comme données manquantes +dff_p <- dff_p %>% + mutate(Incidence_journaliere_2 = ifelse(Incidence_journaliere < 0, NA, Incidence_journaliere)) + +``` + +### Le nouveau graphe, tous les pays + +```{r message=FALSE, warning=FALSE} +dff_p %>% + ggplot(aes(x = Dates, y = Incidence_journaliere_2, color = Country.Region)) + + geom_line() + scale_color_viridis_d() + + scale_y_continuous(labels = scales::label_number()) + + theme_bw() + + labs(x = "", y = "Incidences journalières", color = "Pays", + title = "Incidences journalières de covid 19") + +``` + +### Incidence journalière : Pays par pays, sur le même graphique + +```{r fig.width=9, fig.height=9, fig.cap="Incidence journalière, pays par pays", warning=FALSE} +dff_p %>% + ggplot(aes(x = Dates, y = Incidence_journaliere_2, color = Country.Region)) + + geom_line() + scale_color_viridis_d() + + scale_y_continuous(labels = scales::label_number()) + + facet_wrap(~Country.Region, ncol = 3, scales = "free_y") + + theme_bw() + + labs(x = "", y = "Incidences journalières", color = "Pays", + title = "Incidences journalières de covid 19") + + theme(legend.position = "none") # Pour supprimer la légende +``` + diff --git a/module3/exo3/doevi_exo3.pdf b/module3/exo3/doevi_exo3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..db9cee450a340da1f8ee6c2486502d6298822d9c Binary files /dev/null and b/module3/exo3/doevi_exo3.pdf differ