반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

 

오늘은 지난 글에 이어서 DART-FSS 패키지로 원하는 회사 혹은 모든 회사의 재무제표를 엑셀 파일로 저장하는 것을 해보겠습니다.

향후 저장받은 데이터를 Pandas 모듈로 가공해서 유의미한 투자 정보를 얻고, 실제 투자에도 적용해 볼 계획입니다.

 

<DART-FSS 관련 지난 글>

 

2021.06.10 - [파이썬 패키지/전자공시시스템(DART)] - [Python / Dart] 파이썬으로 재무제표 정보 가져오기 1편_ DART API와 DART-FSS 패키지 소개

 


 

1. 공시된 기업 정보 불러오기

 

아래의 코드를 이용하면 DART에 공시된 모든 회사의 [회사 코드] + 회사 이름을 리스트 형태로 받을 수 있습니다. 

 

# DART에 공시된 모든 회사 리스트 불러오기

corp_list = dart.get_corp_list()

 

참고로 corp_list를 DART API로부터 받아오는데에 시간이 걸리는데 측정해보니 11.72초 정도로 나오네요.

주로 사용하는 IDE인 VS Code를 사용하니깐 매번 코드를 실행할 때마다 리스트를 불러와서 시간이 아까우므로, 다음부터 Jupyter Notebook을 이용한다면 매번 12초씩 아낄 수 있겠습니다.

 

 

corp_list의 요소가 어떤 데이터 형태를 가지고 있는지, 요소는 몇 개나 있는지 확인해보았습니다. 리스트의 길이를 측정하는 len( ) 함수를 이용해 확인해보니 상장된 기업수가 8만 7천개가 넘네요!

# 리스트의 첫번째 종목정보 출력

print(corp_list[0])

>>> [00434003]다코


# 리스트 종목 갯수 출력

print(len(corp_list))

>>> 87098


# corp_list 자료형 확인

print(type(corp_list))

>>> <class 'dart_fss.corp.corp_list.CorpList'>

 

혹시 종목 87098개가 궁금하신분들은 for문을 이용해서 터미널창에 모두 출력해보세요. 저는 처음으로 터미널 창 스크롤 범위가 오버돼서 이전 정보가 안보이는 것을 경험할 수 있었답니다!

# 모든 회사 [코드]회사명 출력

for i in corp_list:
    print(i,end="")

 

 

2. corp_list 활용 메소드

 

사실 우리가 위에서 얻게된 corp_list는 클래스이며, 따로 메소드를 가지고 있습니다. 즉, corp_list.함수의 형태로 몇 가지 함수를 사용할 수 있습니다.

 

역시 말보다는 코드죠. 가장 자주 사용할 함수 2가지를 예시로 가져와봤습니다.

 

# 삼성전자 회사명으로 검색

samsung = corp_list.find_by_corp_name('삼성전자', exactly=True)[0]


# 삼성전자 회사 코드로 검색

samsung = corp_list.find_by_corp_code('00126380')[0]

 

참고로 exactly 옵션을 설정하지 않으면 기본적으로 False로 설정되어 있습니다. 여기서 특별히 True로 설정해주었는데, 그 이유는 False일 때는 '삼성전자'가 들어간 '삼성전자서비스씨에스'를 출력해주기 때문입니다.

 

또한 corp_list.find_by_corp_name( ) 함수의 결과 데이터는 [[종목 코드]종목 이름]의 형태로 리스트 [ ]로 한겹 쌓여져있습니다. 이를 벗겨내기 위해서 corp_list.find_by_corp_name( )[0]으로 코딩한 점 유의해 주세요.

 

<관련 메소드>

메소드 기능
find_by_corp_code(self, corp_code) DART에서 사용하는 회사 코드를 이용한 찾기
find_by_corp_name(self, corp_name[, …]) 회사 명칭을 이용한 검색
find_by_product(self, product[, market]) 취급 상품으로 검색(코스피, 코스닥, 코넥스만 지원)
find_by_sector(self, sector[, market]) 산업 섹터로 검색(코스피, 코스닥, 코넥스만 지원)
find_by_stock_code(self, stock_code[, …]) 주식 종목 코드를 이용한 찾기
load(self[, profile]) 회사 정보가 없을시 회사 정보 로딩

 

<여기서 잠깐! corp_code와 stock_code의 차이점>

 

corp_code는 dart에서 사용하는 코드를 말하며 stock_code는 아래와 같이 검색포털에서 주식정보를 검색하면 나오는 코드입니다.

위에서 다루었던 삼성전자의 corp_code (00126380)와 다른 것을 확인 할 수 있습니다.

 

3.  회사 정보로 재무제표 다운받기

 

위에서 samsung이란 변수에 회사 정보([종목 코드]종목 이름)을 저장했습니다. 이 samsung이란 변수도 사실 클래스의 인스턴스(객체)로서 메소드를 사용할 수 있습니다.

 

주로 사용할 만한 메소드는 아래의 5개 중 extract_fs와 search_fillings이며, 이번 시간에는 목표로 했던 재무제표를 정보를 가져오는 extract_fs( ) 메소드를 사용해 보겠습니다.

메소드 기능
extract_fs(bgn_de[, end_de, fs_tp, …]) 재무제표 검색
load(self) 종목 정보 로딩
search_filings([bgn_de, end_de, …]) 공시보고서 검색
to_dict() 종목에 관한 모든 정보를 Dictionary 형태로 반환
update(info) Update information

 

코드는 아래와 같이 간단합니다. 다만 실행하시면 자료를 가져오는데에 시간이 꽤 걸릴거예요.

 

# 2020년부터 연간 연결재무제표 불러오기
fs = samsung.extract_fs(bgn_de='20200101')

# 재무제표 검색 결과를 엑셀파일로 저장 (기본저장위치: 실행폴더/fsdata)
fs.save()

 

<여기서 잠깐! extract_fs 메소드의 인자(옵션)>

 

꼭 입력이 필요한 검색시작 일자(bgn_de)를 제외하고는 모두 기본값이 들어가 있습니다.

 

옵션 기능 기본 값 자료형
bgn_de 검색시작 접수일자('YYYYMMDD') 필수 입력 str
end_de 검색종료 접수일자('YYYYMMDD') 오늘 날짜 str
fs_tp 재무제표 종류 선택
(‘bs’:  재무상태표, ‘is’ : 손익계산서, ‘cis’ : 포괄손익계산서, ‘cf’ : 현금흐름표)
('bs', 'is', 'cis', 'cf) tuple,
str
separate 개별재무제표 여부 (True : 개별 재무제표 / False : 연결 재무제표) False str
report_tp 연간, 반기, 분기 보고서 선택
(‘annual’ : 연간, ‘half’ : 반기, ‘quarter’ : 분기)
None str
lang 언어 선택 ('ko' : 한글, 'en' : 영어) 'ko' str
separator 숫자 1000 단위 구분자 표시 여부 (True / False) True str
dataset 'xbrl' : xbrl 파일 우선 데이터 추출
'web' : web page 우선 데이터 추출
'xbrl' str

 

 

코드 실행 결과 아래와 같은 이름의 엑셀 파일이 저장됩니다. 참고로 excel 파일이 있는 fsdata 폴더는 현재 작업 디렉토리에 존재합니다.

 

엑셀 파일을 열어보면 아래와 같이 데이터들이 있습니다. 데이터들이 의미하는 바는 추후 정리하는 시간을 갖겠습니다.

 

 

참고로 위에서 설정했던 (bgn_de='20200101')은 아래의 그림에서 시작 기간을 의미합니다.

 

아래는 dart에서 검색한 연결 재무상태표입니다.

 

 


<참고자료>

 

DART-FSS 공식문서

https://dart-fss.readthedocs.io/en/latest/dart_corp.html

 

기업정보검색 — dart-fss documentation v0.3.10 documentation

© Copyright 2021, Sungwoo Jo Revision 2a7bb3e6.

dart-fss.readthedocs.io

 

반응형

+ Recent posts