Upload New File

parent 8d2c08fd
---
title: "Autour du SARS-CoV-2"
author: "Nathan Drogue"
date: '2024-08-22'
output: pdf_document
urlcolor: blue
header-includes:
- |
```{=latex}
\usepackage{fvextra}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{
showspaces = false,
showtabs = false,
breaklines,
commandchars=\\\{\}
}
```
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, out.width="100%", message=FALSE)
```
# Sujet
Le but est ici de reproduire des graphes semblables à ceux du South China Morning Post (SCMP), sur la page The Coronavirus Pandemic 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.
# Plateforme utilisée pour l'étude
- Version R : 4.2.2
- OS : Windows 10 x64 (build 19045)
- Packages :
- dplyr : 1.1.4
- tidyr : 1.2.1
- ggplot2 : 3.5.1
- randomcoloR : 1.1.0.1
- scales : 1.3.0
- data.table : 1.14.6
Commençons par charger l'ensemble des packages que nous utiliserons par la suite.
```{r packages, warning=FALSE, results='hide'}
library(dplyr)
library(tidyr)
library(ggplot2)
library(randomcoloR)
library(scales)
library(data.table)
```
# Etude de l'évolution du nombre de cas de Covid 19 entre fév.2020 et fév.2023
## Importation des données
Les données que nous utiliserons dans un premier temps sont compilées par le [Johns Hopkins University Center for Systems Science and Engineering (JHU CSSE)](https://systems.jhu.edu/) et sont mises à disposition sur GitHub.
```{r inputsInc, warning=FALSE}
if(!file.exists("./time_series_covid19_confirmed_global.csv")){
download.file("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv", "./time_series_covid19_confirmed_global.csv")
}
```
## Exploration et mise en forme des données
Pour commencer, récupérons le fichier de données et vérifions déjà que les types de colonnes nous semblent correctes et que les données sont intègres (pas de NA présents).
```{r inspectInc, results='hide'}
# Importation
covid_raw <- read.csv("./time_series_covid19_confirmed_global.csv", encoding = "UTF-8")
# Type de colonnes
col_types <- unlist(lapply(covid_raw, class))
names(col_types) <- colnames(covid_raw)
print(col_types)
# Lignes contenant des NAs
covid_raw[apply(covid_raw, 1, function(x) any(is.na(x))),]
```
Les types de colonnes (character, numeric, integer) permettent de dire que l'importation s'est à priori bien déroulée. Il existe deux lignes qui contiennent des NAs, mais cela concerne les coordonnées géographiques, ce qui ne posera pas de problème pour notre étude.
Pour faciliter la manipulation des données, nous allons maintenant passer ces dernières en format long, c'est-à-dire avec l'ensemble des incidences dans une seule colonne, ainsi que convertir les dates dans un format reconnu par R.
```{r transformInc, warning = FALSE}
covid_raw_long <- covid_raw %>%
tidyr::pivot_longer(cols = 5:ncol(covid_raw), names_to = "Date", values_to = "Incidence") %>%
dplyr::mutate(Date = as.Date.character(gsub("X", "", Date), format = "%m.%d.%y")) %>%
dplyr::arrange(Date)
head(covid_raw_long)
```
## Visualisation de l'évolution du nombre de cas par pays
Calculons et traçons maintenant l'évolution du nombre de cas cumulés au cours du temps pour certains pays. Commençons par sélectionner les pays qui nous intéressent, puis calculons leurs cumuls sur la période pour laquelle nous disposons de données. Nous veillons en particulier à sommer séparément Hong Kong du reste de la Chine, comme spécifié dans la consigne.
```{r cumCountryInc, warning=FALSE}
covid_byCountry <- covid_raw_long %>%
dplyr::filter(Province.State == "" | (Country.Region == "China" & Province.State != "")) %>%
dplyr::filter(Country.Region %in% c("Belgium", "China", "France", "Germany", "Iran", "Italy", "Japan", "Korea, South", "Netherlands", "Portugal", "Spain", "United Kingdom", "US")) %>% # Sélection de certains pays
dplyr::mutate(Location = dplyr::case_when(Country.Region == "China" & Province.State != "Hong Kong" ~ "China",
Country.Region == "China" & Province.State == "Hong Kong" ~ "China, Hong Kong",
TRUE ~ Country.Region)) %>% # Distinction de la Chine et de Hong Kong
dplyr::group_by(Location, Date) %>%
dplyr::summarise(Incidence = sum(Incidence, na.rm = T),
Date = unique(Date)) %>%
dplyr::ungroup()
head(covid_byCountry)
```
Calculer le nombre de cas cumulés au total à la dernière date disponible nous sera également utile lors de la visualisation.
```{r totalCountryInc}
total_byCountry <- covid_byCountry %>% # Récupération des totaux pour ordonner la légende
dplyr::group_by(Location) %>% # Par pays
dplyr::summarise(Incidence_Sum = max(Incidence)) %>% # Incidence totale (cumul maximum)
dplyr::arrange(desc(Incidence_Sum)) %>%
dplyr::ungroup()
total_byCountry
```
Nous pouvons maintenant passer à la visualisation des données. Pour cela, nous traçons un graphique des cas cumulés au cours du temps pour chacun des pays séparément, et nous classons la légende par ordre de cas cumulés décroissants à la dernière date. (Nous effectuons également quelques lignes de mise en forme à la fin pour rendre le graphique plus agréable à lire)
```{r plotInc, fig.align="center", warning=FALSE, fig.width = 9, fig.height=6}
set.seed(42)
ggplot(covid_byCountry, aes(x = Date, y = Incidence, color = Location)) + # Tracé du graphique
geom_line(size = 0.8) +
scale_x_date(breaks = function(x) seq.Date(from = min(x),
to = max(x),
by = "3 months"),
minor_breaks = function(x) seq.Date(from = min(x),
to = max(x),
by = "1 month")) +
scale_y_continuous(labels = comma, breaks = seq(0, max(total_byCountry$Incidence_Sum, na.rm=T), 10e6), minor_breaks = seq(0, max(total_byCountry$Incidence_Sum, na.rm=T), 2e6)) +
scale_color_manual(values=distinctColorPalette(14), breaks = total_byCountry$Location, labels = paste0(total_byCountry$Location, " (", format(as.numeric(total_byCountry$Incidence_Sum), scientific = TRUE, digits = 4), ")")) +
labs(title="Cumul des cas de Covid 19 par pays au cours du temps", y="Cumul des cas observés", x="Temps", color = paste0("Pays (Ordre décroissant des cas\ncumulés au ", max(covid_byCountry$Date, na.rm = T), ")")) +
theme(
plot.title = element_text(hjust = 0.5),
plot.background = element_rect(fill = "white"),
panel.background = element_rect(fill = 'white'),
panel.grid.major = element_line(size = 0.5, linetype = 'solid', colour = "#e0e0e0"),
panel.grid.minor = element_line(size = 0.25, linetype = 'solid', colour = "#f2f2f2"),
axis.line = element_line(colour = "black"),
axis.text.x = element_text(angle = 45, hjust = 1)
)
```
## Visualisation de l'évolution du nombre de cas dans le monde
Nous voulons également tracer sur un graphique le nombre de cas total cumulé à l'échelle mondiale. Pour ce faire, nous reprenons le jeu de données précédemment utilisé, mais nous utilisons toutes les localisations, en calculant le total des incidences mondiales par date, puis en les cumulant.
```{r cumTotalInc, warning = FALSE}
covid_Total <- covid_raw_long %>%
dplyr::group_by(Date) %>%
dplyr::summarise(Incidence_Total = sum(Incidence, na.rm = T)) %>%
dplyr::ungroup()
```
Visualisons les résultats obtenus sur un graphique en échelle linéaire...
```{r plotTotalLinearInc, warning = FALSE, fig.width = 9, fig.height=4}
ggplot(covid_Total, aes(x = Date, y = Incidence_Total)) + # Tracé du graphique
geom_line(size = 0.8) +
scale_x_date(breaks = function(x) seq.Date(from = min(x),
to = max(x),
by = "3 months"),
minor_breaks = function(x) seq.Date(from = min(x),
to = max(x),
by = "1 month")) +
scale_y_continuous(labels = comma) +
labs(title="Cumul global des cas de Covid 19 au cours du temps (échelle linéaire)", y="Cumul global des cas observés", x="Temps") +
theme(
plot.title = element_text(hjust = 0.5),
plot.background = element_rect(fill = "white"),
panel.background = element_rect(fill = 'white'),
panel.grid.major = element_line(size = 0.5, linetype = 'solid', colour = "#e0e0e0"),
panel.grid.minor = element_line(size = 0.25, linetype = 'solid', colour = "#f2f2f2"),
axis.line = element_line(colour = "black"),
axis.text.x = element_text(angle = 45, hjust = 1)
)
```
... puis en échelle logarithmique !
```{r plotTotalLogInc, warning = FALSE, fig.width = 9, fig.height=4}
ggplot(covid_Total, aes(x = Date, y = Incidence_Total)) + # Tracé du graphique
geom_line(size = 0.8) +
scale_x_date(breaks = function(x) seq.Date(from = min(x),
to = max(x),
by = "3 months"),
minor_breaks = function(x) seq.Date(from = min(x),
to = max(x),
by = "1 month")) +
scale_y_log10(breaks = trans_breaks("log10", function(x) 10^x),
labels = trans_format("log10", math_format(10^.x))) +
annotation_logticks(sides="l") +
labs(title="Cumul global des cas de Covid 19 au cours du temps (échelle logarithmique)", y="Cumul global des cas observés", x="Temps") +
theme(
plot.title = element_text(hjust = 0.5),
plot.background = element_rect(fill = "white"),
panel.background = element_rect(fill = 'white'),
panel.grid.major = element_line(size = 0.5, linetype = 'solid', colour = "#e0e0e0"),
panel.grid.minor = element_line(size = 0.25, linetype = 'solid', colour = "#f2f2f2"),
axis.line = element_line(colour = "black"),
axis.text.x = element_text(angle = 45, hjust = 1)
)
```
# Etude de l'évolution du nombre de décès dus au Covid 19 entre fév.2020 et fév.2023
## Importation des données
Comme précédemment, 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/) et sont mises à disposition sur GitHub.
```{r inputsDeaths, warning=FALSE}
if(!file.exists("./time_series_covid19_deaths_global.csv")){
download.file("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv", "./time_series_covid19_deaths_global.csv")
}
```
## Exploration et mise en forme des données
Comme précédemment, récupérons le fichier de données et vérifions les types de colonnes et l'éventuelle présence de NAs.
```{r inspectDeaths, results='hide'}
# Importation
deaths_raw <- read.csv("./time_series_covid19_deaths_global.csv", encoding = "UTF-8")
# Type de colonnes
dth_col_types <- unlist(lapply(deaths_raw, class))
names(dth_col_types) <- colnames(deaths_raw)
print(dth_col_types)
# Lignes contenant des NAs
deaths_raw[apply(deaths_raw, 1, function(x) any(is.na(x))),]
```
Les types de colonnes (character, numeric, integer) permettent à nouveau de dire que l'importation s'est à priori bien déroulée. Il existe à nouveau deux lignes qui contiennent des NAs pour les coordonnées géographiques, ce qui ne pose pas de problème.
Passons les données au format long et convertissons les dates dans un format reconnu par R.
```{r transformDeaths, warning = FALSE}
deaths_raw_long <- deaths_raw %>%
tidyr::pivot_longer(cols = 5:ncol(deaths_raw), names_to = "Date", values_to = "Incidence") %>%
dplyr::mutate(Date = as.Date.character(gsub("X", "", Date), format = "%m.%d.%y")) %>%
dplyr::arrange(Date)
head(deaths_raw_long)
```
## Visualisation de l'évolution du nombre de décès par pays
Calculons et traçons maintenant l'évolution du nombre de décè cumulés au cours du temps pour certains pays. A nouveau, nous sélectionnons les pays qui nous intéressent, puis calculons leurs cumuls sur la période pour laquelle nous disposons de données.
```{r cumCountryDth, warning=FALSE}
deaths_byCountry <- deaths_raw_long %>%
dplyr::filter(Country.Region %in% c("Belgium", "China", "France", "Germany", "Iran", "Italy", "Japan", "Korea, South", "Netherlands", "Portugal", "Spain", "United Kingdom", "US")) %>% # Sélection de certains pays
dplyr::mutate(Location = dplyr::case_when(Country.Region == "China" & Province.State != "Hong Kong" ~ "China",
Country.Region == "China" & Province.State == "Hong Kong" ~ "China, Hong Kong",
TRUE ~ Country.Region)) %>% # Distinction de la Chine et de Hong Kong
dplyr::group_by(Location, Date) %>%
dplyr::summarise(Incidence = sum(Incidence, na.rm = T),
Date = unique(Date)) %>%
dplyr::ungroup()
head(deaths_byCountry)
```
Calculer le nombre de décès cumulés au total à la dernière date disponible nous sera également utile lors de la visualisation.
```{r totalCountryDth}
totaldth_byCountry <- deaths_byCountry %>% # Calcul des totaux pour ordonner la légende
dplyr::group_by(Location) %>%
dplyr::summarise(Incidence_Sum = max(Incidence)) %>%
dplyr::arrange(desc(Incidence_Sum)) %>%
dplyr::ungroup()
totaldth_byCountry
```
Nous pouvons maintenant passer à la visualisation des données. Pour cela, nous traçons un graphique des décès cumulés au cours du temps pour chacun des pays séparément, et nous classons la légende par ordre de décès cumulés décroissants à la dernière date. (Nous effectuons également quelques lignes de mise en forme à la fin pour rendre le graphique plus facile à lire)
```{r plotDth, fig.align="center", warning=FALSE, fig.width = 9, fig.height=6}
set.seed(42)
ggplot(deaths_byCountry, aes(x = Date, y = Incidence, color = Location)) + # Tracé du graphique
geom_line(size = 0.8) +
scale_x_date(breaks = function(x) seq.Date(from = min(x),
to = max(x),
by = "3 months"),
minor_breaks = function(x) seq.Date(from = min(x),
to = max(x),
by = "1 month")) +
scale_y_continuous(labels = comma, breaks = seq(0, max(totaldth_byCountry$Incidence_Sum, na.rm=T), 10e4), minor_breaks = seq(0, max(totaldth_byCountry$Incidence_Sum, na.rm=T), 2e4)) +
scale_color_manual(values=distinctColorPalette(14), breaks = totaldth_byCountry$Location, labels = paste0(totaldth_byCountry$Location, " (", format(as.numeric(totaldth_byCountry$Incidence_Sum), scientific = TRUE, digits = 4), ")")) +
labs(title="Cumul des décès dus au Covid 19 par pays au cours du temps", y="Cumul des décès observés", x="Temps", color = paste0("Pays (Ordre décroissant des décès\ncumulés au ", max(deaths_byCountry$Date, na.rm = T), ")")) +
theme(
plot.title = element_text(hjust = 0.5),
plot.background = element_rect(fill = "white"),
panel.background = element_rect(fill = 'white'),
panel.grid.major = element_line(size = 0.5, linetype = 'solid', colour = "#e0e0e0"),
panel.grid.minor = element_line(size = 0.25, linetype = 'solid', colour = "#f2f2f2"),
axis.line = element_line(colour = "black"),
axis.text.x = element_text(angle = 45, hjust = 1)
)
```
## Visualisation de l'évolution du nombre de décès dans le monde
Nous voulons également tracer sur un graphique le nombre de cas total cumulé à l'échelle mondiale. Pour ce faire, nous reprenons le jeu de données précédemment utilisé, mais nous utilisons toutes les localisations, en calculant le total des incidences mondiales par date, puis en les cumulant.
```{r cumTotalDth, warning = FALSE}
deaths_Total <- deaths_raw_long %>%
dplyr::group_by(Date) %>%
dplyr::summarise(Incidence_Total = sum(Incidence, na.rm = T)) %>%
dplyr::ungroup()
deaths_Total
```
Visualisons les résultats obtenus sur un graphique en échelle linéaire...
```{r plotTotalLinearDth, warning = FALSE, fig.width = 9, fig.height=4}
ggplot(deaths_Total, aes(x = Date, y = Incidence_Total)) + # Tracé du graphique
geom_line(size = 0.8) +
scale_x_date(breaks = function(x) seq.Date(from = min(x),
to = max(x),
by = "3 months"),
minor_breaks = function(x) seq.Date(from = min(x),
to = max(x),
by = "1 month")) +
scale_y_continuous(labels = comma) +
labs(title="Cumul global des décès dus au Covid 19 au cours du temps (échelle linéaire)", y="Cumul global des décès observés", x="Temps") +
theme(
plot.title = element_text(hjust = 0.5),
plot.background = element_rect(fill = "white"),
panel.background = element_rect(fill = 'white'),
panel.grid.major = element_line(size = 0.5, linetype = 'solid', colour = "#e0e0e0"),
panel.grid.minor = element_line(size = 0.25, linetype = 'solid', colour = "#f2f2f2"),
axis.line = element_line(colour = "black"),
axis.text.x = element_text(angle = 45, hjust = 1)
)
```
... puis en échelle logarithmique.
```{r plotTotalLogDth, warning = FALSE, fig.width = 9, fig.height=4}
ggplot(deaths_Total, aes(x = Date, y = Incidence_Total)) + # Tracé du graphique
geom_line(size = 0.8) +
scale_x_date(breaks = function(x) seq.Date(from = min(x),
to = max(x),
by = "3 months"),
minor_breaks = function(x) seq.Date(from = min(x),
to = max(x),
by = "1 month")) +
scale_y_log10(breaks = trans_breaks("log10", function(x) 10^x),
labels = trans_format("log10", math_format(10^.x))) +
annotation_logticks(sides="l") +
labs(title="Cumul global des décès dus au Covid 19 au cours du temps (échelle logarithmique)", y="Cumul global des cas observés", x="Temps") +
theme(
plot.title = element_text(hjust = 0.5),
plot.background = element_rect(fill = "white"),
panel.background = element_rect(fill = 'white'),
panel.grid.major = element_line(size = 0.5, linetype = 'solid', colour = "#e0e0e0"),
panel.grid.minor = element_line(size = 0.25, linetype = 'solid', colour = "#f2f2f2"),
axis.line = element_line(colour = "black"),
axis.text.x = element_text(angle = 45, hjust = 1)
)
```
# Comparaison des résultats à la mortalité "normale" : cas de la France
Les données sont importées d'un fichier local extrait à partir du tableau disponible sur la page web [Evolution du nombre de décès depuis le 1er janvier 2023](https://www.insee.fr/fr/statistiques/6959520#tableau-figure1), sur le site de l'[INSEE](https://www.insee.fr/fr/accueil), en date du 2024-08-23. Inspectons les rapidement en utilisant la même méthode que précédemment (types de colonnes, NAs).
```{r deathsFrance, results='hide'}
frdeaths_raw <- read.csv("./covid_deaths_france_20192023.csv", sep=";")
# Type de colonnes
frdth_col_types <- unlist(lapply(frdeaths_raw, class))
names(frdth_col_types) <- colnames(frdeaths_raw)
print(frdth_col_types)
# Lignes contenant des NAs
frdeaths_raw[apply(frdeaths_raw, 1, function(x) any(is.na(x))),]
```
Les types de colonnes obtenus (character, integer) correspondent bien à ce qui était attendu. Une ligne contient des NAs pour le nombre de décès, mais c'est le 29 février, qui n'est pas présent toutes les années, ce qui est normal et ne fausse en rien les analyses que nous ferons par la suite.
Passons les données au format long et convertissons les dates dans un format reconnu par R.
```{r transformDeathsFrance, warning = FALSE}
frdeaths_raw_long <- frdeaths_raw %>%
tidyr::pivot_longer(cols = 2:ncol(frdeaths_raw), names_to = "Annee", values_to = "Incidence") %>%
dplyr::mutate(
Annee = gsub("X", "", Annee),
Date = as.Date.character(paste0(`Date.d.événement`, " ", Annee), format = "%d-%b %Y")) %>%
dplyr::arrange(Date)
head(frdeaths_raw_long)
```
La transformation du format de date étant un peu particulière, vérifions juste que tout se soit bien passé et qu'il n'y ait pas de NAs.
```{r verifDates}
frdeaths_raw_long[which(is.na(frdeaths_raw_long$Date)),]
```
Il y a effectivement des NAs, mais qui correspondent aux 29 février qui n'existent pas pour certaines années. Nous pouvons donc supprimer ces lignes qui ne contiennent pas de données.
```{r delNaDates}
frdeaths_raw_long <- frdeaths_raw_long[!is.na(frdeaths_raw_long$Date),]
```
Calculons maintenant le nombre de décès cumulés en France au cours du temps à partir du 22-01-2022 (date de départ de nos données covid).
```{r deathCumFrance}
deaths_cum_fr <- frdeaths_raw_long %>%
dplyr::arrange(Date) %>%
dplyr::filter(Date >= "2020-01-22") %>%
dplyr::mutate(Incidence_Cum = cumsum(as.numeric(Incidence))) %>%
dplyr::select(Date, Incidence_Cum)
colnames(deaths_cum_fr) <- c("Date", "All_Cum_Inc")
head(deaths_cum_fr)
```
Nous pouvons maintenant effectuer une comparaison avec les décès observés suite au covid 19. Pour ce faire, commençons par extraire les données covid pour la France uniquement, puis effectuons une jointure avec les statistiques de l'INSEE.
```{r compCovInsee}
deaths_fromCovid_fr <- deaths_byCountry %>% # Extraction des données covid france
dplyr::ungroup() %>%
dplyr::filter(Location == "France") %>%
dplyr::select(Date, Incidence) %>%
dplyr::arrange(Date)
colnames(deaths_fromCovid_fr) <- c("Date", "Covid_Cum_Inc")
deaths_Several_fr <- deaths_fromCovid_fr %>%
dplyr::left_join(deaths_cum_fr, by = "Date") %>%
dplyr::select(c("Date", "Covid_Cum_Inc", "All_Cum_Inc")) %>%
tidyr::pivot_longer(2:3, names_to = "Cause", values_to = "Incidence_Cum")
head(deaths_Several_fr)
```
Maintenant que nous avons nos données à disposition, nous pouvons les tracer en parallèle sur un graphique.
```{r plotCompDthFr, warning = FALSE, fig.width = 9, fig.height=4}
ggplot(deaths_Several_fr, aes(x = Date, y = Incidence_Cum, color = Cause)) + # Tracé du graphique
geom_line(size = 0.8) +
scale_x_date(breaks = function(x) seq.Date(from = min(x),
to = max(x),
by = "3 months"),
minor_breaks = function(x) seq.Date(from = min(x),
to = max(x),
by = "1 month")) +
scale_color_manual(values=c("darkred", "darkblue"), breaks = c("All_Cum_Inc", "Covid_Cum_Inc"), labels = c("Toutes causes", "Covid-19")) +
labs(title="Comparaison des décès cumulés Covid et\ntoutes causes en France au cours du temps", y="Cumul de décès observés", x="Temps") +
theme(
plot.title = element_text(hjust = 0.5),
plot.background = element_rect(fill = "white"),
panel.background = element_rect(fill = 'white'),
panel.grid.major = element_line(size = 0.5, linetype = 'solid', colour = "#e0e0e0"),
panel.grid.minor = element_line(size = 0.25, linetype = 'solid', colour = "#f2f2f2"),
axis.line = element_line(colour = "black"),
axis.text.x = element_text(angle = 45, hjust = 1)
)
```
# Normalisation de l'analyse pour 1000 habitants
## Importation des données
Les données de population par pays ont été récupérées sur le site des [Nations Unies](https://www.un.org/), sur [cette page](https://population.un.org/wpp/Download/Standard/CSV/). La version utilisée a été téléchargée le 2024-08-23. Malheureusement, elle est trop volumineuse pour être déposée sur un Git.
```{r inputsPop, warning=FALSE}
if(!file.exists("./WPP2024_TotalPopulationBySex.csv")){
download.file("https://population.un.org/wpp/Download/Files/1_Indicator%20(Standard)/CSV_FILES/WPP2024_TotalPopulationBySex.csv.gz", "./WPP2024_TotalPopulationBySex.csv")
}
```
Nous avons également besoin du nombre de lits d'hôpital pour 1000 habitants qui peut être trouvé sur le site de l'OCDE, à [cette page](https://www.oecd-ilibrary.org/sites/5f5b6833-fr/1/2/9/3/index.html?itemId=/content/publication/5f5b6833-fr&_csp_=65ac94c7f4b2dbbf68a7eef9e558ed12&itemIGO=oecd&itemContentType=book). Le lien est [celui-ci](https://www.oecd-ilibrary.org/sites/5f5b6833-fr/1/2/9/3/index.html?itemId=/content/publication/5f5b6833-fr&_csp_=65ac94c7f4b2dbbf68a7eef9e558ed12&itemIGO=oecd&itemContentType=book). Les données doivent cependant être téléchargées manuellement en local, nettoyées puis enregistrées en csv. La version actuellement en local a été téléchargée le 2024-08-23.
## Exploration et mise en forme des données
Vérifions le format des fichiers à la recherche d'anomalies (type de colonnes, valeurs NAs...).
```{r inspectPop}
# Importation
pop_raw <- read.csv("./WPP2024_TotalPopulationBySex.csv")
bed_raw <- fread("./ELS-2019-5047-FR-G164.csv", encoding = "Latin-1", header = TRUE)
# Type de colonnes
unlist(lapply(pop_raw, class))
unlist(lapply(bed_raw, class))
```
Les colonnes sont bien aux format escomptés ('character', 'integer', 'double'), ce qui laisse entendre que l'import s'est bien passé.
Sélectionnons maintenant les pays qui nous intéressent dans la table de Nations Unies, et convertissons la démographie en effectuant l'opération $*10^3$. Nous sélectionnerons les données démographiques de l'année 2021 pour nos calculs (année de données pour les lits d'hôpital). Certains pays comme la Corée, l'Iran, la Chine, ne seront pas être inclus dans l'analyse car nous ne disposons pas de données adaptés les concernant.
```{r selectCountries, results='hide'}
target_countries_pop <- c("Belgium", "France", "Germany", "Italy", "Japan", "Netherlands", "Portugal", "Spain", "United Kingdom", "United States of America (and dependencies)")
target_countries_beds <- c("Belgique", "France", "Allemagne", "Italie", "Japon", "Pays-Bas", "Portugal", "Espagne", "Royaume-Uni", "États-Unis")
target_countries_SCMP <- c("Belgium", "France", "Germany", "Italy", "Japan", "Netherlands", "Portugal", "Spain", "United Kingdom", "US")
pop_filtered <- pop_raw %>%
dplyr::filter(Location %in% target_countries_pop & Time == 2021) %>%
dplyr::mutate(Population = PopTotal *10^3) %>%
dplyr::select(Location, Population)
lapply(1:length(pop_filtered$Location), function(i){pop_filtered$Location[i] <<- target_countries_SCMP[which(target_countries_pop==pop_filtered$Location[i])]}) # Conversion des noms pour utiliser la même nomenclature
beds_filtered <- bed_raw %>%
dplyr::filter(Country %in% target_countries_beds) %>%
dplyr::select(c("Country", "2017"))
colnames(beds_filtered) <- c("Location", "Hospital_Beds")
lapply(1:length(beds_filtered$Location), function(i){beds_filtered$Location[i] <<- target_countries_SCMP[which(target_countries_beds==beds_filtered$Location[i])]}) # Conversion des noms pour utiliser la même nomenclature
```
```{r printTables}
pop_filtered
beds_filtered
```
Passons maintenant au calcul, à partir des données précédemment obtenues concernant les décès aux suites du covid ainsi que la population de chaque pays, du nombre de décès rapporté à 1000 habitants. Pour ce faire, nous récupérons le tableau du nombre total de décès, nous récupérons les pays pour lesquels nous avons des données, et nous faisons la jointure avec les données de population et de lits disponibles.
```{r death1000}
normalized_deaths <- totaldth_byCountry %>%
dplyr::filter(Location %in% target_countries_SCMP) %>%
dplyr::left_join(pop_filtered, by = "Location") %>%
dplyr::left_join(beds_filtered, by = "Location") %>%
dplyr::mutate(Normalized_Inc = Incidence_Sum/(Population/1000))
```
Maintenant que nous avons les données à notre disposition, nous pouvons les tracer sur un graphique.
```{r plotNorm, fig.width = 9, fig.height=4, fig.align='center'}
ggplot(normalized_deaths, aes(x = Hospital_Beds, y = Normalized_Inc)) +
geom_point(aes(size=Incidence_Sum)) +
labs(title = "Nombre de décès dus au Covid-19 pour différents pays\nen fonction du nombre de lits d'hôpital", x = "Nombre de décès pour 1000 habitants", y = "Nombre de lits d'hôpital pour 1000 habitants", size="Nombre de décès total") +
geom_text(aes(label=Location), hjust=1.2, vjust=0.25, angle=90) +
xlim(2.5,14) + ylim(0,3.5) +
scale_color_continuous() +
theme(
plot.title = element_text(hjust = 0.5),
plot.background = element_rect(fill = "white"),
panel.background = element_rect(fill = 'white'),
panel.grid.major = element_line(size = 0.5, linetype = 'solid', colour = "#e0e0e0"),
panel.grid.minor = element_line(size = 0.25, linetype = 'solid', colour = "#f2f2f2"),
axis.line = element_line(colour = "black")
)
```
\ No newline at end of file
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