반응형

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

 

 

<DART-FSS 관련 지난 글>

 

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

2021.06.22 - [파이썬 패키지/전자공시시스템(DART)] - [Python/Dart] 파이썬으로 공시 정보 가져오기 2편_ 상장된 회사 재무제표 EXCEL로 저장하기

2021.06.25 - [파이썬 패키지/전자공시시스템(DART)] - [Python/Dart] 파이썬으로 공시 정보 가져오기 3편_특정회사 혹은 특정 공시유형 가져오기


이번 시간에 배울 함수는 재무제표만을 추출해주는 함수입니다.

 

지금까지 배운 것이 워낙 비슷비슷한 느낌이라서 정리하면 다음과 같습니다.

 

2편: 상장 회사 전체 리스트 받고, 거기서 종목을 골라서 저장 후, 재무제표 혹은 공시정보를 꺼내어 쓰는 방법 (통합 버전)

3편: 공시정보에 특화된 방법(전체 or 특정 종목)

4편(이번 시간 배울 것): 재무제표에 특화된 방법 (특정 종목 재무제표 추출)

         --> 2편의 종목.extract_fs( )와 표현만 다르고 완전 같다고 보면 됨

 


그럼 지금부터 재무제표를 추출하는 방법에 대해서 알아보겠습니다.

 

특정회사 재무제표 일괄 추출

(함수) dart_fss.fs.extract( )

 

<매개변수>

옵션 기능 기본 값 자료형
corp_code 공시대상회사의 고유번호(8자리) 필수 입력 str
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 연간, 반기, 분기 보고서 선택 (중복 선택 가능)

사용 예시)
(str) ‘annual’ : 연간, ‘half’ : 연간 + 반기, ‘quarter’ : 연간 + 반기 + 분기
(list) [‘annual’] : 연간, [‘half’]: 반기, [‘quarter’] 분기, [‘annual’, ‘half’]: 연간+반기
None str,
list
lang 언어 선택 ('ko' : 한글, 'en' : 영어) 'ko' str
separator 숫자 1000 단위 구분자 표시 여부 (True / False) True str
dataset 'xbrl' : xbrl 파일 우선 데이터 추출
'web' : web page 우선 데이터 추출
'xbrl' str

 

<예시 코드_삼성전자 2020년 사업보고서(연간) 가져오기>

 

import dart_fss as dart

# Open DART API KEY 설정
api_key='xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
dart.set_api_key(api_key=api_key)

# 삼성전자 기업코드로 2021년 1월 1일부터 현재날짜 사이에 나온 사업보고서 가져오기
corp_code_samsung = '00126380'
fs = dart.fs.extract(corp_code=corp_code_samsung, bgn_de='20210101')

 

<코드 실행 결과>

 

위의 코드를 실행하셨다면 위와 같이 재무제표 하나가 Dart API를 통해 다운로드 받아집니다. 변수 fs에 어떤 값이 저장되어 있는지 아래에서 확인해봅시다.

 

기본적으로 위에서 봤던 여러 파라미터들의 값이 저장되어 있고, 가장 핵심 정보인 financial statement에는 재무상태표, 손익계산서, 포괄손익계산서, 현금흐름표가 순서대로 들어가 있는 것을 보실 수 있습니다.

 

이제 이 결과를 3가지 메소드(클래스 안에 정의된 함수)로 활용한는 법에 대해서 알아보겠습니다.

 

 

재무제표 일괄 추출 결과

(클래스) dart_fss.fs.FinancialStatement( )

 

위에서 재무제표를 추출하셨다면 그 추출의 결과물(fs)를 활용하셔야겠죠? 이를 위해 아래의 3가지 메소드를 사용할텐데 하나씩 알아보겠습니다.

 

메소드 기능
save( ) 재무제표 정보를 모두 엑셀파일로 일괄저장
show( ) 재무제표 정보를 표시해주는 Method
to_dict( ) FinancialStatement의 요약 정보를 Dictionary 로 반환

 

to_dict( )

 

가장 먼저 위에서 예시 코드로 확인한 결과를 Dictionary로 반환해주는 메소드인 to_dict( ) 입니다. 아직은 어디에 사용할지 모르겠네요.

그냥 이런 것이 있다는 정도만 알아두시면 좋겠습니다. (아까 예제코드의 fs 출력 결과와 같죠?)

 

 

show( )

 

아마 가장 많이 사용할 것으로 생각하는 show( ) 메소드입니다. 방금 전 얻은 재무제표(재무상태표, 손익계산서, 포괄손익계산서, 현금흐름표)를 원하는대로 표 형태로 가져 올 수 있습니다. 이 표는 Pandas 패키지의 데이터프레임(DataFrame) 형식으로 Pandas로 데이터 분석이 가능 합니다.

 

옵션 기능 기본 값 자료형
tp 재무제표 종류 선택
(‘bs’:  재무상태표, ‘is’ : 손익계산서, ‘cis’ : 포괄손익계산서, ‘cf’ : 현금흐름표)
필수 입력 str
show_class class 표시 여부 (True/False) True bool
show_depth 표시할 class 열 갯수 10 int
show_concept concept_id 표시 여부 (True/False) True bool

 

여기서 tp는 무엇인지 감이 오실 것이고, 나머지 3개가 무엇인지 감이 안오실거예요. 한번 show( ) 메소드를 이용해서 값을 보면서 하나씩 설명 드려보겠습니다.

 

<코드>

# 재무제표에서 제무상태표만 출력하는 코드
# ‘bs’:  재무상태표, ‘is’ : 손익계산서, ‘cis’ : 포괄손익계산서, ‘cf’ : 현금흐름표
df = fs.show('bs')
df

 

<실행 결과>

 

show( ) 메소드를 이용해 제무상태표를 출력해보았습니다. 가장 왼쪽에 concept_id라는 열 이름을 보이시나요?

자산항목을 구분하는 id인데 아직은 어디 사용할 수 있을지 모르겠네요. 저는 한국인이니 label_ko를 이용해 자산항목을 구분할 예정입니다. concept_id를 표에서 보시기 싫으시면 show_concept = False로 설정해주시면 됩니다.

 

그리고 class0부터 class4로 분류를 해둔 것 보이시나요? 위에서 4가지 메소드 중 show_class( )와 show_depth( )와 관련있는 부분입니다. 위의 concept_id와 같이 class를 없애고 싶으면 show_class = False로 설정해주시고, 만약 class를 2번까지만 출력하고 싶다고 하면 show_depth = 2로 설정해주시며 되겠습니다.

 

 

save( )

 

첫 시간에도 다루어 보았던 save( ) 메소드입니다. Dart API에서 받은 fs를 엑셀로 저장하는 기능을 합니다.

 

# 재무제표 일괄저장

# 기본 저장경로: 현재경로/fsdata
# 기본 저장 파일명: corp_code_report_tp.xlsx

fs.save()

 

원하는 경로에 원하는 파일명으로 저장하시고 싶으면 아래와 같이 하시면 됩니다.

 

filename = '삼성전자_제무재표'
path = '/User/xxxxx/Desktop/'
fs.save(filename=filename, path=path)

 


 

지금까지 배운 지식을 이용해서 전체 상장기업의 재무제표를 다운받고 싶으면 아래와 같은 과정을 코드로 구현하면 될 것 같네요.

 

1) 전체 상장 기업 리스트 받기

 

2) for문을 이용해 corp_list에서 종목 코드만 추출

 

3) dart.fs.extract(corp_code='여기 for문으로 종목 코드 바꿔가며 입력', bgn_de='20210101')으로 제무재표 정보 변수에 담기

 

4) 변수에 담은 재무제표 정보를 save( )로 엑셀로 저장하거나, show( )로 데이터 프레임으로 가져와서 필요한 데이터만 추출

 

이 부분은 추후에 좀 더 자세히 다루어 보도록 하겠습니다.

 

실적 시즌에 이런 방식으로 기업을 스크리닝해본다면 투자에 정말 큰 무기가 될 것 같거든요!


<참고 자료>

 

DART-FSS 공식 문서 (*조금씩 틀린 부분이 있으니 주의할 것)

 

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

 

재무제표 일괄 추출 — dart-fss documentation v0.3.10 documentation

[‘annual’, ‘quarter’]: 연간 + 분기, [‘half’, ‘quarter’]: 반기 + 분기, [‘annual’, ‘half’, ‘quarter’]: 연간 + 반기 + 분기

dart-fss.readthedocs.io

 

반응형

+ Recent posts