상대 가격과 비율은 금융 데이터 분석에서 중요한 개념이다.
가격 그 자체보다 가격 변화가 더 중요하고 의미 있다는 것이다.
가격이 변화한 비율을 수익률이라 할 수 있다.
수익률(%) = (현재가 - 이전가) / 이전가 * 100
이번에는 여러 금융자산 중에 테슬라를 선택해서
날짜별 가격 변화와 일별 수익률을 계산해보자.
- 데이터 준비
아래 링크의 마지막 부분을 보면
여러 금융 상품의 종가 데이터만 "close.csv" 파일로 저장해두었다.
>> 금융 자산 데이터 시각화하기 (matplotlib)
1. 데이터 로드 및 전처리
# 라이브러리 임포트
import pandas as pd
import matplotlib.pyplot as plt
# 가격 표시 소수점 자리수 지정
pd.options.display.float_format = '{:.2f}'.format
# close.csv 가져오기
close = pd.read_csv("close.csv", index_col = "Date", parse_dates = ["Date"])
close
위 결과에서 필요한 데이터만 가져와보자.
dropna() 로 결측 값(NaN)을 제거하고,
to_frame() 으로 데이터프레임 자료형으로 만들고,
copy() 로 복사본을 저장한다.
그리고 컬럼 헤더를 TSLA 티커에서 Price로 변경하겠다.
# 결측값을 제외하고 데이터프레임으로 복사하기
tsla = close.TSLA.dropna().to_frame().copy()
tsla
# 결과
TSLA
Date
2018-08-01 60.17
2018-08-02 69.91
2018-08-03 69.63
2018-08-06 68.40
2018-08-07 75.91
... ...
2022-07-25 805.30
2022-07-26 776.58
2022-07-27 824.46
2022-07-28 842.70
2022-07-29 891.45
1006 rows × 1 columns
# 컬럼 헤더를 Price로 변경, inplace로 변경 적용하기
tsla.rename(columns = {"TSLA":"Price"}, inplace = True)
tsla
# 결과
Price
Date
2018-08-01 60.17
2018-08-02 69.91
2018-08-03 69.63
2018-08-06 68.40
2018-08-07 75.91
... ...
2022-07-25 805.30
2022-07-26 776.58
2022-07-27 824.46
2022-07-28 842.70
2022-07-29 891.45
1006 rows × 1 columns
가격의 변화를 알기 위해서는 비교할 기준이 있어야 한다.
당일 가격은 전날 가격을 기준으로 얼마나 오르거나 내렸는지 비교할 수 있다.
현재 날짜별 가격을 한 칸씩 아래로 밀면 전날 가격이 된다.
이렇게 가져온 전날 가격에 대한 컬럼을 추가로 만들어보자.
컬럼명은 "P_lag"로 하고,
shift() 메서드를 사용해 한 칸씩 밀어낸다.
# 전날 가격 컬럼 생성하기
tsla["P_lag"] = tsla.shift(periods = 1)
tsla
# 결과
Price P_lag
Date
2018-08-01 60.17 NaN
2018-08-02 69.91 60.17
2018-08-03 69.63 69.91
2018-08-06 68.40 69.63
2018-08-07 75.91 68.40
... ... ...
2022-07-25 805.30 816.73
2022-07-26 776.58 805.30
2022-07-27 824.46 776.58
2022-07-28 842.70 824.46
2022-07-29 891.45 842.70
1006 rows × 2 columns
2. 절대 가격 차이 계산하기
2-1. 직접 계산하기
# 오늘 가격에서 어제 가격을 빼고 P_diff 컬럼으로 추가
tsla["P_diff"] = tsla.Price.sub(tsla.P_lag)
tsla
# 결과
Price P_lag P_diff
Date
2018-08-01 60.17 NaN NaN
2018-08-02 69.91 60.17 9.74
2018-08-03 69.63 69.91 -0.27
2018-08-06 68.40 69.63 -1.24
2018-08-07 75.91 68.40 7.52
... ... ... ...
2022-07-25 805.30 816.73 -11.43
2022-07-26 776.58 805.30 -28.72
2022-07-27 824.46 776.58 47.88
2022-07-28 842.70 824.46 18.24
2022-07-29 891.45 842.70 48.75
1006 rows × 3 columns
sub() 으로 뺄셈한다.
그 결과는 P_diff 라는 새로운 컬럼으로 추가한다.
2-2. diff 메서드 사용하기
# diff 메소드를 활용
tsla["P_diff2"] = tsla.Price.diff(periods=1)
tsla
# 결과
Price P_lag P_diff P_diff2
Date
2018-08-01 60.17 NaN NaN NaN
2018-08-02 69.91 60.17 9.74 9.74
2018-08-03 69.63 69.91 -0.27 -0.27
2018-08-06 68.40 69.63 -1.24 -1.24
2018-08-07 75.91 68.40 7.52 7.52
... ... ... ... ...
2022-07-25 805.30 816.73 -11.43 -11.43
2022-07-26 776.58 805.30 -28.72 -28.72
2022-07-27 824.46 776.58 47.88 47.88
2022-07-28 842.70 824.46 18.24 18.24
2022-07-29 891.45 842.70 48.75 48.75
1006 rows × 4 columns
# 직접 계산한 P_diff와 P_diff2가 동일한지 확인하기
tsla.P_diff.equals(tsla.P_diff2)
# 결과
True
diff() 로 값의 차이를 구해 P_diff2 컬럼을 만들었다.
periods=1 옵션으로 바로 이전 행의 값과 계산하는 것이다.
즉, P_lag를 구하는 과정이 없어도 계산할 수 있다.
이렇게 가격 차이를 계산해 볼 수 있지만,
같은 10달러의 변화가 있더라도
100 -> 110과 20 -> 30 은 큰 차이가 있다.
따라서 이 방법으로는 서로 다른 금융 상품을 비교하긴 어렵다.
3. 상대 가격 차이 계산하기
3-1. 직접 계산하기
# 전날 가격으로 나누고 1을 뺀 값을 Returns 컬럼에 저장
tsla["Returns"] = tsla.Price.div(tsla.P_lag) - 1
tsla
# 결과
Price P_lag P_diff P_diff2 Returns
Date
2018-08-01 60.17 NaN NaN NaN NaN
2018-08-02 69.91 60.17 9.74 9.74 0.16
2018-08-03 69.63 69.91 -0.27 -0.27 -0.00
2018-08-06 68.40 69.63 -1.24 -1.24 -0.02
2018-08-07 75.91 68.40 7.52 7.52 0.11
... ... ... ... ... ...
2022-07-25 805.30 816.73 -11.43 -11.43 -0.01
2022-07-26 776.58 805.30 -28.72 -28.72 -0.04
2022-07-27 824.46 776.58 47.88 47.88 0.06
2022-07-28 842.70 824.46 18.24 18.24 0.02
2022-07-29 891.45 842.70 48.75 48.75 0.06
1006 rows × 5 columns
div()를 활용해 당일 가격을 전날 가격(P_lag)으로 나눠준다.
여기서 1일 빼주면 날짜별 Returns (수익률)을 알 수 있다.
백분율(%)로 보고 싶다면 100을 곱하면 된다.
3-2. pct_change 메서드 사용하기
# pct_change 메서드를 활용
tsla["Returns2"] = tsla.Price.pct_change(periods=1)
tsla
# 결과
Price P_lag P_diff P_diff2 Returns Returns2
Date
2018-08-01 60.17 NaN NaN NaN NaN NaN
2018-08-02 69.91 60.17 9.74 9.74 0.16 0.16
2018-08-03 69.63 69.91 -0.27 -0.27 -0.00 -0.00
2018-08-06 68.40 69.63 -1.24 -1.24 -0.02 -0.02
2018-08-07 75.91 68.40 7.52 7.52 0.11 0.11
... ... ... ... ... ... ...
2022-07-25 805.30 816.73 -11.43 -11.43 -0.01 -0.01
2022-07-26 776.58 805.30 -28.72 -28.72 -0.04 -0.04
2022-07-27 824.46 776.58 47.88 47.88 0.06 0.06
2022-07-28 842.70 824.46 18.24 18.24 0.02 0.02
2022-07-29 891.45 842.70 48.75 48.75 0.06 0.06
1006 rows × 6 columns
# equal 메서드로 동일한지 확인
tsla.Returns.equals(tsla.Returns2)
# 결과
True
pct_change() 메서드를 활용해 바로 수익률(Returns2)을 구할 수 있다.
매개변수 periods를 지정해 원하는 기간만큼의 퍼센트 변화율(수익률)을 알 수도 있다.
예를 들어 periods = 3 으로 지정하면 [당일 가격 - 3일 전 가격 / 3일 전 가격] 이 되는 것이다.
4. 마치며
diff() : 가격 차이 구하기
pct_change() : 수익률 구하기
위 두 가지 메서드를 활용해
가격 변화와 수익률을 간편하게 구할 수 있다.
금융 상품 분석의 기본이 되는 만큼 반드시 짚고 넘어가자.
'개발로 돈 벌기 > 파이썬 금융 데이터 분석' 카테고리의 다른 글
파이썬으로 투자 보상과 위험도 측정해서 비교하기 (테슬라 VS 비트코인) (0) | 2022.08.12 |
---|---|
파이썬으로 네이버와 카카오 주식차트 비교하기 (0) | 2022.08.04 |
금융 자산 데이터 시각화하기 (matplotlib) (0) | 2022.08.03 |
판다스로 주식, 암호화폐 데이터 다듬기 (0) | 2022.08.02 |
파이썬으로 야후 파이낸스(yfinance)에서 금융 데이터 가져오기 (0) | 2022.08.02 |
파이썬과 금융 데이터 분석을 시작하기 전에 (0) | 2022.07.30 |
댓글