#+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]]