[PYTHON] [Einführung in matplotlib] Lesen Sie die Endzeit aus den COVID-19-Daten ♬

Es gibt einige Dinge, die ich aus der vorherigen Simulation der neuen Corona gelernt habe, aber wenn Sie genau hinschauen, denke ich, dass der Infektionspeak anhand des Diagramms des Infektionsstatus von Corona vorhersehbar sein kann. Es war die folgende Simulation. pNo1000_R30sec_IP30%.gif Das heißt, das rote Balkendiagramm zeigt die Anzahl der Infektionen und das grüne Balkendiagramm zeigt die Anzahl der Heilungen, aber es ist schwierig vorherzusagen, um wie viel die Anzahl der Infektionen zunehmen wird, aber die Anzahl der Heilungen ist auf die Anzahl der Infektionen begrenzt, also zumindest die Anzahl der Infektionen Die Anzahl wird nicht überschritten. Darüber hinaus beträgt sie, ausgedrückt als Heilungsrate, am Ende fast 100%. Darüber hinaus erreicht die Heilungsrate immer einen Spitzenwert später als die Spitzeninfektion. Auf den ersten Blick scheint es einfacher zu sein, das Ende der Infektionen zu bestimmen, aber es ist nicht klar, ob dieser Peak notwendigerweise die Obergrenze ist. Andererseits erreicht die Anzahl der Heilungen den Höhepunkt der Infektion um 50%, und es scheint, dass sie sich diesem Wert allmählich nähert. Mit anderen Worten, wenn Sie diesem Wert folgen, scheint die Endzeit ungefähr sichtbar zu sein. Betrachten Sie die obige Grafik mit der Annahme, dass die Infektion von Beginn der Heilung an gesättigt ist. Lassen Sie uns diesmal sehen, ob sich die tatsächlichen Daten auf die gleiche Weise verhalten. 【Referenz】 ・ Visualisieren Sie die Anzahl der mit Matplotlib mit dem Coronavirus infizierten Personen

Was ich getan habe

・ Codeerklärung ・ Visualisieren Sie die Anzahl der Infizierten in jedem Land

・ Codeerklärung

Der Code ist unten. ・ Collective_particles / draw_covid19.py

Diesmal handelt es sich um eine Visualisierungsmethode für mehrere Daten. Erhalten Sie zur Visualisierung von Infektionsdaten mindestens 3 Daten von den folgenden Stellen. Der Einfachheit halber habe ich die Zip-Datei von der folgenden Referenzseite heruntergeladen und erweitert. (Der Link unten ist die Linkseite der Datei. Wir empfehlen den Batch-Download von der unten stehenden Referenz.) time_series_19-covid-Confirmed.csv time_series_19-covid-Deaths.csv time_series_19-covid-Recovered.csv 【Referenz】 ・ CSSEGISandData / COVID-19 Wir werden diese Daten entsprechend verarbeiten und ein Diagramm ähnlich dem oben genannten zeichnen. Der Prozess bis zur grafischen Zeichnung wird unten erläutert. Verwenden Sie zunächst die folgende Bibliothek. Auch hier verwendet die Umgebung diesmal Jetson-nano, aber Pandas ist neu installiert. Als Referenz habe ich einen Fehler erhalten, wenn es einfach war, also habe ich ihn schließlich mit dem folgenden Befehl eingegeben.

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

Der folgende Code funktionierte unter Python, aber Importpandas funktionierten nicht unter 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
>>> 

【Referenz】 ・ So installieren Sie Pandas in 3 Minuten ohne Verwendung von pip

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

Lesen Sie als Nächstes die drei CSV-Dateien wie folgt.

#Lesen Sie CSV-Daten mit 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')

Definieren Sie die Variable. Die zu lesenden Daten haben die folgende Struktur, sodass die ersten vier ausgeschlossen sind.

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

Das Datum wurde auf die Anzahl der Tage geändert. .. .. Aus dem obigen Referenzartikel

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)

Schauen wir uns diesmal die Daten von Wuhan an.

city = "Hubei"

Die ersten Variablen unten werden bereitgestellt, um die Gesamtzahl der Fälle, die Gesamtzahl der Heilungen und die Gesamtzahl der Todesfälle für die Titelanzeige zu speichern. Wie Sie aus den obigen Daten sehen können, ist es mit Staaten und Ländern ausgerichtet. Um die Daten von Wuhan einzubringen, verwenden Sie if (data.iloc [i] [0] == city):. Das Land nutzt das auskommentiert. Speichern Sie die täglichen Zahlen in bestätigt, bestätigt_r und bestätigt_d. Da die Anzahl der Falldaten ein kumulativer Wert ist, wird die Anzahl der Heilungsfälle an diesem Tag abgezogen und in die Anzahl der Infektionen an diesem Tag geändert. Die Berechnung + = wird verwendet, um den Gesamtwert von Regionen im selben Land, aber in verschiedenen Regionen zu erhalten.

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

Dieses Mal möchte ich das Ende des oben Gesagten sehen, also berechne ich die Heilungsrate. Wir berechnen auch die betroffene Sterblichkeitsrate.

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       

Es ist unten grafisch dargestellt. Dieses Mal können mehrere Diagramme zusammen angezeigt werden.

#Matplotlib-Zeichnung
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

Diese Daten sind recht gute Daten zum Vergleich mit der Simulation. Leider sieht der Teil, der die Zählmethode geändert hat, groß aus. Wenn dies anhand dieser Daten durch Simulation reproduziert werden kann, kann diesmal die Übertragung der Infektion in Wuhan simuliert werden. Und wenn Sie sich die Heilungsrate ansehen, können Sie sehen, dass 50% der Höhepunkt dieser Infektionsübertragung ist, und es kann vorausgesagt werden, dass sie in ungefähr der gleichen Anzahl von Tagen danach enden wird. Mit anderen Worten, es erreicht ungefähr 40 Tage nach Beginn der Infektion einen Höhepunkt, und jetzt, ungefähr 20 Tage danach, ist es wahrscheinlich, dass es in ungefähr 20 Tagen endet. Darüber hinaus steigt die Sterblichkeitsrate allmählich an und scheint bei etwa 4,5% zu liegen. Dies erhöht nicht die Anzahl der neu infizierten Menschen, aber ich denke, es ist unvermeidlich, da die Todesfälle bis zur letzten Nacht andauern werden.

・ Visualisieren Sie die Anzahl der Infizierten in jedem Land

Lassen Sie uns die Situation des Landes ausgeben, das Sie interessiert Unten habe ich verschiedene Kommentare geschrieben, bin mir aber nicht sicher, da es sich nur um einen Eindruck eines Amateur-Uwan handelt, der sich die Grafik ansieht.

·Korea

fig_Korea, South_.png Die Sterblichkeitsrate kann niedrig sein. Ich habe jedoch gehört, dass es beendet ist, und obwohl die Anzahl der Infektionen ihren Höhepunkt erreicht zu haben scheint, liegt die Heilungsrate immer noch unter 20%, und ich habe den Eindruck, dass es unvorhersehbar ist. Es dauert einfach ungefähr 30 Tage, um 50% zu erreichen, und es scheint, dass es erst ungefähr 50 Tage danach zu Ende geht.

·Italien

fig_Italy_.png Ich war besorgt über den Zusammenbruch der medizinischen Versorgung, war aber erleichtert, dass die Daten solide waren. Mit anderen Worten, ich habe das Gefühl, dass das Land die Kontrolle hat. Das Merkmal ist jedoch, dass die Sterblichkeitsrate stetig steigt und in letzter Zeit etwa 8% beträgt. Darüber hinaus liegt die Heilungsrate bei etwa 10% und die Anzahl der Infektionen bei etwa 40.000, sie befindet sich jedoch mitten in einem Anstieg und es besteht keine Aussicht auf ein Ende.

· Iran

fig_Iran_.png Es ist ein besorgniserregendes Land zusammen mit Italien. Immerhin war die Sterblichkeitsrate ein abnormaler Wert, aber als ich hierher kam, stieg sie wieder stark an und überschritt 6%. Da die Heilungsrate jedoch etwa 30% erreicht hat, kann die maximale Anzahl von Infektionen bald eintreten. Der Anstieg der Heilungsrate ist langsam, aber wenn die maximale Anzahl von Heilungen daraus vorhergesagt werden kann, ist es möglich, eine Eindämmung zu erreichen. Da die Daten solide waren, scheint es für einen medizinischen Kollaps in Ordnung zu sein.

・ Frankreich / Deutschland / Amerika

fig_France_.png fig_Germany_.png Zusammen gezeigt. Beide Länder sind ebenfalls besorgniserregend. Dies liegt daran, dass die Anzahl der Fälle in beiden Fällen zugenommen hat, die Heilung jedoch nahezu Null ist. Eine plötzliche Infektion wird vorhergesagt, und ich kann mir vorstellen, dass dies vorerst nicht enden wird. Die Sterblichkeitsrate ist in Frankreich mit 2% niedrig, in Deutschland mit weniger als 30 Personen jedoch fast 0. Es ist weniger als 20 Tage her, seit ich infiziert wurde, also kann ich mir vorstellen, dass es viele Menschen gibt, die gegen Krankheiten kämpfen, aber ich würde gerne den Übergang sehen. Die Vereinigten Staaten sind auch ein Land, in dem die Zahl der Infektionen rapide zunimmt. fig_US_.png In den Vereinigten Staaten wie in den oben genannten Ländern beträgt die Anzahl der Heilungen 0, und die Sterblichkeitsrate wird mit 2% oder weniger niedrig gehalten. Dies ist jedoch auch etwa 20 Tage nach dem Anstieg der Anzahl der Infektionen, daher würde ich mir den Übergang wünschen.

·Spanien

Spanien ist auch eines der besorgten Länder. Es ist wie folgt. fig_Spain_.png Die Daten fühlen sich solide und kontrolliert an. Aber auch hier steigt die Sterblichkeitsrate und hat kürzlich 4% überschritten. Betrachtet man die Heilungsrate, so beträgt sie weniger als 10% und die Anzahl der Infektionen liegt bei etwa 15.000, aber wir können sehen, dass sie sich noch im Anfangsstadium befindet. Ich möchte zukünftige Trends im Auge behalten.

·Japan

fig_Japan_.png Ich denke, Japan ist das Land, in dem sich die Infektion am langsamsten ausbreitet. In gewisser Weise habe ich den Eindruck, dass es sowohl polar als auch chinesisch ist. Die Sterblichkeitsrate wurde ebenfalls niedrig gehalten, scheint sich aber allmählich 4% zu nähern. Außerdem ist die Heilungsrate jetzt auf ungefähr 18% gestiegen, aber da sie nur sehr langsam zunimmt, denke ich, dass noch weder der Infektionspeak noch der Heilungsratenpeak zu sehen sind. Ich denke, dass es sichtbar sein wird, wenn es etwa 30 Tage lang weiter zunimmt. Der Anstieg der Anzahl der Infektionen ist jedoch eine nach unten konvexe Kurve, die zu einem raschen Anstieg führen kann. Ich halte dies daher für unvorhersehbar.

Zusammenfassung

・ Ich habe versucht, COVID-19-Daten zu zeichnen ・ Es können mehrere Diagramme verknüpft und ausgegeben werden ・ Bewertet, was aus der Simulation mit tatsächlichen Daten ersichtlich ist

・ Erweitern Sie die Simulation, damit Sie das Ende vorhersagen können ・ Ich möchte eine App erstellen, die die Situation in jedem Land kategorisiert.

Recommended Posts

[Einführung in matplotlib] Lesen Sie die Endzeit aus den COVID-19-Daten ♬
[Einführung in das SIR-Modell] Prognostizieren Sie die Endzeit jedes Landes mit der COVID-19-Datenanpassung ♬
[Einführung in das logarithmische Diagramm] Prognostizieren Sie die Endzeit jedes Landes anhand des logarithmischen Diagramms der Infektionszahldaten ♬
Ich habe die Chainer-Referenz gelesen (von Zeit zu Zeit aktualisiert).
[Einführung in das SEIR-Modell] Versuchen Sie, COVID-19-Daten anzupassen ♬
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Lesen von Zeitreihendaten in PyTorch
Von der Einführung von Pyethapp bis zur Vertragsabwicklung
Senden Sie Protokolldaten vom Server an Splunk Cloud
DataNitro, Implementierung einer Funktion zum Lesen von Daten aus dem Blatt
[Einführung in Python] Grundlegende Verwendung der Bibliothek matplotlib
Versuchen Sie, mit matplotlib aus den Daten von "Schedule-kun" eine Kampfaufzeichnungstabelle zu erstellen.
Python - Lesen Sie Daten aus einer numerischen Datendatei, um die verteilte, gemeinsam verteilte Matrix, Eigenwerte und Eigenvektoren zu finden
Der Weg zum Herunterladen von Matplotlib
Die Geschichte des Kopierens von Daten von S3 auf Googles TeamDrive
[Einführung in die Stärkung des Lernens] Stärkung des Lernens, um sich vorerst zu bewegen
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir
Übergeben Sie die OpenCV-Daten der ursprünglichen C ++ - Bibliothek an Python
Lesen Sie den gesamten Inhalt von proc / [pid] ~ Von setgroups bis wchan ~
Einführung in die Datenanalyse mit Python P17-P26 [ch02 1.usa.gov Daten von bit.ly]
Lesen Sie den gesamten Inhalt von proc / [pid] ~ Von cwd bis loginuid ~
Lesen Sie den gesamten Inhalt von proc / [pid] ~ Von map_files bis numa_maps ~
Lesen Sie den gesamten Inhalt von proc / [pid] ~ Von oom_adj bis sessionid ~
Ich las "Das Lernen mit Python von der Einführung bis zur Praxis stärken", Kapitel 1
Von der Einführung von JUMAN ++ bis zur morphologischen Analyse von Japanisch mit Python
Ich las "Das Lernen mit Python von der Einführung bis zur Praxis stärken", Kapitel 2
Lesen Sie den gesamten Inhalt von proc / [pid] ~ Von attr bis cpuset ~
Von der Installation von Elasticsearch bis zur Dateneingabe
vtkOpenFOAMReader-Zusammenfassung (von Zeit zu Zeit aktualisiert)
Lesen von e-Stat-Subregionsdaten
Ingenieur-Wortbuch (von Zeit zu Zeit aktualisiert)
Lesen des SNLI-Datensatzes
[Einführung] Von der Installation von Kibana bis zum Start
Tensorflow-Memo [von Zeit zu Zeit aktualisiert]
Python (vom ersten Mal bis zur Ausführung)
Ab Ubuntu 20.04 Einführung in die Umgebungskonstruktion
Von der Einführung der GoogleCloudPlatform Natural Language API bis zur Verwendung
Zum ersten Mal in Numpy werde ich es von Zeit zu Zeit aktualisieren
Zeichnen Sie mit Pythons Matplotlib mehrere Karten und Daten gleichzeitig
SIGNATE Quest ① Vom Lesen der Daten bis zur Vorverarbeitung
[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.1-8.2.5)
Stellen Sie die Zeitzone auf japanische Standardzeit ein
[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.3-8.3.6.1)
So stellen Sie die Serverzeit auf japanische Zeit ein
Privates Python-Handbuch (von Zeit zu Zeit aktualisiert)
Einfache Konvertierung von UTC in Ortszeit
[Einführung in Python3 Tag 19] Kapitel 8 Datenziele (8.4-8.5)
vtkClipPolyData / DataSet-Zusammenfassung (von Zeit zu Zeit aktualisiert)
[Einführung in Python3 Tag 18] Kapitel 8 Datenziele (8.3.6.2 bis 8.3.6.3)
Wahrscheinlich die einfachste Einführung in TensorFlow
So bedienen Sie Linux von der Konsole aus
matplotlib Schreiben Sie Text in ein Zeitreihendiagramm
Anfänger lesen "Einführung in TensorFlow 2.0 für Experten"
[Von Zeit zu Zeit aktualisiert] Hinweise zum Postmarket-Betriebssystem
So greifen Sie von außen auf den Datenspeicher zu
Zusammenfassung von vtkThreshold (von Zeit zu Zeit aktualisiert)
Richten Sie die Farbleiste mit matplotlib an der Figur aus
Umgang mit Zeitreihendaten (Implementierung)
Wie man Problemdaten mit Paiza liest
Einführung in Scapy ① (Von der Installation bis zur Ausführung von Scapy)