In [1]:
# !pip install pykrx
2. 사용법¶
- 먼저 pykrx의 stock 모듈을 import 한 후 다른 작업 진행
In [2]:
from pykrx import stock
2.1. 종목코드 조회¶
get_market_ticker_list
(date="YYYYMMDD", market="거래소명")market의 기본값은 KOSPI
date를 지정하지 않으면 가장 최근 영업일의 목록을 조회함
In [3]:
# KOSPI/KOSDAQ/KONEX 종목코드 조회
stock_code = stock.get_market_ticker_list(date="20210520", market="ALL")
(stock_code[:6], len(stock_code))
Out[3]:
- 2021년 5월 20일 현재 KOSPI, KOSDAQ, KONEX에는 총 2562종목이 있음
In [4]:
# KOSPI 종목코드 조회
stock_code = stock.get_market_ticker_list(date="20210520", market="KOSPI")
(stock_code[:6], len(stock_code))
Out[4]:
- 그 중 코스피에는 923 종목
In [5]:
# KOSDAQ 종목코드 조회
stock_code = stock.get_market_ticker_list(date="20210520", market="KOSDAQ")
(stock_code[:6], len(stock_code))
Out[5]:
- 코스닥에는 1503종목
In [6]:
# KONEX 종목코드 조회
stock_code = stock.get_market_ticker_list(date="20210520", market="KONEX")
(stock_code[:6], len(stock_code))
Out[6]:
- 코넥스에는 136종목이 있음
In [7]:
# 종목명 반환
stock_name = stock.get_market_ticker_name("005930")
stock_name
Out[7]:
2.2. 일자별 OHLCV(시가, 고가, 저가, 종가, 거래량) 조회¶
In [8]:
# 삼성전자의 20210501~20210520의 주가데이터
df = stock.get_market_ohlcv_by_date(fromdate="20210501", todate="20210520", ticker="005930")
df
Out[8]:
- 한번에 많은 종목을 조회하면 ip가 차단될 수 있기 때문에 반복분을 돌면서 사용할때는 time 모듈로 sleep을 걸어주는 것이 좋음
In [9]:
import time
import pandas as pd
stock_code = stock.get_market_ticker_list() # 현재일자 기준 가장 가까운 영업일의 코스피 상장종목 리스트
res = pd.DataFrame()
for ticker in stock_code[:4]:
df = stock.get_market_ohlcv_by_date(fromdate="20210517", todate="20210520", ticker=ticker)
df = df.assign(종목코드=ticker, 종목명=stock.get_market_ticker_name(ticker))
res = pd.concat([res, df], axis=0)
time.sleep(1)
res = res.reset_index()
res
Out[9]:
2.3 특정일자의 전체종목 시세 조회¶
get_market_ohlcv_by_ticker
(date="YYYYMMDD", market="거래소명")market의 기본값은 "ALL"(전체 시장; 코스피(KOSPI)/코스닥(KOSDAQ)/코넥스(KONEX))
In [10]:
df = stock.get_market_ohlcv_by_ticker(date="20210520")
df.head()
Out[10]:
In [11]:
df = stock.get_market_ohlcv_by_ticker(date="20210520", market="KOSPI")
df.head()
Out[11]:
2.4. 모든 종목의 가격 변동 조회¶
get_market_price_change_by_ticker
(fromdate="조회시작일", todate="조회종료일", market="거래소명")market의 기본값은 "ALL"
조회시작일 대비 조회종료일의 변동을 계산
In [12]:
from pykrx import stock
df = stock.get_market_price_change_by_ticker(fromdate="20210517", todate="20210520")
df.head()
Out[12]:
2.5 특정일자의 종목별 DIV/BPS/PER/EPS 조회¶
get_market_fundamental_by_ticker
(date="YYYYMMDD", market="거래소명")market의 기본값은 "ALL"
DIV(배당수익률): (주가배당금/주가) * 100
BPS(주당순자산가치=청산가치): (순자산)/(총발행주식수)
PER(주가수익비율): (주가)/(주당순이익)
EPS(주당순이익): (당기순이익)/(총발행주식수)
PBR(주가순자산비율) = (주가)/(BPS) = PER*EPS / BPS
In [13]:
df = stock.get_market_fundamental_by_ticker(date="20210520")
df.head()
Out[13]:
2.6 일자별 DIV/BPS/PER/EPS 조회¶
get_market_fundamental_by_date
(fromdate, todate, ticker, freq='d', name_display=False)freq: d(일), m(월), y(연도)
In [14]:
df = stock.get_market_fundamental_by_date(fromdate="20210517", todate="20210520", ticker="005930")
df.head()
Out[14]:
- prkrx는 이 밖에도 거래실적 추이 조회, 시가총액 조회, 투자자별 거래정보, 인덱스 리스트 조회 등 다양한 기능을 제공하고 있음. 자세한 정보는 pykrx 깃허브를 참고