본문 바로가기
Quant

퀀트, 파이썬 / 야후 파이낸스로 삼성전자, 네이버, 카카오의 주가 데이터 가져오기 / 야후파이낸스 주가 데이터, 주간데이터 가져오기, 월간데이터 가져오기, yahoo-fin 패키지

by KTC_CHANCE 2022. 7. 2.

*해당 코드는 파이썬으로 배우는 포트폴리오 서적의 코드를 인용하여 작성한 코드입니다.

 

야후 파이낸스로 주가 데이터를 불러오는 방법은 블룸버그, 데이터가이드, 퀀티와이즈에 접근하기 힘든 일반인들에게는 굉장히 유용하다.

 

오늘은 야후파이낸스를 통해 주가 데이터를 불러오고 다양한 조건으로 원하는 데이터를 불러오는 방법에 대해서 알아보자.

 

[0. 패키지 다운로드]

 

야후파이낸스 주가 데이터를 가져오기 위해서는 먼저 패키지 설치가 우선된다.

windows + R 키를 누른 후 cmd 창을 열어 하단부의 명령어를 입력하여 패키지를 다운로드시켜주자

 

* 패키지 다운로드 입력어 (cmd 창에서 입력)

pip install yahoo_fin 

pip install pandas

 

이후 파이썬에서 하단부의 코드를 통해 주가 데이터를 불러오기 위한 패키지들을 실행시켜준다.

1
2
3
0. 패키지 다운로드
import yahoo_fin.stock_info as si
import pandas as pd
cs

 

[1. get_data 함수를 통해 주가 데이터 적재하기]

 

야후 파이낸스를 통해 주가 데이터를 불러오는 방법은 간단하다.

 

야후 파이낸스 패키지의 get data 함수를 통해 티커를 불러와주면 해당 데이터를 불러올 수 있다.

(티커를 확인하는 방법은 야후파이낸스 홈페이지 접속 후 해당 종목을 검색하면 간단하게 찾아볼 수 있다.)

1
2
3
4
5
6
7
1. 삼성전자, 네이버, 카카오 데이터 불러오기
se_data = si.get_data('005930.KS')
ka_data = si.get_data('035420.KS')
na_data = si.get_data('035720.KS')
 
# 주가데이터 확인
se_data.tail()
cs

 

삼성전자, 네이버, 카카오의 티커를 입력 후 실행시켜주면 주가 데이터를 불러올 수 있으며,

tail 명령어를 통해서 데이터가 잘 적재되었는지 확인해볼 수 있다.

1
2
3
4
5
6
               open     high      low    close  adjclose    volume     ticker
2022-06-27  59000.0  59900.0  58300.0  58800.0   58800.0  18122236  005930.KS
2022-06-28  59200.0  59500.0  58700.0  59400.0   59400.0  13540538  005930.KS
2022-06-29  58500.0  58800.0  58000.0  58000.0   58000.0  14677138  005930.KS
2022-06-30  57200.0  57600.0  57000.0  57000.0   57000.0  18915142  005930.KS
2022-07-01  56900.0  57500.0  55900.0  56200.0   56200.0  24982097  005930.KS
cs

 

[2. 기간을 정하여 데이터 적재]

 

만약 주가 데이터의 기간을 정해서 데이터를 적재하고 싶다면,

get_data 함수에 start_date, end_date에 기간을 넣어주면 해당 기간의 데이터를 적재할 수 있다. 

1
2
3
4
5
6
7
8
2. 주가데이터 기간 정하기 (2019.012022.01)
se_data = si.get_data('005930.KS', start_date='01/01/2019', end_date='01/01/2022')
ka_data = si.get_data('035420.KS', start_date='01/01/2019', end_date='01/01/2022')
na_data = si.get_data('035720.KS', start_date='01/01/2019', end_date='01/01/2022')
 
# 주가데이터 확인
se_data.tail()
 
cs

 

tail 명령어를 통해 데이터를 확인해보자

1
2
3
4
5
6
               open     high      low    close      adjclose    volume     ticker
2021-12-24  80200.0  80800.0  80200.0  80500.0  79725.992188  12086380  005930.KS
2021-12-27  80600.0  80600.0  79800.0  80200.0  79428.882812  10783368  005930.KS
2021-12-28  80200.0  80400.0  79700.0  80300.0  79527.914062  18226325  005930.KS
2021-12-29  80200.0  80200.0  78500.0  78800.0  78394.773438  19794795  005930.KS
2021-12-30  78900.0  79500.0  78100.0  78300.0  77897.343750  14236700  005930.KS
cs

 

[3. 주간, 월간 데이터 적재]

 

기간 이외에도 주간, 월간 데이터만 적재하고 싶다면, get_data 함수 내의 interval 명령어를 추가하여 데이터를 적재할 수 있다.

* 주간 데이터를 원할 경우 interval = '1wk'

*월간 데이터를 원할 경우 interval = '1mo'

1
2
3
4
5
6
7
3. 주가데이터의 구간 정하기 (주간, 월간) >> 주간일경우 1wk, 월간일경우 1mo
se_data = si.get_data('005930.KS', start_date='01/01/2019', end_date='01/01/2022', interval='1wk')
ka_data = si.get_data('035420.KS', start_date='01/01/2019', end_date='01/01/2022', interval='1wk')
na_data = si.get_data('035720.KS', start_date='01/01/2019', end_date='01/01/2022', interval='1wk')
 
# 주가데이터 확인
se_data.tail()
cs

 

주간 데이터가 잘 적재되었는지 tail 명령어를 통해 데이터를 확인해보자

1
2
3
4
5
6
               open     high      low    close      adjclose     volume     ticker
2021-11-29  73200.0  76700.0  70500.0  76300.0  75566.382812  110694127  005930.KS
2021-12-06  76100.0  78600.0  75600.0  76800.0  76061.578125   86589290  005930.KS
2021-12-13  76500.0  78500.0  76200.0  77100.0  76358.687500   56930581  005930.KS
2021-12-20  77900.0  80800.0  77500.0  80200.0  79428.882812   67798436  005930.KS
2021-12-27  80200.0  80400.0  78100.0  78300.0  77547.148438   52257820  005930.KS
cs

 

[4. 삼성전자, 네이버, 카카오의 주가 데이터를 한 번에 적재시키기]

 

만약 주가 데이터를 한번에 가져오고 싶다면, lambda 와 reduce함수를 이용하여 한번에 주가 데이터를 적재할 수 있다.

(하단부의 코드는 삼성전자, 네이버, 카카오의 주가데이터를 한번에 적재시킨 코드이다.)

1
2
3
4
5
6
7
8
9
4.여러개의 종목의 주가데이터 한번에 가져오기
korea = ['005930.KS''035420.KS''035720.KS']
 
price_data = {ticker : si.get_data(ticker, start_date='01/01/2019', end_date='01/01/2022'for  ticker in korea}
 
from functools import reduce
combined = reduce(lambda xy : x.append(y),price_data.values())
combined.head()
combined.tail()
cs

 

해당 데이터들이 잘 적재되어있는지 head와 tail 명령어를 통해 확인해보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> combined.head()
               open     high      low    close      adjclose    volume     ticker
2019-01-02  39400.0  39400.0  38550.0  38750.0  35149.937500   7847664  005930.KS
2019-01-03  38300.0  38550.0  37450.0  37600.0  34106.777344  12471493  005930.KS
2019-01-04  37450.0  37600.0  36850.0  37450.0  33970.718750  14108958  005930.KS
2019-01-07  38000.0  38900.0  37800.0  38750.0  35149.937500  12748997  005930.KS
2019-01-08  38000.0  39200.0  37950.0  38100.0  34560.324219  12756554  005930.KS
>>> combined.tail()
                     open           high            low          close       adjclose   volume     ticker
2021-12-24  113830.968750  115845.671875  113327.289062  115342.000000  115288.531250  1473671  035720.KS
2021-12-27  114838.320312  115342.000000  113830.968750  113830.968750  113778.203125  1108549  035720.KS
2021-12-28  113830.968750  114838.320312  113830.968750  114334.640625  114281.640625  2353548  035720.KS
2021-12-29  116349.351562  118364.054688  114838.320312  114838.320312  114838.320312  1778425  035720.KS
2021-12-30  114838.320312  115342.000000  113327.289062  113327.289062  113327.289062  1214149  035720.KS
cs

 

야후 파이낸스를 통해 다양한 조건식을 바탕으로 주가데이터 이외에도 재무제표 등의 다양한 데이터를 불러올 수 있다.

야후 파이낸스 패키지에 대하여 다른 점들이 궁금할경우 이 게시글에서 배운 정보를 바탕으로 공부하며 알아본다면, 금융데이터의 접근이 어려운 일반인들에게 많은 도움이 될 것이다.

 

아래는 내가 코드를 작성하면서 인용한 도서의 링크이다.

 

파이썬으로 배우는 포트폴리오 - 교보문고

금융공학/퀀트 투자의 기초부터 투자 모델, 머신 러닝까지! | 알아두면 피가 되고 살이 되는 투자의 기초포트폴리오, 자산배분과 분산 투자를 배우자'나무만 보고 숲은 보지 못한다'라는 말이 있

www.kyobobook.co.kr

 

파이썬을 이용한 효율적 투자선을 구해보고 싶다면..

 

퀀트, 파이썬 / 삼성전자, 네이버, 카카오로 효율적 투자선 구하기 (Efficient Frontier) / numpy, pandas, se

*해당 코드는 파이썬으로 배우는 포트폴리오 서적의 코드를 인용하여 작성한 코드입니다. 투자를 하면서 사람들이 크게 간과하는 점은 내가 가지고 있는 모든 종목의 합산인 포트폴리오의 움직

ktcf.tistory.com

 

댓글