본문 바로가기
Analysis/Time series

Lecture 3. 시계열 데이터 패턴 추출

by 5ole 2021. 3. 13.

0. 데이터 로드

 

  • 케글 데이터 - 자전거 수요

 

www.kaggle.com/c/bike-sharing-demand/data

 

Bike Sharing Demand

Forecast use of a city bikeshare system

www.kaggle.com

raw_all = pd.read_csv('Bike_Sharing_Demand_Full.csv')
raw_all

 

 

1. 빈도(Frequency)

 

  • 빈도를 시간으로 설정한 후, NaN 값은 앞의 값으로 채운다.

 

raw_all.set_index('datetime', inplace=True)

raw_all = raw_all.asfreq('H', method='ffill')

 

2. 추세(Trend, 𝑇𝑡)

 

  • additive 모형으로 데이터 분해 : trend + seasonal + residual (additive)

 

sm.tsa.seasonal_decompose(raw_all['count'], model='additive').plot()

plt.show()

 

 

  • result.trend 로 trend 값 가져와 저장

 

Y_trend = pd.DataFrame(result.trend)
Y_trend.columns = ['count_trend']

 

 

3. 계절성(Seasonality, 𝑆𝑡)

 

  • result.seasonal 로 계절성 분해

 

Y_seasonal = pd.DataFrame(result.seasonal)
Y_seasonal.columns = ['count_seasonal']

 

 

4. 주기(Cycle, 𝐶𝑡)

 

  • 매일의 패턴, 일주일의 패턴

 

raw_all[['count']], # 시간

raw_all[['count']].rolling(24).mean() # 매일의 패턴 평균

raw_all[['count']].rolling(24*7).mean() # 일주일의 패턴 평균

 

5. 시점의 결과값 차이

 

  • diff() 함수로 다음 행 결과값과 이전의 결과값 차이

 

raw_all[['count']].diff() 

 

6. 그룹 나누기

 

  • 온도를 기준으로 최소값부터 최대값까지 기준으로 5개의 그룹으로 나눔

[(0.78, 8.856] < (8.856, 16.892] < (16.892, 24.928] < (24.928, 32.964] < (32.964, 41.0]]

 

pd.cut(raw_all['temp'], 5)

 

7. 날짜 추출

 

  • 연도별, 쿼터별, 연도별 쿼터 추출

 

raw_all['Year'] = raw_all.datetime.dt.year
raw_all['Quater'] = raw_all.datetime.dt.quarter

raw_all['Quater_ver2'] = raw_all['Quater'] + (raw_all.Year - raw_all.Year.min()) * 4 # 연도별 쿼터 나누기

 

  • 월, 일, 시간, 주, 요일 추출

 

raw_all['Month'] = raw_all.datetime.dt.month
raw_all['Day'] = raw_all.datetime.dt.day
raw_all['Hour'] = raw_all.datetime.dt.hour
raw_all['DayofWeek'] = raw_all.datetime.dt.dayofweek

 

8. 지연값(Lagged values, 𝐿𝑎𝑔𝑡(𝑋1))

 

raw_all['count_lag1'] = raw_all['count'].shift(1)
raw_all['count_lag2'] = raw_all['count'].shift(2)

 

9. 더미변수

 

  • 더미변수로 만든 후 중복되는 열 하나 삭제
pd.get_dummies(raw_all['Quater'], prefix='Quater_Dummy', drop_first=True) # 이름 붙이고 첫번째 열 삭제 

 

 

 

+ 참고 자료 및 출처

 

  • 김경원 < 파이썬을 활용한 시계열 데이터 분석 A-Z  강의 >  ( 패스트캠퍼스 강의 )

댓글