[PYTHON] Établissons un classement du nombre de reproductions efficaces du nouveau virus corona par préfecture

introduction

Dans le cadre de la nouvelle infection à coronavirus (COVID-19), 19 mars 2020, Analyse de la situation et recommandations par réunion d'experts .pdf) a été publié. Parmi eux, le résultat de l'analyse sur le nombre effectif de reproduction (la valeur moyenne du nombre d'infections secondaires produites par une personne infectée à un moment donné dans la population où l'épidémie de la maladie infectieuse est en cours) est présenté. À Hokkaido, la valeur est inférieure à 1 depuis la mi-février et on estime qu'elle se dirige vers la convergence. Dans l'article que j'ai écrit l'autre jour, j'ai montré le résultat calculé avec un modèle simplifié, mais le résultat de l'analyse à ce moment-là est également d'environ 1 dans la mesure où il est inférieur à 1. Nous l'avons fait et je pense que nous avons pu faire correspondre les réponses. Cependant, l'analyse du professeur Nishiura à l'Université d'Hokkaido semble être une analyse plus précise utilisant l'estimation la plus probable. Probablement, comme indiqué dans cet article, numéro de reproduction effectif , Rt): Cela semble signifier "le nombre d'infections secondaires par une personne infectée (sous certaines mesures à un moment t)". Même si le nombre de base de reproductions est R0, il semble difficile de l'évaluer séparément de la société et des politiques, de sorte que le titre de cet article a été intentionnellement défini comme le nombre de reproductions effectives. En passant, dans cet article, je voudrais donner un classement de la valeur moyenne du nombre de reproductions par préfecture pendant une certaine période. À la réunion d’experts de l’autre jour, ** 1. Zones où la situation infectieuse se propage 2. 2. Les zones où la situation infectieuse commence à converger et les zones où elle s'est installée dans une certaine mesure. Il a été recommandé de diviser la zone en trois zones, où le statut infectieux n'a pas été confirmé et **, de manière équilibrée, mais il n'a pas été précisé quelle zone correspond à 1. Par conséquent, la principale motivation de cet article est de ** calculer spécifiquement le nombre de reproductions par préfecture et de les classer **.

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. Aussi, comme dans l'article précédent, le csv publié dans Carte du nombre de nouveaux virus corona infectés par préfecture (fournie par Jag Japan Co., Ltd.) J'ai utilisé les données. 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. Aussi, pour que vous puissiez utiliser le japonais avec matplotlib, [cette page](https://datumstudio.jp/blog/matplotlib%E3%81%AE%E6%97%A5%E6%9C%AC%E8%AA % 9E% E6% 96% 87% E5% AD% 97% E5% 8C% 96% E3% 81% 91% E3% 82% 92% E8% A7% A3% E6% B6% 88% E3% 81% 99 La police IPAex Gothic est installée en faisant référence à% E3% 82% 8Bwindows% E7% B7% A8).

Essayez de calculer avec Python

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

code

Je ne couvrirai pas tout le code de l'article car il sera long, mais j'expliquerai les points clés dans la création du classement. C'est une magie d'activer les polices japonaises dans la figure (les polices doivent être préinstallées).

font = {'family' : 'IPAexGothic'}
plt.rc('font', **font)

C'est une fonction pour extraire le nom de la préfecture. J'utilise la fonction duplicated () pour supprimer les valeurs en double.

def getJapanPrefList():
    #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'Préfecture de consultation']]
    df1.columns = ['pref']
    df1 = df1[~df1.duplicated()]
    preflist = [e[0] for e in df1.values.tolist()]
    return preflist

preflist = getJapanPrefList()

C'est la partie qui crée des graphiques et des cadres de données pour la liste de préfecture.

def R0inJapanPref2(pref):
    keys = {'lp':5, 'ip':8 }
    df1 = makeCalcFrame(60) # 60 days
    df2 = readCsvOfJapanPref(pref)
    df = mergeCalcFrame(df1, df2)
    df = calcR0(df, keys)
    showResult(df, u'COVID-19 R0 ({})'.format(pref))
    return df

dflist = [ [R0inJapanPref2(pref), pref] for pref in preflist]

C'est une fonction pour calculer la moyenne du nombre de reproduction de base R0 dans une période spécifiée. Nous traitons le cas où il devient vierge.

def calcR0Average(df, st, ed):
    df1 = df[(st <= df.date) & (df.date <= ed) ]
    df2 = df1[np.isnan(df1.R0) == False]
    df3 = df2['R0']
    ave = np.average(df3) if len(df3) > 0 else 0
    return ave

Une fonction qui trie pour le classement.

def calcR0AveRank(dflist, st, ed):
    R0AveRank = [ [pref, calcR0Average(df, st, ed)] for df, pref in dflist]
    R0AveRank.sort(key = lambda x: x[1], reverse=True)
    df = pd.DataFrame(R0AveRank)
    df.columns = ['pref','R0ave']
    return df

Une fonction qui affiche le classement sous forme de graphique à barres. J'utilise la fonction set_position pour amener l'axe X vers le haut.

def showRank(dflist, maxn, title):
    ax = dflist.iloc[0:maxn,:].plot.barh(y='R0ave',x='pref',figsize=(8,10))
    ax.invert_yaxis()
    ax.grid(True, axis='x')
    ax.spines['bottom'].set_position(('axes',1.05))
    plt.title(title, y=1.05)
    plt.show()
    return ax

Enfin, la partie qui calcule le classement.

# 2020/2/7 à 2020/3/7
st = pd.Timestamp(2020,2,7)
ed = pd.Timestamp(2020,3,7)
title = "R0ave_ranking_2020207_20200307"
dfR0_1 = calcR0AveRank(dflist, st, ed)
ax = showRank(dfR0_1, 13, title)
fig = ax.get_figure()
fig.savefig("{}.jpg ".format(title))
# 2020/2/23 à 2020/3/7
st = pd.Timestamp(2020,2,23)
ed = pd.Timestamp(2020,3,7)
title = "R0ave_ranking_2020223_20200307"
dfR0_1 = calcR0AveRank(dflist, st, ed)
ax = showRank(dfR0_1, 13, title)
fig = ax.get_figure()
fig.savefig("{}.jpg ".format(title))
# 2020/3/1 à 2020/3/7
st = pd.Timestamp(2020,3,1)
ed = pd.Timestamp(2020,3,7)
title = "R0ave_ranking_2020301_20200307"
dfR0_2 = calcR0AveRank(dflist, st, ed)
ax = showRank(dfR0_2, 13, title)
fig = ax.get_figure()
fig.savefig("{}.jpg ".format(title))

Résultat du classement

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. Nous examinerons au plus tard un mois, deux semaines et une semaine.

Classement du 2020/2/7 au 2020/3/7 (pour le dernier mois)

R0ave_ranking_2020207_20200307.jpg

Classement du 23/02/2020 au 07/03/2020 (pour les 2 dernières semaines)

R0ave_ranking_2020223_20200307.jpg

Classement du 2020/3/1 au 2020/3/7 (pour la dernière semaine)

R0ave_ranking_2020301_20200307.jpg

Considération

En outre ...

Lien de référence

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

  1. «Status Analysis / Recommendations for Countermeasures against New Corona Virus Infectious Diseases» (19 mars 2020)
  2. Calculer la transition du nombre de reproduction de base du nouveau virus corona par préfecture
  3. Prédiction des épidémies de maladies infectieuses: questions quantitatives dans les modèles mathématiques des maladies infectieuses
  4. Carte du nombre de nouveaux virus corona infectés par préfecture (fournie par Jag Japan Co., Ltd.)
  5. [Éliminez les caractères japonais brouillés dans matplotlib (Windows)](https://datumstudio.jp/blog/matplotlib%E3%81%AE%E6%97%A5%E6%9C%AC%E8% AA% 9E% E6% 96% 87% E5% AD% 97% E5% 8C% 96% E3% 81% 91% E3% 82% 92% E8% A7% A3% E6% B6% 88% E3% 81% 99% E3% 82% 8Fenêtres% E7% B7% A8)
  6. Page de la préfecture de Saitama

Recommended Posts

Établissons un classement du nombre de reproductions efficaces du nouveau virus corona par préfecture
Calculons la transition du nombre de reproduction de base du nouveau virus corona par préfecture
Examinons le temps de convergence de la tendance mondiale du nombre de reproduction effectif du nouveau virus corona
Testons l'hypothèse d'effondrement médical du nouveau virus corona
Visualisons le nombre de personnes infectées par le virus corona avec matplotlib
J'ai essayé de classer le nombre de décès par habitant de COVID-19 (nouveau virus corona) par pays
Simulons l'effet de l'introduction d'une application de suivi des contacts comme contre-mesure contre le nouveau virus corona
Tracez la propagation du nouveau virus corona
Créez un bot qui publie sur Slack le nombre de personnes positives pour le nouveau virus corona à Tokyo
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
Créez un BOT qui affiche le nombre de personnes infectées dans le nouveau Corona
[Python] Tracer les données par préfecture sur une carte (nombre de voitures possédées dans tout le pays)
Trouvez le nombre de jours dans un mois
Minimisez le nombre de polissages en optimisant la combinaison
Simulation GUI du nouveau virus corona (modèle SEIR)
Vérifiez l'effet du congé comme contre-mesure contre le nouveau virus corona avec le modèle SEIR
Découvrez le nombre maximum de caractères dans un texte multiligne stocké dans un bloc de données
[Python] Un programme qui compte le nombre de vallées
Tâches au démarrage d'un nouveau projet python
Visualisons les données pluviométriques publiées par la préfecture de Shimane
Grattage des données du bulletin IDWR par nombre de rapports par point fixe de grippe et par préfecture
Importance de la réduction de la cible de test du test PCR pour le nouveau virus corona compris par le théorème de Bayes
Jetons un coup d'œil à la tendance infectieuse du nouveau coronavirus COVID-19 dans chaque pays et à l'état de la réponse médicale (informations supplémentaires).
Si les habitants de Tokyo tombent gravement malades du nouveau virus corona, ils peuvent être emmenés dans un hôpital de la préfecture de Kagoshima.