사용데이터는 github에서 사용할 수 있는 데이터를 url을 통해 가져왔고, 엑셀 파일로 불러와도 상관없습니다.
import pandas as pd
import plotly.graph_objs as go
import plotly.offline as py
from fbprophet import Prophet
from fbprophet.plot import plot_plotly, add_changepoints_to_plot
import numpy as np
url = 'https://raw.githubusercontent.com/datasets/covid-19/master/data/time-series-19-covid-combined.csv'
data = pd.read_csv(url, error_bad_lines=False)
data.head()
먼저 코딩 시작전에 필요한 패키지와 데이터 셋을 불러오는 과정입니다.
아래의 설명과 같은 기능을 가지고 있는 라이브러리고, 불러온 데이터를 data 변수에 저장하였습니다.
pandas : 텍스트 입출력 및 데이터 프레임 가공 라이브러리
plotly : 그래프 라이브러리
fbprophet : 시계열 예측 라이브러리
numpy : 수치 연산을 수행하는 선형대수 라이브러리
이렇게 불러온 데이터를 data.head()라는 명령을 통해 아래와 같은 데이터를 잘 불러왔는지 확인할 수 있었습니다.
이후 과정은 누적 확진자 수를 예측하기 위해 Facebook Prophet 라는 패키지를 사용합니다.
Facebook Prophet의 장점은 다른 시계열모델에 비해 더 간단하게 모델을 만들 수 있고,
holiday에 따른 경향성을 확인할 수 있다는 점이 있습니다.
또한 Facebook Prophet을 사용하기 위해서는 데이터 가공이 필요하고,
data는 ds, confirmed는 y로 rename 하는 과정을 가집니다.
그리고 rename 한 데이터 프레임의 마지막 5행을 출력합니다.
df_prophet.tail()의 결과 9월 12일까지의 날짜와 누적 확진자 수를 볼 수 있습니다.
m = Prophet(
changepoint_prior_scale=0.2, # increasing it will make the trend more flexible
changepoint_range=0.98, # place potential changepoints in the first 98% of the time series
yearly_seasonality=True,
weekly_seasonality=True,
daily_seasonality=True,
seasonality_mode='additive')
m.fit(df_prophet)
future = m.make_future_dataframe(periods=7)
future.tail(7)
그 다음 과정은 가장 중요한 모델을 만드는데 필요한 설정입니다.
연계절성 ,주계절성 , 일계절성에 대한 트렌드를 분석하는데 넣는 작업입니다.
additive는 누적되는 데이터임을 의미하고,
changepoint_prior_scale는 값이 커질수록 모델을 유연하게 만듭니다.
또 changepoint_range는 데이터의 앞쪽 몇 퍼센트 부분 안에서 변화점을 만들 것인지 설정합니다.