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 0000000000000000000000000000000000000000..034a5b1ed3f8648c82f789b2e8d07e5074ee104c --- /dev/null +++ b/module3/Document_Computationnel_Covid/Sars-CoV-DocComputationnel_NathanD.html @@ -0,0 +1,1068 @@ + + + + +
+ + + + + + + + + + +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.
+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)
+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")
+}
+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
+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)
+ )
+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)
+ )
+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")
+}
+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
+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)
+ )
+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)
+ )
+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)
+ )
+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.
+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")
+ )
+