josw123 / dart-fss Goto Github PK
View Code? Open in Web Editor NEW한국 금융감독원에서 운영하는 다트(Dart) 시스템 크롤링을 위한 라이브러리
Home Page: https://github.com/josw123/dart-fss
License: MIT License
한국 금융감독원에서 운영하는 다트(Dart) 시스템 크롤링을 위한 라이브러리
Home Page: https://github.com/josw123/dart-fss
License: MIT License
안녕하세요,
빠른 대응에 항상 감사드립니다.
재무상태표 추출 시 아래와 같은 오류가 발생합니다.
기업 별로 보고서 양식이 일정하지 않으니 case별로 문제가 발생하는 것 같습니다.
감사합니다.
Python 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)] on win32
import dart_fss as dart
api_key = '0e3b458c6a7d24ccbcc9056ecb9b5a1e66b5d320' # dart 인증키
dart.dart_set_api_key ( api_key = api_key ) # dart 인증
crp_list = dart.get_crp_list () # 전체 기업 리스트 (class)
crp_name = '디에이피'
crp_name_index = crp_list.find_by_name (crp_name) [0] # 지정 기업 index
fs = crp_name_index.get_financial_statement(start_dt='20000101')
Download: 18.0KB [00:00, 213KB/s]
Download: 18.0KB [00:00, 212KB/s]
Download: 14.0KB [00:00, 260KB/s]
Download: 14.0KB [00:00, 292KB/s]
Download: 15.0KB [00:00, 251KB/s]
Download: 15.0KB [00:00, 284KB/s]
Download: 15.0KB [00:00, 279KB/s]
Download: 15.0KB [00:00, 301KB/s]
Download: 14.0KB [00:00, 281KB/s]
Extracting fs-annual: 27%|██▋ | 4/15 [00:21<00:58, 5.36s/page]Traceback (most recent call last):
File "D:\Proj\Analytics\Extracting_from_DART\dart_fss\venv\lib\site-packages\IPython\core\interactiveshell.py", line 3325, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "", line 1, in
fs = crp_name_index.get_financial_statement(start_dt='20000101')
File "D:\Proj\Analytics\Extracting_from_DART\dart_fss\venv\lib\site-packages\dart_fss\crp.py", line 188, in get_financial_statement
separator=separator)
File "D:\Proj\Analytics\Extracting_from_DART\dart_fss\venv\lib\site-packages\dart_fss\fs.py", line 577, in search_financial_statement
statements = append_fs(statements, reports, fs_tp=fs_tp, separate=separate, lang=lang)
File "D:\Proj\Analytics\Extracting_from_DART\dart_fss\venv\lib\site-packages\dart_fss\fs.py", line 435, in append_fs
overlap = set(fs.columns[1:]).intersection(set(financial_statements.columns))
AttributeError: 'NoneType' object has no attribute 'columns'
Travis CI를 이용한 단위 테스트시 아래와 같은 오류 발생
안녕하세요!
우선 좋은 라이브러리를 제공해주셔서 감사합니다.
일부 재무제표 값을 불러오는 중에 너무 크게 가져오는 값이 있어서 질문 드립니다.
메리츠 화재 재무제표를 불러왔는데
코드 내용
corp_cd = corp_list.find_by_stock_code("000060")
tmp = corp_cd.extract_fs(bgn_de='20140101', end_de='20141231', report_tp='annual', separate=False)
실제로 몇개 회사의 재무제표 값이 과대로 추출되는 현상이 있는 것 같습니다.
안녕하세요 dart_fss를 사용하다 비상장기업 조회를 하다 issue가 생겼습니다.
예를 들어 "차이나하오란리사이클링유한공사[900090]"이라는 상장폐지된 기업을 종목코드를 이용하여 검색하려고 하면 아무 결과도 나오지 않습니다.
import dart_fss as dart
api_key = '364b0537dda8f51af24ec751fb3fa8bf8ecf5002'
dart.set_api_key(api_key=api_key)
crp_list = dart.get_corp_list()
crp_list.find_by_stock_code('900090')
반면, 회사이름으로 검색하면 정상적으로 나옵니다.
crp_list.find_by_corp_name('차이나하오란리사이클링유한공사')
[[00790121]차이나하오란리사이클링유한공사]
crp_list가 상장된 기업만 filter 된거라면 이름으로 검색하면 안 나와야할 것이고, 비상장 기업도 포함했다면 종목코드로 검색이 되어야할텐데 종목코드로 비상장 기업을 검색하는 방법이 있을까요?
감사합니다.
XBRL concept_id 변경에 따른 테스트 업데이트
재무재표추출 corp.extract_fs를 이용해서 대한약품 이란 회사의 재무재표를 추출해보았는데요. Could not find consolidated financial statements 라는 오류가 뜹니다. 뭐가 문제 인지 모르겠는데 도와주세요.
아래와 같이 여러 재무제표를 분석하려고 불러오는 경우 많은 메모리를 사용하게 되는 문제가 발생하고 있습니다.
짐작하기를 임시 다운로드 파일이 램에 남아있는것으로 예상되는데 혹시 해결 가능할까요?
for idx, item_name in enumerate(names):
fs_quarter = dart_data.get_financial_statement(start_dt='20180101',
show_class=False,
show_concept=False,
separator=False,
lang='en')
안녕하세요,
일부 기업의 재무상태표 가져오기에서 추가 오류가 발견되었습니다. ㅠㅠ
제가 전체 기업의 재무상태표를 모두 수집하다 보니 여러 유형의 오류를 발견하는 것 같습니다.
유형 1)
유형 2)
유형 3)
각 유형 별 상세 error 로그는 첨부 파일을 참조하십시오.
감사합니다.
파나진_error_log.txt
뉴프라이드_error_log.txt
두원석재_error_log.txt
xbrl파일을 직접 호출할때 nontype error가 납니다.
dart에서 다운받을 수 있는 ifrs.zip형태나 xbrl개별 파일로 해도 마찬가진데
dart_fss 패키지에서 웹 url 접근 형식만 가능한지요, ⠋ XBRL Loading 시간이 너무 많이 걸리네요.
답변 부탁드립니다. 감사합니다.
에러나는 코드입니다.
import dart_fss
dart_fss.xbrl.get_xbrl_from_file("/content/20200331002351_ifrs.zip")
에러 로그
table = self.get_table_by_code(code)
---> 93 return table.to_DataFrame(lang=lang, show_class=False, show_concept=False, separator=False)
94
95 def get_document_information(self, lang: str = 'ko') -> DataFrame:
AttributeError: 'NoneType' object has no attribute 'to_DataFrame'
2015년 이전 XBRL 데이터 추출시 주당이익이 크게 나오는 문제
주상이익 XBRL RAW 데이터가 아래와 같으므로
<entity00356361:udf_IS_2015317134318420_EarningsPerShareAbstract contextRef="BPFY2012dFY_ifrs_ConsolidatedAndSeparateFinancialStatementsAxis_ifrs_ConsolidatedMember" decimals="-6" unitRef="KRW">20318000000</entity00356361:udf_IS_2015317134318420_EarningsPerShareAbstract>
웹페이지 공시되는 데이터의 경우 decimals을 이용하여 6자를 제거하고 "보통주 기본 및 희석주당이익 (단위: 원)"로 표시함으로써 웹페이지에는 올바르게 표시되는 것으로 생각됨
안녕하세요. 좋은 라이브러리 만들어 주셔서 감사합니다.
'LG화학' 종목의 경우 [20190101-20191231] 기간 처럼 full year의 경우 당기순이익 값이 추출되나
[20200101-20200630] 처럼 반기/분기 보고서의 경우 nan 값으로 추출됩니다.
추출에 사용한 code snippet 입니다.
fs = corp.extract_fs(bgn_de=begin, fs_tp=('is',), report_tp='quarter', lang='ko', separator=False)
fs_is = fs.show('is') # 연결손익계산서
print('is', fs_is)
현재 Dart-Fss-Classifier를 같이 사용하고 있습니다.
제가 제대로 사용하고 있지 않은지, 혹은 수정 방향에 가이드를 알려 주시면 감사하겠습니다.
extract_fs하고 fs.save()를 하고 나온 파일에 보니까 재무상태표에 대한 값만 있네요.
보통 재무제표라고 하면 재무상태표, 손익계산서, 현금흐름서 등을 포함하는 것일텐데,
fs보다는 extract_bs 이런식으로 이름을 변경하셔야 혼동이 없을거 같습니다.
Traceback (most recent call last): File "Dart_crawler.py", line 25, in fs_annual = samsung_electronics.get_financial_statement(start_dt='20120101') File "C:\ProgramData\Anaconda3\envs\Dart\lib\site-packages\dart_fss\crp.py", line 188, in get_financial_statement separator=separator) File "C:\ProgramData\Anaconda3\envs\Dart\lib\site-packages\dart_fss\fs.py", line 454, in search_financial_statement last_xbrl = last_report.xbrl File "C:\ProgramData\Anaconda3\envs\Dart\lib\site-packages\dart_fss\reports.py", line 147, in xbrl self.load_xbrl() File "C:\ProgramData\Anaconda3\envs\Dart\lib\site-packages\dart_fss\reports.py", line 223, in load_xbrl self.load_page(index=[0], progressbar_disable=True) File "C:\ProgramData\Anaconda3\envs\Dart\lib\site-packages\dart_fss\reports.py", line 202, in load_page pool = mp.Pool(processes=process_cnt) File "C:\ProgramData\Anaconda3\envs\Dart\lib\multiprocessing\context.py", line 119, in Pool context=self.get_context()) File "C:\ProgramData\Anaconda3\envs\Dart\lib\multiprocessing\pool.py", line 169, in init raise ValueError("Number of processes must be at least 1") ValueError: Number of processes must be at least 1
mp.cpu_count()가 1을 반환시 발생하는 오류
fs_quarter = samsung_electronics.get_financial_statement(start_dt='20170101')
위의 함수에서 아래와 같은 에러가 발생했습니다.
exit 형의 error를 처음보는데 제가 설정함에 있어서 잘못한게 있을까요.
Traceback (most recent call last):
File "/home/jskim/home/money/financial_data_crawl_DART_master/dart_fss_test.py", line 51, in
fs_quarter = samsung_electronics.get_financial_statement(start_dt='20170101')
File "/home/jskim/.local/lib/python3.5/site-packages/dart_fss/crp.py", line 188, in get_financial_statement
separator=separator)
File "/home/jskim/.local/lib/python3.5/site-packages/dart_fss/fs.py", line 454, in search_financial_statement
last_xbrl = last_report.xbrl
File "/home/jskim/.local/lib/python3.5/site-packages/dart_fss/reports.py", line 147, in xbrl
self.load_xbrl()
File "/home/jskim/.local/lib/python3.5/site-packages/dart_fss/reports.py", line 226, in load_xbrl
xbrl = get_xbrl_from_website(self._xbrl_url)
File "/home/jskim/.local/lib/python3.5/site-packages/dart_fss/xbrl.py", line 771, in get_xbrl_from_website
file_path = download_file(url, path)
File "/home/jskim/.local/lib/python3.5/site-packages/dart_fss/_utils.py", line 28, in download_file
with requests.get(url, stream=True) as r:
AttributeError: exit
안녕하세요,
dart_fss를 이용하여 기업 분석 코드를 작성하고 있습니다.
저는 10년 이상의 장기간 데이터 분석이 필요하여 아래와 같이 2000년 1월 1일 부터 현재까지의 재무상태표 read를 사도하였습니다.
crp_name = '고려제강'
crp_list = dart.get_crp_list ()
crp_name_index = crp_list.find_by_name ( crp_name ) [0]
fs_tmp = crp_name_index.get_financial_statement(start_dt='20000101')
그런데, 아래와 같은 오류가 발생합니다.
Download: 28.0KB [00:00, 177KB/s]
Extracting fs-annual: 48%|████▊ | 13/27 [01:01<01:01, 4.41s/page]Traceback (most recent call last):
File "D:\Proj\Analytics\Extracting_from_DART\dart_fss\venv\lib\site-packages\IPython\core\interactiveshell.py", line 3325, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "", line 1, in
fs_tmp = crp_name_index.get_financial_statement(start_dt='20000101')
File "D:\Proj\Analytics\Extracting_from_DART\dart_fss\venv\lib\site-packages\dart_fss\crp.py", line 188, in get_financial_statement
separator=separator)
File "D:\Proj\Analytics\Extracting_from_DART\dart_fss\venv\lib\site-packages\dart_fss\fs.py", line 533, in search_financial_statement
statements = append_fs(statements, reports, fs_tp=fs_tp, separate=separate, lang=lang)
File "D:\Proj\Analytics\Extracting_from_DART\dart_fss\venv\lib\site-packages\dart_fss\fs.py", line 386, in append_fs
fs = read_fs_table(report, fs_tp=fs_tp, separate=separate, lang=lang)
File "D:\Proj\Analytics\Extracting_from_DART\dart_fss\venv\lib\site-packages\dart_fss\fs.py", line 354, in read_fs_table
df = html_to_df(soup, regex_text, separate=separate, lang=lang)
File "D:\Proj\Analytics\Extracting_from_DART\dart_fss\venv\lib\site-packages\dart_fss\fs.py", line 245, in html_to_df
korean_unit = header_html.find(text=won_regex)
AttributeError: 'NoneType' object has no attribute 'find'
삼성전자의 경우는 start_dt='20000101'로 해도 오류 없이 읽어 오는데 데이터는 2005년에서 현재까지 데이터만 읽어 옵니다.
확인 좀 부탁 드립니다.
감사합니다.
samsung_electronics.get_financial_statement(start_dt='20120101')
를 실행하면 31kb까지 받아진 이후에 멈춰버립니다.
Download: 31.0KB [00:01, 17.8KB/s]
corp_list = dart.get_corp_list()
corp_list.load()
위와 같은 형태로 사용시 회사 리스트를 제대로 반환하지 못하는 오류
extract 함수 처리 속도가 CPU 성능에 따라 크게 영향 받음
extract 함수 처리시 처리방법에 관한 옵션 제공 필요
안녕하세요. ShinhwaS입니다.
Docker에서 dataframe을 이상하게 계산하네요.
아래 코드를 수정한뒤 작동되네요.
for key in df_count.keys().tolist(): if regex_pass.search(' '.join(index[1])): pass elif df_count[key] <= 1: drop_columns.append(key)
for key, count in df_count.items(): if regex_pass.search(' '.join(key[1])): pass elif count <= 1: drop_columns.append(key)
업데이트하느라 수고하셨습니다.
안녕하십니까, 또 issue를 제기해서 죄송합니다.
혹시 제가 black list에 올라가 있지는 않은지요, ㅠㅠ
아래는 삼성전자의 재무제표를 일괄저장한 결과입니다.
당기순이익, 주당이익 등 일부 항목이 (20080101-20081231)을 포함하여 이전 회계연도의 값이 없습니다. dart.fss.or.kr에서 직접 다운받은 파일에는 값이 존재합니다.
삼성전자.xlsx
그리고, 주당이익이 특정 연도에서 크게 나옵니다. 아마 단위:백만원 적용 문제인 것 같습니다.
항상 빠른 대응에 감사드립니다.
라이브러리 잘 사용하고 있습니다. 감사합니다.
아래와 같이 10년 이상의 정보를 조회하면 연도가 잘 못 되는 오류가 발생합니다.
fs = samsung.extract_fs(bgn_de='20000101', end_de='20201231')
아래와같이 2009년 데이터가 두개 존재하는 것을 볼 수 있습니다.
2009년 자료는 10년 이하 데이터 조회 시 정상 조회됩니다.
20110101 | 20101231 | 20091231 | 20090101 | 20081231 |
---|
위 코드로 조회한 삼성전자 20년 재무 자료입니다.
00126380_annual.xlsx
올려두신 예제와 똑같이 쳤는데 samsung.extract_fs(bgn_de='20150101') 에서 오류가 나네요.
JVMNotFoundException Traceback (most recent call last)
~\anaconda3\lib\site-packages\dart_fss\fs\extract.py in merge_fs(fs_df, label_df, report, fs_tp, lang, separate)
842 for compare_func in additional_comparison_function:
--> 843 ndata, nlabels = compare_func(column, df, ndf, label_df[tp], ndata, nlabels)
844
~\anaconda3\lib\site-packages\dart_fss_classifier\fs_search.py in compare_df_and_ndf_cnn(column, df, ndf, ldf, ndata, nlabels)
108 label = extract_account_title(ndf[ndf_label_column].iloc[idx])
--> 109 concept_id = guess_concept_id(label)
110 index = concept_none_data.get(concept_id)
~\anaconda3\lib\site-packages\dart_fss_classifier\fs_search.py in guess_concept_id(text)
39 """
---> 40 return guess(text)
41
~\anaconda3\lib\site-packages\dart_fss_classifier\classifier.py in guess(text)
29 """
---> 30 c = Classifier()
31 return c.guess(text)
~\anaconda3\lib\site-packages\dart_fss\utils\singleton.py in call(cls, *args, **kwargs)
7 if cls not in cls._instances:
----> 8 cls._instances[cls] = super(Singleton, cls).call(*args, **kwargs)
9 return cls._instances[cls]
~\anaconda3\lib\site-packages\dart_fss_classifier\classifier.py in init(self)
131 def init(self):
--> 132 self.konlpy = Kkma()
133 self._dataset = None
~\anaconda3\lib\site-packages\konlpy\tag_kkma.py in init(self, jvmpath, max_heap_size)
94 if not jpype.isJVMStarted():
---> 95 jvm.init_jvm(jvmpath, max_heap_size)
96
~\anaconda3\lib\site-packages\konlpy\jvm.py in init_jvm(jvmpath, max_heap_size)
54
---> 55 jvmpath = jvmpath or jpype.getDefaultJVMPath()
56
~\anaconda3\lib\site-packages\jpype_jvmfinder.py in getDefaultJVMPath()
73 finder = LinuxJVMFinder()
---> 74 return finder.get_jvm_path()
75
~\anaconda3\lib\site-packages\jpype_jvmfinder.py in get_jvm_path(self)
210 "environment variable properly."
--> 211 .format(self._libfile))
212
JVMNotFoundException: No JVM shared library file (jvm.dll) found. Try setting up the JAVA_HOME environment variable properly.
During handling of the above exception, another exception occurred:
RuntimeError Traceback (most recent call last)
in
----> 1 samsung.extract_fs(bgn_de='20150101')
~\anaconda3\lib\site-packages\dart_fss\corp\corp.py in extract_fs(self, bgn_de, end_de, fs_tp, separate, report_tp, lang, separator)
225
226 """
--> 227 return extract(self.corp_code, bgn_de, end_de, fs_tp, separate, report_tp, lang, separator)
~\anaconda3\lib\site-packages\dart_fss\fs\extract.py in extract(corp_code, bgn_de, end_de, fs_tp, separate, report_tp, lang, separator)
1078
1079 for report in tqdm(reports[next_index:], desc='Annual reports', unit='report'):
-> 1080 statements, label_df = merge_fs(statements, label_df, report, fs_tp=fs_tp, separate=separate, lang=lang)
1081
1082 if str_compare(report_tp, 'half') or str_compare(report_tp, 'quarter'):
~\anaconda3\lib\site-packages\dart_fss\fs\extract.py in merge_fs(fs_df, label_df, report, fs_tp, lang, separate)
848 except Exception:
849 msg = 'An error occurred while fetching or analyzing {}.'.format(report.to_dict())
--> 850 raise RuntimeError(msg)
851
852
RuntimeError: An error occurred while fetching or analyzing {'rcp_no': '20180402005019', 'corp_code': '00126380', 'corp_name': '삼성전자', 'stock_code': '005930', 'corp_cls': 'Y', 'report_nm': '사업보고서 (2017.12)', 'flr_nm': '삼성전자', 'rcept_dt': '20180402', 'rm': '연'}.
안녕하세요.
먼저 훌륭한 라이브러리를 만들어주셔서 유용하게 사용할 수 있게 된 점 감사합니다.
다름이 아니라 삼천리(코드: 00128555) 기업 보고서를 XBRL 파일로 받은 후 Dataframe으로 변환할 때 오류가 발생하여 이슈 라이징합니다.
이슈 상세 내용은 다음과 같습니다.
삼천리(코드: 00128555) 2018~2020년에 해당하는 분기/반기/사업 보고서를 받아서 Table클래스의 to_DataFrame메서드를 사용해 dataframe 형식으로 변환하던 중 다음과 같은 오류가 발생합니다.
File "/venv/lib/python3.8/site-packages/dart_fss/xbrl/table.py", line 216, in to_DataFrame
df.loc[idx] = r
File "/venv/lib/python3.8/site-packages/pandas/core/indexing.py", line 670, in __setitem__
iloc._setitem_with_indexer(indexer, value)
File "/venv/lib/python3.8/site-packages/pandas/core/indexing.py", line 1626, in _setitem_with_indexer
self._setitem_with_indexer_missing(indexer, value)
File "/venv/lib/python3.8/site-packages/pandas/core/indexing.py", line 1858, in _setitem_with_indexer_missing
raise ValueError("cannot set a row with mismatched columns")
ValueError: cannot set a row with mismatched columns
디버깅을 해보니 보고서에서 가져오는 column의 length와 row의 length가 일치하지 않더군요.
그래서 정상적으로 변환되는 보고서와 함께 데이터 비교를 해보았더니 정상적으로 불러오는 경우엔 column 값 중 ('별도재무제표'), ('연결재무제표') 항목의 값만 존재하고 나머지는 nan이 되도록 row data가 세팅되어있는 반면에,
삼천리(코드: 00128555) 의 케이스에서는 일단 row data 수와 column 필드의 개수가 맞지 않으며, 그로 인해 밀린 것인지 ('별도재무제표'), ('연결재무제표') 항목이 아닌 값에도 row data가 세팅되어 있습니다.
제 예상엔 계정 항목 중에 필터링 되어야 할 부분이 제대로 되지 않아 보입니다.
이 부분 한 번 검토해 주시면 감사하겠습니다. :)
안녕하세요. 라이브러리 잘 쓰고 있습니다.
분기별 재무제표 조회 코드를 돌리다가 다음과 같은 에러가 발생해서 문의드립니다. 뭔가 필드명이 안맞아서 그러는 것 같은데 혹시 해당 에러에 대해 체크 부탁드릴 수 있을까요? 감사합니다.
crp_list = dart.get_crp_list()
samsung_electronics = crp_list.find_by_name('삼성전자')[0]
fs_quarter = samsung_electronics.get_financial_statement(start_dt='20010101', report_tp='quarter')
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-20-ae5a8d98e6a2> in <module>
----> 1 fs_quarter = samsung_electronics.get_financial_statement(start_dt='20010101', report_tp='quarter')
~/anaconda3/lib/python3.7/site-packages/dart_fss/crp.py in get_financial_statement(self, start_dt, end_dt, fs_tp, separate, report_tp, lang, show_abstract, show_class, show_depth, show_concept, separator)
186 report_tp=report_tp, lang=lang, show_abstract=show_abstract,
187 show_class=show_class, show_depth=show_depth, show_concept=show_concept,
--> 188 separator=separator)
189
190
~/anaconda3/lib/python3.7/site-packages/dart_fss/fs.py in search_financial_statement(crp_cd, start_dt, end_dt, fs_tp, separate, report_tp, lang, show_abstract, show_class, show_depth, show_concept, separator)
484 quarter = search_report_with_cache(crp_cd=crp_cd, start_dt=start_dt, end_dt=end_dt,
485 bsn_tp=['A003'], page_set=100, series='asc')
--> 486 statements = append_fs(statements, quarter, fs_tp=fs_tp, separate=separate, lang=lang, report_tp='quarter')
487
488 columns = list(statements.columns)
~/anaconda3/lib/python3.7/site-packages/dart_fss/fs.py in append_fs(financial_statements, reports, fs_tp, separate, lang, report_tp)
327 regex_label = re.compile(r'[ㄱ-힣]+\(?[ㄱ-힣]+\)?')
328 for report in tqdm(reports[1:], desc=desc, unit='page'):
--> 329 fs = read_fs_table(report, fs_tp=fs_tp, separate=separate, lang=lang)
330
331 if fs is None:
~/anaconda3/lib/python3.7/site-packages/dart_fss/fs.py in read_fs_table(report, fs_tp, lang, separate)
295 regex_text = separate_table if separate else consolidated_table
296
--> 297 df = html_to_df(soup, regex_text, separate=separate, lang=lang)
298 return df
299
~/anaconda3/lib/python3.7/site-packages/dart_fss/fs.py in html_to_df(soup, regex_text, separate, lang)
226 tbody = get_table_body(table_html)
227 df = pd.read_html(tbody)[0]
--> 228 df.columns = rename_columns(header=header, columns=columns, lang=lang, separate=separate)
229 for column in df.columns[1:]:
230 df[column] = df[column].apply(str_to_float)
~/anaconda3/lib/python3.7/site-packages/dart_fss/fs.py in rename_columns(header, columns, lang, separate)
58 additional = ''
59
---> 60 if header[key]['instant_datetime'] is None:
61 start_datetime = header[key]['start_datetime'].strftime('%Y-%m-%d')
62 end_datetime = header[key]['end_datetime'].strftime('%Y-%m-%d')
KeyError: '제42기1분기말'
안녕하세요 유용한 라이브러리를 만들어 주셔서 감사 드립니다.
제무제표를 분석을 위해 아래와 같이 장기간 데이터 축출해 보았는데요.
일부 항목 축출 및 금액 부호(+,-)가 다른 것 같아 확인 좀 부탁 드립니다.
GS리테일, 카카오(현금흐름표 부호 다름)에 대해 테스트 해보았습니다.
GS리테일 축출 자료, DART 조회 화면 정리해 보았습니다.
- 실행코드
corp_code = "007070"
fs = dart.fs.extract(corp_code=corp_code, bgn_de='20110101')
fs.save()
- 축출 데이터(dart-fss)
- DART자료
bs4 라이브러리 업데이트에 의하여 발생하는 오류 수정
안녕하세요, dart-fss 를 설치한 python 사용자입니다!
제가 xbrl데이터를 읽는데 어려움이 너무 많아서 구글링을 하던 중, 이런 좋은 패키지를 만들어 주셔서 감사합니다.
한편, 이 모듈의 예시를 실행시켜보니,
fs_quarter = samsung_electronics.get_financial_statement(start_dt='20190101', report_tp='quarter')
, 시간이 좀 오래 걸리는 것 같은데, 혹시 이렇게 하고 기다리는 것이 맞는지요?
답변 주시면 감사하겠습니다.
연결 재무제표 검색후 개별 재무제표 검색이 안되는 문제
지난해 IPO가 이루어져 이번 분기까지 보고서가 올라온 에스제이그룹의 경우에 생기는 버그
안녕하세요.
우선 너무나 좋은 라이브러리를 만들어주셔서 감사합니다.
사용 도중에 재무제표 항목 숫자가 다른 항목에 들어가 있는 오류를 발견했습니다.
저는 '나이스정보통신' 종목으로 2012년부터 현재까지의 재무제표 출력을 했는데요.
몇개의 항목에서 숫자가 이어지지 않고 '0' 이나 빈 값으로 나오는 현상이 있습니다.
예를 들어 2017년도 재무제표를 보면(아래는 해당 라이브러리로 출력한 엑셀자료)
'장기매출채권 및 기타비유동채권' 에 '0' 으로 들어가있습니다.
그리고 그 아래에 '비유동 기타포괄손익-공정가치 측정 금융자산' 에 '5454178302' 으로 들어가 있는데요.
다트공시에 나와 있는 2017년도 재무제표를 보면 '장기매출채권 및 기타비유동채권' 항목의 숫자가
위에 언급한 '비유동 기타포괄손익-공정가치 측정 금융자산' 의 숫자인 것을 확인 할 수 있습니다.
다시한번 좋은 라이브러리 만들어주셔서 너무 감사드리고 이렇게 오류를 이슈 등록해서 죄송합니다.
재무제표 항목중 '전환일' 포함시 발생하는 오류
AttributeError Traceback (most recent call last)
in
----> 1 samsung.get_financial_statement(start_dt='20100101', separate=True)
C:\ProgramData\Anaconda3\lib\site-packages\dart_fss\crp.py in get_financial_statement(self, start_dt, end_dt, fs_tp, separate, report_tp, lang, show_abstract, show_class, show_depth, show_concept, separator)
186 report_tp=report_tp, lang=lang, show_abstract=show_abstract,
187 show_class=show_class, show_depth=show_depth, show_concept=show_concept,
--> 188 separator=separator)
189
190
C:\ProgramData\Anaconda3\lib\site-packages\dart_fss\fs.py in search_financial_statement(crp_cd, start_dt, end_dt, fs_tp, separate, report_tp, lang, show_abstract, show_class, show_depth, show_concept, separator)
528 break
529
--> 530 statements = append_fs(statements, reports, fs_tp=fs_tp, separate=separate, lang=lang)
531
532 if compare_str(report_tp, 'half') or compare_str(report_tp, 'quarter'):
C:\ProgramData\Anaconda3\lib\site-packages\dart_fss\fs.py in append_fs(financial_statements, reports, fs_tp, separate, lang, report_tp)
381 regex_label = re.compile(r'[ㄱ-힣]+(?[ㄱ-힣]+)?')
382 for report in tqdm(reports[1:], desc=desc, unit='page'):
--> 383 fs = read_fs_table(report, fs_tp=fs_tp, separate=separate, lang=lang)
384
385 if fs is None:
C:\ProgramData\Anaconda3\lib\site-packages\dart_fss\fs.py in read_fs_table(report, fs_tp, lang, separate)
349 regex_text = separate_table if separate else consolidated_table
350
--> 351 df = html_to_df(soup, regex_text, separate=separate, lang=lang)
352 return df
353
C:\ProgramData\Anaconda3\lib\site-packages\dart_fss\fs.py in html_to_df(soup, regex_text, separate, lang)
276 tbody = get_table_body(table_html)
277 df = pd.read_html(tbody)[0]
--> 278 df.columns = rename_columns(header=header, columns=columns, lang=lang, separate=separate)
279
280 if '주석' in df.columns:
C:\ProgramData\Anaconda3\lib\site-packages\dart_fss\fs.py in rename_columns(header, columns, lang, separate)
66 else:
67 key_num = regex_num.search(key).group(0)
---> 68 header_key_num = regex_num.search(header_key).group(0)
69 if key_num == header_key_num:
70 header_data = header[header_key]
AttributeError: 'NoneType' object has no attribute 'group'
주피터 노트북에서 samsung_electronics.get_financial_statement(start_dt='20120101')
을 실행하면 tqdm 관련 에러메세지가 나옵니다.
안녕하세요. ShinhwaS입니다.
별도 자본변동표에 dart_EquityAtBeginningOfPeriod [2018-09-01,2018-11-30]별도재무제표의 값이 콜할때 마다 다르게 리턴됩니다.
report_no: '20190111000477'
테이블을 파일로 첨부합니다.
반기, 분기 데이터만 추출 가능한 옵션 추가
아래와 같은 코드를 실행하면,
import dart_fss as dart
dart.dart_set_api_key(api_key='~')
crp_list = dart.get_crp_list()
zezi = crp_list.find_by_name('한국제지')
fs_annual = zezi.get_financial_statement(start_dt='20140101', fs_tp='ci')
다음과 같이 당기순이익의 일부 값에 nan이 들어가 있는 것을 확인하실 수 있습니다.
그러나 DART에서 직접 확인해보면, 실제로는 값이 존재하더라구요.
혹시 제가 작성한 코드 상에 문제가 있을까요?
아니라면, 제가 버그를 해결하고 pull request를 올려보겠습니다.
좋은 라이브러리 개발해주셔서 감사합니다.
안녕하세요. dart-fss를 우분투에 올려서 쓰려니 아래와 같이 에러가 나네요.
[Errno 2] No such file or directory: '/root/.config/arelle/cache/http/dart.fss.or.kr/Resource/Taxonomy/ifrs/2010-04-30/ifrs_for_dart/pre_dart_2010-04-30_role-D520000.xml.tmp' -> '/root/.config/arelle/cache/http/dart.fss.or.kr/Resource/Taxonomy/ifrs/2010-04-30/ifrs_for_dart/pre_dart_2010-04-30_role-D520000.xml'
Unsuccessful renaming of downloaded file to active file /root/.config/arelle/cache/http/dart.fss.or.kr/Resource/Taxonomy/ifrs/2010-04-30/ifrs_for_dart/pre_dart_2010-04-30_role-D520000.xml
`
xbrls = xbrl.get_xbrl_from_website(url=url)
File "/opt/conda/lib/python3.6/site-packages/dart_fss/xbrl.py", line 775, in get_xbrl_from_website
xbrl = get_xbrl_from_file(file)
File "/opt/conda/lib/python3.6/site-packages/dart_fss/xbrl.py", line 751, in get_xbrl_from_file
model_xbrl = Cntlr.Cntlr().modelManager.load(file_path)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelManager.py", line 158, in load
modelXbrl = ModelXbrl.load(self, filesource, nextaction, **kwargs)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelXbrl.py", line 69, in load
modelXbrl.modelDocument = ModelDocument.load(modelXbrl, url, base, isEntry=True, **kwargs)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 334, in load
modelDocument.instanceDiscover(rootNode)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 1146, in instanceDiscover
self.schemaLinkbaseRefsDiscover(xbrlElement)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 1009, in schemaLinkbaseRefsDiscover
self.schemaLinkbaseRefDiscover(element)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 1012, in schemaLinkbaseRefDiscover
return self.discoverHref(element, urlRewritePluginClass="ModelDocument.InstanceSchemaRefRewriter")
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 1132, in discoverHref
doc = _newDoc(self.modelXbrl, url, isDiscovered=not nonDTS, base=self.baseForElement(element), referringElement=element)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 327, in load
modelDocument.schemaDiscover(rootNode, isIncluded, namespace)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 872, in schemaDiscover
self.schemaDiscoverChildElements(rootElement)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 909, in schemaDiscoverChildElements
self.schemaDiscoverChildElements(modelObject)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 909, in schemaDiscoverChildElements
self.schemaDiscoverChildElements(modelObject)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 905, in schemaDiscoverChildElements
self.schemaLinkbaseRefDiscover(modelObject)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 1012, in schemaLinkbaseRefDiscover
return self.discoverHref(element, urlRewritePluginClass="ModelDocument.InstanceSchemaRefRewriter")
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 1132, in discoverHref
doc = _newDoc(self.modelXbrl, url, isDiscovered=not nonDTS, base=self.baseForElement(element), referringElement=element)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 332, in load
modelDocument.linkbaseDiscover(rootNode)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 1063, in linkbaseDiscover
href = self.discoverHref(linkElement, nonDTS=nonDTS)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 1132, in discoverHref
doc = _newDoc(self.modelXbrl, url, isDiscovered=not nonDTS, base=self.baseForElement(element), referringElement=element)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 327, in load
modelDocument.schemaDiscover(rootNode, isIncluded, namespace)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 872, in schemaDiscover
self.schemaDiscoverChildElements(rootElement)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 909, in schemaDiscoverChildElements
self.schemaDiscoverChildElements(modelObject)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 909, in schemaDiscoverChildElements
self.schemaDiscoverChildElements(modelObject)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 905, in schemaDiscoverChildElements
self.schemaLinkbaseRefDiscover(modelObject)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 1012, in schemaLinkbaseRefDiscover
return self.discoverHref(element, urlRewritePluginClass="ModelDocument.InstanceSchemaRefRewriter")
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 1132, in discoverHref
doc = _newDoc(self.modelXbrl, url, isDiscovered=not nonDTS, base=self.baseForElement(element), referringElement=element)
File "/opt/conda/lib/python3.6/site-packages/arelle/ModelDocument.py", line 110, in load
filepath = modelXbrl.modelManager.cntlr.webCache.getfilename(mappedUri, reload=reloadCache, checkModifiedTime=kwargs.get("checkModifiedTime",False))
File "/opt/conda/lib/python3.6/site-packages/arelle/WebCache.py", line 519, in getfilename
os.utime(filepath,(webFileTime,webFileTime))
FileNotFoundError: [Errno 2] No such file or directory
`
MAC에서 재무제표 관련 부분 실행 시 다음 오류가 발생합니다.
이 라이브러리를 쓰니까 bgn_de를 20141231 이전의 값도 넣을 수 있고 실제로 그 값을 가져올 수 있던데요.
https://opendart.fss.or.kr/disclosureinfo/fnltt/singl/main.do 와 같은데서 테스트할 때라던지
실제로 OPEN DART 자체가 제공하는 API 가이드라인에서는
(https://opendart.fss.or.kr/guide/detail.do?apiGrpCd=DS003&apiId=2019016)
2015년 이후부터의 추출 기능을 제공하는 것으로 보입니다.
그런데 본 라이브러리에서는 어떠한 원리(?)로 이 이상의 일을 해내시는지 원리가 궁금합니다.
Traceback (most recent call last):
File "dart.py", line 5, in
dart.dart_set_api_key(api_key=api_key)
File "/usr/local/lib/python3.7/site-packages/dart_fss/auth.py", line 9, in dart_set_api_key
DartAuth().api_key = api_key
File "/usr/local/lib/python3.7/site-packages/dart_fss/auth.py", line 68, in api_key
check_err_code(**data)
File "/usr/local/lib/python3.7/site-packages/dart_fss/errors.py", line 32, in check_err_code
raise DartAPIError(err_code, err_msg)
dart_fss.errors.DartAPIError: Unregistered API key, 미등록 인증키
문서에 보면 XML을 사용하면 미등록인증키라고 뜬다고 되어있는데요. Json으로 하려면 코드를 어떻게 수정해야 하는지 모르겠습니다.
혹시 인증키가 OpenAPI로 바뀐 것 때문에 그럴 수 있나요?
유화증권에서 재무제표 추출시 발생하는 오류
Annual reports: 43%|████▎ | 9/21 [02:19<03:04, 15.37s/report]Not Found
retrieving http://www.xbrl.or.kr/kr/fr/gaap/im/2008-12-31/kr-gaap-im-2008-12-31.xsd
Not Found
retrieving http://www.xbrl.or.kr/kr/fr/common/pte/2008-12-31/krfr-pte-2008-12-31.xsd
Not Found
retrieving http://www.xbrl.or.kr/kr/fr/common/fste/2008-12-31/krfr-fste-2008-12-31.xsd
Annual reports: 43%|████▎ | 9/21 [02:23<03:10, 15.91s/report]
Traceback (most recent call last):
File "C:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3418, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "", line 1, in
fs = corp_data.extract_fs(bgn_de = begin_date, separate = True, lang = 'ko')
File "C:\Anaconda3\lib\site-packages\dart_fss\corp\corp.py", line 233, in extract_fs
return extract(self.corp_code, bgn_de, end_de, fs_tp, separate, report_tp, lang, separator, dataset)
File "C:\Anaconda3\lib\site-packages\dart_fss\fs\extract.py", line 1294, in extract
raise e
File "C:\Anaconda3\lib\site-packages\dart_fss\fs\extract.py", line 1267, in extract
dataset=dataset)
File "C:\Anaconda3\lib\site-packages\dart_fss\fs\extract.py", line 1138, in analyze_report
show_concept=True, separator=separator)
File "C:\Anaconda3\lib\site-packages\dart_fss\fs\extract.py", line 1029, in analyze_xbrl
statements[tp] = func_fstp
File "C:\Anaconda3\lib\site-packages\dart_fss\fs\extract.py", line 990, in get_fs
data = xbrl.get_financial_statement(separate=separate)
File "C:\Anaconda3\lib\site-packages\dart_fss\xbrl\dart_xbrl.py", line 274, in get_financial_statement
return self._get_statement('dart-gcd_StatementOfFinancialPosition', separate=separate)
File "C:\Anaconda3\lib\site-packages\dart_fss\xbrl\dart_xbrl.py", line 249, in _get_statement
table = self.get_table_by_code('d999007')
File "C:\Anaconda3\lib\site-packages\dart_fss\xbrl\dart_xbrl.py", line 74, in get_table_by_code
if str_compare(table.code, code):
File "C:\Anaconda3\lib\site-packages\dart_fss\utils\string.py", line 29, in str_compare
str1 = str1.strip().lower()
AttributeError: ("'NoneType' object has no attribute 'strip'", "An error occurred while fetching or analyzing {'rcp_no': '20120229000184', 'corp_code': '00145190', 'corp_name': '유화증권', 'stock_code': '003460', 'corp_cls': 'Y', 'report_nm': '[기재정정]사업보고서 (2011.03)', 'flr_nm': '유화증권', 'rcept_dt': '20120229', 'rm': ''}.")
안녕하세요,
전체 기업에 대한 장기간의 재무상태표가 필요하여, 등록된 모든 기업에 대해 재무상태표를 읽어 와서 엑셀 파일로 저장하는 프로그램을 작성 중입니다.
for loop를 돌면서 .get_financial_statement()와 .to_excel (file_name)를 반복하는 간단한 프로그램입니다. 그런데 얼마간의 루프를 돈 후 아래와 같이 메모리 에러가 발생합니다.
상세 에러 메시지는 첨부하였습니다.
확인 좀 부탁 드립니다.
항상 감사합니다. ^^
Error_log_20190724.txt
ImportError: DLL load failed: 이 작업을 완료하기 위한 페이징 파일이 너무 작습니다.
MemoryError
File "", line 833, in get_data
File "", line 833, in get_data
MemoryError
MemoryError
MemoryError
제가 뭘 잘못 쓴건지 모르겠지만...
파일 저장은 되는데 warning이 계속 뜨네요.
/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/numpy/core/_asarray.py:83: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
XBRL Example 오류 업데이트
안녕하세요, 라이브러리 잘 사용하고 있습니다.
재무제표 추출 중 에러 발생해서 리포트 드립니다.
단위가 엔인 기업의 경우 예외처리가 되지 않은 것 같아요!
감사합니다.
RuntimeError: An error occurred while fetching or analyzing {'rcp_no': '20200120000265', 'corp_code': '01041828', 'corp_name': 'JTC', 'stock_code': '950170', 'corp_cls': 'K', 'report_nm': '[기재정정]사업보고서 (2019.02)', 'flr_nm': 'JTC', 'rcept_dt': '20200120', 'rm': '연'}.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.