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..5f4438530843138d0a99caf107e5a3525fcbfaf2 --- /dev/null +++ b/module3/Document_Computationnel_Covid/Sars-CoV-DocComputationnel_NathanD.html @@ -0,0 +1,2264 @@ + + + + +
+ + + + + + + + + + +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)
+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)
+ )
+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)
+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)
+ )
+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)
+ )
+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)
+ )
+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
+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")
+ )
+