본문 바로가기
Python/증권 데이터 분석

팬더스를 이용한 주식 시세 비교하기 (Comparison of Stock Price Using Panthers)

by grey-hat hacker 2020. 12. 22.
728x90

1. 아휴 파이낸스(finance.yahoo.com)

과거 야후, 구글 모두 API, 주식 데이터를 제공하였지만 현재는 아휴 파이낸스만 제공한다.

but 미국 주식의 경우는 정확하지만 국내 주식의 데이터는 누락되거나 값이 틀린 경우가 있다는...

 

이번 글에서는 삼성전자와 마이크로소프트의 일별 주가 데이터를 야후 파이낸스를 통해 다운받아 어떤 종목이 수익률이 더 좋았는지 확인해보려고 한다. 

 

2. 아휴 파이낸스(finance.yahoo.com)로 주식 시세 구하기 

먼저 야후 파이낸스를 사용하기 위해서 야후 파이낸스를 설치~

 팬더스-데이터리더 라이브러리도 설치~ 

C:\Users\user\AppData\Local\Programs\Python>pip install yfinance
C:\Users\user\AppData\Local\Programs\Python>pip install pandas-datareader

주식을 구하는 데는 get_data_yahoo() 함수를 사용한다. 

get_data_yahoo(조회할 주식 종목 [, start = 조회 기간의 시작일], [, end = 조회 기간의 종료일]

주식 종목은 문자열(str) 리스트 형태이고 조회 기간을 설정하지 않으면 보유 데이터 제일 오래~ 제일 최신 일자로 설정

국내 주식 종목 조회시 6자리 종목코드 뒤에 .KS(코스피) // .KQ(코스닥) 을 붙인다. 

미국의 주식을 조회하려면 애플의 simbol 'APPL' 을 사용하여 조회한다. 

  L 조회 종목이 많으면 리스트로 인수를 넘기기도 가능 

>>> from pandas_datareader import data as pdr
>>> import yfinance as yf
>>> yf.pdr_override()
>>> 
>>> sec = pdr.get_data_yahoo('005930.KS', start='2018-05-04')
>>> msft = pdr.get_data_yahoo('MSFT', start='2018-05-04')

# head() 메서드로 삼성전자 데이터프레임의 맨 앞 10행 출력
# Volume = 거래량, Adj Close = 수정 종가 (국내의 경우 분할 처리 오류)
>>> sec.head(10)
               Open     High      Low    Close     Adj Close    Volume
Date                                                                  
2018-05-04  53000.0  53900.0  51800.0  51900.0  50660.105469  39565391
2018-05-08  52600.0  53200.0  51900.0  52600.0  51343.382812  23104720
2018-05-09  52600.0  52800.0  50900.0  50900.0  49683.992188  16128305
2018-05-10  51700.0  51700.0  50600.0  51600.0  50367.269531  13905263
2018-05-11  52000.0  52200.0  51200.0  51300.0  50074.437500  10314997
2018-05-14  51000.0  51100.0  49900.0  50100.0  48903.105469  14909272
2018-05-15  50200.0  50400.0  49100.0  49200.0  48024.605469  18709146
2018-05-16  49200.0  50200.0  49150.0  49850.0  48659.078125  15918683
2018-05-17  50300.0  50500.0  49400.0  49400.0  48219.828125  10365440
2018-05-18  49900.0  49900.0  49350.0  49500.0  48317.437500   6706570

# 마이크로소프트 주가 데이터 확인
>>> tmp_msft = msft.drop(columns='Volume')
>>> tmp_msft.tail()
                  Open        High         Low       Close   Adj Close
Date                                                                  
2020-12-15  215.169998  215.419998  212.240005  214.130005  214.130005
2020-12-16  214.750000  220.110001  214.720001  219.279999  219.279999
2020-12-17  219.869995  220.889999  217.919998  219.419998  219.419998
2020-12-18  218.589996  219.690002  216.020004  218.589996  218.589996
2020-12-21  217.550003  224.000000  217.280106  223.199997  223.199997

 

>>> sec.index
DatetimeIndex(['2018-05-04', '2018-05-08', '2018-05-09', '2018-05-10',
               '2018-05-11', '2018-05-14', '2018-05-15', '2018-05-16',
               '2018-05-17', '2018-05-18',
               ...
               '2020-12-08', '2020-12-09', '2020-12-10', '2020-12-11',
               '2020-12-14', '2020-12-15', '2020-12-16', '2020-12-17',
               '2020-12-18', '2020-12-21'],
              dtype='datetime64[ns]', name='Date', length=646, freq=None)
>>> sec.columns
Index(['Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume'], dtype='object')


>>> import matplotlib.pyplot as pit
>>> plt.plot(sec.index, sec.Close, 'b', label='Samsung Electronics')
[<matplotlib.lines.Line2D object at 0x08CEE6E8>]
>>> plt.plot(msft.index,msft.Close, 'r--', label='Microsoft')
[<matplotlib.lines.Line2D object at 0x08CEE550>]
>>> plt.legend(loc='best')
<matplotlib.legend.Legend object at 0x08CEE430>
>>> plt.show()

plt.plot(sec.index, sec.Close, 'b', label='Samsung Electronics')  

 해당 코드를 자세히 살펴보면 

    x 좌표는 삼성전자 데이터프레임의 날짜 인덱스이고 

    y 좌표는 삼성전자 데이터프레임의 종가(그날 거래의 마지막 가격)

    'b' - 푸른 색 실선을 의미한다.  

 

해당 그래프를 보면 알 수 있듯이 5만원~7만원 대의 삼성전자와 130달러 대의 마소 주식을 비교하니

수치 차이가 너무 커서 비교가 되지 않는다.. 

그래서 일간 변동률을 이용한 주식 비교하는 법! 

 

3. 일간 변동률 공식을 이용한 주가 비교하기

 

[[Rt = 오늘 변동률    = Rt(오늘 종가) - Rt-1(어제 종가) ]]

 

일간 변동률을 구하는 공식이다. 

 

위의 공식을 파이썬 코드로 구현 하기 위해서는 시리즈 모듈에서 제공하는 shift()함수를 사용하면 된다. 

 

 from pandas_datareader import data as pdr
>>> import yfinance as yf
>>> yf.pdr_override()
>>> 
>>> sec = pdr.get_data_yahoo('005930.KS', start='2018-05-04')
>>> sec_dpc = (sec['Close']-sec['Close'].shift(1)) / sec['Close'].shift(1) *100
>>> sec_dpc.iloc[0] = 0
>>> sec_dpc_cs = sec_dpc.cumsum()
>>> 
>>> msft = pdr.get_data_yahoo('MSFT', start='2018-05-04')
>>> msft_dpc = (msft['Close'] / msft['Close'].shift(1)-1) * 100
>>> msft_dpc.iloc[0] = 0
>>> msft_dpc_cs = msft_dpc.cumsum()

>>> import matplotlib.pyplot as plt
>>> plt.plot(sec.index, sec_dpc_cs, 'b', label='Samsung Electronics')
>>> plt.plot(msft.index, msft_dpc_cs, 'r--', label='Microsoft')
>>> plt.ylabel('Change %')
>>> plt.grid(True)
>>> plt.legend(loc='best')
>>> plt.show()

해당 모든 내용은 파이썬 증권 데이터 분석 책을 참고하여 작성한 내용 입니다. 

728x90
반응형

댓글