본문 바로가기
python/금융데이터분석

python 증권데이터 분석 - 삼성 vs 애플 주식, 주가, 일간변동률 비교하기

by orangecode 2022. 12. 23.
728x90

2019년부터 야후 파이낸스에서 API 기반의 주식 데이터를 제공하고 있다.

 

야후 파이낸스(finance.yahoo.com)의 경우, 미국 주식 데이터는 정확하지만 국내 주식의 경우 데이터가 누락되거나 값이 틀린 경우가 있으니 주의할 필요가 있다.

 

국내 시가총액 1위 삼성전자와 미국 애플의 일별 주가 데이터를 야후 파이낸스로부터 다운로드 받아 어떤 종목의 수익률이 더 좋았는지 비교 확인할 것이다.

 

야후 파이낸스로 주식 시세 구하기

① 야후 파이낸스 설치하기

# pip install
pip install yfinance


# conda install
pip install -i https://pypi.anaconda.org/ranaroussi/simple yfinance

 

② pandas-datareader 라이브러리 추가 설치

pandas-datareader 라이브러리는 주식 시세를 구하는데 get_data_yahoo()함수를 이용한다.

# pandas-datareader 설치하기
# pip install
pip install pandas-datareader

# conda install
conda install -c anaconda pandas-datareader

 

 

③ 야후 파이낸스에서 삼성전자와 APPLE 주식 데이터 가져오기

- 삼성전자 : 005930.KS

- APPLE : AAPL

 

- 주식정보 가져오기 코드

import yfinance as yf
from pandas_datareader import data as pdr
yf.pdr_override()

sec = pdr.get_data_yahoo('005930.KS', start='2022-01-01')
apple = pdr.get_data_yahoo('AAPL', start='2022-01-01')

 

- 삼성전자 주가 확인하기 : 2022년 1월 1일부터 주가 데이터 확인이 가능하다

# 삼성전자 일일 데이터 확인하기
sec.head(10)

 

- apple 주가 확인하기 : 2022년 1월 1일부터 주가 데이터 확인이 가능하다

# apple 일일 데이터 확인하기
apple.head(10)

 

삼성전자와 apple 주식의 OHLC(OPEN - HIGH - LOW - CLOSE)와 Volume(거래량), Adj Close(수정종가) 정보를 확인할 수 있습니다.

 

OHLC란 당일 주식시장이 열리고 나서의 OPEN - HIGH - LOW - CLOSE주식시장 시작가격, 주식시장 최고가격, 주식시장 최저가격, 주식시장 종가를 말한다.

 

수정종가는 액면분할 이후, 현재 주식가격에 맞춰 수정 표기한 가격인데, 국내 주식은 액면분할 처리가 나오지 않는다.

 

그래서 CLOSE 가격 종가만 사용할 것이다.

 

삼성전자, 애플의 종가데이터를 이용한 비교 그래프 출력

import yfinance as yf
from pandas_datareader import data as pdr
import matplotlib.pyplot as plt

yf.pdr_override()

# 삼성전자, 애플 주식 정보 가져오기
sec = pdr.get_data_yahoo('005930.KS', start='2022-01-01')
apple = pdr.get_data_yahoo('AAPL', start='2022-01-01')

# 종가 비교 그래프 그리기
plt.plot(sec.index, sec.Close, 'b', label='Samsung Electronics')
plt.plot(apple.index, apple.Close, 'r', label='Apple')
plt.xlabel('Period')
plt.ylabel('Stock Price')
plt.legend()
plt.show()

 

삼성전자, 애플 일간 변동률 주가 비교하기

일간변동률(Daily Percent Change)를 구하면 가격이 다른 두 주가의 수익률을 비교할 수 있다.

일간변동률 수식을 python 코드로 옮기는데 Series 모듈에서 제공하는 shift()함수를 사용하여 구현할 수 있다.

 

- 삼성전자 종가 확인하기

 

- shift() 함수는 데이터를 이동시킬 때 사용하는 함수인수로 n으로 줄 경우 전체 데이터가 n칸씩 뒤로 이동한다.

2020년 1월 4일의 전날 데이터는 존재하지 않으므로  NaN으로 표시하였고

2022년 1월 5일의 이전 거래일 종가가 1월 4일 종가인 78700원으로 표시되었다.

 

삼성전자 종가를 구했으니, 일간 변동률의 값을 Python 코드로 구할 수 있다.

# 삼성전자 일간 변동률 구하기
sec_dpc = (sec['Close']/sec['Close'].shift(1) - 1) * 100

# 첫 값 NaN 값 0으로 변경
sec_dpc.iloc[0] = 0

# 삼성전자 일간변동률 확인
sec_dpc.head(5)

 

같은 코드로 애플의 일간 변동률도 확인할 수 있다.

 

 

삼성전자 vs 애플 주가 일간변동률 히스토그램

히스토그램(histogram)은 도수 분포(frequency distribution)을 나타내는 그래프로 데이터 값들의 구간별 빈도수를 막대 형태로 나타낸 그래프를 말한다.

# 삼성전자 종가 일간 변동률 히스토그램
import matplotlib.pyplot as plt

# 삼성전자 일간 변동률 구하기
sec_dpc = (sec['Close']/sec['Close'].shift(1) - 1) * 100

# 첫 값 NaN 값 0으로 변경
sec_dpc.iloc[0] = 0

# 히스토그램 그리기
plt.hist(sec_dpc, bins=10)
plt.grid(True)
plt.show()

 

삼성전자 종가의 분포

# 삼성전자 종가 분포 확인하기
sec_dpc.describe()

 

삼성전자 주가 종가의 일간 변동률 평균값은 -0.11이며, 전체 데이터 개수는 240개, 표준편차는 1.45이다.

 

삼성전자 애플 주가 1년 누적 변동률 구하기 - 일반변동률 누적곱

sec_dpc라는 일간 변동률을 구했다.

하지만 일정한 기간동안의 전체 변동률을 구하기 위해서는 누적곱(Cumulative Product)를 이용하여 1년간의 변동률을 구할 수 있다.

 

1년간의 누적 변동률을 구해보고 그래프로 나타내보았다.

## 삼성전자, 애플 종가 누적 변동률 히스토그램
# 삼성전자 일간 변동률 구하기
sec_dpc = (sec['Close']/sec['Close'].shift(1) - 1) * 100
# 첫 값 NaN 값 0으로 변경
sec_dpc.iloc[0] = 0
# cumprod = 일간변동률 누적곱
sec_dpc_cp = ((100+sec_dpc)/100).cumprod()*100 - 100


# 애플 일간 변동률 구하기
apple_dpc = (apple['Close']/apple['Close'].shift(1) - 1) * 100
# 첫 값 NaN 값 0으로 변경
apple_dpc.iloc[0] = 0
# cumprod = 일간변동률 누적곱
apple_dpc_cp = ((100+apple_dpc)/100).cumprod()*100 - 100

# 히스토그램 그리기
plt.plot(sec.index, sec_dpc_cp, 'b', label='Samsung Electronics')
plt.plot(apple.index, apple_dpc_cp, 'r', label='Apple')
plt.ylabel('Price Change %')
plt.grid(True)
plt.legend(loc = 'best') # 범례 왼쪽 위로
plt.show()

 

 

최종코드
import yfinance as yf
from pandas_datareader import data as pdr
import matplotlib.pyplot as plt

yf.pdr_override()

# 삼성전자, 애플 주식 정보 가져오기
sec = pdr.get_data_yahoo('005930.KS', start='2022-01-01')
apple = pdr.get_data_yahoo('AAPL', start='2022-01-01')

## 삼성전자, 애플 종가 누적 변동률 히스토그램
# 삼성전자 일간 변동률 구하기
sec_dpc = (sec['Close']/sec['Close'].shift(1) - 1) * 100
# 첫 값 NaN 값 0으로 변경
sec_dpc.iloc[0] = 0
# cumprod = 일간변동률 누적곱
sec_dpc_cp = ((100+sec_dpc)/100).cumprod()*100 - 100


# 애플 일간 변동률 구하기
apple_dpc = (apple['Close']/apple['Close'].shift(1) - 1) * 100
# 첫 값 NaN 값 0으로 변경
apple_dpc.iloc[0] = 0
# cumprod = 일간변동률 누적곱
apple_dpc_cp = ((100+apple_dpc)/100).cumprod()*100 - 100

# 히스토그램 그리기
plt.plot(sec.index, sec_dpc_cp, 'b', label='Samsung Electronics')
plt.plot(apple.index, apple_dpc_cp, 'r', label='Apple')
plt.ylabel('Price Change %')
plt.grid(True)
plt.legend(loc = 'best') # 범례 왼쪽 위로
plt.show()

 

참고도서

http://www.yes24.com/Product/Goods/90578506

 

파이썬 증권 데이터 분석 - YES24

투자 기법과 프로그래밍 기술로 자신만의 퀀트 투자 시스템을 완성하라『파이썬 증권 데이터 분석』은 웹 스크레이핑으로 증권 데이터를 주기적으로 자동 수집, 분석, 자동 매매, 예측하는 전

www.yes24.com

https://github.com/INVESTAR/StockAnalysisInPython

 

GitHub - INVESTAR/StockAnalysisInPython

Contribute to INVESTAR/StockAnalysisInPython development by creating an account on GitHub.

github.com

 

반응형

댓글