[PYTHON] Examinons le temps de convergence de la tendance mondiale du nombre de reproduction effectif du nouveau virus corona

introduction

En ce qui concerne la nouvelle infection à coronavirus (COVID-19), le nombre de reproductions efficaces [^ 1] est analysé par préfecture https://qiita.com/oki_mebarun/items/e68b34b604235b1f28a1), et [classement] , mais cette fois, nous examinerons les données mondiales et examinerons si le temps de convergence peut être prédit à partir de la transition du nombre de reproduction effectif. Je l'ai vu. En particulier, puisque les Jeux olympiques de Tokyo 2020 sont sur le point de se tenir en juillet, on espère que la convergence se fera le plus rapidement possible non seulement au Japon mais également dans le monde.

Conclusion

Tout d'abord, pour expliquer brièvement à partir de la conclusion,

  1. En Europe, l'infection a culminé vers le 21 mars, et le nombre effectif de reproduction peut avoir atteint $ R \ leq 1 $, mais on pense qu'il sera observé vers le début du mois d'avril. ..
  2. Aux États-Unis, en Australie, en Asie du Sud-Est (Malaisie, Indonésie) et au Moyen-Orient (Turquie, Israël), la situation est imprévisible car le $ R $ est resté à un niveau élevé autour de 10 et n'a pas eu tendance à converger.
  3. Même dans les pays où l'expansion est relativement limitée (Taiwan, Hong Kong, Singapour, Japon), le $ R $ peut parfois grimper, alors faites attention aux entrées de l'étranger.

supposition

La formule de base est la même que le contenu de Article précédent. Je n'ai pas non plus changé les paramètres. De plus, nous utiliserons le New Corona Virus Dataset. J'ai fait. Nous rendons hommage aux efforts fournis avec ces données publiques. En raison du délai pour trouver un test positif après la période de latence et la période d'infection, les résultats avant les deux dernières semaines n'ont pas été obtenus.

Essayez de calculer avec Python

Ce code est disponible sur GitHub. Il est enregistré au format Jupyter Notebook. (Nom de fichier: 03_R0_estimation-WLD-02b.ipynb)

code

En particulier, il n'y a pas beaucoup de changements car il fait suite à l'article précédent. Pour parler franchement, nous prenons la différence pour changer les données de valeur cumulative en données fixes quotidiennes.

def readCsvOfWorldArea(area : None):
    #Téléchargez à partir de l'URL ci-dessous
    # https://hackmd.io/@covid19-kenmo/dataset/https%3A%2F%2Fhackmd.io%2F%40covid19-kenmo%2Fdataset
    fcsv = u'World-COVID-19.csv'
    df = pd.read_csv(fcsv, header=0, encoding='sjis', parse_dates=[u'Date'])
    #Date,Extraire les pays cibles
    if area is not None:
        df1 = df.loc[:,[u'Date',area]]
    else:
        df1 = df.loc[:,[u'Date',u'Les personnes infectées dans le monde']]        
    df1.columns = ['date','Psum']
    ##Cumulative ⇒ conversion quotidienne
    df2 = df1.copy()
    df2.columns = ['date','P']
    df2.iloc[0,1] = 0
    ##Chaîne de caractères ⇒ valeur numérique
    getFloat = lambda e: float('{}'.format(e).replace(',',''))
    ##Calcul de la différence
    for i in range(1,len(df1)):
        df2.iloc[i, 1] = getFloat(df1.iloc[i, 1]) - getFloat(df1.iloc[i-1, 1] )
    ##
    return df2

Une moyenne mobile a été ajoutée au processus de calcul R. La moyenne est prise pendant 3 jours avant et après.

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
    getP2 = lambda s: np.average([ getP(s + r) for r in range(-1,2)])
    for t in range(1, nrow):
        df.loc[t, 'Ppre'] = sum([ getP2(s) for s in range(t+1, t + ip + 1)])
        df.loc[t, 'Pat' ] = getP2(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

Aussi, pour rendre les axes plus faciles à voir, ils sont affichés sur des axes logarithmiques.

def showResult3(dflist, title):
    # 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))
    ax.set_yscale("symlog", linthreshy=1)
    #
    for df, label in dflist:
        showResult2(ax, df, label)
    #
    ax.grid(True)
    ax.set_ylim(0,)
    plt.show()
    fig = ax.get_figure()
    fig.savefig("R0_{}.png ".format(title))

J'ai pu le gérer sans trop changer le code d'origine, ce qui a été utile.

Résultat du calcul

Jetons maintenant un œil aux résultats du calcul. Si $ R_0> 1 $, l'infection a tendance à se propager, et si $ R_0 <1 $, l'infection a tendance à converger.

Zone où une infection explosive a été observée

Voici les résultats pour la Chine continentale, l'Italie, les États-Unis, l'Espagne, l'Iran et la Corée du Sud. R0_爆発的感染が観測された地域.png

L'Europe 

Voici le résultat de la collecte de pays avec de nombreuses personnes infectées en Europe, y compris l'Italie. R0_ヨーロッパ.png

Zones où l'infection est relativement réprimée en Asie

Voici les résultats pour Taiwan, le Japon, Hong Kong et Singapour. R0_アジア周辺で比較的感染が抑制されている地域.png

Zones où la propagation future de l'infection est préoccupante

En regardant le graphique, sinon tout, voici le résultat de la collecte des pays où $ R $ évolue à un niveau élevé et il n'y a pas de tendance à converger. R0_今後感染拡大が懸念される地域.png

Trouvons une formule approximative du nombre de reproductions effectives sur la base des résultats en Europe.

En regardant les changements du nombre de reproductions effectives, après une forte augmentation, le nombre a tendance à diminuer progressivement de manière exponentielle. En particulier, si l'on regarde les résultats en Europe, on constate la même tendance à la convergence quel que soit le pays. Par conséquent, je l'ai appliqué avec la formule d'approximation suivante.

R(t) = R(t_0) \cdot 2^{-\frac{t-t_0}{T}}

En d'autres termes, le modèle est que la demi-vie de $ R (t) $ est $ T $. En fait, si vous définissez $ T = 7,5 [jours] $ et que vous le faites correspondre avec le graphique de la région européenne, ce sera comme suit (la ligne en pointillé sur la figure est la formule d'estimation). R0_ヨーロッパ+推定.png

À partir de là, si vous remplacez spécifiquement la date par $ R (t) $,

Le résultat est. Bien sûr, c'est une approximation, donc ce n'est peut-être pas le cas. Cependant, si $ R <1 $ a été atteint le 21 mars le plus récent, une tendance à une augmentation constante des nouvelles infections devrait être observée vers le 4 avril, 13 jours plus tard. .. Si tel est le cas, le nombre de patients hospitalisés diminuera régulièrement et une convergence sera observée.

De plus, voici le résultat de l'application de la formule d'approximation ci-dessus à d'autres régions.

Zone où une infection explosive a été observée

R0_爆発的感染が観測された地域+推定.png

Zones où la propagation future de l'infection est préoccupante

R0_今後感染拡大が懸念される地域+推定.png

En outre ...

Lien de référence

Je me suis référé à la page suivante.

  1. Nouvel ensemble de données sur le virus Corona
  2. «Status Analysis / Recommendations for Countermeasures against New Corona Virus Infectious Diseases» (19 mars 2020)
  3. Calculer la transition du nombre de reproduction de base du nouveau virus corona par préfecture
  4. Classement du nombre de reproductions effectives du nouveau virus corona par préfecture

[^ 1]: Dans cet article, il est défini comme le nombre d'infections secondaires par une personne infectée (à un certain instant t, sous certaines mesures).

Recommended Posts

Examinons le temps de convergence de la tendance mondiale du nombre de reproduction effectif du nouveau virus corona
Calculons la transition du nombre de reproduction de base du nouveau virus corona par préfecture
Établissons un classement du nombre de reproductions efficaces du nouveau virus corona par préfecture
Testons l'hypothèse d'effondrement médical du nouveau virus corona
Examiner la plage d'erreur dans le nombre de décès dus à la pneumonie
Visualisons le nombre de personnes infectées par le virus corona avec matplotlib
Tracez la propagation du nouveau virus corona
Le nombre de fermetures de magasins a-t-il augmenté en raison de l'influence du nouveau virus corona?
Estimer le pic d'infectivité du nouveau virus corona
Simulation GUI du nouveau virus corona (modèle SEIR)
Calcul du nombre minimum de voix requis à partir du taux de vote
Visualisez le nombre de plaintes des compagnies d'assurance-vie
J'ai essayé de classer le nombre de décès par habitant de COVID-19 (nouveau virus corona) par pays
[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 ♬
Simulons l'effet de l'introduction d'une application de suivi des contacts comme contre-mesure contre le nouveau virus corona
J'ai essayé de trouver la tendance du nombre de navires dans la baie de Tokyo à partir d'images satellites.