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

반응형

  앞서 pykrx를 통해 KRX 한국거래소 정보데이터시스템에서 주식과 관련된 주가, PER, PBR, 배당 수익률, 투자주체별 거래실적, 외인 지분율 등 많은 데이터를 가져와 봤다. 근데 pykrx는 KRX 한국거래소 정보데이터시스템에서 볼 수 있는 거의 모든 데이터를 가져올 수 있다고 하였다. 이 중에 빠진 게 하나 있는데 우선 한국거리소 정보데이터시스템에 들어가 보자

  메뉴에서 주식 -> 세부안내 -> PER/PBR/배당수익률(개별종목)을 따라가보면 아래화면처럼 선행 EPS와 선행 PER이 있다.(화면번호 12021)

한국거래소 정보데이터시스템 선행 PER 화면

  근데 앞서 살펴본 펑션들 중에 이 화면에 대응되는 펑션은 get_market_fundamental 인데, 여기에는 선행 EPS, 선행 PER이 없었다. 해당 포스팅에서는 그걸 가져와보겠다. 우선 VS Code-server(or VS Code)에서 아래처럼 코드를 작성하자.

from pykrx import stock

df = stock.get_market_fundamental('20231004')
print(df)

  여기서 윈도우즈의 경우에는 Ctrl, Mac의 경우에는 command 키를 누르고 마우스를 get_market_fundamental 부분으로 옮겨보면 밑줄이 생기면서 해당 펑션으로 이동할 수 있게 된다. 만약 밑줄이 안 뜬다면 우클릭을 해보자. Go to Definition이라는 메뉴가 나온다.

pykrx get_market_fundamental definition
VS code에서 definition으로 이동하는 방법

  그럼 아래처럼 이 패키지가 아나콘다 가상 환경 내에 깔려있는 위치가 나오는데, 개략적인 위치는 anaconda3 > envs > (생성한 가상환경이름) > lib > python(가상환경의 파이썬 버전) > site-packages > pykrx > stock > stock_api.py라는 파이썬 파일 내에 존재하는 펑션 데피니션이다. 밑으로 내려보면, get_market_fundamental_by_date나 get_market_fundamental_by_ticker로 분개되는데 이중에 아무거나 따라가 보자. 나는 우선 by_ticker를 따라가겠다. 왜냐면 앞서 종목(ticker) 별 데이터를 보는 코드이기 때문에..

pykrx get_market_fundamental_by_ticker definition

  get_market_fundamental_by_ticker는 따라가다 보면 아래 펑션에서 데이터를 가져오는 것 같다. 마찬가지로 또 따라가 보자.

 

pykrx에서 get_market_fundamental_by_ticker 내에 타 펑션 호출 부분

  여기서는 'PER_PBR_배당수익률_전종목'에서 가져오는 것 같다.

pykrx에서 PER_PBR_배당수익률_개별을 호출하는 부분

  이제 저 펑션을 따라가 봐도 좋다. 근데 별개 없을 것이다. 우선 저 'PER_PBR_배당수익률_전종목'을 호출 후 dataframe의 특정 필드를 지정해서 dataframe을 다시 편성하고(221 line) 컬럼명을 지정해 주는 것 같으니, 'PER_PBR_배당수익률_전종목' 아래 라인에 print(df) 코드를 추가해 보자.(220 라인)

pykrx PER_PBR_배당수익률 받아오는 부분에 데이터 확인용 print() 추가

  이제 아까 작성했던 코드를 다시 실행해 보자.

from pykrx import stock

df = stock.get_market_fundamental('20231004')
print(df)

pykrx에서 배당수익률 raw데이터 출력 시 화면

 

  위의 출력은 'PER_PBR_배당수익률_전종목'에서 리턴 받은 직후의 값, 아래 출력은 내가 코드에 작성한 출력문이다. 이걸 보면 pykrx는 krx에서 받아온 데이터를 적당히 정재 해서 주는 것을 알 수 있는데 최초 출력문에는 'FWD_PER'이라는 컬럼이 있다. 전체 필드에 대해서 다시 출력해 보자. 모든 필드나 row에 대해서 전체 출력 할 때는 set_option이라는 것을 사용한다. 아래처럼 소스를 다시 작성해 주자. pandas도 import 해줘야 함. 모든 row는 볼 필요 없다.

import pandas as pd
from pykrx import stock

pd.set_option('display.max_columns', None)  # 모든 column 출력
#pd.set_option('display.max_rows', None)    # 모든 row 출력

df = stock.get_market_fundamental('20231004')
print(df)

pykrx에서 배당수익률 raw데이터 전체 컬럼 출력 시 화면

  전체 column을 보고 쓸만한 데이터를 찾아보자. 이 중에 우리가 필요한 건 FWD_EPS(선행 EPS), FWD_PER(선행 PER) 두 개 정도인 듯하다. 이걸 사용하려면 어떻게 해야 될까? 아까 print(df)를 추가했던 wrap.py를 다음처럼 수정해 보자.

pykrx에서 선행 EPS 받을 수 있게 수정 화면

  기존 소스를 일부 주석처리하고 dataframe에 쓸 필드만 골라내던 데와 컬럼명을 지정하던 데에 'FWD_EPS', 'FWD_PER'을 추가했다.(221~224 라인) 그리고 데이터 타입을 지정해 주는 부분에도 마찬가지로 'FWD_EPS'과 'FWD_PER'를 추가했다.(237~238 라인)

 

  이제 다시 원 소스를 실행해 보자. 짠! 필드가 두 개 추가된 것을 확인할 수 있다.

pykrx에서 선행 EPS 받아오게 수정 후 출력 화면

  아직 끝이 아니다. 우리는 방금 by_ticker에 대한 로직을 수정했다. by_date에 대한 로직도 같은 방법으로 수정해 준다.

  wrap.py 아랫부분을 같은 방법으로 수정해 준다.

pykrx wrap.py 수정 전 화면

  이렇게

pykrx wrap.py 수정 후 화면

  여기서 끝이 아니다. get_market_fundamental는 'freq' 파라메터로 일간, 월간, 연간 데이터를 뿌려줄 수 있었다. 근데 이건 원래 일단위 데이터를 가져온 후 pykrx 내부적으로 합치기 계산을 해주던 건데 이 부분은 stock_api.py파일의 get_market_fundamental_by_date 데피니션 아래쪽에 있다.

pykrx 일별 데이터 월별, 연간 변환 하는 부분 원본 화면

  여기에도 마찬가지로 'FWD_EPS', 'FWD_PER'을 추가해 주자.

pykrx 일별 데이터 월별, 연간 변환 하는 부분 수정 후 화면

  이럼 모두 끝난다.

 

 

  근데 pykrx는 왜 이 두 가지를 빼놓았을까? 한국거래소에 들어가서 보면 이 선행 두가지 선행 데이터를 제공하는 종목은 많이 없다. 이 선행 EPS와 선행 PER은 증권사 리포트 중 인하우스를 제외한 public에 공개되는 리포트가 있어야 업데이트 되는 걸로 보이는데, 사실 증권사가 커버리지 하는 종목은 상장된 3,000 여개의 종목 중 그리 많지 않다. 그리고 레포트가 나온다 하더라도 추정 순이익(EPS의 기초가 되는)을 내거나 타깃 프라이스를 찍지 않는 경우도 많으며, 주기적으로 롤링하여 예측치를 업데이트하지 않는 경우도 많다. 아마 결측치가 너무 많아 제외한 게 아닌가 싶긴 하다.

  다운받은 패키지를 이렇게 수정하는 건 좋은 방법이 아니다. 이후 임의로 수정한 패키지에 대해 업데이트를 반영할 때 문제가 되기 때문. 하지만 이번에는 따로 래핑 된 펑션 데피니션을 만들어 처리하기에는 약간 복잡한 부분이 있어 직접 패키지를 수정하였다. 이 외에도 KRX 정보데이터시스템에는 제공되나 pykrx에서는 안 보이는 데이터에 대해서는 이와 같은 방법으로 수정하거나 아니면 카피하여 데이터세트를 수정하면 된다.

 

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

 

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

이번에 살펴볼 패키지는 한국거래소(KRX)에서 데이터를 스크래핑하여 가져오는 pykrx이다. 한국거래소에서는 정보데이터시스템이라는 창구를 통해 엄청난 데이터들을 투자자들에게 공개하고 있

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 파이썬으로 주식/주가 정보, ELW, 채권 정보 가져오기 : pykrx (한국거래소 정보 데이터 시스템 스크래핑)

 

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

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

antsinvest.tistory.com

반응형