新型コロナウィルスの感染者増加が止まりません。
このまま行ったらどうなるのかを
データから予測してみました。
解説動画はこちら
さて
今回は予測モデルを使って未来の予測を行います。
用いるライブラリとしては
pandas
matplotlib
fbprophet
になります。
一番初めにデータを読み込んでみましょう。
pandasでデータの提供元(奥村研究所)から
ダウンロードしてデータ化します。
これでデータフレームにデータが読み込まれます。
データは4列あるようです。
まずは感染者数の推移を見てみましょう。

直近での推移が爆裂していますね。
増加率も見てみましょう。
pandasの関数 pct_changeで増加率を算出できます。

1月末ごろから
中国での大流行があったことが
みて取れます。
中国を抜かした世界の推移を見てみましょう。
別の列を用意してあげます。

中国以外は3月の頭くらいから
急激に増えているようですね。
増加率も見てみると

2月の手前に急激に増えた日がありますね。
ここら辺が起点になっているようです。
次に死亡率です。

直近では5%近くなっていてどんどん上がってきてもいます。
このまま増え続けるとどうなるのか
感染者数の推移を予測してみます。
facebookのprophetを用います。
これはインストールをしないと使えないので
お気をつけください。
ds,yの2列を用意してあげます。
dsは日付、yは感染者数です。
モデルを作ります。
最後に予測です。
予測したい日数分の空のデータフレームを用意します。
空のデータフレームを使って
学習したモデルで予測します。
可視化もできます。
結果は

このままの推移が続くと
今年の終わりには600万人
来年の6月にはその倍くらいにはなっています。
すでに対策を始めていますので
ここまでにはならないと思いたいですが
不要不急の用事がない限りは
あまり出歩かない方が良いでしょうね。
死亡率も5%近くということで
20人のうち一人亡くなると考えると
無視できない確率かなと
個人的には思います。
リモートワークが続いて
ずっと家にいるわけですが
早く
収束してくれることを
願うばかりであります。
このまま行ったらどうなるのかを
データから予測してみました。
解説動画はこちら
さて
今回は予測モデルを使って未来の予測を行います。
用いるライブラリとしては
pandas
matplotlib
fbprophet
になります。
一番初めにデータを読み込んでみましょう。
pandasでデータの提供元(奥村研究所)から
ダウンロードしてデータ化します。
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline
df = pd.read_csv("https://oku.edu.mie-u.ac.jp/~okumura/python/data/COVID-19.csv",
index_col='Date', parse_dates=['Date'])これでデータフレームにデータが読み込まれます。
データは4列あるようです。
まずは感染者数の推移を見てみましょう。
df.iloc[0:,0:2].plot(figsize=(16,9)) plt.show()

直近での推移が爆裂していますね。
増加率も見てみましょう。
pandasの関数 pct_changeで増加率を算出できます。
df['diff_Global Confirmed'] = df['Global Confirmed'].pct_change() df['diff_Global Deaths'] = df['Global Deaths'].pct_change() plt.figure(figsize=(16,9)) plt.bar(df.index,df['diff_Global Confirmed'],alpha=0.3,label="Confirmed") plt.bar(df.index,df['diff_Global Deaths'],alpha=0.3,label="Deaths") plt.legend() plt.show()

1月末ごろから
中国での大流行があったことが
みて取れます。
中国を抜かした世界の推移を見てみましょう。
別の列を用意してあげます。
df['Confirmed2']=df['Global Confirmed'] - df['China Confirmed'] df['Deaths2']=df['Global Deaths'] - df['China Deaths'] df.iloc[0:,6:8].plot(figsize=(16,9)) plt.show()

中国以外は3月の頭くらいから
急激に増えているようですね。
増加率も見てみると
df['diff_Confirmed2'] = df['Confirmed2'].pct_change() df['diff_Deaths2'] = df['Deaths2'].pct_change() plt.figure(figsize=(16,9)) plt.bar(df.index,df['diff_Confirmed2'],alpha=0.3,label="Confirmed") plt.bar(df.index,df['diff_Deaths2'],alpha=0.3,label="Deaths") plt.legend() plt.show()

2月の手前に急激に増えた日がありますね。
ここら辺が起点になっているようです。
次に死亡率です。
df['Death Rate'] = df['Deaths2'] / df['Confirmed2'] plt.figure(figsize=(16,9)) plt.bar(df.index,df['Death Rate'],alpha=0.8,label="Death Rate") plt.legend() plt.show()

直近では5%近くなっていてどんどん上がってきてもいます。
このまま増え続けるとどうなるのか
感染者数の推移を予測してみます。
facebookのprophetを用います。
これはインストールをしないと使えないので
お気をつけください。
from fbprophet import Prophet
import warnings
warnings.simplefilter('ignore',)
model_df = df[['Confirmed2']]
model_df = model_df.reset_index()
model_df = model_df.rename(columns={'Date':'ds','Confirmed2':'y'})
model_df.head()予測用のデータはds,yの2列を用意してあげます。
dsは日付、yは感染者数です。
ds | y | |
|---|---|---|
| 0 | 2020-01-20 | 4 |
| 1 | 2020-01-21 | 5 |
| 2 | 2020-01-23 | 10 |
| 3 | 2020-01-24 | 16 |
| 4 | 2020-01-25 | 23 |
モデルを作ります。
model = Prophet() model.fit(model_df)
最後に予測です。
予測したい日数分の空のデータフレームを用意します。
空のデータフレームを使って
学習したモデルで予測します。
future_df = model.make_future_dataframe(600) forecast_df = model.predict(future_df) model.plot(forecast_df)
可視化もできます。
結果は

このままの推移が続くと
今年の終わりには600万人
来年の6月にはその倍くらいにはなっています。
すでに対策を始めていますので
ここまでにはならないと思いたいですが
不要不急の用事がない限りは
あまり出歩かない方が良いでしょうね。
死亡率も5%近くということで
20人のうち一人亡くなると考えると
無視できない確率かなと
個人的には思います。
リモートワークが続いて
ずっと家にいるわけですが
早く
収束してくれることを
願うばかりであります。
