#+TITLE: Quelques chiffres autour de l'épidémie de Covid-19
#+AUTHOR: François Févotte
# #+DATE: La date du jour
#+LANGUAGE: fr
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
* Récupération des données
On prend les données distribuées par [[https://ourworldindata.org][Our World In Data]], elles-mêmes issues de
l'[[https://www.ecdc.europa.eu/][ECDC]] :
#+BEGIN_SRC python :results none :session :exports none
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
plt.style.use('seaborn')
#+END_SRC
#+BEGIN_SRC python :results value :session :exports both
url = "https://covid.ourworldindata.org/data/ecdc/full_data.csv"
data_raw = pd.read_csv(url, index_col='date')
data_raw.tail(3)
#+END_SRC
#+RESULTS:
: location new_cases new_deaths total_cases total_deaths
: date
: 2020-04-04 Zimbabwe 1 0 9 1
: 2020-04-05 Zimbabwe 0 0 9 1
: 2020-04-06 Zimbabwe 0 0 9 1
* Evolution comparée de l'épidémie dans quelques pays
Je préfère fonder l'analyse sur le nombre de décès, qui me semble plus fiable et
comparable d'un pays à l'autre que, par exemple, le nombre de cas dépistés. Afin
de recaler l'axe temporel, on positionne $t=0$ au moment où le nombre total de
morts dépasse 100.
#+BEGIN_SRC python :results value :exports both :session
# Parameters
column = "total_deaths"
threshold = 100
countries = ["France", "Italy", "Spain", "Belgium", "Germany", "Switzerland"]
total = {}
for country in countries:
total[country] = data_raw.query(f"location == '{country}' & {column} > {threshold}")
daily[countries[0]].head(3)
#+END_SRC
#+RESULTS:
: location new_cases new_deaths total_cases total_deaths
: date
: 2020-03-14 France 785 18 3661 79
: 2020-03-16 France 924 36 5423 127
: 2020-03-17 France 1210 21 6633 148
#+BEGIN_SRC python :session :results output file :exports results :var pltfile="total.png"
plt.figure(figsize=(10,5))
for country in total.keys():
x = total[country]['total_deaths']
plt.plot(numpy.arange(len(x)), x, label=country, linewidth=3)
plt.xlabel(f"Number of days since {column} > {threshold}")
plt.yscale("log")
plt.legend(fontsize='x-large')
plt.tight_layout()
plt.savefig(pltfile)
plt.close()
print(pltfile)
#+END_SRC
#+RESULTS:
[[file:total.png]]
* Vers un passage du pic ?
On s'intéresse ici à l'atteinte d'un pic du nombre de décès quotidiens liés à
Covid-19. Là encore, l'axe temporel est recalé afin de permettre une
comparaison entre pays : $t=0$ est positionné au moment où le nombre quotidien
de morts dépasse 15.
#+BEGIN_SRC python :session :results value :exports both
threshold = 15
daily = {}
for country in countries:
daily[country] = data_raw.query(f"location == '{country}' & new_deaths > {threshold}")
daily[countries[0]].head(3)
#+END_SRC
#+RESULTS:
: location new_cases new_deaths total_cases total_deaths
: date
: 2020-03-14 France 785 18 3661 79
: 2020-03-16 France 924 36 5423 127
: 2020-03-17 France 1210 21 6633 148
#+BEGIN_SRC python :session :results output file :exports results :var pltfile="daily.png"
plt.figure(figsize=(10,5))
for country in daily.keys():
x = daily[country]['new_deaths']
plt.plot(numpy.arange(len(x)), x, label=country, linewidth=3)
plt.xlabel(f"Number of days since daily deaths > {threshold}")
plt.yscale("log")
plt.legend(fontsize='x-large')
plt.tight_layout()
plt.savefig(pltfile)
plt.close()
print(pltfile)
#+END_SRC
#+RESULTS:
[[file:daily.png]]