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.
```{r packages, warning=FALSE, results='hide'}
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)](https://systems.jhu.edu/) et sont mises à disposition sur GitHub.
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).
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.
dplyr::mutate(Date = as.Date.character(gsub("X", "", Date), format = "%m.%d.%y")) %>%
dplyr::arrange(Date)
head(covid_raw_long)
```
## Visualisation de l'évolution du nombre de cas par pays
Calculons et traçons maintenant l'évolution du nombre de cas cumulés au cours du temps pour certains pays. Commençons par sélectionner les pays qui nous intéressent, puis calculons leurs cumuls sur la période pour laquelle nous disposons de données. Nous veillons en particulier à sommer séparément Hong Kong du reste de la Chine, comme spécifié dans la consigne.
Calculer le nombre de cas cumulés au total à la dernière date disponible nous sera également utile lors de la visualisation.
```{r totalCountryInc}
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)
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), ")")) +
## 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.
# 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)](https://systems.jhu.edu/) et sont mises à disposition sur GitHub.
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.
dplyr::mutate(Date = as.Date.character(gsub("X", "", Date), format = "%m.%d.%y")) %>%
dplyr::arrange(Date)
head(deaths_raw_long)
```
## Visualisation de l'évolution du nombre de décès par pays
Calculons et traçons maintenant l'évolution du nombre de décè cumulés au cours du temps pour certains pays. A nouveau, nous sélectionnons les pays qui nous intéressent, puis calculons leurs cumuls sur la période pour laquelle nous disposons de données.
```{r cumCountryDth, warning=FALSE}
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
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)
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), ")")) +
## 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.
# 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](https://www.insee.fr/fr/statistiques/6959520#tableau-figure1), sur le site de l'[INSEE](https://www.insee.fr/fr/accueil), en date du 2024-08-23. Inspectons les rapidement en utilisant la même méthode que précédemment (types de colonnes, NAs).
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.
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.
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.
```{r compCovInsee}
deaths_fromCovid_fr <- deaths_byCountry %>% # Extraction des données covid france
Les données de population par pays ont été récupérées sur le site des [Nations Unies](https://www.un.org/), sur [cette page](https://population.un.org/wpp/Download/Standard/CSV/). 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.
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](https://www.oecd-ilibrary.org/sites/5f5b6833-fr/1/2/9/3/index.html?itemId=/content/publication/5f5b6833-fr&_csp_=65ac94c7f4b2dbbf68a7eef9e558ed12&itemIGO=oecd&itemContentType=book). Le lien est [celui-ci](https://www.oecd-ilibrary.org/sites/5f5b6833-fr/1/2/9/3/index.html?itemId=/content/publication/5f5b6833-fr&_csp_=65ac94c7f4b2dbbf68a7eef9e558ed12&itemIGO=oecd&itemContentType=book). 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...).
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.
```{r selectCountries, results='hide'}
target_countries_pop <- c("Belgium", "France", "Germany", "Italy", "Japan", "Netherlands", "Portugal", "Spain", "United Kingdom", "United States of America (and dependencies)")
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
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
```
```{r printTables}
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.
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") +