시간의 흐름에 대해 특정 패턴과 같은 정보를 가지고 있는 데이터
- 보통 데이터 분석에서 개요 정도의 레벨에서 접근하는 시계열은 대부분 Forecast이다.
- 이러한 시계열 데이터에서 주기성을 가지고 있는 데이터를 다루는 경우를 seasonal time series라고 한다.
conda install -c conda-forge fbprophet
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#데이터 생성
time = np.linspace(0,1, 365*2)
result = np.sin(2*np.pi*12*time)
ds = pd.date_range('2018-01-01', periods = 365*2, freq = 'D')
df = pd.DataFrame({'ds':ds, 'y':result})
#기본 데이터 확인
df['y'].plot(figsize=(8,6))
#prophet import
from prophet import Prophet
m = Prophet(yearly_seasonality= True, daily_seasonality= True)
m.fit(df);
#앞으로 30일에 대한 예측
future = m.make_future_dataframe(periods=30)
forcast = m.predict(future)
m.plot(forcast);

import pandas as pd
import pandas_datareader as web
import numpy as np
import matplotlib.pyplot as plt
import koreanize_matplotlib
from prophet import Prophet
from datetime import datetime
%matplotlib inline
pinkwink_web = pd.read_csv('../data/forcast_data/05_PinkWink_Web_Traffic.csv', encoding='utf-8', thousands = ',', names = ['date','hit'], index_col=0)
pinkwink_web.head()
pinkwink_web.dropna(axis =0,inplace= True)
pinkwink_web.info()
#전체 데이터 그려보기
pinkwink_web['hit'].plot(figsize=(12,4), grid=True);
#trend분석을 시각화 하기 위한 x축 값을 만들기
time = np.arange(0,len(pinkwink_web))
traffic = pinkwink_web['hit'].values
fx = np.linspace(0, time[-1], 1000)
#에러를 계산할 함수
def error(f,x,y):
return np.sqrt(np.mean((f(x)-y)**2))
fp1 = np.polyfit(time, traffic, 1)
f1 = np.poly1d(fp1)
f2p = np.polyfit(time, traffic, 2)
f2 = np.poly1d(f2p)
f3p = np.polyfit(time, traffic, 3)
f3 = np.poly1d(f3p)
f15p = np.polyfit(time, traffic, 15)
f15 = np.poly1d(f15p)
print(error(f1, time, traffic))
print(error(f2, time, traffic))
print(error(f3, time, traffic))
print(error(f15, time, traffic))
plt.figure(figsize=(8,6))
plt.scatter(time, traffic, s=10)
plt.plot(fx, f1(fx), lw=4, label='f1')
plt.plot(fx, f2(fx), lw=4, label='f2')
plt.plot(fx, f3(fx), lw=4, label='f3')
plt.plot(fx, f15(fx), lw=4, label='f15')
plt.grid(True, linestyle='-', color='0.75')
plt.legend(loc=2)
plt.show()

m.plot_components(forecast);
#component함수를 사용하면 부분적으로 카테고리에 맞는 데이터들을 가져올 수 있다.

📌회고록
- prophet사용시에는 데이터에 nan값이 없는지 꼭 확인하기