Analyse graphique de la dynamique epidemique du COVID-19 en France
Visualisation des variations de vitesse de propagation de l'épidémie dans le temps.
- Mise à jour des commentaires
- Données de DataAgainst Covid-19
- Dernières données pour la France
- Dynamique de l'épidémie
- Graphes par régions
Ce post présente la dynamique de l'épidémie et propose des graphiques montrant différentes normalisations des données permettant de mesurer les variations de la vitesse de propagation du virus.
J'ai commencé ce projet en avril 2020, lorsque la dynamique de l'épidémie était très incertaine, durant le confinement en France. Mon objectif est de mettre à jour les données toutes les semaines pour permettre un suivi des chiffres loin du sensationnalisme et des sous-estimations que l'on peut retrouver dans les médias.
Dans ce contexte, l'accent est mis sur les données pondérées sur 7 jours, ce qui permet de lisser les fluctuations importantes que l'on observe entre les différents jours de la semaine. Vous retrouverez le code utilisé à l'adresse suivante : payoto/covid19-viz
import pandas as pd
from matplotlib import pyplot as plt
import requests
import datetime
from IPython.display import display, Markdown
import viz
display(Markdown("Article mis à jour le {}".format(datetime.date.today().strftime("%d/%m/%Y"))))
Mise à jour des commentaires
Le 06/01/2021
Nouvelle année marquée par des tendances stables: il ne semble pas il y avoir augmentation ou réduction en ce moment.
Les données de cas sont très bruitées au moment de Noël et du jour de l'an, il va falloir attendre encore une dizaine de jour avant de voir l'impact de ces évenement sur les tendances de cas et d'hospitalisations et réanimations.
Le 13/12/2020
Le relachement des restrictions fait son effet et la prévalence du COVID-19 reprend son ascention. Le nombre de cas augmente à nouveau de 3% par jour.
Le 27/11/2020
Le pic de décès, réanimation et hospitalisations ne fut atteint que le 16 Novembre les indicateurs indiquent une amélioration marquée. La deuxième vague aura eu une ampleur très similaire à la première vague.
Le 14/11/2020
Le deuxième confinement a fait son effet et le nombre de cas et de décès ont atteint leur pic dans la semaine du 2 et 9 Novembre respectivement. Le pic de réanimation et hospitalisations est attendu dans les jours à venir.
Le 25/10/2020
Les tendances sont similaires à la semaine dernière et restent inquiétantes.
Malgré on observe un ralentissement du nombre de décès (pic a +10%/jour le 18/10/2020). à cause des différentes moyennes glissantes les nombres pour cette semaine ne sont pas encore définitifs. Ce ralentissement est important car de manière contre-intuitive le pic de décès lors de la première vague intervint avant le pic de réanimation et le pic d'hospitalisations.
L'augmentation du nombre de cas reste stable à +5% par jour. Cette indicateurs n'est pas fiable vu le taux de positivité des tests. (~14%)
Le 17/10/2020
Tous les indicateurs montrent une croissance exponentielle de la maladie et une deuxième vague sérieuse se profile.
Le taux d'accroissement journalier +5% pour tous les indicateurs.
Le 11/10/2020
- Nous observons sur les trois dernières semaines une stabilisation du nombre de réanimation : nous observons une augmentation linéaire de 25 personnes en réanimation par jour. C'est un signe encourageant qui suggère que l'épidémie a ralenti il y a quelques semaines. Malheureusement ceci ne nous donne pas d'information sur la trajectoire des deux dernières semaines.
- Ajout du nombre de cas aux graphiques concernant la France.
Le 27/09/2020
Aujourd'hui une vue agrandie sur les dernières semaines est ajoutée.
- Nous observons un phénomène surprenant d'une baisse de nombre de personne à l'hôpital, cela semble être un phénomène externe qui ne correspond pas à la dynamique de la maladie ;
- un relativement grand nombre de décès le 18/09 (80) sort de la tendance en cours.
Le 20/09/2020
Deux points importants apparaissent dans les données :
- L'augmentation du nombre de personne en réanimation et hôpital semble se stabiliser autour de +5% par jour (doublement toutes les deux semaines) ;
- Sans surprise, les tendances en réanimations et hospitalisations commencent à apparaître dans les courbes de décès.
from viz import *
file_name = 'opencovid19-fr-chiffres-cles.csv'
url = 'https://raw.githubusercontent.com/opencovid19-fr/data/master/dist/chiffres-cles.csv'
myfile = requests.get(url)
open(file_name, 'wb').write(myfile.content)
data = pd.read_csv('opencovid19-fr-chiffres-cles.csv')
data.tail()
data = enable_time_series_plot(data, timein_field="date", timeseries_field_out="t")
Dernières données pour la France
Ici, nous tabulons les derniers jours de données pour la France. Les données brutes ainsi que les données avec une moyenne glissante sur 7 jours sont calculées. Nous n'observons que les réanimations, les hospitalisations et les décès. Les données de cas confirmés ont longtemps été insuffisantes pour permettre une analyse intelligente de l'épidémie.
Dans les graphiques ci-après nous analysons trois types de données :
- les données brutes d'entrées en réanimation et de décès ;
- ces même données pondérées sur 7 jours ;
- ces données pondérées normalisée par le nombre de personnes en réanimation.
Ce troisième graphique donne donc une indication de l'accélération ou ralentissement, même lorsque les données sont d'ampleurs très différentes.
maille_active = 'FRA'
fra = oc19_data_preproc(data, maille_active)
fra.tail(10)
Dans ce graphe nous montrons les étâts les plus critiques de la maladie: les décès et les réanimations. Vu que chaque jour la donnée publiée est le nombre total de personne en réanimation, et que nous cherchons l'évolution nous calculons la différence entre chaques jours. Il faut aussi prendre en compte qu'un décès, de manière assez cynique "libère" un lit en réanimation. Pour éviter de voir une amélioration de la situation lorsque le taux de mortalité augmente, nous regardons aussi le "solde vivant" en réanimation: nombre entrant
- nombre sortant vivant
de réanimation.
Dynamique de l'épidémie
Dans les graphiques qui suivent nous regardons sur l'axe des abscisses le nombre de personnes dans un état donné de maladie COVID. Vous retrouvez ces valeurs sur le graphique de gauche.
Au milieu, l'axe des ordonnées représente le changement de jour en jour de l'axe des abscisses, les points indique les données brutes, et la ligne les données moyennées.
A droite, ces mêmes données de l'axe des ordonnées sont normalisées pour indiquer un changement en pourcents par jour.
Chaque couleur correspond à une semaine.
def plots_maille_code(maille_active='FRA', **kwargs):
fra = oc19_data_preproc(data, maille_active)
plt.close()
# plot_field_loops(fra, "deces_ehpad", center=False, maille_active=maille_active)
plot_field_loops(fra, "hospitalises_cumul", [7], center=True, maille_active=maille_active, **kwargs)
plot_field_loops(fra, "reanimation_cumul", [7], center=True, maille_active=maille_active, **kwargs)
plot_field_loops(fra, "deces", center=True, maille_active=maille_active, **kwargs)
if maille_active == "FRA":
plt.show()
display(Markdown(
"Pour la France le nombre de cas peut-être analysé. Contrairement aux autres"
+ " quantités le nombre de cas est lissé sur 14 jours avec une fenêtre triangulaire."
))
plot_field_loops(
fra, "cas_confirmes", [14], center=True, maille_active=maille_active,
win_type='triang', **kwargs
)
return fra
_ = plots_maille_code(maille_active='FRA')
Il est intéressant de zoomer sur les données depuis la fin du confinement.
_ = plots_maille_code(maille_active='FRA', start_date='2020-09-01')
Ces courbes évoluent en boucles (ou en spirale en cas de plusieurs vagues successives) :
- Au début de l'épidémie les courbes commencent à l’origine ;
- puis se suit une accélération rapide dans la partie supérieure du graphique ;
- avec le confinement l'augmentation de jour en jour ralenti, cela se voit à la pente négative dès la semaine du 23 Mars ;
- l'épidémie atteint son pic la semaine du 06 Avril ;
- Nous voyons ensuite une réduction stable autour de 5% par jour jusqu'à la semaine du 08 Juin ;
- La période estivale indique bien que l'épidémie n'allait pas disparaître car ne retournant pas à l’origine ;
- depuis le 15 Août le nombre de d'hospitalisations et de réanimation s'accroit et c'est la deuxième semaine de Septembre qui semble indiqué qu'une deuxième vague a commencé.
Une deuxième vague se manifestera comme une spirale dans les graphiques au-dessus.
_ = plots_maille_code(maille_active='REG-11')
_ = plots_maille_code(maille_active='REG-11', start_date='2020-09-01')
list_reg = [r for r in data["maille_code"].unique() if "REG" in r]
for reg in list_reg:
oc19_data_preproc(data, reg)