Dieses Mal werden wir den Zeitpunkt der Spitzeninfektion in jedem Land durch logarithmische Darstellung vorhersagen.
・ Eine kleine Theorie ・ Prognose jedes Landes ・ Codeerklärung ・ Zusätzliche Theorie ・ Prognose jedes Landes II
Letztes Mal wurde die folgende Gleichung abgeleitet.
I = I_0\exp(\gamma (\frac{\beta}{\gamma} \frac{S}{N} - 1)t)\\
Wenn Sie den Logarithmus beider Seiten nehmen,
\ln I = \ln I_0+\gamma (\frac{\beta}{\gamma} \frac{S}{N} - 1)t\\
Wird erhalten. Das heißt, wenn Sie ein Diagramm mit $ \ ln I $ auf der vertikalen Achse und der Zeit $ t $ auf der horizontalen Achse zeichnen, ist die Steigung
\gamma (\frac{\beta}{\gamma} \frac{S}{N} - 1)\\
Kann eine gerade Linie zeichnen. Hier hängt dieser Gradient von $ S $ ab und ist die Anzahl der nicht infizierten Personen, die mit der Zeit abnimmt. Und dieser Gradient kann wie folgt umgeschrieben werden, indem die zuletzt eingeführte effektive Reproduktionsnummer $ R $ verwendet wird.
\gamma (R - 1)\\
R = R_0 \frac{S}{N}\\
R_0 = \frac{\beta}{\gamma}\\
Daher wird dieser Gradient bei R = 1 zu 0, dh die Anzahl der Reproduktionen = 0, und da die Anzahl der infizierten Personen nicht mehr zunimmt, erreicht die Infektion einen Spitzenwert. Dieses Mal möchte ich basierend auf dieser Theorie die Daten jedes Landes in $ \ log I \ vs \ t $ darstellen und den Zeitpunkt der Spitzeninfektion in jedem Land anzeigen.
Außerdem können aus der ansteigenden Steigung $ S \ fallenddotseq N $ und $ \ gamma (R_0 -1) $ erhalten werden. Wenn man den mit diesem als Anfangswert erhaltenen Graphen anpasst, scheint es, dass $ \ gamma $, $ \ beta $, $ R_0 $ erhalten werden kann.
Es mag misstrauisch erscheinen, dass Italien einbezogen wird, aber die Ergebnisse sind wie folgt: Wenn Sie diese drei Länder nebeneinander betrachten, können Sie feststellen, dass sie sehr unterschiedlich sind. Das heißt, wenn die x- und y-Achse parallel bewegt werden, überlappen sie sich wahrscheinlich. Mit anderen Worten, Sie können sehen, dass es Bereiche mit derselben Neigung gibt. In jedem Diagramm sehen Sie ** einen Abschnitt, der sich in fast 10 Tagen 10-mal vergrößert **. Ja, DP wird wahrscheinlich zuerst die Infektionszählungskurve sättigen, dann Südkorea und dann Italien. Die Grafik unten zeigt die Steigung. Das heißt, wenn es 0 erreicht, bedeutet dies, dass es gesättigt ist. Sie können das Obige also aus dieser Grafik ersehen. Wenn ich über Italien spreche, wurde mir viel erzählt, aber ich denke, es wird in ungefähr 10 Tagen seinen Höhepunkt erreichen.
Das gleiche Diagramm wird für Spanien, Deutschland, die Schweiz, das Vereinigte Königreich und die Niederlande außer Italien angezeigt. Überlappend liegt England etwas zurück, aber die anderen haben ähnliche Kurven. Die vertikale Achse unterscheidet sich je nach Situation (Bevölkerung usw.), aber die Neigung ändert sich fast auf die gleiche Weise. Und wenn man sich das Diagramm der Steigung ansieht, scheint es, dass es innerhalb von ungefähr 2 Wochen insgesamt gesättigt sein wird **.
Auch die drei Länder Japan, Iran und Bahrain weisen in gewissem Sinne sehr ähnliche Kurven auf. Da die Situation des Aufstehens anders ist, ist die y-Achse völlig anders, daher denke ich, dass die Situation des medizinischen Systems anders ist. Die Neigung nach dem Aufstehen ist jedoch ziemlich ähnlich, und obwohl der Iran und Japan in den letzten Tagen fast gesättigt waren, haben sie wieder zugenommen. Bahrain hat ebenfalls eine negative Neigung, ist aber wieder positiv geworden. Die Gradienten dieser drei Länder betragen ** 10-mal / 30 Tage. Dies ist ein sanfter Gradient, der nach seiner Stabilisierung jederzeit gesättigt zu sein scheint. Diese Länder sind immer noch infiziert und müssen in der gesamten Gesellschaft unter Spannungen stehen.
Ich habe versucht, Schweden und die USA auf die gleiche Weise zu planen.
Wie Sie auf einen Blick sehen können, ist der Anstieg ähnlich. Schweden hat jedoch eine kleinere Neigung von der Mitte. Betrachtet man jedoch das Diagramm der unteren Steigung, so ist es heutzutage fast parallel zur x-Achse und es sieht nicht so aus, als würde es in Richtung Null gehen. Mit anderen Worten, es scheint in naher Zukunft nicht zu sättigen. In den Vereinigten Staaten sind jedoch die Daten vom 58. bis zum 65. verfügbar, und es scheint, dass sich die Steigung schnell 0 nähert. Wenn Sie dies verlängern, können Sie sehen, dass ** die Möglichkeit besteht, dass die Infektion in etwa 10 Tagen ihren Höhepunkt erreicht **. Es ist ersichtlich, dass der maximale Gradient beider Länder etwa 25 Mal / 20 Tage beträgt, was größer ist als der vorherige Gradient.
Die zu verwendende Bibliothek und das Lesen der Daten sind dieselben wie beim letzten Mal. Die Anzahl der Todesdaten wird ebenfalls verarbeitet, jedoch gelöscht, da sie unten nicht verwendet werden.
import numpy as np
from scipy.integrate import odeint
from scipy.optimize import minimize
import matplotlib.pyplot as plt
import pandas as pd
#Lesen Sie CSV-Daten mit Pandas.
data = pd.read_csv('COVID-19/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv')
data_r = pd.read_csv('COVID-19/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_recovered_global.csv')
Unten gibt die Datenverarbeitungsfunktion die verarbeiteten Infektionsnummerndaten und Gradientendaten zurück.
def data_city(city):
#Prozessdaten
t_cases = 0
t_recover = 0
t_deaths = 0
for i in range(0, len(data_r), 1):
if (data_r.iloc[i][1] == city): #for country/region
#if (data_r.iloc[i][0] == city): #for province:/state
print(str(data_r.iloc[i][0]) + " of " + data_r.iloc[i][1])
for day in range(4, len(data.columns), 1):
confirmed_r[day - 4] += data_r.iloc[i][day]
t_recover += data_r.iloc[i][day]
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] - confirmed_r[day - 4]
diff_confirmed[day - 4] += confirmed[day-4] / confirmed_r[day - 4]
tl_confirmed = 0
dlog_confirmed = [0] * (len(data.columns) - 4)
dlog_confirmed[0]=np.log(confirmed[0])
dlog_confirmed[1]=np.log(confirmed[1])-np.log(confirmed[0])
for i in range(2, len(confirmed)-2, 1):
if confirmed[i] > 0:
dlog_confirmed[i]=(np.log(confirmed[i+1])-np.log(confirmed[i-1]))/2
else:
continue
tl_confirmed = confirmed[len(confirmed)-1] + confirmed_r[len(confirmed)-1] + confirmed_d[len(confirmed)-1]
t_cases = tl_confirmed
return confirmed, dlog_confirmed
Im Folgenden werden mehrere Länder in demselben Diagramm dargestellt. Geben Sie das Land, das Sie zeichnen möchten, in city_list ein. Verwenden Sie die obige Datenverarbeitungsfunktion, um die Infektionsnummer-Daten und ihren Eins-zu-Eins-Gradienten abzurufen. Zeichne das. Daher ist fig, (ax1, ax2) =. .. .. Die Definition von wird außerhalb der for-Anweisung definiert. Zum Schluss werde ich sie alle zusammen anzeigen. Ich wage es nicht, Farbe zu definieren, aber sie wird automatisch ausgewählt.
city_list={ "Spain","Germany","Switzerland","United Kingdom", "Netherlands" }
fig, (ax1,ax2) = plt.subplots(2,1,figsize=(1.6180 * 4, 4*2))
for city in city_list:
confirmed = [0] * (len(data.columns) - 4)
confirmed_r = [0] * (len(data_r.columns) - 4)
confirmed_d = [0] * (len(data_d.columns) - 4)
diff_confirmed = [0] * (len(data.columns) - 4)
days_from_22_Jan_20 = np.arange(0, len(data.columns) - 4, 1)
days_from_22_Jan_20_ = np.arange(0, len(data.columns) - 4, 1)
recovered_rate = [0] * (len(data_r.columns) - 4)
deaths_rate = [0] * (len(data_d.columns) - 4)
confirmed, dlog_confirmed = data_city(city)
#Matplotlib-Zeichnung
lns1=ax1.semilogy(days_from_22_Jan_20, confirmed, ".-", label = str(city))
lns4=ax2.plot(days_from_22_Jan_20_, dlog_confirmed, ".-",label = str(city))
ax1.set_xlabel("days from 22, Jan, 2020")
ax1.set_ylabel("casas ")
ax2.set_ylabel("slopes ")
ax1.legend(loc=0)
ax2.legend(loc=0)
ax1.grid()
ax2.grid()
plt.pause(1)
plt.savefig('./fig/logmulti_{}_.png'.format(city))
plt.close()
Tatsächlich kann man sich vorstellen, dass der Übergang der Heilungszahlkurve der Infektionszahlkurve ähnlich ist, obwohl es eine Verzögerung bei der Genesung gibt. Also habe ich versucht, unten darüber zu sprechen. Erstens ergibt das Einsetzen von $ I $ in die dritte Gleichung des SIR-Modells Folgendes.
\frac{dr}{dt} = \gamma I_0\exp(\gamma (R - 1)t) \\
Daher, wenn Sie den Logarithmus beider Seiten nehmen
\ln (\frac{dr}{dt}) = \ln \gamma + \ln I_0 + \gamma (R - 1)t \\
r = \frac{I_0}{(R-1)}\exp(\gamma (R - 1)t) + r_0\\
\ln r = \ln I_0 -\ln (R-1) + \gamma (R - 1)t +\ln r_0
Eine schöne Kurve wurde wie unten gezeigt erhalten. Wie erwartet beginnen die Infektionszahlkurve und die Heilungszahlkurve parallel und schneiden sich nach dem Infektionszahlpeak. Gleichzeitig geht die Differenz zwischen den beiden Kurven ($ \ log (A / B) = \ log A- \ log B $) direkt durch $ 10 ^ 0 $.
Beide Kurven sind parallel, und ich bin oben zu dem Schluss gekommen, dass die Anzahl der Infektionen wahrscheinlich in etwa 10 Tagen ihren Höhepunkt erreicht, aber danach scheinen sie sich nicht leicht zu schneiden. Danach wird angenommen, dass sie sich nähern und überschneiden, aber die Daten der Heilungszahl können verdächtig sein.
Beide Kurven nähern sich stetig und nach der höchsten Anzahl von Infektionen kreuzen sie sich und das Ende ist sichtbar.
In Japan nähern sich die beiden Kurven allmählich und der Unterschied geht in Richtung 0, aber der Unterschied hat sich aufgrund des jüngsten Anstiegs der Anzahl der Infektionen vergrößert. Wie oben können wir also den Schluss ziehen, dass die Ausbreitung der Infektion anhält und dass es notwendig ist, sie zu unterdrücken.
・ Die Anzahl der Infektionen in jedem Land wurde logarithmisch aufgezeichnet und klassifiziert, und die Spitzenzeit jeder Infektion wurde vorhergesagt. ・ Durch gleichzeitiges Auftragen der Anzahl der Infektionen und der Anzahl der Heilungen wurde die Endzeit vorhergesagt.
・ Ich möchte jeden Tag die sich ändernde Situation verfolgen ・ Da die Theorie des zusätzlichen Teils verdächtig ist, werde ich sie etwas weiter organisieren und mit der Parameterbestimmung verbinden.
Recommended Posts