From 8d2c08fd016444eee64705da94b46755bf511fcc Mon Sep 17 00:00:00 2001 From: d7227cde42eb97d8aac791d907b6bbae Date: Mon, 26 Aug 2024 06:23:30 +0000 Subject: [PATCH] Delete Sars-CoV-DocComputationnel_NathanD.html --- .../Sars-CoV-DocComputationnel_NathanD.html | 1068 ----------------- 1 file changed, 1068 deletions(-) delete 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 deleted file mode 100644 index 034a5b1..0000000 --- a/module3/Document_Computationnel_Covid/Sars-CoV-DocComputationnel_NathanD.html +++ /dev/null @@ -1,1068 +0,0 @@ - - - - - - - - - - - - - - - -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)
-
## # A tibble: 6 × 6
-##   Province.State Country.Region   Lat  Long Date       Incidence
-##   <chr>          <chr>          <dbl> <dbl> <date>         <int>
-## 1 ""             Afghanistan     33.9 67.7  2020-01-22         0
-## 2 ""             Albania         41.2 20.2  2020-01-22         0
-## 3 ""             Algeria         28.0  1.66 2020-01-22         0
-## 4 ""             Andorra         42.5  1.52 2020-01-22         0
-## 5 ""             Angola         -11.2 17.9  2020-01-22         0
-## 6 ""             Antarctica     -71.9 23.3  2020-01-22         0
-
-
-

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)
-
## # A tibble: 6 × 3
-##   Location Date       Incidence
-##   <chr>    <date>         <int>
-## 1 Belgium  2020-01-22         0
-## 2 Belgium  2020-01-23         0
-## 3 Belgium  2020-01-24         0
-## 4 Belgium  2020-01-25         0
-## 5 Belgium  2020-01-26         0
-## 6 Belgium  2020-01-27         0
-

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
-
## # A tibble: 14 × 2
-##    Location         Incidence_Sum
-##    <chr>                    <int>
-##  1 US                   103802702
-##  2 France                38618509
-##  3 Germany               38249060
-##  4 Japan                 33320438
-##  5 Korea, South          30615522
-##  6 Italy                 25603510
-##  7 United Kingdom        24425309
-##  8 Spain                 13770429
-##  9 Netherlands            8599981
-## 10 Iran                   7572311
-## 11 Portugal               5570473
-## 12 Belgium                4739365
-## 13 China, Hong Kong       2876106
-## 14 China                  2027418
-

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)
-
## # A tibble: 6 × 6
-##   Province.State Country.Region   Lat  Long Date       Incidence
-##   <chr>          <chr>          <dbl> <dbl> <date>         <int>
-## 1 ""             Afghanistan     33.9 67.7  2020-01-22         0
-## 2 ""             Albania         41.2 20.2  2020-01-22         0
-## 3 ""             Algeria         28.0  1.66 2020-01-22         0
-## 4 ""             Andorra         42.5  1.52 2020-01-22         0
-## 5 ""             Angola         -11.2 17.9  2020-01-22         0
-## 6 ""             Antarctica     -71.9 23.3  2020-01-22         0
-
-
-

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)
-
## # A tibble: 6 × 3
-##   Location Date       Incidence
-##   <chr>    <date>         <int>
-## 1 Belgium  2020-01-22         0
-## 2 Belgium  2020-01-23         0
-## 3 Belgium  2020-01-24         0
-## 4 Belgium  2020-01-25         0
-## 5 Belgium  2020-01-26         0
-## 6 Belgium  2020-01-27         0
-

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
-
## # A tibble: 14 × 2
-##    Location         Incidence_Sum
-##    <chr>                    <int>
-##  1 US                     1123836
-##  2 United Kingdom          220721
-##  3 Italy                   188322
-##  4 Germany                 168935
-##  5 France                  166176
-##  6 Iran                    144933
-##  7 Spain                   119479
-##  8 China                    87589
-##  9 Japan                    72997
-## 10 Korea, South             34093
-## 11 Belgium                  33814
-## 12 Portugal                 26266
-## 13 Netherlands              23705
-## 14 China, Hong Kong         13467
-

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
-
## # A tibble: 1,143 × 2
-##    Date       Incidence_Total
-##    <date>               <int>
-##  1 2020-01-22              17
-##  2 2020-01-23              18
-##  3 2020-01-24              26
-##  4 2020-01-25              42
-##  5 2020-01-26              56
-##  6 2020-01-27              82
-##  7 2020-01-28             131
-##  8 2020-01-29             133
-##  9 2020-01-30             172
-## 10 2020-01-31             214
-## # ℹ 1,133 more rows
-

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)
-
## # A tibble: 6 × 4
-##   Date.d.événement Annee Incidence Date      
-##   <chr>            <chr>     <int> <date>    
-## 1 01-janv.         2019       1816 2019-01-01
-## 2 02-janv.         2019       1912 2019-01-02
-## 3 03-janv.         2019       1850 2019-01-03
-## 4 04-janv.         2019       1878 2019-01-04
-## 5 05-janv.         2019       1889 2019-01-05
-## 6 06-janv.         2019       1880 2019-01-06
-

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)),]
-
## # A tibble: 4 × 4
-##   Date.d.événement Annee Incidence Date  
-##   <chr>            <chr>     <int> <date>
-## 1 29-févr.         2023         NA NA    
-## 2 29-févr.         2022         NA NA    
-## 3 29-févr.         2021         NA NA    
-## 4 29-févr.         2019         NA NA
-

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)
-
## # A tibble: 6 × 2
-##   Date       All_Cum_Inc
-##   <date>           <dbl>
-## 1 2020-01-22        1793
-## 2 2020-01-23        3582
-## 3 2020-01-24        5427
-## 4 2020-01-25        7236
-## 5 2020-01-26        8991
-## 6 2020-01-27       10869
-

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)
-
## # A tibble: 6 × 3
-##   Date       Cause         Incidence_Cum
-##   <date>     <chr>                 <dbl>
-## 1 2020-01-22 Covid_Cum_Inc             0
-## 2 2020-01-22 All_Cum_Inc            1793
-## 3 2020-01-23 Covid_Cum_Inc             0
-## 4 2020-01-23 All_Cum_Inc            3582
-## 5 2020-01-24 Covid_Cum_Inc             0
-## 6 2020-01-24 All_Cum_Inc            5427
-

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
-
##          Location Population
-## 1              US  343761808
-## 2           Japan  125679338
-## 3  United Kingdom   67668792
-## 4           Italy   59729350
-## 5        Portugal   10390956
-## 6           Spain   47735664
-## 7         Belgium   11570844
-## 8          France   66083548
-## 9         Germany   83697083
-## 10    Netherlands   17730564
-
beds_filtered
-
##           Location Hospital_Beds
-##  1:          Japan          13.1
-##  2:        Germany           8.0
-##  3:         France           6.0
-##  4:        Belgium           5.7
-##  5:       Portugal           3.4
-##  6:    Netherlands           3.3
-##  7:          Italy           3.2
-##  8:          Spain           3.0
-##  9:             US           2.8
-## 10: United Kingdom           2.5
-

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