-
(OpenAPI)DART Open API 사용법3: 기업데이터 가공 in python금융퀀트/프로그램기초 2021. 2. 11. 13:52반응형
1. OpenAPI로 XML 형식의 기업 데이터 단순 추출의 한계
우리는 DART 에서 제공하는 OpenAPI를 python을 이용해서 아래 코드를 사용하면 "< >"가 덕지덕지 붙어있는 XML 파일을 아래와 같이 얻을 수 있었다. ( 자세한 내용은 (OpenAPI)DART Open API 사용법2: 기업데이터 추출 in python 참조 )
1) 데이터조회 코딩
#라이브러리 읽어오는 부분---------------------------------------------------------- import requests from bs4 import BeautifulSoup #URL을 조합하는 부분--------------------------------------------------------------- url = "https://opendart.fss.or.kr/api/company.xml?" crtfc_key = "나의 API 키값 넣기" corp_code = "00126380" apitest = url+"crtfc_key="+crtfc_key+"&corp_code="+corp_code #XML파일 텍스트 읽어오기------------------------------------------------------------ res = requests.get(apitest) soup = BeautifulSoup(res.text, "lxml") print(soup)
2) XML 데이터 조회 결과
<result> <status>000</status> <message>정상</message> <corp_code>00126380</corp_code> <corp_name>삼성전자(주)</corp_name> <corp_name_eng>SAMSUNG ELECTRONICS CO,.LTD</corp_name_eng> <stock_name>삼성전자</stock_name> <stock_code>005930</stock_code> <ceo_nm>김기남, 김현석, 고동진</ceo_nm> <corp_cls>Y</corp_cls> <jurir_no>1301110006246</jurir_no> <bizr_no>1248100998</bizr_no> <adres>경기도 수원시 영통구 삼성로 129 (매탄동)</adres> <hm_url>www.sec.co.kr</hm_url> <ir_url/> <phn_no>031-200-1114</phn_no> <fax_no>031-200-7538</fax_no> <induty_code>264</induty_code> <est_dt>19690113</est_dt> <acc_mt>12</acc_mt> </result>
하지만 위처럼 산출된 데이터는 별 소용이 없다. ( 눈으로 확인하는 정도? )
기업명 종목코드 대표자명 법인구분 법인
등록번호사업자
등록번호주소 업종코드 1 삼성 005930 김기남.. Y 1301110006246 1248100998 경기도수원 12 위 표 정도로 데이터가 정리가 되어야 데이터를 보기도 쉽고, 추가적인 기업 데이터를 위 칼럼에 맞춰서 아래쪽에 계속 추가해 줄 수 있다. python에서는 위와 같은 데이터 형식을 DataFrame이라고 한다. 결국 우리는 python을 이용해서 XML 데이터를 DataFrame 형식으로 ( 즉, 위 표처럼) 바꿔야지만 XML로 뽑아낸 데이터가 쓸모가 있어질 것이다.
2. XML 데이터 가공 with pandas
1) 기본 라이브러리 설치
데이터를 위 표처럼 가공하기 위해서 파이썬에서 필요한 라이브러리는 pandas 라는 라이브러리이다. anaconda cmd 창을 실행시켜서 아래 명령어를 통해서 pandas 라이브러리를 설치해 주면 된다. ( pandas는 근데 보통 anaconda python 설치하면 기본적으로 설치되어 있다. )
pip install pandas
2) XML 데이터 가공
XML 데이터를 위 표처럼 가공하는 방법은 단계적으로 접근하면 쉽다. ①먼저 데이터를 넣을 DataFrame 빵틀을 만든다. ②XML에서 원하는 데이터를 뽑아낸다. ③ 뽑아낸 데이터를 DataFrame 빵틀에 추가한다.
import requests import pandas as pd from bs4 import BeautifulSoup # XML데이터 추출 앞단 과정---------------------------------------------------------- url = " https://opendart.fss.or.kr/api/company.xml?" crtfc_key = "나의 API 키값 넣기" corp_code = "00126380" apitest = url+"crtfc_key="+crtfc_key+"&corp_code="+corp_code res = requests.get(apitest) soup = BeautifulSoup(res.text, "lxml") # XML데이터 추출 앞단 과정---------------------------------------------------------- # 데이터프레임 껍데기 만들기---------------------------------------------------------- df = pd.DataFrame(columns=['기업명', '종목코드', '대표자명', '법인구분', '법인등록번호', '사업자등록번호', '주소', '업종코드']) # XML 데이터를 변수에 넣기------------------------------------------------------------ corp_name = soup.find("corp_name").text stock_code= soup.find("stock_code").text ceo_nm= soup.find("ceo_nm").text corp_cls= soup.find("corp_cls").text jurir_no= soup.find("jurir_no").text bizr_no= soup.find("bizr_no").text adres= soup.find("adres").text induty_code= soup.find("induty_code").text # 데이터 프레임틀에 데이터 row 추가---------------------------------------------------- test_df = df.append({'기업명':corp_name, '종목코드':stock_code, '대표자명':ceo_nm, '법인구분':corp_cls, '법인등록번호':jurir_no, '사업자등록번호':bizr_no, '주소':adres, '업종코드':induty_code},ignore_index=True)
중간에 XML 데이터를 변수에 넣는 과정이 이해가 안 될 수 있는데, 위 XML 에서 "< >" 해당 부분을 찾아서 텍스트만 뽑아온다고 생각하면 쉽다. 즉, "2) XML 데이터 조회 결과" 의 XML 파일에서 기업명은 <corp_name> 삼성전자(주)</corp_name>로 되어 있으니 XML 파일에서 <corp_name>을 찾아서 거기서 텍스트만 뽑아오는 명령어가 아래처럼 되는 것이다.
soup.find("corp_name").text
corp_name 이라는 변수에 넣어준 것이 아래와 같은 명령어이다.
corp_name = soup.find("corp_name").text
3. 가공된 데이터를 엑셀로 내보내기
DataFrame 형식으로 데이터를 만들었다면 엑셀로 내보내는 것은 어렵지 않다. 아래처럼 경로만 잘 지정해서 "to_excel" 해주면 된다. 아래는 "C:/Users/admin/Desktop" 이라는 경로에 "test.xlsx"라는 엑셀 파일로 만드는 코드 예시이다. 물론 위에서 test_df라는 변수에 DataFrame을 저장했으므로 test_df를 엑셀로 만들어 주어야 한다.
# 엑셀로 데이터 보내기----------------------------------------------------------------- test_df.to_excel('C:/Users/admin/Desktop/test.xlsx')
반응형'금융퀀트 > 프로그램기초' 카테고리의 다른 글
파이썬 라이브러리 설치(Windows) (0) 2021.06.03 아나콘다, 파이썬, 비주얼 스튜디오 사용(Windows) (0) 2021.06.03 (OpenAPI)DART Open API 사용법2: 기업데이터 추출 in python (0) 2021.02.11 (OpenAPI)DART Open API 사용법1: 인증키 발급 (0) 2021.02.11 통계프로그램 설치 : R with anaconda (0) 2021.01.02