josw123 / dart-fss

한국 금융감독원에서 운영하는 다트(Dart) 시스템 크롤링을 위한 라이브러리
https://github.com/josw123/dart-fss
MIT License
321 stars 110 forks source link

연결재무제표 불러오기 #109

Closed 0x68756d8616e6f69664 closed 2 years ago

0x68756d8616e6f69664 commented 2 years ago

samsung = corp_list.find_by_stock_code('005930') fs = dart.fs.extract(corp_code=re.sub(r'[^0-9]', '', str(samsung)), bgn_de='20201231', end_de='20220401', fs_tp=('bs', 'is'), cumulative=True)

안녕하세요. 다음과 같이 코드를 작성해서 사용해보니 bgn_de가 제대로 입력되지 않는 것 같아요. 저의 생각에는 20년도 21년도 연간 보고서가 나와야 하는것 같은데 19, 18, 17년도 연간 보고서까지 데이터를 복사해오더라구요. 혹시 해결이 가능할까요?

josw123 commented 2 years ago

안녕하세요.

bgn_de는 재무 공시일 기점으로 데이터를 추출합니다. (재무년도 X -> DART 공시 시점)

그로 인해 bgn_de='20201231'으로 검색하는 경우 2020년도 사업보고서(2021.03.09일 공시)까지 검색을 진행하게 됩니다.

2020년 사업보고서를 보면 아래와 같이 2019년 및 2018년도 연간 보고서가 첨부되어 있습니다.

DART-FSS 라이브러리에서는 이러한 데이터를 필터링하기 보다는, 데이터를 살려두는 방향으로 제작되었기 때문에

1-2년전 데이터까지 추출되게 됩니다.

만약 과거 데이터를 필터링하시려면 pandas의 dataframe으로 변환셔서 아래와 같이 column filtering을 하셔서 사용하시면 되겠습니다.

import dart_fss as dart
import re
import numpy as np

def filter_columns(df, year_bgn):
    year_re = re.compile('(\d{4})(\d{4})')
    columns = []
    for col in df.columns:
        year = year_re.findall(col[0])
        if len(year) > 0:
            year = int(year[0][0])

            if year >= int(year_bgn):
                columns.append(col)
        else:
            columns.append(col)
    columns = np.array(columns, dtype=object)
    return df[columns]

corp_list = dart.get_corp_list()
samsung = corp_list.find_by_stock_code('005930')
fs = samsung.extract_fs(bgn_de='20200101')

fs_bs = filter_columns(fs['bs'], "2020")
fs_is = filter_columns(fs['is'], "2020")
fs_cis = filter_columns(fs['cis'], "2020")
fs_cf = filter_columns(fs['cf'], "2020")

image

0x68756d8616e6f69664 commented 2 years ago

감사합니다. 해결됐습니다.