Commit 171ea81e authored by Doevi Mawuena Biaou's avatar Doevi Mawuena Biaou

Devoir corrigé par les pairs, Doévi BIAOU

parent e391755a
---
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
```
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment