Das Infektionszentrum für die neue Coronavirus-Infektion (COVID-19) verlagert sich bereits vom chinesischen Festland nach Europa und in die USA, und es gibt dringende Probleme wie die Einschränkung des freien Grenzverkehrs innerhalb der EU und das Verbot des Ausreisens. Es ist eine Situation. In Japan wurde die Bedrohung durch das neue Koronavirus am 3. Februar 2020 erkannt, als die Diamantprinzessin am 25. Februar im Hafen von Yokohama eintraf. Die Regierung kündigte ihre Grundpolitik an und am 28. Februar in Hokkaido. Obwohl dies durch eine Notstandserklärung als konkrete Maßnahme ausgelöst wurde, wurde ab dem 26. Februar ein Antrag auf Unterlassung von Großveranstaltungen gestellt, und ab dem 2. März wurden landesweit vorübergehend Grund-, Mittel- und Oberschulen geschlossen. Seitdem ist ungefähr ein halber Monat vergangen, und während dieser Zeit ist der durchschnittliche Aktienkurs von Nikkei von 22.000 Yen auf 17.000 Yen gefallen, und in Zukunft gibt es eine dunkle Wolke. Die Auswirkungen der neuen Coronavirus-Infektion haben nicht nur die Gesundheit, sondern auch die Sozioökonomie ernsthaft beeinträchtigt, und wann sie konvergieren wird, ist von großer Bedeutung. Daher möchte ich in diesem Artikel eine Methode zur Berechnung vorstellen, wie sich die Anzahl der Grundreproduktionen, die ein Index für die Infektiosität des neuen Koronavirus in Japan ist, von Ende Januar bis Anfang März verändert hat. Ich werde. Die Formeln und Codes sind etwas lang, daher ist es möglicherweise besser, zuerst die Berechnungsergebnisse zu betrachten.
Die Anzahl der grundlegenden Reproduktionen scheint sehr hoch zu sein, und Vorlesungsprotokoll des Forschungsinstituts für mathematische Analyse der Universität Kyoto Wenn Sie sich 1 / 653-04.pdf) und Brief der Japan Mathematical Biology Society ansehen, können Sie den Übergang zwischen den Generationen erkennen. Es scheint nicht einfach, aber auf den Punkt gebracht,
Scheint definiert zu sein als. Wenn diese Zahl R0 ist, ist ** die Bedingung für die Ausbreitung der Infektion $ R_0> 1 $ und die Bedingung für die Konvergenz der Infektion ist $ R_0 <1 $ **.
Der britische Premierminister Boris Johnson erklärte auf einem Treffen am 16. März, dass etwa 60% der Briten den Höhepunkt kontrollieren würden, bis sie eine Massenimmunität erlangt hätten (Newsweek-Artikel. //www.newsweekjapan.jp/kimura/2020/03/post-74.php)) unter der Annahme, dass $ R_0 = 2,6 $ ist, beträgt die Immunitätsrate der Bevölkerung $ H $ bei Impfstoffen und Autoimmunität ,
(1-H)R_0 < 1
Es scheint, dass $ H> 1-1 / R_0 = 0,615 $ von der Bedingung angenommen wurde, die erfüllt. Mit anderen Worten, die Massenimmunität entspannt den Zustand von $ R_0 $. Die Entwicklung von Impfstoffen wird jedoch voraussichtlich mehr als ein Jahr dauern, einschließlich klinischer Studien, und es ist eine mutige Strategie, eine Massenimmunität zu erlangen, indem eine übermäßige Infektion nicht kontrolliert wird.
Um nun die Grundreproduktionszahl zu berechnen, möchte ich ein einfaches Modell betrachten, das auf der obigen Definition und [SEIR-Modell] basiert (https://qiita.com/oki_mebarun/items/60592c703dd4e8d1ff72). Siehe folgende Abbildung.
Die obere Reihe zeigt das Datum und der untere Balken zeigt die infizierte Bevölkerung eines Tages. Die Bedeutung jedes Symbols ist
Repräsentiert. Das heißt, die Produktion von I bis E an einem Tag t ist eine Infektion von einer Population von I, die vor t infiziert und entwickelt wurde, und die Anzahl der Reproduktionen von t an diesem Tag beträgt $ R_0 (t) / ip $. Es ist ein Modell namens. Dies als Ausdruck ausdrücken,
\frac{1}{ip} R_0(t) \times \sum_{s=t+1}^{t+ip} P(s) = P(t+lp+ip), \\
\therefore R_0(t) = \frac{ ip \times P(t+lp+ip)} {\sum_{s=t+1}^{t+ip} P(s)}
Es wird sein. Verwenden Sie diese Formel unten, um den Zeitübergang der Grundreproduktionsnummer $ R_0 (t) $ aus den veröffentlichten Daten der Testpositive zu berechnen.
In diesem Artikel verwenden wir die CSV-Daten, die in Karte der Anzahl der von der Präfektur infizierten neuen Koronaviren (bereitgestellt von Jag Japan Co., Ltd.) veröffentlicht wurden. Ich durfte es tun. Präfekturdaten werden zu einer zusammengefasst, was die Verwendung sehr einfach macht.
Verwenden wir nun Python, um die Grundreproduktionsnummer R0 (t) für jede Präfektur zu berechnen.
Verwenden Sie als Voraussetzung Folgendes.
Es gibt verschiedene Theorien über LP und IP, aber sie dienen als Leitfaden. Aufgrund der Bequemlichkeit der Berechnungsformel kann ab dem letzten Datum der Daten nur $ R_0 (t) $ vor lp + ip = 13 [Tag] berechnet werden. Bitte beachten Sie, dass in der Grafik, selbst wenn der Wert für den Zeitraum von vor 13 Tagen bis zum letzten Tag 0 ist, er bedeutungslos ist.
Importieren Sie zunächst die Bibliothek.
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import datetime
import locale
Daten nach Präfektur von CSV bereitgestellt in Karte der Anzahl der neuen Koronaviren, die von Präfektur infiziert wurden (bereitgestellt von Jag Japan Co., Ltd.) Eine Funktion, die liest und in einen Datenrahmen konvertiert.
def readCsvOfJapanPref(pref : None):
#Download von der unten stehenden URL
# https://jag-japan.com/covid19map-readme/
fcsv = u'COVID-19.csv'
df = pd.read_csv(fcsv, header=0, encoding='utf8', parse_dates=[u'Bestätigtes Datum JJJJMMTT'])
#Festes Datum,Extrahieren Sie nur die Präfektur Beratung
df1 = df.loc[:,[u'Bestätigtes Datum JJJJMMTT',u'Beratungspräfektur']]
df1.columns = ['date','pref']
#Extrahiert durch Konsultationspräfektur
if pref is not None: #Wenn keine, ganz Japan
df1 = df1[df1.pref == pref]
df1 = df1.loc[:,'date']
#Auf festes Datum zählen
df2 = pd.DataFrame( df1.value_counts() ).reset_index()
df2.columns = ['date','P']
df2 = df2.sort_values('date')
return df2
Eine Funktion, die einen Datenrahmen für die Berechnung definiert. Die Spalte Ppre steht für den Nenner der Formel und Pat für den Zähler der Formel. Ab dem 24. Januar 2020 erstellen wir einen Berechnungsrahmen für Tage.
def makeCalcFrame(days):
t_1 = pd.Timestamp(2020,1,24) #Startdatum der Berechnung
td = pd.Timedelta('1 days')
#
npd = [[t_1 + td * i, 0, 0, 0 ] for i in range(0,days)]
df1 = pd.DataFrame(npd)
df1.columns = ['date', 'Ppre','Pat', 'R0']
#
return df1
Eine Funktion, die Präfekturdaten und Berechnungsrahmen kombiniert.
def mergeCalcFrame(df1, df2):
return pd.merge(df1, df2, on='date', how='left').fillna(0)
Eine Funktion, die $ R_0 $ gemäß der Formel berechnet. Um die Berechnung zu vereinfachen, habe ich einen Lambda-Ausdruck erstellt, der beim Zugriff außerhalb des Indexbereichs NaN zurückgibt.
def calcR0(df, keys):
lp = keys['lp']
ip = keys['ip']
nrow = len(df)
getP = lambda s: df.loc[s, 'P'] if s < nrow else np.NaN
for t in range(nrow):
df.loc[t, 'Ppre'] = sum([ getP(s) for s in range(t+1, t + ip + 1)])
df.loc[t, 'Pat' ] = getP(t + lp + ip)
if df.loc[t, 'Ppre'] > 0:
df.loc[t, 'R0' ] = ip * df.loc[t, 'Pat'] / df.loc[t, 'Ppre']
else:
df.loc[t, 'R0' ] = np.NaN
return df
Eine Funktion, die die Ergebnisse als Grafik anzeigt.
def showResult(df, title):
# R0=1 :Konvergenzziel
ptgt = pd.DataFrame([[df.iloc[0,0],1],[df.iloc[len(df)-1,0],1]])
ptgt.columns = ['date','target']
# show R0
plt.rcParams["font.size"] = 12
ax = df.plot(title=title,x='date',y='R0', figsize=(10,7))
ptgt.plot(x='date',y='target',style='r--',ax=ax)
ax.grid(True)
ax.set_ylim(0,)
plt.show()
Dies ist der Teil, der für jede Präfektur berechnet wird.
def R0inJapanPref(pref, label):
keys = {'lp':5, 'ip':8 }
df1 = makeCalcFrame(60) # 60 days
df2 = readCsvOfJapanPref(pref)
df = mergeCalcFrame(df1, df2)
df = calcR0(df, keys)
showResult(df, 'COVID-19 R0 ({})'.format(label))
return df
preflist = [[None, 'Japan'], [u'Tokio', 'Tokyo'],\
[u'Präfektur Osaka', 'Osaka'], [u'Präfektur Aichi', 'Aichi'],\
[u'Hokkaido', 'Hokkaido']]
dflist = [[R0inJapanPref(pref, label), label] for pref, label in preflist]
Dies ist der Teil, der die obigen Berechnungsergebnisse zusammen anzeigt.
def showResult2(ax, df, label):
# show R0
plt.rcParams["font.size"] = 12
df1 = df.rename(columns={'R0':label})
df1.plot(x='date',y=label, ax=ax)
# R0=1
dfs = dflist[0][0]
ptgt = pd.DataFrame([[dfs.iloc[0,0],1],[dfs.iloc[len(dfs)-1,0],1]])
ptgt.columns = ['date','target']
ax = ptgt.plot(title='COVID-19 R0', x='date',y='target',style='r--', figsize=(10,8))
#
for df, label in dflist:
showResult2(ax, df, label)
#
ax.grid(True)
ax.set_ylim(0,10)
plt.show()
Schauen wir uns nun die Berechnungsergebnisse an.
Aus dem Obigen können die folgenden Trends aus der Simulation hinsichtlich der Schätzung der Grundreproduktionszahl R0 basierend auf den Daten der infizierten Person jeder Präfektur in Japan abgeleitet werden.
Ich habe auf die folgende Seite verwiesen. Karte der Anzahl der von der Präfektur infizierten neuen Koronaviren (bereitgestellt von Jag Japan Co., Ltd.) Vorlesungsprotokoll des Forschungsinstituts für mathematische Analyse der Universität Kyoto Brief der Japan Mathematical Biology Society Artikel der Nachrichtenwoche SEIR-Modell Takatsuki City Page
Ich habe es nicht direkt zitiert, aber ich werde einen sehr nützlichen Link hinzufügen. COVID-19 reports Nationale Clusterkarte
Recommended Posts