[시계열 데이터] 01. 시계열 데이터 개요(DateTime 인덱스/ 시계열을 위한 판다스 유틸리티-Resampling/rolling/expanding) with 스타벅스 주식 데이터

2022. 3. 11. 15:34나혼빅(나혼자빅데이터)/시계열데이터

[시계열 데이터] 01. 시계열 데이터 개요

(시계열데이터 분석을 위한 Datatime Index / 시계열 분석을 위한 판다스 유틸리티 활용)

  해당 포스팅은 Udemy(유데미)의 시계열 데이터 분석 with Python(파이썬)을 수강하면서 정리하였습니다.

 

 

01. 데이터 설명

  • 2015년 1월 2일부터 2018년 12월 31일 까지 스타벅스 종가(Close), 거래량수(Volume)를 나타낸 시계열 데이터
  • 현재 일자에 해당하는 ‘Date’ 칼럼은 object 객체 타입으로, 시계열 분석을 위해서는 ‘Datetime’ 객체로 변환시켜줘야함

 

02. 시계열데이터 분석을 위한 Datetime Index

  • 시계열 데이터를 load 해올 때부터, datetime 객체로 변환해주는 것이 데이터 핸들링할 때 편리함
    data = pd.read_csv('경로/파일명', index_col='컬럼명', parse_dates=True)
  • parse_dates = True/False 날짜데이터를 datetime 형태로 변환할지 여부

  • 'object' 데이터 타입이었던 'Date' column을 'Datatime' 데이터 타입 Index로 변환

 

03. 시계열 분석을 위한 판다스 유틸리티 활용
    : 시간재조정(resampling), 시간이동(shift),
      빈도집계(rolling), 누적집계(Expanding)

 

 3-1. 시간재조정(시간 리샘플링) - resampling

 

가. resampling 설명

    • 시계열 데이터를 특정 시간 단위 구간 별로 재조정하며, 집계함수와 같이 씀
    • 샘플링 시, 데이터 양의 증가와 감소에 따라 (1) 업샘플링(up-sampling), (2) 다운샘플링(down-sampling)

           (1) 업샘플링(up-sampling) : 시간 구간이 작아지면 데이터 양이 증가함

           (2)다운샘플링(down-sampling) : 시간 구간이 커지면 데이터 양이 감소함

 

나. resampling 인자

  • resampling 메서드 안의 rule 인자로 시계열 데이터 빈도/주기 날짜 조정 가능

다. resampling 를 활용한 집계 예

 

라. resampling을 활용한 월/년 첫 데이터 샘플링 사용자 함수 만들기 / 시각화 해보기

def get_first_day(entry):
    
    if len(entry): #missing data가 아니면
        return entry[0]

 

 

예) 월 별 첫 데이터 샘플링 

예) 연도 별 첫 데이터 샘플링

예) 원 데이터에서 리샘플링하여 구한 월 별 최대값 데이터 시각화

 

라. 시계열 데이터 빈도/주기와 날짜 (Frequencies and Date Offsets) 

 

 


 

 

 3-2. 시간 이동 - shift

 

가. shift 설명

  • 모든 데이터를 위 또는 아래로 시계열 인덱스를 따라 이동 시켜야 할 때
  • 지정한 행 수에 대해 전체 인덱스를 이동

나. shift 사용법

  • df.shift(int형-양수일때) : 입력한 int 데이터 수만큼 앞에서 뒤로 밀리며 NaN으로 채워짐
  • df.shift(int형-음수일때) : 입력한 int 데이터 수만큼 뒤에서 앞으로 밀리며 NaN으로 채워짐
  • 밀린 수 만큼 NaN으로 채워지는 것이 싫고 특정한 값으로 채우고 싶다면 fill_value 인자 사용

  • 뒤에서 앞으로 데이터를 5칸 밀고, 비워진 컬럼에 0으로 채움 → df.shift(-5, fill_value=0)

다. shift 인자 (periods=int, freq=str)

  • 모든 데이터의 인덱스를 정해진 일자 만큼 이동 시킬 때 사용

 


 3-3. 시간 빈도 집계 - rolling

 

가. rolling 설명

  • 일종의 시간 빈도를 기반으로 집계를 하는 groupby와 유사한 기능
  • 일일 데이터를 가져와 월 별 데이터로 샘플링하거나, 월 평균/합계를 낼 수 있음

나. rolling 인자 (window)

  • Rolling은 일종의 기간의 ‘창’을 생성하는 것으로 집계함수와 같이 사용함. 해당 날짜를 포함하여 입력으로 받은 window 인자 수만큼 앞의 날짜에 대한 수치를 가져와 하나로 묶는 역할을 함

다. rolling 활용

 예 ) 7일간의 섹션을 살펴본 후, 평균을 알고 싶을 때

라. rolling 활용 시각화

 예 ) 전체 데이터의 종가 시각화

예 ) 전체 데이터를 7일의 섹션으로 나누어 해당 종가 평균의 시각화

예 ) 위의 전체 데이터와, 7일 섹션 평균 종가 시각화 

예 ) 위의 전체 데이터와 30일 섹션 평균 종가 시각화

  • window크기의 창이 작아질수록 원본 데이터에 들어 맞는 고수준의 추세
  • window크기의 창이 커지면 일반적인 추세를 보여줌

 

 3-4. 시계열 누적 집계 -  expanding

 

가. expanding 설명

  • Rolling 창에 해당하는 날짜 값을 계산하는 대신, 시계열의 시작점부터 모든 것을 계산에 넣고 싶을때(모든 시점)
  • 데이터 길이가 충분치 않을 때 데이터를 확장해가며 학습, 테스트 데이터를 추출할 때 사용 가능

Cross-validation for time-series forecasting model https://eng.uber.com/forecasting-introduction/ )

 

 

나. expanding 인자

  • min_periods 를 기준으로 누적하면서 수치화함

다. expanding 활용

 

예) 지난 7일 동안의 평균을 계산하는 대신, 모든 이전 데이터를 확장된 평균 집합에서 계산

- 오른쪽 상단에 위치한 마지막 지점은 전체 데이터의 모든 행에 대한 집계임