Le centre d'infection pour la nouvelle infection à coronavirus (COVID-19) se déplace déjà de la Chine continentale vers l'Europe et les États-Unis, et il y a des problèmes urgents tels que la restriction de la libre circulation aux frontières au sein de l'UE et l'interdiction de sortir. C'est une situation. Au Japon, la menace du nouveau virus corona a commencé à être reconnue le 3 février 2020, lorsque le Diamond Princess est arrivé au port de Yokohama, le 25 février, le gouvernement a annoncé sa politique de base, et le 28 février, à Hokkaido. Bien qu'elle ait été déclenchée par la déclaration d'urgence, en tant que mesures concrètes, une demande de s'abstenir d'événements de grande ampleur a été faite à partir du 26 février et des fermetures temporaires d'écoles primaires, secondaires et secondaires du pays à partir du 2 mars ont été faites. Environ un demi-mois s'est écoulé depuis lors, et pendant cette période, le cours moyen de l'action Nikkei a chuté du niveau de 22 000 yens au niveau de 17 000 yens, et il y a un nuage sombre à l'avenir. Les effets de la nouvelle infection à coronavirus ont gravement affecté non seulement la santé mais aussi la socio-économie, et le moment où elle convergera est très préoccupant. Par conséquent, dans cet article, je voudrais présenter une méthode pour calculer comment le nombre de reproductions de base, qui est un indice de l'infectivité du nouveau virus corona au Japon, a changé de fin janvier à début mars. Je vais. Les formules et les codes sont un peu longs, vous voudrez peut-être commencer par regarder les résultats.
Le nombre de reproductions de base semble être très important, et [Enregistrement de la conférence de l'Institut de recherche en analyse mathématique de l'Université de Kyoto](https://repository.kulib.kyoto-u.ac.jp/dspace/bitstream/2433/140828/ Si vous regardez 1 / 653-04.pdf) et Japan Mathematical Biology Society Letter, vous pouvez voir la transition entre les générations. Cela ne semble pas simple, mais en un mot,
Semble être défini comme. Si ce nombre est R0, alors ** la condition de propagation de l'infection est $ R_0> 1 $, et la condition de convergence de l'infection est $ R_0 <1 $ **.
Le Premier ministre britannique Boris Johnson a expliqué lors d'une réunion le 16 mars qu'environ 60% des Britanniques contrôleraient le pic jusqu'à ce qu'ils obtiennent une immunité de masse (article de Newsweek. //www.newsweekjapan.jp/kimura/2020/03/post-74.php)), en supposant que $ R_0 = 2,6 $, le taux d'immunité de masse $ H $ pour les vaccins et l'auto-immunité ,
(1-H)R_0 < 1
Il semble que $ H> 1-1 / R_0 = 0,615 $ a été supposé à partir de la condition qui satisfait. En d'autres termes, l'immunité de masse assouplit la condition de $ R_0 $. Cependant, le développement de vaccins devrait prendre plus d'un an, y compris les essais cliniques, et c'est une stratégie audacieuse pour acquérir une immunité de masse en ne contrôlant pas une infection excessive.
Maintenant, afin de calculer le nombre de reproduction de base, je voudrais considérer un modèle simple basé sur la définition ci-dessus et le modèle SEIR. Voir la figure suivante.
La ligne supérieure affiche la date et la barre inférieure montre la population infectée un jour. La signification de chaque symbole est
Représente. Autrement dit, la production de I à E un jour t est une infection provenant d'une population de I qui a été infectée et développée avant t, et le nombre de reproductions de t ce jour-là est $ R_0 (t) / ip $. C'est un modèle appelé. Exprimant cela comme une expression,
\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)}
Ce sera. Ci-dessous, utilisons cette formule pour calculer la transition temporelle du nombre de reproduction de base $ R_0 (t) $ à partir des données publiées des tests positifs.
Dans cet article, nous utilisons les données csv publiées dans Carte du nombre de nouveaux virus corona infectés par préfecture (fournie par Jag Japan Co., Ltd.). J'étais autorisé à le faire. Les données préfectorales sont regroupées en une seule, ce qui les rend très faciles à utiliser.
Maintenant, utilisons Python pour calculer le nombre de reproduction de base R0 (t) pour chaque préfecture.
Comme condition préalable, utilisez ce qui suit.
Il existe différentes théories sur lp et ip, mais elles sont définies comme un guide. De plus, en raison de la commodité de la formule de calcul, seul $ R_0 (t) $ avant lp + ip = 13 [jour] peut être calculé à partir de la dernière date des données. Veuillez noter que sur le graphique, même si la valeur pour la période d'il y a 13 jours au dernier jour est 0, cela n'a pas de sens.
Tout d'abord, importez la bibliothèque.
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import datetime
import locale
Données par préfecture de csv fournies dans Carte du nombre de nouveaux virus corona infectés par préfecture (fournie par Jag Japan Co., Ltd.) Une fonction qui lit et convertit en un bloc de données.
def readCsvOfJapanPref(pref : None):
#Téléchargez à partir de l'URL ci-dessous
# https://jag-japan.com/covid19map-readme/
fcsv = u'COVID-19.csv'
df = pd.read_csv(fcsv, header=0, encoding='utf8', parse_dates=[u'Date confirmée AAAAMMJJ'])
#Date fixe,Extraire uniquement la préfecture de consultation
df1 = df.loc[:,[u'Date confirmée AAAAMMJJ',u'Préfecture de consultation']]
df1.columns = ['date','pref']
#Extrait par la préfecture de consultation
if pref is not None: #Si aucun, tout le Japon
df1 = df1[df1.pref == pref]
df1 = df1.loc[:,'date']
#Compter à date fixe
df2 = pd.DataFrame( df1.value_counts() ).reset_index()
df2.columns = ['date','P']
df2 = df2.sort_values('date')
return df2
Une fonction qui définit un bloc de données pour le calcul. La colonne Ppre est pour le dénominateur de la formule et Pat est pour le numérateur de la formule. À partir du 24 janvier 2020, nous créerons un cadre de calcul pour les jours.
def makeCalcFrame(days):
t_1 = pd.Timestamp(2020,1,24) #Date de début du calcul
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
Une fonction qui combine des données préfectorales et des cadres de calcul.
def mergeCalcFrame(df1, df2):
return pd.merge(df1, df2, on='date', how='left').fillna(0)
Une fonction qui calcule $ R_0 $ selon la formule. Pour simplifier le calcul, j'ai créé une expression lambda qui renvoie NaN lors d'un accès en dehors de la plage d'index.
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
Une fonction qui affiche les résultats sous forme de graphique.
def showResult(df, title):
# R0=1 :Objectif de convergence
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()
C'est la partie qui calcule pour chaque préfecture.
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'Tokyo', 'Tokyo'],\
[u'Préfecture d'Osaka', 'Osaka'], [u'Préfecture d'Aichi', 'Aichi'],\
[u'Hokkaido', 'Hokkaido']]
dflist = [[R0inJapanPref(pref, label), label] for pref, label in preflist]
C'est la partie qui affiche les résultats de calcul ci-dessus ensemble.
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()
Jetons maintenant un œil aux résultats du calcul.
À partir de ce qui précède, les tendances suivantes peuvent être dérivées de la simulation concernant l'estimation du nombre de reproduction de base R0 sur la base des données sur les personnes infectées de chaque préfecture du Japon.
Je me suis référé à la page suivante. Carte du nombre de nouveaux virus corona infectés par préfecture (fournie par Jag Japan Co., Ltd.) Dossier de conférence de l'Institut de recherche en analyse mathématique de l'Université de Kyoto Lettre de la Société japonaise de biologie mathématique Article de la Semaine de l'actualité Modèle SEIR Page de la ville de Takatsuki
Je ne l'ai pas cité directement, mais j'ajouterai un lien très utile. COVID-19 reports Carte nationale des clusters
Recommended Posts