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