1.필요 package 설치
!pip install nsepy
import osimport warningswarnings.filterwarnings('ignore')from pylab import rcParamsrcParams['figure.figsize'] = 10, 6from statsmodels.tsa.stattools import adfullerfrom statsmodels.tsa.seasonal import seasonal_decomposefrom statsmodels.tsa.arima_model import ARIMAfrom pmdarima.arima import auto_arimafrom sklearn.metrics import mean_squared_error, mean_absolute_errorimport mathimport numpy as npfrom nsepy import get_historyfrom datetime import dateimport matplotlib.pyplot as pltimport seaborn as snsimport pandas as pd
3.Data 가져오기
sbin = get_history(symbol='SBIN',start=date(2000,1,1),end=date(2020,11,1))sbin.head()
plt.figure(figsize=(10,6))plt.grid(True)plt.xlabel('Dates')plt.ylabel('Close Prices')plt.plot(sbin['Close'])plt.title('SBIN closing price')plt.show()
plt.figure(figsize=(10,6))df_close = sbin['Close']df_close.plot(style='k.')plt.title('Scatter plot of closing price')plt.show()
plt.figure(figsize=(10,6))df_close = sbin['Close']df_close.plot(style='k.',kind='hist')plt.title('Hisogram of closing price')plt.show()
**히스토그램(Histogram) 으로 표시**
4.데이터의 시계열 검증
시계열 분석은 data가 시계열일때만 작동한다, 따라서 가져온 데이터가 진정 시계열인지 판단할 필요가 있다가설을 설정하고 특성을 확인한다H0 - 귀무가설(Null hypothesis, 영가설) - 주장하는 특정 현상이 입증되지 않는한 사실이라고 믿어지는 기존의 내용
H1 - 대립가설(Alternative hypothesis) - 새로 주장하는 논쟁으로 기존의 것과 다르기 때문에 입증 해야 하는것여기서는H0 - 이 데이터는 시계열이 아니라(non-stationary) 선형(Linear) 이다H1 - 이 데이터는 시계열이다(stationary)로 가설이 설정되며평균과 표준편차가 모두 일정하게 보이면 이 데이터는 시계열이라 할수 있음
5.시계열 검증
from statsmodels.tsa.stattools import adfullerdef test_stationarity(timeseries):
#Determing rolling statisticsrolmean = timeseries.rolling(12).mean()rolstd = timeseries.rolling(12).std()#Plot rolling statistics:plt.plot(timeseries, color='yellow',label='Original')plt.plot(rolmean, color='red', label='Rolling Mean')plt.plot(rolstd, color='black', label = 'Rolling Std')plt.legend(loc='best')plt.title('Rolling Mean and Standard Deviation')plt.show(block=False)print("Results of dickey fuller test")adft = adfuller(timeseries,autolag='AIC')# output for dft will give us without defining what the values are.#hence we manually write what values does it explains using a for loopoutput = pd.Series(adft[0:4],index=['Test Statistics','p-value','No. of lags used','Number of observations used'])for key,values in adft[4].items():output['critical value (%s)'%key] = valuesprint(output)
test_stationarity(sbin['Close'])
**붉은색이 평균 , 검정색이 표준편차(std)이다**
**그래프에서는 평균과 표준편차가 증가하기 때문에 시계열이라 보기 어렵다**
**p값이 0.05 보다 크기때문에 영가설을 기각할수 없다 (시계열이 아닌 선형 데이터이다)**
6.추세와 계절성의 분리
result = seasonal_decompose(df_close, model='multiplicative', freq = 30)fig = plt.figure()fig = result.plot()fig.set_size_inches(16, 9)
댓글 없음:
댓글 쓰기