그래프로 비교하기
pip 앞에 !를 붙이면 cmd창이 아닌 쥬피터 창에서 설치 가능
!pip install yfinance
import pandas as pd
import numpy as np
import yfinance as yf
import matplotlib.pyplot as plt
!pip install seaborn
# 다양한 옵션 설정 가능
pd.options.display.float_format = '{:.4f}'.format
#plt.style.use('seaborn')
start = '2015-01-01'
end = '2024-06-28'
엔비디아, 테슬라, 맥도날드의 티커 이름을 구글링해서 넣는다.
# 가져올 티커 심볼 설정
symbol = ['NVDA', 'TSLA', 'MCD' ]
yf.download(symbol, start, end).head()

df = yf.download(symbol, start, end)
df

tsla1 = df.Close.TSLA.dropna().to_frame().copy()
tsla1

inplace = True : 교체한 상태를 반영하는 것
tsla1.rename(columns={'TSLA':'t_Price'}, inplace = True)
tsla1

shift(periods= 1) : 위의 데이터를 아래로 당김, -1은 반대
tsla1['P_lag'] = tsla1.shift(periods= 1)
tsla1

tsla1['p_diff'] = tsla1['Price'] - tsla1['P_lag']

tsla1['p_diff2'] = tsla1.Price.sub(tsla1.P_lag)

diff 함수는 shift + sub 의 기능도 있다.
tsla1['p_diff3'] = tsla1.Price.diff(periods=1)
tsla1

(price / p_lah) - 1 = Returns
tsla1['Returns'] = tsla1.Price.div(tsla1.P_lag) - 1
tsla1

여기서 periods=1 는 1일 차이를 뜻한다.
tsla1['Returns2'] = tsla1.Price.pct_change(periods=1)
tsla1

tsla1.Price.plot(figsize = (15, 8), fontsize = 13 )
plt.legend(fontsize = 13)
plt.show()#

28.차트 덮어쓰기
엔비디아 프라이스, 컬럼이름 변경, 수익율 계산하기, 차트 그리기
NVDA1 = df.Close.NVDA.dropna().to_frame().copy()
NVDA1.rename(columns={'NVDA':'n_Price'}, inplace = True)
NVDA1['Returns'] = NVDA1.n_Price.pct_change(periods=1)
NVDA1

tsla1.t_Price.plot(figsize = (15, 8), fontsize = 13 )
NVDA1.n_Price.plot(figsize = (15, 8), fontsize = 13 )
plt.legend(fontsize = 13)
plt.show()
tsla1

df
위의 그래프를 확인하면 데이터 스케일링이 안되어 비교자체가 어렵다.

Close1 = df.Close
Close1
데이터프레임을 보시다시피 3개 원데이터 그대로 비교하기 어렵다.

Close1.iloc[0,0]
93.26000213623047

Close1.iloc[0,1]
0.503250002861023

Close1.iloc[0]
Close1.iloc[0, :]
#위에 두 가지가 같은 결과
Ticker
MCD 93.2600
NVDA 0.5033
TSLA 14.6207
Name: 2015-01-02 00:00:00, dtype: float64

Close1.iloc[0,0]
Close1 데이터프레임의 첫 번째 행과 첫 번째 열에 있는 값을 선택한다.
iloc는 위치 기반 인덱싱을 수행한다.
Close1.MCD.div(Close1.iloc[0,0])
Close1 데이터프레임의 MCD 열의 모든 값을 Close1.iloc[0,0] 값으로 나눈다.
div는 나눗셈 연산을 수행하는 판다스 메서드이다.
Close1.MCD.div(Close1.iloc[0,0])
Date
2015-01-02 1.0000
2015-01-05 0.9890
2015-01-06 0.9908
2015-01-07 1.0080
2015-01-08 1.0118
...
2024-06-21 2.7814
2024-06-24 2.7920
2024-06-25 2.7598
2024-06-26 2.7646
2024-06-27 2.7683
Name: MCD, Length: 2387, dtype: float64
Close1.MCD.div(Close1.iloc[0,0]).mul(100)
Date
2015-01-02 100.0000
2015-01-05 98.8956
2015-01-06 99.0778
2015-01-07 100.8042
2015-01-08 101.1795
...
2024-06-21 278.1364
2024-06-24 279.1979
2024-06-25 275.9811
2024-06-26 276.4636
2024-06-27 276.8282
Name: MCD, Length: 2387, dtype: float64
norm 이라는 데이터프레임에 담는다.
데이터가 정규화되어 이제 그래프로 정확히 비교할 수 있다.
norm = Close1.div(Close1.iloc[0]).mul(100)
norm
Close1: 원본 판다스 데이터프레임
Close1.iloc[0]:
Close1 데이터프레임의 첫 번째 행 전체를 선택함
이는 각 열의 초기값을 나타냄
Close1.div(Close1.iloc[0]):
Close1 데이터프레임의 모든 열을 각각의 초기값으로 나눔
즉, 각 열의 모든 값을 해당 열의 첫 번째 값으로 나눔
mul(100): 앞의 결과에 100을 곱함
이를 통해 각 열의 첫 번째 값이 100이 되도록 조정함

norm.dropna().plot(figsize = (20, 15), fontsize = 13, logy = True)
plt.legend(loc = 'upper left', fontsize = 13)
plt.show()
# plt.show() (이것은 써도 되고 안써도 됨)

2015년부터 2024년까지 맥도날드(MCD), 엔비디아(NVDA), 테슬라(TSLA)의 종가를 비교해보았다.
엔비디아(NVDA)와 테슬라(TSLA)는최근 몇 년간 큰 폭으로 상승하였으며,
특히 2020년 이후로 두드러진 성장을 보였다.
반면 맥도날드(MCD)는 안정적이고 꾸준한 상승을 보여주고 있다.