From 140341bf16b548e908570ee48f7857f3e8424e98 Mon Sep 17 00:00:00 2001 From: d7227cde42eb97d8aac791d907b6bbae Date: Mon, 26 Aug 2024 06:24:34 +0000 Subject: [PATCH] Upload New File --- .../Sars-CoV-DocComputationnel_NathanD.html | 2264 +++++++++++++++++ 1 file changed, 2264 insertions(+) create mode 100644 module3/Document_Computationnel_Covid/Sars-CoV-DocComputationnel_NathanD.html diff --git a/module3/Document_Computationnel_Covid/Sars-CoV-DocComputationnel_NathanD.html b/module3/Document_Computationnel_Covid/Sars-CoV-DocComputationnel_NathanD.html new file mode 100644 index 0000000..5f44385 --- /dev/null +++ b/module3/Document_Computationnel_Covid/Sars-CoV-DocComputationnel_NathanD.html @@ -0,0 +1,2264 @@ + + + + + + + + + + + + + + + +Autour du SARS-CoV-2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+

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.

+
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) et sont mises +à disposition sur GitHub.

+
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).

+
# 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.

+
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.

+
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.

+
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)

+
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.

+
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…

+
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 !

+
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) et sont mises +à disposition sur GitHub.

+
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.

+
# 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.

+
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.

+
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.

+
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)

+
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.

+
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…

+
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.

+
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, sur le site de l’INSEE, en date du 2024-08-23. +Inspectons les rapidement en utilisant la même méthode que précédemment +(types de colonnes, NAs).

+
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.

+
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.

+
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.

+
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).

+
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.

+
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.

+
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, sur cette +page. 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.

+
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. Le lien est celui-ci. +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…).

+
# 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))
+
##   SortOrder       LocID       Notes   ISO3_code   ISO2_code   SDMX_code 
+##   "integer"   "integer" "character" "character" "character"   "integer" 
+##   LocTypeID LocTypeName    ParentID    Location       VarID     Variant 
+##   "integer" "character"   "integer" "character"   "integer" "character" 
+##        Time   MidPeriod     PopMale   PopFemale    PopTotal  PopDensity 
+##   "integer"   "numeric"   "numeric"   "numeric"   "numeric"   "numeric"
+
unlist(lapply(bed_raw, class))
+
##     Country        2000        2017 
+## "character"   "numeric"   "numeric"
+

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.

+
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
+
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.

+
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.

+
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")
+  )
+

+
+
+ + + + +
+ + + + + + + + + + + + + + + -- 2.18.1