python 파이썬으로 주식/주가 정보, EPS, PER, PBR, 배당 등 가져오기 : pykrx (한국거래소 정보 데이터 시스템 스크래핑)

반응형

  이번에 살펴볼 패키지는 한국거래소(KRX)에서 데이터를 스크래핑하여 가져오는 pykrx이다. 한국거래소에서는 정보데이터시스템이라는 창구를 통해 엄청난 데이터들을 투자자들에게 공개하고 있다. 우리가 증권사 앱이나 네이버 증권에서 확인하는 대부분의 데이터들의 원천은 바로 거래가 실제로 발생하는 한국거래소이다.

(한국 거래소(KRX) 정보 데이터 시스템에 관한 내용은 아래 참조)

2024.03.28 - [주가 예측 모델/관련 package] - 한국거래소(KRX) 정보 데이터 시스템(주식/ETF/채권/파생상품 가격/EPS/PER/배당/공매도 등)

 

한국거래소(KRX) 정보 데이터 시스템(주식/ETF/채권/파생상품 가격/EPS/PER/배당/공매도 등)

네이버 증권이던 증권사 앱이던 그들이 제공하는 종목별 정보, 가격, 거래량, 매매주체, 공매도.. 이 모든 데이터의 원천이 어디일까? 대부분 한국거래서(KRX)에서 제공되는 데이터들이다. 한국거

antsinvest.tistory.com

 

  pykrx는 한국거래소 정보데이터시스템에서 제공하는 거의 모든 데이터를 펑션화하여 파이썬에서 쓸 수 있도록 제공하고 있다. KRX 정보데이터시스템에서 조회가능한 데이터면 pykrx에서도 쓸 수 있다. 기능면에서 보면 국내 시장 한정 최강의 기능을 더군다나 무료로 제공한다. 기본적 지표를 활용한 퀀트 투자니 증권/주식 데이터 분석이니 하는 프로젝트를 진행한다 치면, 해당 패키지만으로 모든 원천 데이터를 가져올 수 있다.

https://github.com/sharebook-kr/pykrx

 

GitHub - sharebook-kr/pykrx: KRX 주식 정보 스크래핑

KRX 주식 정보 스크래핑. Contribute to sharebook-kr/pykrx development by creating an account on GitHub.

github.com

 

  우선 pip로 설치부터 해보자.

pip install pykrx

  pykrx에는 크게 두개 모듈이 있는데 주식과 관련된 'stock'모듈과 채권과 관련된 'bond'모듈이다.

  우선 stock 모듈만 import 하고 상장 종목 리스트를 불러와보자. 해당 펑션에 날짜를 집어넣으면 해당 날짜에 상장된 종목 리스트를 확인할 수 있다. 그리고 'market' 파라메터에 시장(KOSPI, KOSDAQ, KONEX)을 넣으면 해당 시장에 상장된 종목리스트만 리턴된다.

from pykrx import stock

#data = stock.get_market_ticker_list('20240322', market='KOSPI')
data = stock.get_market_ticker_list(market='KOSPI')
print(data)

pykrx로 종목 리스트 출력

  이제 특정 종목에 가격/거래량 데이터를 불러와보자

df = stock.get_market_ohlcv('20220720', '20220810', '005930')
print(df.head(3))

  출력하면 아래처럼 데이터를 긁어오는데, 이 패키지의 단점은 column 명이 한글로 되어있다는 점이다. 이는 나중에 컬럼명을 바꿔주던가(인덱스 컬럼 포함) 패키지를 수정하여 영어로 된 column명으로 리턴되게 바꿔주자.

pykrx로 종목 가격 정보 출력

  일단위 데이터를 불러왔는데, 당 패키지는 월, 년 단위 가격데이터도 받아볼 수 있다. 내부적으로는 일단위 데이터를 받은 후 합치는 개념이기는 하나 어쨌든 편리한 기능. 티커 파라메터 뒤에 'm', 'y'를 넣어 각각 월/년 단위 가격 데이터를 받아볼 수 있다.

df = stock.get_market_ohlcv('20220720', '20220810', '005930', 'm')
print(df.head(3))

pykrx로 종목 가격 정보 월별로 출력

  이번엔 특정 일자에 대한 전종목 시세 데이터를 가져와 보자. 이 역시 'market' 파라메터에 특정 시장을 지정할 수 있다. 지정하지 않으면 기본값은 KOSPI이다.

df = stock.get_market_ohlcv('20210122', market='KOSPI')
print(df.head(3))

  이 펑션의 경우, 리턴된 dataframe의 인덱스가 티커이다.

pykrx로 종목별 가격 정보 출력

  pykrx는 기본적으로 대부분의 펑션들이 동일한 펑션으로 특정 종목에 대한 historical data와 특정 일자에 대한 전체 종목 데이터를 제공한다. 각 펑션 내부에서 파라메터에 따라 분기되는 로직으로 두 가지 기능을 동일한 펑션으로 처리할 수 있게 되어 있는데, 주의할 점이 있다. 해당 날짜에 데이터가 없을 경우(주말, 공휴일 등으로 휴장일 경우)에는 에러가 떨어진다. 특히 특정 일자에 대한 전체 종목 데이터를 가져올 경우, 날짜를 하나만 넣기 때문에 이런 에러가 생길 확률이 높은데 이 때는 날짜를 변경해서 해보자.

 

  이번엔 get_market_fundamental 펑션으로, BPS, PBR, EPS, PER, DIV, DPS를 가져와보자. 이 역시 'freq' 파라메터에 'm' 또는 'y'를 넣어서 월간/연간 데이터를 받아 볼 수 있다.

  각각의 의미는 다음과 같다.

  • BPS(Bookvalue Per Share, 주당 순자산 가치) : 순자산(총자산-부채)을 주식 수로 나눈 값.
  • BPR(Bookvalue Price Ratio, 주가 순자산 비율) : 순자산을 시가총액으로 나눈 값 = BPS / 주가.
  • EPS​(Earning Per Share, 주당 순이익) : 주당 순이익을 주식 수로 나눈 값.
  • PER​(Price Earning Ratio, 주가 수익 비율) : 순이익을 시가총액으로 나눈 값 = EPS / 주가.
  • DPS​(Dividend Per Share, 주당 배당금) : 총 배당금을 주식 수로 나눈 값.
  • DIV(Dividend) : 총 배당금을 시가총액으로 나눈 값 = DPS / 주가.
df = stock.get_market_fundamental('20230104', '20240308', '005930')
print(df)

  출력되는 값은 직전 연간재무제표의 순이익, 순자산, 배당금액 값을 기초로 계산된다.

pykrx로 PER, PBR, 배당, DPS, EPS 출력

  이 펑션도 전체종목에 대해서 특정일자의 PER, PBR, DSR, EPS, BPS 등을 가져올 수 있는데, 이 때는 티커를 제외하고 특정날짜와 마켓을 지정해 주면 된다.

 

df = stock.get_market_fundamental('20230104', market='KOSDAQ')
print(df)

pykrx로 종목별 PER, PBR, 배당, DPS, EPS 출력

  단, 이 펑션에서는 주의할 점이 있다. 연간 재무제표를 기준으로 BPS, EPS, DPS, PBR, PER, DIV를 계산하는데, 이 연간 재무제표(사업보고서)는 제출기한이 사업년도가 종료된 후, 90일 이내가 원칙이다. 그럼 KRX 데이터에는 언제 반영될까?

  삼성전자(005930)와 현대차(005380)의 데이터를 22년 말 부터 23년 5월 초까지 조회하여 해당 값들이 언제 변경되는지 보자.

df = stock.get_market_fundamental('20221226', '20230503', '005930')
print(df)
df = stock.get_market_fundamental('20221226', '20230503', '005980')
print(df)

pykrx로 일자별 PER, PBR, 배당, DPS, EPS 출력

  이번에는 21년 사업보고가 언제 반영됬는지 확인하기 위해 마찬가지로 삼성전자(005930)와 현대차(005380)의 데이터를 21년 말부터 22년 5월 초까지 조회하여 해당 값들이 언제 변경되는지 보자.

df = stock.get_market_fundamental('20211226', '20220503', '005930')
print(df)
df = stock.get_market_fundamental('20211226', '20220503', '005980')
print(df)

pykrx로 일자별 PER, PBR, 배당, DPS, EPS 출력

  두 개 년도 사업보고서 실적이 5월 초부터 반영됨을 확인할 수 있다. 그럼 올해는 아직 5월이 되지 않았는데, 어떻게 나올까? 그렇다. 올해 데이터는 22년 사업보고서 숫자를 기반으로 계산된 데이터다. 이 부분은 pykrx를 사용할 때 유의해야 한다. 23년 1~4월의 데이터에서 제공되는 PER의 값은 최소한 5월 이후에라도 리비전이 필요하지 않을까? 우선 이런 문제가 있다는 것을 파악했으니, 사용자가 보정해서 쓸 수 있다는 것만 알아두고 넘어가자.

  이 이슈는, 단순히 5월 BPS, EPS, DSR을 1~4월에 깔아서 재계산 해서 되는 문제는 아니다. 결산일이 12월이 아닌 경우도 있고, 기간 내 주식 수의 변동이 생겼다면, 당시 발행 주식 총수를 고려하여 계산해야 할 수도 있다. 그럼 특정 일자의 발행주식 수를 어떻게 알아내지? 이는 밑에서 설명한다.

 

  이번엔 get_market_cap이라는 펑션이다. 펑션 이름만 보면 시가총액을 조회하는 펑션으로 보이나 그 외에도, 거래량, 거래대금, 상장주식수 역시 보여준다.

df = stock.get_market_cap('20231201', '20240330', '005930', 'm')
print(df)

pykrx로 일자별 시가총액, 거래량, 거래대금, 상장주식수 조회

  get_market_cap에 티커를 빼고 날짜만 넣으면 전체 종목에 대해 조회된다.

df = stock.get_market_cap('20231201')
print(df)

pykrx로 종목별 시가총액, 거래량, 거래대금, 상장주식수 조회

  한국 거래소 KRX 정보데이터 시스템에는 선행 EPS와 선행 PER이 나오는 화면이 있다. 근데 pykrx에서 EPS, PER을 가져와 봤으나 선행 데이터는 없다. pykrx에는 선행 EPS, 선행 PER을 가져오는 기능이 없을까? 없다. 근데 약간 손보면 KRX 정보데이터시스템에 있는 데이터를 그대로 가져올 수 있다. 그건 다음 포스팅에서 설명한다.

 

2024.03.28 - [주가 예측 모델/관련 package] - python 파이썬으로 주식/주가 정보, Forward PER 가져오기 : pykrx (한국거래소 정보 데이터 시스템 스크래핑)

 

python 파이썬으로 주식/주가 정보, Forward PER 가져오기 : pykrx (한국거래소 정보 데이터 시스템 스크

앞서 pykrx를 통해 KRX 한국거래소 정보데이터시스템에서 주식과 관련된 주가, PER, PBR, 배당 수익률, 투자주체별 거래실적, 외인 지분률 등 많은 데이터를 가져와 봤다. 근데 pykrx는 KRX 한국거래소

antsinvest.tistory.com

2024.03.28 - [주가 예측 모델/관련 package] - python 파이썬으로 주식/주가 정보, 투자자별 매매동향, 외국인/기관 투자주체 거래실적/수급 가져오기 : pykrx (한국거래소 정보 데이터 시스템 스크래핑)

 

python 파이썬으로 주식/주가 정보, 투자자별 매매동향, 외국인/기관 투자주체 거래실적/수급 가져

지난 포스팅에서 pykrx를 사용하여 한국거래소 KRX 정보데이터시스템에서 개별 종목 및 시장의 OHLCV 가격정보, EPS, PER, BPS, PBR, 배당 정보, 그리고 시가총액 및 상장주식수 등을 가져오는 방법을 살

antsinvest.tistory.com

2024.03.28 - [주가 예측 모델/관련 package] - python 파이썬으로 주식/주가 정보, Index 지수 가격, PER, 구성종목 등 가져오기 : pykrx (한국거래소 정보 데이터 시스템 스크래핑)

 

python 파이썬으로 주식/주가 정보, Index 지수 가격, PER, 구성종목 등 가져오기 : pykrx (한국거래소

앞서 pykrx를 이용해 한국거래소 KRX의 정보데이터시스템에서 개별 종목 데이터를 가져오는 방법을 알아보았다. 이번에는 Index 지수에 대한 정보를 가져오는 법을 알아보자. 이 인덱스를 도데체

antsinvest.tistory.com

2024.03.28 - [주가 예측 모델/관련 package] - python 파이썬으로 주식/주가 정보, 공매도 정보 가져오기 : pykrx (한국거래소 정보 데이터 시스템 스크래핑)

 

python 파이썬으로 주식/주가 정보, 공매도 정보 가져오기 : pykrx (한국거래소 정보 데이터 시스템

이전 포스팅에 이어서 pykrx를 이용해 한국거래소 KRX 정보데이터시스템에서 데이터를 가져오는 내용을 좀 더 살펴 본다. 이번에는 공매도 정보를 가져와볼텐데 공매도 데이터는 2일 이전 데이터

antsinvest.tistory.com

2024.03.28 - [주가 예측 모델/관련 package] - python 파이썬으로 주식/주가 정보, ETF/ETN 가격, 구성종목 등 가져오기 : pykrx (한국거래소 정보 데이터 시스템 스크래핑)

 

python 파이썬으로 주식/주가 정보, ETF/ETN 가격, 구성종목 등 가져오기 : pykrx (한국거래소 정보 데

종목, 지수데이터에 이어 이번에는 pykrx를 이용해 한국 거래소 KRX 정보데이터시스템에서 ETF/ETN 데이터를 가져오는 방법을 알아보자. 근데 ETF와 ETN은 도데체 무엇이 다르냐. ETF는 Exchange Traded Fund,

antsinvest.tistory.com

2024.03.28 - [주가 예측 모델/관련 package] - python 파이썬으로 주식/주가 정보, ETF/ETN 가격, 구성종목 등 가져오기 : pykrx (한국거래소 정보 데이터 시스템 스크래핑)

 

python 파이썬으로 주식/주가 정보, ETF/ETN 가격, 구성종목 등 가져오기 : pykrx (한국거래소 정보 데

종목, 지수데이터에 이어 이번에는 pykrx를 이용해 한국 거래소 KRX 정보데이터시스템에서 ETF/ETN 데이터를 가져오는 방법을 알아보자. 근데 ETF와 ETN은 도데체 무엇이 다르냐. ETF는 Exchange Traded Fund,

antsinvest.tistory.com

2024.03.28 - [주가 예측 모델/관련 package] - python 파이썬으로 주식/주가 정보, ELW, 채권 정보 가져오기 : pykrx (한국거래소 정보 데이터 시스템 스크래핑)

 

python 파이썬으로 주식/주가 정보, ELW, 채권 정보 가져오기 : pykrx (한국거래소 정보 데이터 시스템

이번에는 pykrx를 이용하여 한국 거래소 KRX 정보데이터시스템에서 ELW와 채권 정보를 가져와보겠다. 우선 ELW 데이터를 가져올 건데 이 ELW 관련된 데이터는 리스트와 종목명 정도 밖에 없다. from pyk

antsinvest.tistory.com

반응형