차분
(데이터 프레임 날짜 인덱스 설정에서 이어집니다)
diff
다음으로, 주가에서 절대적인 가격도 중요하지만 가격이 상승하거나 하락했는지 여부도 중요합니다. 이럴 때는 차분(differencing)이라는 방법으로 가격 변동을 구할 수 있습니다.
df.Price.diff
함수를 사용하면 이전 가격과의 차이를 계산해줍니다. 예를 들어, 3월 30일의 가격과 3월 28일의 가격 차이를 계산하는 것입니다. 558에서 555로 내려간 경우, 3달러 1센트가 떨어진 것을 확인할 수 있습니다.
하지만 3월 28일의 차이는 'nan'이라는 값으로 이는 'not a number' 즉, 숫자가 아니다라는 뜻입니다. 이는 3월 28일 이전의 데이터가 없어 변동을 계산할 수 없기 때문입니다. 따라서 그날의 변동은 계산불가로 기록됩니다.
반면에, 4월 1일은 이전 날보다 10달러 16센트가 상승한 것을 확인할 수 있습니다.
이런 방법으로 우리는 가격의 변동을 살펴볼 수 있습니다.
df.Price.diff()
Date 2014-03-28 NaN 2014-03-31 -3.01 2014-04-01 10.16 2014-04-02 -0.16 2014-04-03 2.73 ... 2021-12-27 18.43 2021-12-28 -32.32 2021-12-29 1.13 2021-12-30 -10.04 2021-12-31 -26.46 Name: Price, Length: 1957, dtype: float64
플롯으로 그리고 싶으면 .plot()
을 붙여주시면 됩니다.
df.Price.diff().plot()
<Axes: xlabel='Date'>
pct_change
플롯에서 흥미로운 점을 관찰할 수 있습니다. 가격변동의 폭이 점차 커지는 것을 볼 수 있는데요, 이는 가격 자체가 시간이 지나면서 증가하기 때문입니다. 예를 들어, 500달러에서 1% 움직이면 5달러입니다. 하지만 3000달러에서 1% 움직이면 30달러입니다. 따라서 가격 변동이 점차 커져 보이는 것입니다.
이를 보다 정확히 파악하려면 가격 변동을 퍼센트로 변환해야 합니다. 이를 도와주는 함수인 pct_change
가 있습니다. pct
는 퍼센트의 약자로, 가격이 얼마나 변했는지를 나타냅니다. 하지만 이 값은 실제 퍼센트가 아닌 비율입니다. 예를 들어, 0.05%가 아니라 0.5%가 변한 것으로, 이를 퍼센트로 표현하려면 100을 곱해야 합니다.
본 데이터에서는 558에서 555로 줄어든 만큼의 비율이 퍼센트가 됩니다. 실제로 원본 데이터에서 오른쪽에 Change %
컬럼이 있는데, 이는 변동된 비율을 나타냅니다. 이 값과 pct_change
값을 비교하면 동일한 것을 확인할 수 있습니다.
즉, pct_change
를 사용하면 특정 날짜의 가격이 전날에 비해 얼마나 오르거나 떨어졌는지를 비율로 쉽게 파악할 수 있습니다.
df.Price.pct_change()
Date 2014-03-28 NaN 2014-03-31 -0.005390 2014-04-01 0.018291 2014-04-02 -0.000283 2014-04-03 0.004828 ... 2021-12-27 0.006263 2021-12-28 -0.010914 2021-12-29 0.000386 2021-12-30 -0.003427 2021-12-31 -0.009061 Name: Price, Length: 1957, dtype: float64
.plot()
을 사용하면 변동 비율을 쉽게 확인할 수 있습니다. 전체 기간 동안 변동 비율은 대부분 일정하게 유지되고 극히 일부에서만 크게 변동하는 것을 알 수 있습니다.
15% 이상 급등한 날이 있었고, 반대로 하루 만에 10% 이상 급락한 날도 있었습니다. 그러나 대체로 변동 비율은 일정하며, 최악의 경우에도 -10%, 최고의 경우에도 +15% 범위 내에서 이루어집니다. 대부분의 경우 변동률은 ±5% 이하로 나타나며, 하루 평균 가격 변동률은 대략 3-4% 정도인 것이 확인됩니다.
다음으로, 이전 시간에 이어 주가 데이터에서 일정 간격으로 데이터를 선택하거나 다양한 방법으로 이동 평균을 계산해보겠습니다.
df.Price.pct_change().plot()
<Axes: xlabel='Date'>