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()
해당 모든 내용은 파이썬 증권 데이터 분석 책을 참고하여 작성한 내용 입니다.
'Python > 증권 데이터 분석' 카테고리의 다른 글
판다스(pandas) read_html() 함수로 엑셀파일 읽기, 사이트 파일 읽어오기 (0) | 2021.01.04 |
---|---|
3년 전 - 마이크로소프트, 삼성전자 - 주식을 샀다면?? 코딩을 이용한 수익 비교 (0) | 2021.01.04 |
팬더스 데이터프레임 여러 방법을 이용한 생성 및 순회 처리하기 (0) | 2020.12.22 |
파이썬 라이브러리인 pandas(판다스) 설치, 시리즈 (생성,변경,수정,인덱싱,삭제,시각화) (0) | 2020.12.19 |
array, ndarray 차이점, 코드 사용 방식 (0) | 2020.12.15 |
댓글