[PYTHON] [Introduction à matplotlib] Lire l'heure de fin à partir des données COVID-19 ♬

Il y a des choses que j'ai apprises de la simulation précédente du nouveau Corona, mais si vous regardez de près, cela me fait penser que le pic d'infection peut être prévisible à partir du graphique de l'état d'infection de Corona. C'était la simulation suivante. pNo1000_R30sec_IP30%.gif Autrement dit, le graphique à barres rouge montre le nombre d'infections et le graphique à barres vertes montre le nombre de traitements, mais il est difficile de prédire combien le nombre d'infections augmentera, mais le nombre de traitements est limité au nombre d'infections, donc au moins les infections Il ne dépasse pas le nombre. De plus, lorsqu'il est exprimé en termes de taux de guérison, il est proche de 100% à la fin. De plus, le taux de guérison atteint toujours son maximum après le pic d'infection. À première vue, il semble que le nombre d'infections qui culminent en premier soit plus facile à déterminer la fin, mais il n'est pas clair si ce pic est nécessairement la limite supérieure. En revanche, le nombre de cures culmine autour de 50% et devrait progressivement se rapprocher de cette valeur. En d'autres termes, si vous suivez cette valeur, il semble que l'heure de fin sera à peu près visible. En regardant le graphique ci-dessus avec la conviction que l'infection est en train de se saturer dès le début de la guérison. Cette fois, voyons d'abord si les données réelles se comportent de la même manière. 【référence】 ・ Visualisez le nombre de personnes infectées par le virus corona avec matplotlib

Ce que j'ai fait

・ Explication du code ・ Visualisez le nombre de personnes infectées dans chaque pays

・ Explication du code

Le code est ci-dessous. ・ Collective_particles / draw_covid19.py

Cette fois, il s'agit d'une méthode de visualisation de plusieurs données. Pour visualiser les données d'infection, obtenez au moins 3 données à partir des sites suivants. Par souci de simplicité, j'ai téléchargé le fichier zip à partir du site de référence suivant et l'ai développé. (Le lien ci-dessous est la page de lien du fichier. Nous vous recommandons de télécharger par lots à partir de la référence ci-dessous) time_series_19-covid-Confirmed.csv time_series_19-covid-Deaths.csv time_series_19-covid-Recovered.csv 【référence】 ・ CSSEGISandData / COVID-19 Nous traiterons ces données de manière appropriée et dessinerons un graphique similaire à celui ci-dessus. Le processus jusqu'au dessin graphique est expliqué ci-dessous. Tout d'abord, utilisez le fichier Lib. Ici, l'environnement utilise également Jetson-nano cette fois, mais pandas vient d'être installé. Quant à la référence, j'ai eu une erreur si c'était simple, alors je l'ai finalement saisie avec la commande suivante.

sudo apt-get install python-pandas
sudo apt-get install python3-pandas

Le code suivant fonctionnait sur python, mais l'importation de pandas ne fonctionnait pas sur python3.

$ python3
Python 3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> 

【référence】 ・ Comment installer Pandas en 3 minutes sans utiliser pip

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

Ensuite, lisez les trois fichiers csv comme suit.

#Lisez les données CSV avec les pandas.
data = pd.read_csv('COVID-19/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv')
data_r = pd.read_csv('COVID-19/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Recovered.csv')
data_d = pd.read_csv('COVID-19/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Deaths.csv')

Définissez la variable. Les données à lire ont la structure suivante, donc les quatre premières sont exclues.

Province/State Country/Region Lat Long 1/22/20 1/23/20 1/24/20 1/25/20
Thailand 15 101 2 3 5 7
Japan 36 138 2 1 2 2
New South Wales Australia -33.8688 151.2093 0 0 0 0

La date a été remplacée par le nombre de jours. .. .. De l'article de référence ci-dessus

confirmed = [0] * (len(data.columns) - 4)
confirmed_r = [0] * (len(data_r.columns) - 4)
confirmed_d = [0] * (len(data_d.columns) - 4)
recovered_rate = [0] * (len(data_r.columns) - 4)
deaths_rate = [0] * (len(data_d.columns) - 4)
days_from_22_Jan_20 = np.arange(0, len(data.columns) - 4, 1)

Cette fois, jetons un coup d'œil aux données de Wuhan.

city = "Hubei"

Les premières variables ci-dessous sont fournies pour stocker le nombre total de cas, le nombre total de guérisons et le nombre total de décès pour l'affichage du titre. Comme vous pouvez le voir à partir des données ci-dessus, il est aligné avec les États et les pays, donc pour importer les données de Wuhan, utilisez ʻif (data.iloc [i] [0] == city): `. Le pays utilise le commenté. Stockez les nombres quotidiens dans confirmé, confirmé_r et confirmé_d. Étant donné que les données sur le nombre de cas sont une valeur cumulative, le nombre de cas de guérison ce jour-là est soustrait et remplacé par le nombre d'infections ce jour-là. Le calcul + = est utilisé pour obtenir la valeur totale des régions dans le même pays mais dans des régions différentes.

#Données de processus
t_cases = 0
t_recover = 0
t_deaths = 0
for i in range(0, len(data), 1):
    #if (data.iloc[i][1] == city): #for country/region
    if (data.iloc[i][0] == city):  #for province:/state  
        print(str(data.iloc[i][0]) + " of " + data.iloc[i][1])
        for day in range(4, len(data.columns), 1):
            confirmed[day - 4] += data.iloc[i][day] -  data_r.iloc[i][day]
            confirmed_r[day - 4] += data_r.iloc[i][day]
            confirmed_d[day - 4] += data_d.iloc[i][day]
        t_recover += data_r.iloc[i][day]        
        t_deaths += data_d.iloc[i][day]

Cette fois, je veux voir la fin de ce qui précède, donc je calcule le taux de guérison. Nous calculons également le taux de mortalité préoccupant.

tl_confirmed = 0        
for i in range(0, len(confirmed), 1):
    tl_confirmed = confirmed[i] + confirmed_r[i] + confirmed_d[i]
    if tl_confirmed > 0:
        recovered_rate[i]=float(confirmed_r[i]*100)/float(tl_confirmed)
        deaths_rate[i]=float(confirmed_d[i]*100)/float(tl_confirmed)
    else:
        continue
t_cases = tl_confirmed       

Il est représenté ci-dessous. Cette fois, plusieurs graphiques peuvent être affichés ensemble.

#dessin matplotlib
fig, (ax1,ax2) = plt.subplots(2,1,figsize=(1.6180 * 4, 4*2))
ax3 = ax1.twinx()
ax4 = ax2.twinx()

lns1=ax1.plot(days_from_22_Jan_20, confirmed, "o-", color="red",label = "cases")
lns2=ax1.plot(days_from_22_Jan_20, confirmed_r, "*-", color="green",label = "recovered")
lns3=ax3.plot(days_from_22_Jan_20, confirmed_d, "D-", color="black", label = "deaths")
lns4=ax2.plot(days_from_22_Jan_20, recovered_rate, "*-", color="green",label = "recovered")
lns5=ax4.plot(days_from_22_Jan_20, deaths_rate, "D-", color="black", label = "deaths")

lns_ax1 = lns1+lns2+lns3
labs_ax1 = [l.get_label() for l in lns_ax1]
ax1.legend(lns_ax1, labs_ax1, loc=0)

lns_ax2 = lns4+lns5
labs_ax2 = [l.get_label() for l in lns_ax2]
ax2.legend(lns_ax2, labs_ax2, loc=0)

ax1.set_title(city +" ; {} cases, {} recovered, {} deaths".format(t_cases,t_recover,t_deaths))
ax1.set_xlabel("days from 22, Jan, 2020")
ax1.set_ylabel("casas, recovered ")
ax2.set_ylabel("recovered_rate %")
ax2.set_ylim(0,100)

ax3.set_ylabel("deaths ")
ax4.set_ylabel("deaths_rate %")
ax4.set_ylim(0,10)
ax1.grid()
ax2.grid()

plt.pause(1)
plt.savefig('./fig/fig_{}_.png'.format(city)) 
plt.close()

fig_Hubei_.png

Ces données sont de très bonnes données à comparer avec la simulation. Malheureusement, la partie qui a changé la méthode de comptage semble grande. A partir de ces données, si cela peut être reproduit par simulation, il sera possible de simuler la transmission de l'infection à Wuhan cette fois. Et si vous regardez le taux de guérison, vous pouvez voir que 50% est le pic de cette transmission de l'infection, et on peut prédire qu'elle se terminera dans environ le même nombre de jours par la suite. En d'autres termes, il culmine environ 40 jours après le début de l'infection, et maintenant, environ 20 jours après, il est susceptible de se terminer dans environ 20 jours. De plus, le taux de mortalité augmente progressivement, et il semble être d'environ 4,5%. Cela n'augmente pas le nombre de personnes nouvellement infectées, mais je pense que c'est inévitable car les décès continueront jusqu'à la dernière nuit.

・ Visualisez le nombre de personnes infectées dans chaque pays

Sortons la situation du pays qui vous tient à cœur Ci-dessous, j'ai écrit divers commentaires, mais je ne suis pas sûr car c'est juste une impression d'Uwan amateur regardant le graphique.

·Corée

fig_Korea, South_.png Le taux de mortalité peut être faible. Cependant, j'ai entendu dire qu'elle était terminée, et bien que le nombre d'infections semble avoir atteint son apogée, le taux de guérison est toujours inférieur à 20%, et j'ai l'impression que c'est imprévisible. Il faut simplement environ 30 jours pour atteindre 50%, et il semble que cela ne se terminera qu'environ 50 jours après cela.

·Italie

fig_Italy_.png J'étais inquiet de l'effondrement des soins médicaux, mais j'étais soulagé que les données soient solides. En d'autres termes, je sens que le pays est aux commandes. Cependant, la caractéristique est que le taux de mortalité est en constante augmentation et atteint récemment environ 8%. De plus, le taux de guérison est d'environ 10%, et le nombre d'infections est d'environ 40 000, mais il est en pleine augmentation et il n'y a aucune perspective de fin.

· Iran

fig_Iran_.png C'est un pays inquiétant avec l'Italie. Après tout, le taux de mortalité était une valeur anormale, mais quand je suis arrivé ici, il a encore fortement augmenté et dépassé 6%. Cependant, comme le taux de guérison a atteint environ 30%, le nombre maximal d'infections pourrait survenir bientôt. L'augmentation du taux de guérison est lente, mais si le nombre maximal de traitements peut être prédit à partir de cela, il sera possible d'atteindre le confinement. Puisque les données sont solides, il semble que l'effondrement médical soit acceptable.

・ France / Allemagne / Amérique

fig_France_.png fig_Germany_.png Montré ensemble. Ces deux pays sont également préoccupants. En effet, le nombre de cas a augmenté dans les deux cas, mais la guérison est presque nulle. Une infection soudaine est prévue, et j'imagine que cela ne s'arrêtera pas pour le moment. Le taux de mortalité est faible à 2% en France, mais il est proche de 0 en Allemagne avec moins de 30 personnes. Cela fait moins de 20 jours que j'ai été infecté, alors je peux imaginer qu'il y a beaucoup de gens qui combattent la maladie, mais j'aimerais voir la transition. Les États-Unis sont également un pays où le nombre d'infections augmente rapidement. fig_US_.png Aux États-Unis également, le nombre de remèdes est de 0 et le taux de mortalité est maintenu bas à 2% ou moins, mais c'est aussi environ 20 jours après l'augmentation du nombre d'infections, alors j'aimerais voir la transition.

·Espagne

L'Espagne est également l'un des pays inquiets. C'est comme suit. fig_Spain_.png Les données semblent solides et contrôlées. Cependant, le taux de mortalité augmente ici aussi et a récemment dépassé 4%. Si l'on regarde le taux de guérison, il est inférieur à 10% et le nombre d'infections est d'environ 15 000, mais on peut voir qu'il n'en est qu'à ses débuts. Je souhaite garder un œil sur les tendances futures.

·Japon

fig_Japan_.png Je pense que le Japon est le pays où l'infection se propage le plus lentement. Dans un sens, j'ai l'impression que c'est à la fois polaire et chinois. Le taux de mortalité a également été maintenu bas, mais il semble qu'il s'approche progressivement de 4%. De plus, le taux de guérison a augmenté à environ 18% maintenant, mais comme il n'augmente que très lentement, je pense que ni le pic d'infection ni le pic du taux de guérison ne peuvent encore être observés. Je pense qu'il sera visible s'il continue d'augmenter pendant environ 30 jours. Cependant, l'augmentation du nombre d'infections est une courbe convexe vers le bas, ce qui peut conduire à une augmentation rapide, donc je pense que c'est imprévisible.

Résumé

・ J'ai essayé de tracer des données COVID-19 ・ Plusieurs graphiques peuvent être liés et générés ・ Évalué ce qui peut être vu de la simulation avec des données réelles

・ Prolongez la simulation pour pouvoir prédire la fin ・ Je souhaite créer une application qui catégorise la situation dans chaque pays.

Recommended Posts

[Introduction à matplotlib] Lire l'heure de fin à partir des données COVID-19 ♬
[Introduction au modèle SIR] Prédire l'heure de fin de chaque pays avec l'ajustement des données COVID-19 ♬
[Introduction au graphique logarithmique] Prédire l'heure de fin de chaque pays à partir du graphique logarithmique des données sur le nombre d'infections ♬
J'ai lu la référence Chainer (mise à jour de temps en temps)
[Introduction au modèle SEIR] Essayez d'ajuster les données COVID-19 ♬
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Comment lire les données de séries chronologiques dans PyTorch
De l'introduction de pyethapp à l'exécution du contrat
Envoyer les données du journal du serveur vers Splunk Cloud
DataNitro, implémentation de la fonction de lecture des données de feuille
[Introduction à Python] Utilisation basique de la bibliothèque matplotlib
Essayez de créer une table d'enregistrement de bataille avec matplotlib à partir des données de "Schedule-kun"
Python --Lisez des données à partir d'un fichier de données numériques pour trouver des matrices, des valeurs propres et des vecteurs propres distribués co-distribués
La route pour télécharger Matplotlib
L'histoire de la copie de données de S3 vers TeamDrive de Google
[Apprentissage de renforcement d'introduction] Renforcement de l'apprentissage pour bouger pour le moment
[Introduction à Python] Comment obtenir des données avec la fonction listdir
Transmettez les données OpenCV de la bibliothèque C ++ d'origine à Python
Lire tout le contenu de proc / [pid] ~ De setgroups à wchan ~
Introduction à l'analyse de données par Python P17-P26 [ch02 1.usa.gov données de bit.ly]
Lire tout le contenu de proc / [pid] ~ De cwd à loginuid ~
Lire tout le contenu de proc / [pid] ~ De map_files à numa_maps ~
Lire tout le contenu de proc / [pid] ~ De oom_adj à sessionid ~
J'ai lu "Renforcer l'apprentissage avec Python de l'introduction à la pratique" Chapitre 1
De l'introduction de JUMAN ++ à l'analyse morphologique du japonais avec Python
J'ai lu "Renforcer l'apprentissage avec Python de l'introduction à la pratique" Chapitre 2
Lire tout le contenu de proc / [pid] ~ De attr à cpuset ~
De l'installation d'Elasticsearch à la saisie des données
Résumé de vtkOpenFOAMReader (mis à jour de temps en temps)
Comment lire les données de la sous-région e-Stat
Livre de mots de l'ingénieur (mis à jour de temps en temps)
Comment lire l'ensemble de données SNLI
[Introduction] De l'installation de kibana au démarrage
Mémo Tensorflow [mis à jour de temps à autre]
Python (de la première fois à l'exécution)
De Ubuntu 20.04 introduction à la construction d'environnement
De l'introduction de l'API GoogleCloudPlatform Natural Language à son utilisation
Pour la première fois dans Numpy, je vais le mettre à jour de temps en temps
Tracez plusieurs cartes et données en même temps avec matplotlib de Python
SIGNATURE Quête ① De la lecture des données au prétraitement
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.1-8.2.5)
Définir le fuseau horaire sur l'heure standard japonaise
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.3-8.3.6.1)
Comment régler l'heure du serveur sur l'heure japonaise
Manuel Python privé (mis à jour de temps en temps)
Conversion facile de l'heure UTC en heure locale
[Introduction à Python3 Jour 19] Chapitre 8 Destinations de données (8.4-8.5)
vtkClipPolyData / DataSet Summary (mis à jour de temps en temps)
[Introduction à Python3 Day 18] Chapitre 8 Destinations de données (8.3.6.2 à 8.3.6.3)
Probablement l'introduction la plus simple à TensorFlow
Comment faire fonctionner Linux depuis la console
matplotlib Ecrire du texte dans un graphique de séries chronologiques
Les débutants lisent "Introduction à TensorFlow 2.0 pour les experts"
[Mis à jour de temps à autre] Notes relatives au système d'exploitation après commercialisation
Comment accéder à la banque de données de l'extérieur
Résumé de vtkThreshold (mis à jour de temps en temps)
Alignez la barre de couleurs sur la figure avec matplotlib
Comment gérer les données de séries chronologiques (mise en œuvre)
Comment lire les données de problème avec Paiza
Introduction à Scapy ① (De l'installation à l'exécution de Scapy)