[파이썬 금융] 야후파이낸셜 데이터를 활용한 주식 거래 비교

이현지·2024년 7월 2일

데이터 분석

목록 보기
5/13

그래프로 비교하기

  1. yfinance 설치

pip 앞에 !를 붙이면 cmd창이 아닌 쥬피터 창에서 설치 가능

!pip install yfinance
  1. 라이브러리 임포트
import pandas as pd
import numpy as np
import yfinance as yf
import matplotlib.pyplot as plt
  1. seaborn 설치
!pip install seaborn
  1. 디스플레이 옵션 지정
# 다양한 옵션 설정 가능
pd.options.display.float_format = '{:.4f}'.format
#plt.style.use('seaborn')
  1. 가져올 데이터 기간(시작, 끝) 정하기
start = '2015-01-01'
end = '2024-06-28'
  1. 티커 심볼 설정

엔비디아, 테슬라, 맥도날드의 티커 이름을 구글링해서 넣는다.

# 가져올 티커 심볼 설정
symbol = ['NVDA', 'TSLA', 'MCD' ]
  1. 테이블 검토
yf.download(symbol, start, end).head()

  1. 데이터프레임 담기
df = yf.download(symbol, start, end)
df

  1. 차트 그리기
tsla1 = df.Close.TSLA.dropna().to_frame().copy()
  1. 데이터프레임 확인
tsla1

  1. 교체한 상태 반영

inplace = True : 교체한 상태를 반영하는 것

tsla1.rename(columns={'TSLA':'t_Price'}, inplace = True)
  1. 데이터프레임 다시 확인
tsla1

  1. 전날 가격을 의미하는 데이터 생성하기

shift(periods= 1) : 위의 데이터를 아래로 당김, -1은 반대

tsla1['P_lag'] = tsla1.shift(periods= 1)
tsla1

  1. 가격 차이를 의미하는 차이 데이터 생성하기
tsla1['p_diff'] = tsla1['Price'] - tsla1['P_lag']

  1. (다른 방법) 가격차이 데이터 생성(sub 활용)
tsla1['p_diff2'] = tsla1.Price.sub(tsla1.P_lag)

  1. (다른방법2) 가격차이 데이터 생성 (diff 활용)

diff 함수는 shift + sub 의 기능도 있다.

tsla1['p_diff3'] = tsla1.Price.diff(periods=1)
tsla1

  1. 상대가격 계산(div 활용)

(price / p_lah) - 1 = Returns

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

  1. 전일 수익률을 계산하는 한줄 코딩 방법(pct_chage 활용)

여기서 periods=1 는 1일 차이를 뜻한다.

tsla1['Returns2'] = tsla1.Price.pct_change(periods=1)
tsla1

  1. 차트 그리기
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

  1. 테슬라와 엔비디아 주식 그래프 비교
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

  1. 데이터 프레임 확인하기
df

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

  1. 종가 데이터만 놓고 비교하기
Close1 = df.Close
Close1

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

  1. 데이터 스케일링 하기 전 위치 확인하기(iloc 활용)
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

  1. 데이터 스케일링

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

  1. 백분율로 만들기(mul 활용)
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

  1. 데이터 정규화(norm 이라고 함)

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이 되도록 조정함

  1. 정규화된 데이터 그래프 확인
norm.dropna().plot(figsize = (20, 15), fontsize = 13, logy = True)
plt.legend(loc = 'upper left', fontsize =  13)
plt.show()
# plt.show() (이것은 써도 되고 안써도 됨)

  1. 그래프 설명

2015년부터 2024년까지 맥도날드(MCD), 엔비디아(NVDA), 테슬라(TSLA)의 종가를 비교해보았다.

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

profile
관심분야: 추천시스템, 자연어처리, 머신러닝, 딥러닝

0개의 댓글