[PYTHON] [Introduction au modèle de maladie infectieuse] En regardant le graphique logarithmique. .. .. Une semaine après "C'est la deuxième vague"!

Cela fait une autre semaine depuis le dernier article, mais j'aimerais résumer les tendances depuis lors. Cette fois, j'aimerais utiliser le MACD utilisé pour les prévisions de cours des actions pour voir la situation future. Premièrement, en regardant la situation actuelle sur un graphique logarithmique ordinaire, Tokyo et l'ensemble du pays sont les suivants. Tokyo a déjà dépassé la valeur maximale de la première vague et continue d'augmenter de façon exponentielle. Cependant, bien qu'il ait montré une légère tendance à la baisse de dimanche à mercredi la semaine dernière, il n'a aucun effet sur la posture. De plus, aujourd'hui, c'est aussi dimanche avec 206 personnes, mais le nombre d'infections est presque le même. original_data_東京_531_old.png D'un autre côté, l'ensemble du pays augmente également de façon exponentielle. Il y a eu une diminution dans tout le pays du dimanche au mercredi. Le nombre d'infections dans tout le pays est presque le même que 371 aujourd'hui. original_data_合計_531_old.png

Appliquer MACD

Premièrement, elle s'applique au changement de la première vague de fin mars à fin avril. La logique est brièvement décrite ci-dessous

MACD = EMA 12 jours-EMA 26 jours
Signal = MACD EMA 9 jours
Histogramme = Signal-MACD

Ici, l'EMA (moyenne mobile exponentielle) est calculée par la formule graduelle suivante.

{S_{{t}}=\alpha \times Y_{{t-1}}+(1-\alpha )\times S_{{t-1}}
}

Ici, $ Y_ {{t-1}} $ est la valeur observée à t-1 et $ S_ {{t-1}} $ est l'EMA précédente. $ \ Alpha = {2 \ over {N + 1}} $, N = 9 est une valeur d'environ 0,2, et $ S_ {{t}} $ est évalué plus grand et moyenné plus près du point d'observation actuel. Incorporé dans. Par conséquent, le mouvement pendant la première vague peut être calculé comme suit. Comme indiqué ci-dessous, la tendance à la baisse à Tokyo peut être clairement lue après le 17 avril, mais il y a beaucoup de bruit. ema_df_decompose_%5K%25D_tokyo_trendold2020-06-01.png L'ensemble du pays est comme suit, et presque le même qu'à Tokyo, une tendance à la baisse peut être observée après le 17 avril. ema_df_decompose_%5K%25D_total_japan_trendold2020-06-01.png En fait, si vous regardez ce qui précède, les fluctuations quotidiennes sont toujours importantes, donc [Similaire à l'article sur Systre, introduisez Decompose ici et utilisez la courbe de tendance pour le même traitement](https://qiita.com/MuAuan/items/ b08616a841be25d29817) est illustré. Tokyo est la suivante, et on peut voir qu'elle s'est clairement tournée vers une tendance à la baisse après avoir culminé le 15 avril. ema_decompose_%5K%25D_tokyo_trendold2020-06-01.png L'ensemble du pays est comme suit. Cela a également culminé le 16 avril et est devenu une tendance à la baisse. ema_decompose_%5K%25D_total_japan_trendold2020-06-01.png Par conséquent, il semble que cette méthode d'analyse puisse être utilisée pour voir le nombre maximal d'infections même dans la série chronologique du nombre d'infections à Corona.

Postulez à la deuxième vague

Les résultats pour Tokyo sont les suivants. Tout d'abord, une analyse pour l'absence de traitement; une augmentation exponentielle est également apparente dans cette analyse, et il est probable que le nombre d'infections atteindra le niveau de 500 en 10 jours à 2 semaines. ema_df_decompose_%5K%25D_tokyo_trendnew2020-06-01.png Décomposer et analyser la courbe de tendance; il n'y a aucun signe de déclin supplémentaire dans ce graphique, et cette tendance devrait se poursuivre pour le moment. En d'autres termes, la courbe MACD et la courbe du signal sont convexes vers le bas, ce qui suggère que la différence augmentera pour le moment. Dans les cours des actions, le lieu où cette différence devient négative peut être considéré comme un signal de baisse, mais ce chiffre ne le montre pas. ema_decompose_%5K%25D_tokyo_trendnew2020-06-01.png L'analyse nationale est la suivante, et la courbe est presque la même qu'à Tokyo. ema_df_decompose_%5K%25D_total_japan_trendnew2020-06-01.png De même, décomposez et analysez la courbe de tendance comme suit ema_decompose_%5K%25D_total_japan_trendnew2020-06-01.png

Une petite analyse de fond

La tendance nationale est similaire à celle de Tokyo. Bien sûr, puisque les nombres dans la zone métropolitaine sont importants, il semble naturel que la même tendance se produise, mais le début de la deuxième vague cette fois-ci est le 22 juin à partir de l'inclinaison du tracé bleu et de la montée du graphique à barres du signal-MACD. C'est autour. Alors, réfléchissons à ce qui cause ce déclencheur. Les candidats déclencheurs sont les deux suivants. ① La déclaration d'urgence sera annulée le 25 mai. ② L'annulation de l'alerte de Tokyo est le 11 juin En comparant ceux-ci, on pense qu'il faut environ 10 jours entre l'infection et la détection par inspection, il semble donc raisonnable de penser que l'annulation de l'alerte de Tokyo est le déclencheur de l'augmentation. Pour le dire autrement, on peut dire que Tokyo Alert a eu un certain effet.

Être préoccupé par l'augmentation du nombre d'infections à l'avenir

Tout d'abord, si vous regardez le graphique rouge du nombre d'infections à Tokyo montré dans le premier graphique, il est déjà passé à environ 1200, et il semble qu'il augmentera du même indice à l'avenir. En d'autres termes, 3000 lits sont susceptibles d'être remplis en moins de 10 jours. Il est rapporté que la durée habituelle du séjour à l'hôpital est d'environ 10 jours, donc 3000 lits en moins de 10 jours est un chiffre un peu effrayant. Vient ensuite l'augmentation du nombre de patients gravement malades. L'augmentation du nombre de patients gravement malades a été retardée et semble diminuer à mesure que la première vague de blessures graves se rétablit. Cependant, cela a commencé à se produire 7 à 10 jours plus tard lors de la première vague, et on craint que cela se produise à l'avenir. Et maintenant, j'entends dire que 70 à 80% des jeunes le sont, donc l'effet supprime l'aggravation. Cependant, à mesure que le nombre d'infections augmente, le nombre absolu de personnes âgées augmente également et l'augmentation du nombre absolu d'aggravation ne peut être évitée. Et enfin, 40 jours après l'admission, lorsque les soins médicaux commencent à se resserrer, les décès commencent à augmenter.

À ce rythme, rien n'indique que la propagation des infections non seulement à Tokyo mais dans tout le pays s'arrêtera, et après tout, une déclaration d'urgence limitée sera émise, et des mesures telles que des restrictions de mouvement à partir de Tokyo et des restrictions de travail dans des zones spécifiques seront prises pour prévenir autant que possible l'infection des jeunes. Nous pensons qu'il est nécessaire de prendre des mesures pour prévenir l'infection des personnes à haut risque. Autant que possible, on suppose que l'expansion ne peut être supprimée que si elle est mise en œuvre avec la même force motrice que Tokyo Alert.

Résumé

・ J'ai essayé d'appliquer MACD pour prédire le nombre d'infections ・ Une augmentation exponentielle continue a été suggérée ・ Quoi qu'il en soit, l'action initiale (bien qu'elle semble retardée) est importante, c'est pourquoi des mesures de confinement des infections de classe Tokyo Alert devraient être annoncées.

・ Le type de contre-mesure défini par l'alerte ci-dessus est important lors du redressement de l'économie, je voudrais donc que vous fassiez une proposition et que vous la mettiez en œuvre dès que possible.

Bonus (code pour le moment)

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import datetime as dt
from pandas_datareader import data
import statsmodels.api as sm
from statsmodels.tsa.seasonal import STL

#Lisez les données CSV avec les pandas. C:\Users\user\simulation\COVID-19\csse_covid_19_data\japan\test
data = pd.read_csv('data/covid19/test_confirmed.csv',encoding="cp932")
data_r = pd.read_csv('data/covid19/test_recovered.csv',encoding="cp932")
data_d = pd.read_csv('data/covid19/test_deaths.csv',encoding="cp932")
#data = pd.read_csv('data/test_confirmed_.csv',encoding="cp932")
#data_r = pd.read_csv('data/test_recovered_.csv',encoding="cp932")
#data_d = pd.read_csv('data/test_deaths_.csv',encoding="cp932")

confirmed = [0] * (len(data.columns) - 1)
day_confirmed = [0] * (len(data.columns) - 1)
confirmed_r = [0] * (len(data_r.columns) - 1)
day_confirmed_r = [0] * (len(data.columns) - 1)
confirmed_d = [0] * (len(data_d.columns) - 1)
diff_confirmed = [0] * (len(data.columns) - 1)
days_from_1_Jun_20 = np.arange(0, len(data.columns) - 1, 1)
beta_ = [0] * (len(data_r.columns) - 1)
gamma_ = [0] * (len(data_d.columns) - 1)
daystamp = "531"

#city,city0 = "Tokyo","tokyo"
city,city0 = "total","total_japan"

skd=1
#Données de processus
t_cases = 0
t_recover = 0
t_deaths = 0
for i in range(0, len(data_r), 1):
    if (data_r.iloc[i][0] == city): #for country/region
        print(str(data_r.iloc[i][0]))
        for day in range(1, len(data.columns), 1):            
            confirmed_r[day - 1] += data_r.iloc[i][day]
            if day < 1+skd:
                day_confirmed_r[day-1] += data_r.iloc[i][day]
            else:
                day_confirmed_r[day-1] += (data_r.iloc[i][day] - data_r.iloc[i][day-skd])/(skd)
        t_recover += data_r.iloc[i][day]        
for i in range(0, len(data_d), 1):
    if (data_d.iloc[i][0] == city): #for country/region
        print(str(data_d.iloc[i][0]) )
        for day in range(1, len(data.columns), 1):
            confirmed_d[day - 1] += float(data_d.iloc[i][day]) #fro drawings
        t_deaths += float(data_d.iloc[i][day])        
for i in range(0, len(data), 1):
    if (data.iloc[i][0] == city): #for country/region
        print(str(data.iloc[i][0]))
        for day in range(1, len(data.columns), 1):
            confirmed[day - 1] += data.iloc[i][day] -  confirmed_r[day - 1] -confirmed_d[day-1]
            if day == 1:
                day_confirmed[day-1] += data.iloc[i][day]
            else:
                day_confirmed[day-1] += data.iloc[i][day] - data.iloc[i][day-1]

def EMA1(x, n):
    a= 2/(n+1)
    return pd.Series(x).ewm(alpha=a).mean()                
                
day_confirmed[0]=0                
df = pd.DataFrame()                
date = pd.date_range("20200531", periods=len(day_confirmed))
df = pd.DataFrame(df,index = date)
df['Close'] = day_confirmed
df.to_csv('data/day_comfirmed_new_{}.csv'.format(city0))
date_df=df['Close'].index.tolist() #C'est le point
print(date_df[0:30])
series = df['Close'].values.tolist()
stock0 = city0
stock = stock0
start = dt.date(2020,6,1)
end = dt.date(2020,7,12)

bunseki = "trend" #series" #cycle" #trend
cycle, trend = sm.tsa.filters.hpfilter(series, 144)
series2 = trend

y12 = EMA1(series2, 12)
y26 = EMA1(series2, 26)
MACD = y12 -y26
signal = EMA1(MACD, 9)
hist_=MACD-signal

ind3=date_df[:]
print(len(series),len(ind3))

fig, (ax1,ax2) = plt.subplots(2,1,figsize=(1.6180 * 8, 4*2),dpi=200)
ax1.bar(ind3,series,label="series")
ax1.plot(ind3,series2, "o-", color="blue",label="series2")
ax1.plot(ind3,y12, ".-", color="red",label="y12")
ax1.plot(ind3,y26, ".-", color="green",label="y26")
ax2.plot(ind3,MACD,label="MACD")
ax2.plot(ind3,signal,label="signal")
ax2.bar(ind3,hist_)
ax1.legend()
ax2.legend()
ax1.set_ylim(10,1000)
#ax2.set_ylim(10,1000)
ax1.set_yscale('log')
#ax2.set_yscale('log')
ax1.grid()
ax2.grid()
plt.savefig("./fig/{}/ema_decompose_%5K%25D_{}_{}new{}.png ".format(stock0,stock,bunseki,start))
plt.pause(1)
plt.close()

df['Close']=series  #series" #cycle" #trend
df['series2']=series2
df['y12'] = EMA1(df['Close'], 12)
df['y26'] =  EMA1(df['Close'], 26)
df['MACD'] = df['y12'] -df['y26']
df['signal'] = EMA1(df['MACD'], 9)
df['hist_']=df['MACD']-df['signal']
date_df=df['Close'].index.tolist()
print(df[0:30])

fig, (ax1,ax2) = plt.subplots(2,1,figsize=(1.6180 * 8, 4*2),dpi=200)
ax1.bar(ind3,series, label="series")
ax1.plot(df['series2'],"o-", color="blue",label="series2")
ax1.plot(df['y12'],".-", color="red",label="y12")
ax1.plot(df['y26'],".-", color="green",label="y26")
ax2.plot(df['MACD'],label="MACD")
ax2.plot(df['signal'],label="signal")
ax2.bar(date_df,df['hist_'])
ax1.legend()
ax2.legend()
ax1.set_ylim(10,1000)
ax1.set_yscale('log')
ax1.grid()
ax2.grid()
plt.savefig("./fig/{}/ema_df_decompose_%5K%25D_{}_{}new{}.png ".format(stock0,stock,bunseki,start))
plt.pause(1)
plt.close()

Recommended Posts

[Introduction au modèle de maladie infectieuse] En regardant le graphique logarithmique. .. .. Une semaine après "C'est la deuxième vague"!
[Introduction au modèle de maladie infectieuse] En regardant le graphique logarithmique. .. .. C'est la deuxième vague! ??
[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 ♬
[Introduction au modèle de maladie infectieuse] J'ai essayé de m'adapter et de jouer
[Introduction au modèle des maladies infectieuses] Toutes les régions du Japon se terminent ... ♬
[Introduction au modèle des maladies infectieuses] Statut global de l'infection vu par MACD
[Introduction au modèle des maladies infectieuses] Quelle est la différence entre l'épidémie d'avril et cette épidémie? .. .. ‼