Hospitalisations liées au COVID-19 à la Réunion
Introduction
Ce mini tutoriel permet de dessiner la figure ci-dessus avec R.
Vous pourrez y trouver des idées pour :
- utiliser des données libres pour faire des graphiques sur la COVID (qui ne rêve de faire ça ?)
- convertir un fichier
.ics
(calendrier) en tableau - dessiner des plages de temps sur un graphique quand ce ne sont pas les données principales
- ajouter une légende sur des données qui ne varient pas
- calculer une courbe lissée à partir de données brutes journalières
- écrire un titre pour le graphique à partir du nom du fichier de données (ce n’est pas parfait, mais c’est déjà ça)
- gérer la fréquence des graduations d’un axe temporel et leurs labels.
Mon objectif principal en créant cette figure était d’automatiser le code au maximum. Autrement dit, je veux que la mise à jour des données nécessite un minimum de code à modifier (par exemple : ne pas changer le titre ou chercher les dates de vacances scolaires manuellement).
Tout n’est pas documenté dans mon script, il fallait que je trouve un compromis entre pédagogie et sobriété.
Pour aller plus loin, je vous encourage à aller voir directement la documentation des fonctions en tapant ?nom_de_la_fonction
ou en cliquant sur F1 lorsque le curseur est positionné sur la fonction.
Mise en garde
Je ne me risquerais pas à interpréter ce graphique ici.
Il y a beaucoup trop de biais possibles dans ces données et dans leurs interactions.
Rappelez-vous que corrélation n’est pas causalité 😉
Le code !
Chargement des packages
Le tidyverse, si ça ne vous dit rien, c’est une collection de packages de R contenant des fonctions spécial-manipulation de jeux de données.
Le package calendar contient une fonction pour importer des fichiers de type calendrier (par exemple .ics
) dans R.
Seulement, il n’est pas disponible dans le dépôt officiel (le CRAN), il faut installer sa version en cours de développement, disponible sur github.
# devtools::install_github("ATFutures/ical") # installer le package calendar, il n'est pas dans le CRAN
library(tidyverse)
library(calendar) # importer des fichier .ics (calendriers)
NB : La notation
devtools::install_github()
permet de demander à R d’utiliser la fonctioninstall_github()
présente dans le package devtools sans avoir à lancer la commandelibrary(devtools)
qui, elle, permet de charger toutes les fonctions du package dans l’environnemet de la session en cours.
Import des données COVID
Source : data.gouv.fr
fichier <- "donnees-hospitalieres-covid19-2021-01-11-19h03.csv" # ce nom sera réutilisé pour créer le titre du graphique
covid_974 <- read_csv2(fichier) %>% # importe (avec les dates comme il faut)
filter(dep == "974", sexe == 0) # sélectionne les lignes concernant la Réunion, tous sexes confondus
Import des données des vacances scolaires à la Réunion
Source : data.education.gouv.fr
vacances <- ic_read("fr-en-calendrier-scolaire.ics") %>%
filter(DTEND >= min(covid_974$jour), DTSTART <= max(covid_974$jour)) %>% # sélectionne les vacances correspondant aux dates du jeu de données covid_974
distinct(DTSTART, .keep_all = TRUE) # garde les lignes avec des valeurs de DTSTART uniques (2 périodes se chevauchent - rentrée des profs vs. élèves)
Visualisation
Un graphique fait avec la fonction ggplot()
suit la grammaire des graphiques.
Les étapes obligatoires sont :
- choisir les données du graphique. Les données principales sont appelées avec la fonction
ggplot()
et les données secondaires (ici pour les dates des vacances) avec l’argumentdata
dans la fonctiongeom_*()
concernée - attribuer un rôle aux variables d’intérêts (abscisse, ordonnée, couleur, etc.) avec
aes()
- empiler des couches pour représenter les données (lignes, points, boxplot, etc.) avec
geom_*()
Le reste n’est que de la décoration (gérer les axes, la légende, le thème, etc.)
ggplot(covid_974) + # initialise le graphique
aes(x = jour, y = hosp) + # attribue un rôle aux variables de covid_974
geom_rect( # ajoute des rectangles bleus pour les vacances scolaires
data = vacances,
mapping = aes( # définit les rôles des variables du jeu de données vacances
xmin = as.Date(DTSTART), ymin = -Inf, # coins inférieurs gauches
xmax = as.Date(DTEND), ymax = Inf, # coins supérieurs droits
fill = "Vacances scolaires" # légende
),
inherit.aes = FALSE, # ne garde pas les rôles des variables de covid_974
alpha = 0.3
) +
geom_smooth( # ajoute la ligne rouge lissée
color = "red",
method = "loess",
formula = "y ~ x",
span = 0.04, # étendue du lissage
se = FALSE # pas de "ruban" de confiance
) +
geom_line(alpha = 0.5) + # ajoute la ligne grise avec les données brutes
scale_x_date( # modifie les paramètres par défaut de l'axe des x qui est de nature "date"
date_breaks = "month", # une graduation tous les mois
date_labels = "%b" # le label est le nom du mois en lettres abbrégé
) +
scale_fill_manual(values = "steelblue") + # choisit manuellement la couleur de remplissage
labs(
title = str_replace_all(fichier, pattern = "(-)|(.csv)", " "), # ajoute un titre (automatisé avec le nom du .csv)
x = NULL, # enlève le nom de l'axe x
y = "Nombre d'hospitalisations journalières", # modifie le nom de l'axe y
fill = NULL # enlève le titre de la légende pour le remplissage (fill)
) +
theme(legend.position = "bottom") # place la légence en bas du graphique
Pour savoir à quoi sert une ligne de code, c’est comme en chirurgie : on enlève le bout que l’on ne comprend pas et on regarde ce que ça change.
A vous de jouer ! N’hésitez pas à m’envoyer vos plus beaux graphiques 😏
Remerciements
Un petit défi avec Pierre Brial : base R vs. tidyverse est à l’origine de cette figure. J’en ai profité pour faire un peu de pédagogie autour de ggplot, alors autant partager !
Informations de session
## ─ Session info ──────────────────────────────────────────────────────────────
## hash: sandwich, person juggling: medium-light skin tone, water buffalo
##
## setting value
## version R version 4.1.1 (2021-08-10)
## os Manjaro Linux
## system x86_64, linux-gnu
## ui X11
## language (EN)
## collate C
## ctype fr_FR.UTF-8
## tz Indian/Reunion
## date 2021-11-03
## pandoc 2.14.1 @ /usr/lib/rstudio/bin/pandoc/ (via rmarkdown)
##
## ─ Packages ───────────────────────────────────────────────────────────────────
## package * version date (UTC) lib source
## assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.0.3)
## backports 1.3.0 2021-10-27 [1] CRAN (R 4.1.1)
## bit 4.0.4 2020-08-04 [1] CRAN (R 4.1.0)
## bit64 4.0.5 2020-08-30 [1] CRAN (R 4.1.0)
## blogdown 1.5 2021-09-02 [1] CRAN (R 4.1.1)
## bookdown 0.24 2021-09-02 [1] CRAN (R 4.1.1)
## broom 0.7.10 2021-10-31 [1] CRAN (R 4.1.1)
## bslib 0.3.1 2021-10-06 [1] CRAN (R 4.1.1)
## cachem 1.0.6 2021-08-19 [1] CRAN (R 4.1.1)
## calendar * 0.0.1 2019-02-11 [1] CRAN (R 4.1.1)
## callr 3.7.0 2021-04-20 [1] CRAN (R 4.0.5)
## cellranger 1.1.0 2016-07-27 [1] CRAN (R 4.0.3)
## cli 3.1.0 2021-10-27 [1] CRAN (R 4.1.1)
## colorspace 2.0-2 2021-06-24 [1] CRAN (R 4.1.0)
## crayon 1.4.2 2021-10-29 [1] CRAN (R 4.1.1)
## DBI 1.1.1 2021-01-15 [1] CRAN (R 4.0.3)
## dbplyr 2.1.1 2021-04-06 [1] CRAN (R 4.0.4)
## desc 1.4.0 2021-09-28 [1] CRAN (R 4.1.1)
## devtools 2.4.2 2021-06-07 [1] CRAN (R 4.1.0)
## digest 0.6.28 2021-09-23 [1] CRAN (R 4.1.1)
## dplyr * 1.0.7 2021-06-18 [1] CRAN (R 4.1.1)
## ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.0.5)
## evaluate 0.14 2019-05-28 [1] CRAN (R 4.0.3)
## fansi 0.5.0 2021-05-25 [1] CRAN (R 4.0.5)
## farver 2.1.0 2021-02-28 [1] CRAN (R 4.0.4)
## fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.0.3)
## forcats * 0.5.1 2021-01-27 [1] CRAN (R 4.0.3)
## fs 1.5.0 2020-07-31 [1] CRAN (R 4.0.3)
## generics 0.1.1 2021-10-25 [1] CRAN (R 4.1.1)
## ggplot2 * 3.3.5 2021-06-25 [1] CRAN (R 4.1.0)
## glue 1.4.2 2020-08-27 [1] CRAN (R 4.0.3)
## gtable 0.3.0 2019-03-25 [1] CRAN (R 4.0.3)
## haven 2.4.3 2021-08-04 [1] CRAN (R 4.1.0)
## highr 0.9 2021-04-16 [1] CRAN (R 4.0.5)
## hms 1.1.1 2021-09-26 [1] CRAN (R 4.1.1)
## htmltools 0.5.2 2021-08-25 [1] CRAN (R 4.1.1)
## httr 1.4.2 2020-07-20 [1] CRAN (R 4.0.3)
## jquerylib 0.1.4 2021-04-26 [1] CRAN (R 4.0.5)
## jsonlite 1.7.2 2020-12-09 [1] CRAN (R 4.0.3)
## knitr 1.36 2021-09-29 [1] CRAN (R 4.1.1)
## labeling 0.4.2 2020-10-20 [1] CRAN (R 4.0.3)
## lattice 0.20-44 2021-05-02 [2] CRAN (R 4.1.1)
## lifecycle 1.0.1 2021-09-24 [1] CRAN (R 4.1.1)
## lubridate 1.8.0 2021-10-07 [1] CRAN (R 4.1.1)
## magrittr 2.0.1 2020-11-17 [1] CRAN (R 4.0.3)
## Matrix 1.3-4 2021-06-01 [2] CRAN (R 4.1.1)
## memoise 2.0.0 2021-01-26 [1] CRAN (R 4.0.3)
## mgcv 1.8-36 2021-06-01 [2] CRAN (R 4.1.1)
## modelr 0.1.8 2020-05-19 [1] CRAN (R 4.0.3)
## munsell 0.5.0 2018-06-12 [1] CRAN (R 4.0.3)
## nlme 3.1-152 2021-02-04 [2] CRAN (R 4.1.1)
## pillar 1.6.4 2021-10-18 [1] CRAN (R 4.1.1)
## pkgbuild 1.2.0 2020-12-15 [1] CRAN (R 4.0.3)
## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.0.3)
## pkgload 1.2.3 2021-10-13 [1] CRAN (R 4.1.1)
## prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.0.3)
## processx 3.5.2 2021-04-30 [1] CRAN (R 4.0.5)
## ps 1.6.0 2021-02-28 [1] CRAN (R 4.0.4)
## purrr * 0.3.4 2020-04-17 [1] CRAN (R 4.0.3)
## R6 2.5.1 2021-08-19 [1] CRAN (R 4.1.1)
## Rcpp 1.0.7 2021-07-07 [1] CRAN (R 4.1.0)
## readr * 2.0.2 2021-09-27 [1] CRAN (R 4.1.1)
## readxl 1.3.1 2019-03-13 [1] CRAN (R 4.0.3)
## remotes 2.4.1 2021-09-29 [1] CRAN (R 4.1.1)
## reprex 2.0.1 2021-08-05 [1] CRAN (R 4.1.0)
## rlang 0.4.12 2021-10-18 [1] CRAN (R 4.1.1)
## rmarkdown 2.11 2021-09-14 [1] CRAN (R 4.1.1)
## rprojroot 2.0.2 2020-11-15 [1] CRAN (R 4.0.3)
## rstudioapi 0.13 2020-11-12 [1] CRAN (R 4.0.3)
## rvest 1.0.2 2021-10-16 [1] CRAN (R 4.1.1)
## sass 0.4.0 2021-05-12 [1] CRAN (R 4.0.5)
## scales 1.1.1 2020-05-11 [1] CRAN (R 4.0.3)
## sessioninfo 1.2.1 2021-11-02 [1] CRAN (R 4.1.1)
## stringi 1.7.5 2021-10-04 [1] CRAN (R 4.1.1)
## stringr * 1.4.0 2019-02-10 [1] CRAN (R 4.0.3)
## testthat 3.1.0 2021-10-04 [1] CRAN (R 4.1.1)
## tibble * 3.1.5 2021-09-30 [1] CRAN (R 4.1.1)
## tidyr * 1.1.4 2021-09-27 [1] CRAN (R 4.1.1)
## tidyselect 1.1.1 2021-04-30 [1] CRAN (R 4.0.5)
## tidyverse * 1.3.1 2021-04-15 [1] CRAN (R 4.0.5)
## tzdb 0.2.0 2021-10-27 [1] CRAN (R 4.1.1)
## usethis 2.1.3 2021-10-27 [1] CRAN (R 4.1.1)
## utf8 1.2.2 2021-07-24 [1] CRAN (R 4.1.0)
## vctrs 0.3.8 2021-04-29 [1] CRAN (R 4.0.5)
## vroom 1.5.5 2021-09-14 [1] CRAN (R 4.1.1)
## withr 2.4.2 2021-04-18 [1] CRAN (R 4.0.5)
## xfun 0.27 2021-10-18 [1] CRAN (R 4.1.1)
## xml2 1.3.2 2020-04-23 [1] CRAN (R 4.0.3)
## yaml 2.2.1 2020-02-01 [1] CRAN (R 4.0.3)
##
## [1] /home/annadoizy/R/x86_64-pc-linux-gnu-library/4.1
## [2] /usr/lib/R/library
##
## ──────────────────────────────────────────────────────────────────────────────