리샘플과 이동 평균 :: 시계열 분석 - mindscale
Skip to content

리샘플과 이동 평균

(데이터 프레임 날짜 인덱스 설정에서 이어집니다)

resample

다음으로 resample이라는 기능을 사용해보겠습니다.

resample은 특정 구간을 나눈 후, 그 구간에 대해서 다양한 통계를 계산합니다. 여기서 resample('AS')라는 명령을 실행하면, 연초를 기준으로 데이터를 나누게 됩니다. 이렇게 나눈 데이터에 다른 통계 함수를 적용하면 해당 함수에 따른 통계를 계산하게 됩니다.

예를 들어, mean() 함수를 사용하면, 연초를 기준으로 나눈 데이터의 평균을 계산하게 되는 것입니다. 따라서, 이를 통해 연평균 가격을 계산할 수 있습니다.

여기에 적용할 수 있는 통계 함수는 다음과 같습니다.

  • sum: 합계
  • mean: 평균
  • std: 표준편차
  • sem: 평균의 표준오차
  • max: 최대
  • min: 최소
  • median: 중간값
  • first: 첫값
  • last: 마지막값
  • ohlc: 시가, 고가, 저가, 종가
df.Price.resample('AS').mean()
Date
2014-01-01     552.645699
2015-01-01     602.005556
2016-01-01     743.330277
2017-01-01     921.781394
2018-01-01    1113.225139
2019-01-01    1188.393056
2020-01-01    1481.403794
2021-01-01    2510.613452
Freq: AS-JAN, Name: Price, dtype: float64

이동평균

다음으로 이동 평균에 대해 설명하겠습니다.

이동 평균은 예를 들어 365일 간의 데이터를 묶어서 평균을 계산하는 것입니다. 이를 '롤링(rolling)'이라고도 하며, 이 과정에서 365일 간격으로 이동하면서 평균을 계산합니다.

아울러, 이동 평균에서는 '센터(center)' 라는 개념이 중요합니다. 예를 들어, 1월 1일부터 12월 31일까지 365일 동안의 평균을 계산했다고 해봅시다. 이때 이 평균값을 어느 날짜의 값을 대표값으로 사용할 것인지를 결정하는 것이 센터입니다. 12월 31일로 할 수도 있고, 1년의 중간인 7월 1일로 할 수도 있습니다.

이동 평균선을 그림으로 나타낼 때, 이동 평균선의 점은 마지막 날짜로 그려집니다. 그렇기 때문에 이동 평균선은 주가 차트가 그려진 이후에 조금 뒤로 밀려나 있게 보일 것입니다.

그래프를 그릴 때 원본 데이터와 이동 평균선이 정확히 일치하게 그리고 싶다면, center=True로 설정해주면 됩니다. 이렇게 함으로써, 이동 평균선을 통해 원본 데이타보다 매끄럽게 표시한 주가 차트를 그릴 수 있습니다.

rolling = df.Price.rolling(365, center=True)
rolling.mean().plot()
<Axes: xlabel='Date'>

리샘플링과 이동 평균의 차이

리샘플링은 고정된 주기를 가지고 데이터를 집계합니다. 예를 들어, 1년이 주기라면 각 해의 평균을 하나씩 뽑습니다.

반면 이동 평균은 고정된 간격으로 주어진 기간 내에서 평균을 계산합니다. 예를 들어, 1년이 주기라면 1월 1일부터 12월 31일까지 평균을 구한 후, 그 다음은 1월 2일부터 다음 해 1월 1일까지의 평균을 구합니다. 이렇게 하루씩 이동하면서 평균을 계산합니다.

즉, 리샘플링은 데이터가 20년치라면 평균이 20개만 나오지만, 이동 평균은 20년치 데이터에 대해 20 곱하기 365 만큼의 이동 평균이 계산됩니다.

그러나 이동 평균에서는 앞뒤에 데이터가 부족한 부분이 생길 수 있습니다. 그렇기 때문에 이동 평균 범위를 완전히 채우지 못하는 구간이 발생하여 일부 데이터가 누락될 수 있습니다.

이동 평균은 데이터의 추세를 매끄럽게 보여주는데 사용됩니다.