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 **.
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).
Ce code est disponible sur GitHub. Il est enregistré au format Jupyter Notebook. (Nom de fichier: 03_R0_estimation-JPN-02a.ipynb)
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))
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.
Je me suis référé à la page suivante.
Recommended Posts