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 fonction install_github() présente dans le package devtools sans avoir à lancer la commande library(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’argument data dans la fonction geom_*() 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
## 
## ──────────────────────────────────────────────────────────────────────────────
Anna Doizy
Anna Doizy
Chercheuse, consultante et formatrice freelance
Libre comme l’R

Méthodologie scientifique et analyses de données statistiques