Nous utilisons ici les données sur la situation hospitalières concernant l’épidémie de COVID-19 provenant du site de Santé publique France et téléchargeables ici https://www.data.gouv.fr/fr/datasets/donnees-hospitalieres-relatives-a-lepidemie-de-covid-19/. Parmi toutes les données proposées, nous avons décidé de n’utiliser que les données hospitalières disponibles par département.

#Today 
DataDate <- "2020-05-27"

Pour cet essai, le jeu de données est en date du 2020-05-27. Nous avons utilisé R et les librairies suivantes (déplier le premier bouton pour afficher le code)

library(dplyr)
library(ggplot2)
library(readxl)
library(ggrepel)
library(plotly)
library(ggthemes)
library(directlabels)
theme_black<- function (base_size = 11, base_family = ""){
    theme_minimal() %+replace% 
        theme(
              # line = element_line(colour = "white", size = 0.5, linetype = 1, 
              #           lineend = "butt"), 
              # rect = element_rect(fill = "white", 
              #           colour = "white", size = 0.5, linetype = 1), 
              legend.position="none",
              text = element_text(family = base_family, 
                        face = "plain", colour = "grey50", size = base_size,
                        #angle = 0, lineheight = 0.9, 
              hjust = 0, vjust = 0),
              plot.background = element_rect(colour = 'black', fill = 'black'),
              plot.title = element_text(size = rel(1.1)),
              #panel.border = element_rect(fill = NA, colour = "white"), 
              panel.grid.major = element_line(colour = "black", size = 0.2),
              panel.grid.minor = element_line(colour = "grey30", size = 0.5)
              #strip.background = element_rect(fill = "grey30", colour = "grey30")
             )
}

theme_black_grid<- function (base_size = 11, base_family = ""){
    theme_black() %+replace% 
        theme(
          text = element_text(family = base_family, 
                        face = "plain", colour = "grey10", size = base_size,
                        angle = 0, lineheight = 0.9, hjust = 0, vjust = 0),
              panel.grid.minor = element_line(colour = "black", size = 0.5)
             )
}

Le jeu de données

Nous pensons que seules les données concernant les décès , le nombre de personnes en réanimation sont pertinentes pour l’analyse. En effet, les données relatives aux tests de dépistage de COVID-19 réalisés en laboratoire de ville, donnant une approximation du nombre de cas peuvent dépendre de la situation particulière de chaque département ou ville. En outre, les données des urgences hospitalières et de SOS médecins relatives à l’épidémie de COVID-19 ne nous semblent pas pertinentes car mélangeant diverses causes d’accès à l’hôpital. Il a également été montré que les données des décès dans les EHPAD n’ont pas été renseignées correctement au cours de l’épidémie.

Les données hospitalières comportent recensées, jour par jour et pour chaque département les variables suivantes :

Cette dernière variable n’étant disponible qu’en cumul, nous calculerons le nombre de décès par jour en effectuant une soustraction: \[Nb\; décès\; jour_J = cumul\; jour_j - cumul\; jour_{j-1} \]

Nous décidons de nous concentrer sur les deux variables les plus pertinentes à nos yeux:

# Data on Covid-19 are from 
# https://www.data.gouv.fr/fr/datasets/donnees-hospitalieres-relatives-a-lepidemie-de-covid-19/

# https://www.data.gouv.fr/fr/datasets/r/41b9bd2a-b5b6-4271-8878-e45a8902ef00

covid.raw <- read.csv(paste0("Data/donnees-hospitalieres-covid19-",DataDate,"-19h00.csv"), header = TRUE, sep = ";")

# Adding elements on departments and regions from  https://www.insee.fr/fr/information/3363419 
dep.raw <- read.csv("Data/depts2018.txt", header = TRUE,  sep="\t")
regions.raw <- read.csv("Data/reg2018-CB.txt", header = TRUE,  sep="\t")

# Population par departement  https://www.insee.fr/fr/statistiques/1893198  (Slighlty editied to remove the header !!)
pop.raw <- read_excel("Data/estim-pop-dep-sexe-aq-1975-2020-CB.xls" ,  sheet = "2020")

dep.info <- merge(dep.raw, pop.raw, by.x = "DEP", by.y = "Num"  )
dep.info <- merge(dep.info, regions.raw, by.x = "REGION", by.y = "REGION"  )

dep.light <- dep.info %>%
  select("DEP", "Nom",  "REGION", "NCCENR.y", "Total...23") %>%
  rename( NomDep = Nom, 
          NomRegion = NCCENR.y , 
          PopDep = Total...23 )

###   Now merge with for the Covid data
covid.data <- merge(covid.raw, dep.light, by.x = "dep", by.y = "DEP")

# Test on one department ...
dep.test <- 68  #68
data.test <- covid.data %>%
  filter(dep == dep.test & sexe == 0) %>%
  mutate(NumJour = as.numeric(jour) )%>%
  arrange(NumJour) %>%
  rename(NbRea = rea)%>%
  mutate(NbDeath = dc - lag(dc, default = 0), 
         ReturnJ = rad - lag(rad, default = 0), 
         HospOnlyJ = hosp - NbRea - ReturnJ - NbDeath
         )
covid.dep <-  covid.data %>%
  filter( sexe == 0) %>%
  mutate(NumJour = as.numeric(jour) )%>%
  rename(NbRea = rea)%>%
  group_by(dep) %>% 
  arrange(NumJour) %>%
  mutate(NbDeath = dc - lag(dc, default = 0), 
         ReturnJ = rad - lag(rad, default = 0), 
         HospOnlyJ = hosp - NbRea - ReturnJ - NbDeath) %>%
  arrange(dep, NumJour)
# if we work on a few...   c( 54,57, 67, 68 , 75)
data.dep5 <- covid.dep %>%
  filter(dep %in% c( 10, 67, 68, 51, 52) ) %>%
  arrange(dep, NumJour)
names(data.dep5$NomDep) = "Dept"

Un exemple sur 5 départements du Grand-Est

J’aime bien regarder des choses simples pour explorer les données. Ici, on visualise le nombre de personnes en réanimation au cours du temps sur 5 départements.

Comme il fallait s’y attendre, nous constatons que certaines données sont entachées d’erreurs (ici un nombre de décès négatif dans le Bas-Rhin). Il faudra sûrement soit corriger, soit lisser ces données afin que les erreurs n’influencent pas la tendance générale de la représentation

Il y a des problèmes de données..

D’autres problèmes apparaissent lorsqu’on cherche à relier ces points ce qui est une erreur puisque la dimension temps est manquante dans cette analyse. On constate toutefois l’extrême variabilité des données reportées au jour le jour sur ce graphique des 20 premiers jours. .

Comment introduire la dimension temporelle ?

Nous décidons de changer radicalement la représentation graphique en reliant les points chronologiquement (en utilisant un lineplot comme expliqué par Yan Holtz ici https://www.r-graph-gallery.com/connected_scatterplot_ggplot2.html )

Une conclusion partielle, est que :

  • il faut changer d’échelle et passer au niveau régional pour éviter des variations parasites et sans trop de sens…
  • la représentation chronologique liant les réanimations et les décès peut s’avérer pertinente.

Changement de regard: Taux de décès vs taux de réanimation

Nous reviendrons plus tard sur l’aspect dynamique de l’évolution conjointe du nombre de réanimations et de décès et changeons complètement d’optique:

  1. En représentant les taux de décès et de réanimation rapportés par Million d’habitants calculées en cumulant tous les décès et tous les nombres de personnes en réanimation depuis le début de l’épidémie jusqu’au `r DataDate’.
  2. En simplifiant au possible la représentation pour n’afficher qu’une valeur par région

Sur le graphique suivant sont représentées des droites liant l’origine des axes et le point (Taux de réanimation par Million d’hab., Taux de décès par Million d’hab.) pour chaque région. La longueur de ces segments montre l’impact global du COVID-19 subi en nombre de décès ET en nombre de réanimations par Million d’habitants. En outre, la relation entre ces deux variables montre le taux relatif de décès par rapport aux nombre de réanimations.

Si ce taux était le même pour toutes les régions, alors les droites auraient toutes le même angle

En outre, la position de ce point permet de classer :

  • verticalement, les régions ayant le plus fort de décès / Million d’hab.
  • horizontalement, les régions ayant connu le plus grand nombre de réanimation / Million d’hab.
  • La longueur du segment montre la pression subie par chaque région ramenée à la population

Nous pouvons voir que :

  • l’Occitanie est la 3ième région la moins touchée (hors Corse et DOM) en terme de décès ainsi qu’en terme de nombre de réanimations lorsque l’on ramène les données à la population.
  • La région Grand-Est a connu un nombre de décès le plus important lorsque l’on ramène les données à la population.
  • Pour un nombre de réanimations égale, la région Grand-Est a connu plus de décès que les autres régions
  • La région Ile de France a connu un nombre de réanimations le plus important, et le second plus fort taux de décès ramené à la population.

Taux de décès vs taux de réanimation par région

L’analyse en small multiple région par région confirme cette impression visuelle.

Visualisation au cours du temps

Maintenant que l’analyse globale est faite, penchons nous de nouveau sur la représentation temporelle de l’évolution jointe des réanimations et des décès.

La mauvaise idée : Travailler sur les valeurs !

Nos régions étant plus ou moins peuplées, toute représentation en valeur du Nombre de décès et du nombre de réanimation ne va pas permettre de comparr grange chose. Les grandes régions imposeront l’échelle du graphique et les petites régiosn en seront pas visible. Exempel ci-dessous.

On constate que l’on a bien une boule de poil pour les “petites” régions. La version interactive de ce graphique n’apportant pas grand chose…

version interactive sous plotly

La bonne idée, travailler en Taux (par M/hab)

Tout comme pour la version statique des nombres cumulés, nous pouvons essayer de représenter les condition journalières des hôpitaux vis-à-vis des personnes en réanimation et de celles décédées. Nous avons réalisé cela en suivant reliant le nombre de réanimations et de décès au cours du temps. On obtient ainsi une circulation orientée par l’intensité du phénomène pour chaque région. Pour ces graphiques, nous avons également opté pour un lissage sur 5 jours des observations.

Conclusion

Beaucoup de possibilités restent à explorer sur ces données. Nous n’avons utilisé ici que deux variables dont les relations nous intéressaient spécialement tant elles nous semblaient reliées. le nombre de décès et le nombre de personnes en réanimation. Il est certain que des effets retard existent entre ces variables.

Parfois la simplicité l’emporte.

En utilisant des graphiques très simples, nous avons mis en avant l’intensité de la crise pour nos régions et en révélons l’hétérogénéité. Nous avons également exploré la possibilité de visualiser l’interdépendance décès / réanimations au cours du temps en montrant à la fois la différence d’intensité (Ile de France et Grand-Est vs les autres régions) et des structures différentes. Ceci révèle que les réanimations et les décès n’ont pas évolué de la même façon dans les différentes régions étudiées. Le graphique montrant les Taux de décès / Taux de réanimation (le seul sur fond noir) en est une illustration. Certains patterns se dessinent mais il faudra plus de temps pour les exploiter finement.