ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PER PBR 활용04 : 주식 종목 산업분류 데이터 받아오기(DART API)
    금융퀀트/(퀀트)PERPBR활용 2023. 6. 2. 08:03
    반응형

    기업별 산업분류 데이터 : DART Open API 기업개황

    PER PBR 활용03 : 주식별 PER PBR 목록 만들기 를 통해 공공데이터포털(https://www.data.go.kr/) 에서 주식코드, 주식명, 종가, 시가총액 등을 받아오고, 네이버 금융(https://finance.naver.com/) 에서 주식의 PER, PBR을 받아와서 통합 데이터를 만들어 봤다. 이렇게 만든 데이터는 개별 주식의 PER, PBR을 종합적으로 볼 수는 있지만 개별 주식의 산업분류 데이터는 없기 때문에 분석에 한계가 있을 수 있다. 

    따라서 먼저 주식의 산업별 분류를 알려주는 데이터를 찾아야 하는데, 그런 정보는 DART(기업공시시스템)에서 OpenAPI로 제공해주고 있다.(https://opendart.fss.or.kr/) DART(기업공시시스템)은 금융감독원에서 운영하는 사이트로 회원 가입 후 인증키를 아래 그림 1과 같이 발급받으면 API를 사용할 수 있다.((OpenAPI)DART Open API 사용법1: 인증키 발급 참조)

    그림1: 인증키 발급 예시

    기업별 산업분류 데이터 상세

    기업개황 데이터 확인

    주요 상장기업들은 자신들이 무슨 산업을 영위하고 있는지 대표자가 누구인지 등의 기본적인 정보를 기업공시시스템(DART)에 등록을 한다. 기업공시시스템은 개별 주주가 이렇게 등록된 기업정보를 아래 그림 2와 같이 기업개황에서 확인할 수 있도록 하고 있다.

    그림2: 기업개황 확인 및 바로가기

    API 기본정보 확인

    기업개황을 클릭하면 아래 그림 3과 같이 기업개황 관련 API에 대한 기본 정보가 제공된다. 기본정보 항목을 통해 "GET 요청하는 기본 URL", "json 형식, xml 형식 모두를 지원하고 있다는 점" 등을 파악할 수 있다. 요청인자 항목은 우리가 GET 요청을 할 때 parameter로 포함시킬 수 있는 것을 나타낸다. 아래 그림 3의 parameter 항목에 따르면 API 요청 시 "회원가입 후 발급한 API 키"와 "기업개황이 궁금한 기업의 고유번호" 정도만 포함시켜서 요청할 수 있고, 기업명 또는 기업전화번호 등을 parameter에 포함시켜서 요청하는 것은 불가능하다.

    그림3: API 요청 기본 스펙

    밑으로 스크롤을 내려보면 API 요청으로 어떤 데이터를 받을 수 있는지 응답결과에 대한 컬럼을 정의해 두었다. 

    그림4: API 결과 컬럼

    마지막으로 고유번호 "00126380"(전자공시시스템 상 삼성전자 고유번호)에 대한 API GET 요청 시 받는 결과를 확인할 수 있도록 아래 그림 5와 같이 "OpenAPI테스트" 항목이 마련되어 있다.

    그림5: OpenAPI테스트 결과

    개별기업 산업분류 데이터 받기

    개별기업 개업개황 데이터 예시

    아래는 Python 에서 request 함수를 통해 parameter에 나의 API 키와 예시 고유번호인 삼성전자의 고유번호("00126380")를 포함시켜서 get 요청한 결과를 받아온 뒤 그 결과를 DataFrame으로 변환하는 예시이다.

     

    import pandas as pd
    import requests
    
    dartapikey = "나의 API키"
    
    # 기본 URL
    url = "https://opendart.fss.or.kr/api/company.json"
    # parameters : 나의 API 키, 기업코드
    params = {
        "crtfc_key":dartapikey,
        "corp_code":"00126380"
    }
    # json 형식으로 데이터 요청
    headers = {
        "accept": "application/json",
    }
    # get 요청한 결과를 res 에 저장
    res = requests.get(url, params=params, headers=headers)
    # 응답으로 받은 res를 json 형식으로 디코딩
    data = res.json()
    # 디코딩된 데이터를 DataFrame 형식으로 변환
    df = pd.DataFrame(data, index=[0])
    # 출력
    print(df)

     

    위 코드를 실행하면 아래와 같은 데이터를 확인할 수 있다.

    그림6: API 실제 출력 예시

     

    개별기업 산업분류 데이터 추출하기

    우리가 필요한 데이터는 기업개황에서 업종코드이다. 위 그림 4에서 업종코드는 "industy_code"라는 항목으로 제공된다. 이 정보를 바탕으로 고유번호를 넣으면 산업코드를 출력하는 getIndustryCode 라는 함수를 아래와 같이 만들 수 있다.

     

    import pandas as pd
    import requests
    
    dartapikey = "나의 API키"
    
    # corpcode 라는 string(문자열) 변수를 받는 함수
    def getIndustryCode(corpcode: str):
    	# URL 에 api 키와 받은 변수를 포함시켜서 응답요청
        url = "https://opendart.fss.or.kr/api/company.json"
        params = {
            "crtfc_key":dartapikey,
            "corp_code":corpcode
        }
        headers = {
            "accept": "application/json",
        }
        # 결과를 res 에 저장
        res = requests.get(url, params=params, headers=headers)
        # 응답받은 res를 json 으로 디코딩
        data = res.json()
        # 디코딩한 data를 DataFrame 형식을 df 에 저장
        df = pd.DataFrame(data, index=[0])
        # df 에서 'induty_code'컬럼을 선택하고 거기서 iloc[0]으로 내용만 입수 및 문자열형식 변경(str)
        industcode = str(df['induty_code'].iloc[0])
        # 입수된 industcode return
        return industcode
    
    if __name__=="__main__":
    	# 예시로 준 삼성전자 기업코드 "00126380"을 getInsustryCode 에 넣어서 결과 입수
        industcode = getInsustryCode("00126380")
        # 결과 출력
        print(industcode)

     

    반응형
Designed by Tistory.