Je suis loin d'être une développeuse python. Je n'ai jamais vraiment appris ce langage... Je l'utilise plutôt comme un outil...
Depuis hier, on parle de sortie du confinement et je me suis demandé comment représenter l'état de la situation actuelle. En gros, on a des gens qui rentre à l'hôpital à cause du COVID 19. Parmi ceux-ci, certains sont en réanimation. Au bout d'un certain temps, les malades finissent par sortir, soit parce qu'ils sont morts, soit parce qu'ils sont sur la voix de la guérison et peuvent rentrer chez eux.
Après avoir pas mal tâtonné, j'ai réussi à produire ce genre de graphique :
Aujourd'hui 8 avril, dans le département 91, Il y a 1125 personnes à l'hôpital (les carrés bleus), dont 222 en réanimation (les carrés rouges). Il y a eu 163 décès depuis le 19 mars et 394 retours.
Si je génère ces graphiques depuis le début, cela donne cette animation :
On voit clairement qu'il y a de plus en plus de monde à l'hôpital, et que la fin de la quarantaine n'est pas pour demain. Par soucis de transparence, et pour que chacun puisse jouer avec les données, voilà des bouts de code python que j'ai utilisés.
import csv
def depdc(dpt,sex,fichier):
tab=[]
with open(fichier, newline='') as dhcovid:
lecteur=csv.reader(dhcovid)
for ligne in lecteur:
dc=ligne[6]
if (ligne[1] == sex) and (ligne[0] == dpt):
nb = int(dc)
tab.append(nb)
return tab
Pour le département 93, tout sexe confondu, la fonction retourne ce tableau :
[5, 5, 19, 20, 23, 28, 38, 47, 68, 82, 100, 113, 124, 161, 187, 208, 240, 263, 285, 296, 368, 402]
import matplotlib.pyplot as plt
def barres(quand,quoi,couleur):
plt.figure(figsize=(10, 10))
plt.xticks(rotation=90)
plt.bar(quand, quoi,color=couleur)
plt.show()
import matplotlib.pyplot as plt
def croix(combien):
plt.axis("off")
x=0
y=0
for i in range(combien):
x=x+5
if x>100:
y=y+1
x=5
plt.plot(x,y,'b+')
Pour dessiner un rond, j'utilise la fonction scatter de pyplot :
import random
import matplotlib.pyplot as plt
def points(combien):
Depuis hier, on parle de sortie du confinement et je me suis demandé comment représenter l'état de la situation actuelle. En gros, on a des gens qui rentre à l'hôpital à cause du COVID 19. Parmi ceux-ci, certains sont en réanimation. Au bout d'un certain temps, les malades finissent par sortir, soit parce qu'ils sont morts, soit parce qu'ils sont sur la voix de la guérison et peuvent rentrer chez eux.
Après avoir pas mal tâtonné, j'ai réussi à produire ce genre de graphique :
Données hospitalières COVID19 pour l'Essonne le 8 avril |
Aujourd'hui 8 avril, dans le département 91, Il y a 1125 personnes à l'hôpital (les carrés bleus), dont 222 en réanimation (les carrés rouges). Il y a eu 163 décès depuis le 19 mars et 394 retours.
Si je génère ces graphiques depuis le début, cela donne cette animation :
Données hospitalières COVID19 pour l'Essonne depuis le 19 mars |
On voit clairement qu'il y a de plus en plus de monde à l'hôpital, et que la fin de la quarantaine n'est pas pour demain. Par soucis de transparence, et pour que chacun puisse jouer avec les données, voilà des bouts de code python que j'ai utilisés.
Lecture du fichier csv
J'ai d'abord un petit script qui ne fait que lire ce qu'il y a dans le fichier fournit par santé publique France [1] Par exemple, cette fonction lit le nombre cumulé de décès, les filtre par département (par exemple le 93) et les stocke dans un tableau. Il peut être téléchargé sur Sourcesup [2]
import csv
def depdc(dpt,sex,fichier):
tab=[]
with open(fichier, newline='') as dhcovid:
lecteur=csv.reader(dhcovid)
for ligne in lecteur:
dc=ligne[6]
if (ligne[1] == sex) and (ligne[0] == dpt):
nb = int(dc)
tab.append(nb)
return tab
Pour le département 93, tout sexe confondu, la fonction retourne ce tableau :
[5, 5, 19, 20, 23, 28, 38, 47, 68, 82, 100, 113, 124, 161, 187, 208, 240, 263, 285, 296, 368, 402]
Libre à moi d'en faire ensuite ce que je veux.
Diagramme barre :
Maintenant que j'ai mes données, je peux en faire ce que je veux. Si je récupère les dates dans un autre tableau, je peux par exemple utiliser pyplot pour représenter un diagramme barre.
Evolution du nombre de décès pour le département 93 |
Le bout de fonction qui fait ça :
import matplotlib.pyplot as plt
def barres(quand,quoi,couleur):
plt.figure(figsize=(10, 10))
plt.xticks(rotation=90)
plt.bar(quand, quoi,color=couleur)
plt.show()
Représentation avec des croix...
Comme les morts ne bougent plus beaucoup, j'ai choisi de les aligner par ligne de 20 en dessinant un "+".
import matplotlib.pyplot as plt
def croix(combien):
plt.axis("off")
x=0
y=0
for i in range(combien):
x=x+5
if x>100:
y=y+1
x=5
plt.plot(x,y,'b+')
Pour tester, le Jura est pas mal. Il n'y a que 19 décès, 100 personnes hospitalisées et 30 retours à domicile.
Données hospitalières COVID19 pour le Jura le 8 avril |
Représentation des hospitalisés et des retours
J'ai choisi de représenter les personnes hospitalisées et rentrées à la maison par des positions aléatoires, surtout pour m'amuser je crois....
Si je prends les données des Bouches du Rhône, on voir que l'on a beaucoup plus de retours que dans l'Essonne.
Données hospitalières COVID19 pour les Bouches de Rhône |
import random
import matplotlib.pyplot as plt
def points(combien):
plt.axis("off")
for i in range(combien):
x=random.randint(0,100)
y=random.randint(0,100)
plt.scatter(x,y)
plt.plot(x,y,'rs')
Pour dessiner un carré, j'utilise plot, avec "rs" pour "red square" pour les personnes en réanimation, ou "bs" avec un b comme bleu pour les autres :
plt.plot(x,y,'rs')
plt.plot(x,y,'bs')
import lecteurcsv,random
Est-ce dû à la chloroquine ? Il faut faire extrêmement attention quand on manipule des données, et ne pas oublier le paradoxe de Simpson dont parle David Louapre dans cette vidéo.
Séparation en trois parties.
Comme je ne suis pas une spécialiste de python,j'ai eu besoin d'un peu de documentation pour avoir 2 colonnes et deux lignes.
Sur la première colonne et occupant deux lignes (121), j'affiche les hospitalisés.
Sur la deuxième colonne, j'affiche les décès sur la première ligne (222) et les retours sur la deuxième ligne (224).
import matplotlib.pyplot as plt
source="donnees-hospitalieres-covid19-2020-04-08-19h00.csv"
# Le département
lieu = "71"
# Le sexe
qui = "0"
# Le numéro du jour
num = 21
plt.suptitle ("Dep "+lieu+" : "+dates[num])
plt.suptitle ("Dep "+lieu+" : "+dates[num])
plt.subplot(121)
plt.title(str (hosp[num])+" hosp (dont "+str(rea[num])+" rea)")
deuxfig(hosp[num],rea[num])
plt.title(str (hosp[num])+" hosp (dont "+str(rea[num])+" rea)")
deuxfig(hosp[num],rea[num])
plt.subplot(222)
plt.title(str (deces[num])+" décès")
croix(deces[num])
plt.subplot(224)
plt.title(str (deces[num])+" décès")
croix(deces[num])
plt.subplot(224)
plt.title(str (rad[num])+" retours")
points(rad[num])
On voit aussi qu'il y a plus de retours que de personnes hospitalisées.
points(rad[num])
Pour la Saône et Loire, ça donne ça :
Données hospitalières COVID19 pour la Saône et Loire |
On voit aussi qu'il y a plus de retours que de personnes hospitalisées.
Outre le fait de s'amuser avec python, ces petits points montrent que dans certains départements, comme l'Essonne, la sortie du confinement n'est pas pour demain. Si c'est le cas, ce serait vraiment idiot. Il y a de plus en plus de personnes hospitalisées et peu sont encore sorties.
Attention aussi à l'excès de confiance. Dans le cas du COVID 19, il peut être mortel !
Attention aussi à l'excès de confiance. Dans le cas du COVID 19, il peut être mortel !
Mise à jour le 24 avril 2020 :
Il y a encore beaucoup de monde dans les hôpitaux de l'Essonne. Si le nombre de personnes en soins intensifs diminue légèrement, le nombre d'hospitalisés stagne plus ou moins... Cela doit sans doute correspondre à la capacité maximale des hôpitaux.
- Données hospitalières relatives à l'épidémie de COVID-19
- git clone https://git.renater.fr/anonscm/git/dhzazaa/dhzazaa.git
Commentaires
Ce qui est sûr, c'est qu'effectivement, on y est pour un moment, d'autant que certains commerces (jardineries, bricolages) ré-ouvrent en mode "plages courtes", mais on peut observer des dérives (genre une famille entière qui va faire ses courses de première nécessité à la jardinerie)...