python으로 주식이나 지수 데이터를 불러오는 다양한 방법이 있습니다. 그중 Yahoo Finance의 정보를 제공해 주는 pythion 오픈 소스가 있습니다. 바로 yfinance 입니다. yfinance tool 을 사용하기 위하여 python 코드에 우선
import를 해줍니다. 자 그럼, 삼성전자(005930.KS) 주가를 yfinance로 불러오는 방법을 알아보겠습니다. 1. 삼성전자 ticker 찾기 yahoo finance 홈페이지에서 지수나 종목의 ticker를 찾을 수 있습니다. 검색을 해보면 영어로 검색해야 하는 부담이 있으나, 종목 코드를 알고 있으면 찾기 더 쉽습니다. 어쨌든 삼성전자의 종목 코드는 005930.KS 입니다. 2. history 함수나 download 함수를 이용하여 정보 가져오기 □ yfinance.history 사용
○ yfinance.Ticker 함수를 이용하여 삼성전자(005930.KS)의 ticker 를 생성합니다. ○ history 함수를 사용하여 data 를 불러옵니다. (예시: 1 day 즉 일봉 정보, 5년간, 수정주가 아닌 데이터) ○ python에서 지원하는 dataframe 이라는 형식의 결과를 얻습니다. ○ yfinance 의 base.py 안에 있는 history 함수를 열어보면 다음과 같습니다. 중요한 parameter들을 살펴보면
더보기
반환되는 결과는 Dataframe으로서 다음과 같습니다. - index : Date - column
: 소위 시고저종 이라고 불리는 가격과 액면분할, 권리락 등을 반영한 수정주가, 또 거래량, 배당금, 주식분할을 column으로 합니다. - 만일 auto_adjust = True 라 하면 수정주가를 반환합니다. 따라서 위의 표에서 Adj Close를 제외한 결과를 보여줍니다. □ yfinance.download사용
○ history 함수와 다른 점은 ticker를 파라미터로 받는다는 것입니다. ○ interval은 생략하면 '1d'가 default입니다. ○ yfinance의 multi.py 안에 함수 설명이 있습니다. 더보기
반환되는 결과는 Dataframe으로서 다음과 같습니다. - index : Date - column
: 소위 시고저종 이라고 불리는 가격과 액면분할, 권리락 등을 반영한 수정주가, 또 거래량을 column으로 합니다. 예제 yfinance의 download로 조회하는 예제입니다.
구체적으로 보면,
○ yfinance를 import 합니다. ○ 오늘 날짜, 날짜 사이의 차이 등 날짜에 관련된 계산을 위해 datetime을 import 합니다. ○ dataframe을 다루기 위해 pandas를 pd라는 이름으로 import 합니다.
○ 일반적으로 dataframe을 print 함수로 출력을 하게 되면 열과 행을 줄임표를 사용하여 간략하게 보여줍니다. 만일 모든 열의 데이터를 보고 싶을 때는 pandas안의 set_option에 모든 열을 보여주는 display.max_columns를 선택해 주면 됩니다. ○ 만일 모든 행의 데이터를 보고 싶으면 주석 처리되어 있는 display.max_rows를 선택해 주면 됩니다.
○ start , end 가 지정되어 있지 않으므로 가장 최근일(오늘 포함)부터 5 year 기간 동안 조회합니다.
○ 1h봉, 즉 1시간 봉을 1일(1d) 기간을 조회하여 출력합니다. 오늘로부터 1d 기간이니 오늘 하루 동안의 1시간 봉이겠네요.
○ 조회일자를 특정한 예제입니다. 오늘과 오늘로부터 raw_dates =100일 사이의 기간 동안 주가를 조회하고 싶습니다. ○ datetime.today()를 하면 오늘 날짜를 datetime 형식으로 반환합니다. ○ 며칠 전의 날짜를 계산하기 위해 datetime 안의 timedelta를 사용해 줍니다.
○ 조회 기간의 날짜를 특정일자로 지정합니다. 결과는 아래와 같습니다.
○ 결과 모두 Date를 index로 하고 column이 Open, High, Low, Close, Adj Close, Volume을 column으로 하는 주가 데이터를 잘 출력했습니다. 시고저종 데이터를 얻을 수 있으니, 이제 차트도 한번 그려봐야겠죠. 차트는 다음 글에서 그려보도록 하겠습니다. |