COVID-19 예측
입문
신종 코로나바이러스 감염자 수가 늘어나자 도쿄, 오사카, 교토, 병고에서 긴급사태 선언이 나왔다.감염자 수 정보는 후생 노동성 페이지에서 다운로드할 수 있다.우선 양성 인원수의 데이터를 다운로드하여 도표화를 시도해 보자.import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sns
def get_data():
url = 'https://www.mhlw.go.jp/content/pcr_positive_daily.csv'
df = pd.read_csv(url,
usecols=[0, 1],
names=['date', 'positives'],
skiprows=1,
parse_dates=['date'],
index_col='date'
)
return df
def main():
df = get_data()
df.plot()
plt.title('COVID19 日別感染者数')
plt.show()
if __name__ == '__main__':
main()
문외한이라도 내가 보기에는 이번이 네 번째라고 생각할 것이다.
앞으로 어떻게 될까요?
이번에는 Prophet와 ARIMA를 사용해 1개월 후의 감염자 추이를 예측해 봤다.그 실용 LSTM 모델도 시험해 봤지만 잘 예상하지 못해 다른 방법으로 시험해 보기로 했다.
Prophet으로 예측해보세요.
Prophet는 페이스북이 개발한 예측 모델이다.
사용 방법에는 특징이 있지만 모형을 만드는 것은 간단하다.
Pandas의 DataFrame에서 입력 데이터를 지정합니다.이때 시간 시퀀스의 열 이름을 ds로 설정하고 측정 값의 열 이름을 y로 설정해야 합니다."cap"이라는 열을 추가해야 합니다. 받아들일 수 있는 최대치를 지정합니다.이번에는 만 원입니다.데이터 검색 및 DataFrame 제작은 다음과 같습니다. url = 'https://www.mhlw.go.jp/content/pcr_positive_daily.csv'
df = pd.read_csv(url,
usecols=[0, 1],
names=['ds', 'y'],
skiprows=1,
parse_dates=['ds'],
)
df['cap'] = 10000
모형의 제작은 다음과 같이 진행된다. model = Prophet()
아무것도 지정하지 않으면 선형 회귀가 되기 때문에 이번에는 아래와 같이logistic 회귀를 지정합니다. model = Prophet(growth='logistic')
그리고 데이터를 지정하여 의합합니다. model.fit(df)
미래를 예측하려면 미래 날짜를 지정한 데이터 프레임워크를 만듭니다.make_future_데이터 프레임이라는 방법을 사용하면 지정한 목적지까지의 데이터 프레임을 만들 수 있습니다.여기에도cap열을 추가해야 합니다. df_future = model.make_future_dataframe(periods=30)
df_future['cap'] = 10000
예측치를 구해 보다. predicts = model.predict(df_future)
아래와 같이 결과를 도표로 표시할 수 있다.
plt.xkcd () 를 사용하면 직접 작성한 도면을 만들 수 있습니다.(안 그래, 그냥 해보고 싶었어.) plt.xkcd()
model.plot(predicts)
plt.tight_layout()
plt.title('Prediction COVID-19 by Prophet Model')
plt.show()
나는 증가하는 경향이 있다는 것을 안다.너도 그것의 주기성을 볼 수 있다.하지만 실제 값에는 맞지 않아요...
ARIMA로 예측해 주세요.
다음은 ARIMA로 예측해 보겠습니다.감염자 수가 1주일의 주기성을 가지고 있다는 것을 알고 이번에는 사리마(Seasonal ARIMA 모델)를 사용해 봤다.
ARIMA 모델을 이해하지 못해서 설명을 잘 못해서 원본 코드만 씁니다.import datetime
import pandas as pd
from matplotlib import pylab as plt
import japanize_matplotlib
import statsmodels.api as sm
def get_data():
url = 'https://www.mhlw.go.jp/content/pcr_positive_daily.csv'
df = pd.read_csv(url,
usecols=[0, 1],
names=['date', 'positives'],
skiprows=1,
parse_dates=['date'],
index_col='date'
)
return df
def main():
plt.xkcd()
df = get_data()
diff = df['positives'].diff()
diff = diff.dropna()
params = sm.tsa.arma_order_select_ic(diff, ic='aic', trend='nc')
aic_order = params['aic_min_order']
'''
orderはarma_order_select_icで求めた値を指定。
seasonal_orderは1週間周期なので4番目に7を指定。
'''
model = sm.tsa.SARIMAX(
df,
order=(aic_order[0], 1, aic_order[1]),
seasonal_order=(1, 1, 1, 7)
).fit()
'''
30日分の予想をしてみる
'''
predict_period_from = df.index.max()
predict_period_to = df.index.max() + datetime.timedelta(days=30)
predict = model.predict(predict_period_from, predict_period_to)
plt.plot(df, label='real')
plt.plot(predict, label='predict')
plt.title('Prediction COVID-19 by SARIMA Model')
plt.savefig('covid19-arima2.png')
plt.show()
if __name__ == '__main__':
main()
아무래도 예측이 잘 된 것 같은데.
끝날 때
이번에는 Deep Learning을 포기하고 다른 방법으로 COVID19를 예측해 봤습니다.
아리마 모형의 대단함도 알겠습니다.Deep Learning과 함께 공부하고 싶습니다.
소스를 GitHub 위에 얹으세요.
Reference
이 문제에 관하여(COVID-19 예측), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mahoutsukaino-deshi/items/c5f22aab7686b8c74422
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sns
def get_data():
url = 'https://www.mhlw.go.jp/content/pcr_positive_daily.csv'
df = pd.read_csv(url,
usecols=[0, 1],
names=['date', 'positives'],
skiprows=1,
parse_dates=['date'],
index_col='date'
)
return df
def main():
df = get_data()
df.plot()
plt.title('COVID19 日別感染者数')
plt.show()
if __name__ == '__main__':
main()
Prophet는 페이스북이 개발한 예측 모델이다.
사용 방법에는 특징이 있지만 모형을 만드는 것은 간단하다.
Pandas의 DataFrame에서 입력 데이터를 지정합니다.이때 시간 시퀀스의 열 이름을 ds로 설정하고 측정 값의 열 이름을 y로 설정해야 합니다."cap"이라는 열을 추가해야 합니다. 받아들일 수 있는 최대치를 지정합니다.이번에는 만 원입니다.데이터 검색 및 DataFrame 제작은 다음과 같습니다.
url = 'https://www.mhlw.go.jp/content/pcr_positive_daily.csv'
df = pd.read_csv(url,
usecols=[0, 1],
names=['ds', 'y'],
skiprows=1,
parse_dates=['ds'],
)
df['cap'] = 10000
모형의 제작은 다음과 같이 진행된다. model = Prophet()
아무것도 지정하지 않으면 선형 회귀가 되기 때문에 이번에는 아래와 같이logistic 회귀를 지정합니다. model = Prophet(growth='logistic')
그리고 데이터를 지정하여 의합합니다. model.fit(df)
미래를 예측하려면 미래 날짜를 지정한 데이터 프레임워크를 만듭니다.make_future_데이터 프레임이라는 방법을 사용하면 지정한 목적지까지의 데이터 프레임을 만들 수 있습니다.여기에도cap열을 추가해야 합니다. df_future = model.make_future_dataframe(periods=30)
df_future['cap'] = 10000
예측치를 구해 보다. predicts = model.predict(df_future)
아래와 같이 결과를 도표로 표시할 수 있다.plt.xkcd () 를 사용하면 직접 작성한 도면을 만들 수 있습니다.(안 그래, 그냥 해보고 싶었어.)
plt.xkcd()
model.plot(predicts)
plt.tight_layout()
plt.title('Prediction COVID-19 by Prophet Model')
plt.show()
나는 증가하는 경향이 있다는 것을 안다.너도 그것의 주기성을 볼 수 있다.하지만 실제 값에는 맞지 않아요...
ARIMA로 예측해 주세요.
다음은 ARIMA로 예측해 보겠습니다.감염자 수가 1주일의 주기성을 가지고 있다는 것을 알고 이번에는 사리마(Seasonal ARIMA 모델)를 사용해 봤다.
ARIMA 모델을 이해하지 못해서 설명을 잘 못해서 원본 코드만 씁니다.import datetime
import pandas as pd
from matplotlib import pylab as plt
import japanize_matplotlib
import statsmodels.api as sm
def get_data():
url = 'https://www.mhlw.go.jp/content/pcr_positive_daily.csv'
df = pd.read_csv(url,
usecols=[0, 1],
names=['date', 'positives'],
skiprows=1,
parse_dates=['date'],
index_col='date'
)
return df
def main():
plt.xkcd()
df = get_data()
diff = df['positives'].diff()
diff = diff.dropna()
params = sm.tsa.arma_order_select_ic(diff, ic='aic', trend='nc')
aic_order = params['aic_min_order']
'''
orderはarma_order_select_icで求めた値を指定。
seasonal_orderは1週間周期なので4番目に7を指定。
'''
model = sm.tsa.SARIMAX(
df,
order=(aic_order[0], 1, aic_order[1]),
seasonal_order=(1, 1, 1, 7)
).fit()
'''
30日分の予想をしてみる
'''
predict_period_from = df.index.max()
predict_period_to = df.index.max() + datetime.timedelta(days=30)
predict = model.predict(predict_period_from, predict_period_to)
plt.plot(df, label='real')
plt.plot(predict, label='predict')
plt.title('Prediction COVID-19 by SARIMA Model')
plt.savefig('covid19-arima2.png')
plt.show()
if __name__ == '__main__':
main()
아무래도 예측이 잘 된 것 같은데.
끝날 때
이번에는 Deep Learning을 포기하고 다른 방법으로 COVID19를 예측해 봤습니다.
아리마 모형의 대단함도 알겠습니다.Deep Learning과 함께 공부하고 싶습니다.
소스를 GitHub 위에 얹으세요.
Reference
이 문제에 관하여(COVID-19 예측), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mahoutsukaino-deshi/items/c5f22aab7686b8c74422
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import datetime
import pandas as pd
from matplotlib import pylab as plt
import japanize_matplotlib
import statsmodels.api as sm
def get_data():
url = 'https://www.mhlw.go.jp/content/pcr_positive_daily.csv'
df = pd.read_csv(url,
usecols=[0, 1],
names=['date', 'positives'],
skiprows=1,
parse_dates=['date'],
index_col='date'
)
return df
def main():
plt.xkcd()
df = get_data()
diff = df['positives'].diff()
diff = diff.dropna()
params = sm.tsa.arma_order_select_ic(diff, ic='aic', trend='nc')
aic_order = params['aic_min_order']
'''
orderはarma_order_select_icで求めた値を指定。
seasonal_orderは1週間周期なので4番目に7を指定。
'''
model = sm.tsa.SARIMAX(
df,
order=(aic_order[0], 1, aic_order[1]),
seasonal_order=(1, 1, 1, 7)
).fit()
'''
30日分の予想をしてみる
'''
predict_period_from = df.index.max()
predict_period_to = df.index.max() + datetime.timedelta(days=30)
predict = model.predict(predict_period_from, predict_period_to)
plt.plot(df, label='real')
plt.plot(predict, label='predict')
plt.title('Prediction COVID-19 by SARIMA Model')
plt.savefig('covid19-arima2.png')
plt.show()
if __name__ == '__main__':
main()
이번에는 Deep Learning을 포기하고 다른 방법으로 COVID19를 예측해 봤습니다.
아리마 모형의 대단함도 알겠습니다.Deep Learning과 함께 공부하고 싶습니다.
소스를 GitHub 위에 얹으세요.
Reference
이 문제에 관하여(COVID-19 예측), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mahoutsukaino-deshi/items/c5f22aab7686b8c74422텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)