josw123 / dart-fss

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

삼천리(코드: 00128555) 기업 XBRL 파일 Dataframe 변환 이슈 #60

Closed baekspace88 closed 3 years ago

baekspace88 commented 3 years ago

안녕하세요. 먼저 훌륭한 라이브러리를 만들어주셔서 유용하게 사용할 수 있게 된 점 감사합니다. 다름이 아니라 삼천리(코드: 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가 세팅되어 있습니다.

제 예상엔 계정 항목 중에 필터링 되어야 할 부분이 제대로 되지 않아 보입니다. 이 부분 한 번 검토해 주시면 감사하겠습니다. :)

josw123 commented 3 years ago

안녕하세요.

확인해보니 XBRL 데이터 처리시 중복 데이터를 과정에서 발생하는 문제였습니다. 이는 삼천리의 XBRL 데이터 작성시, 한글 타이틀의 경우 다른 명칭을 사용하여 중복되지 않았으나, 영문 타이틀의 경우 동일한 명칭을 사용하여 중복 데이터로 작성되어 있었습니다.

그런데 지금 XBRL 데이터 추출시 컬럼의 경우 lang 파라미터를 이용하여 [ko/en]을 반영하여 처리되고 있었으나, 데이터 값을 추출시에는 en만을 이용하여 처리되고 있어서 발생하는 문제였습니다.

수정된 코드는 develop branch에 반영되었으며, 수정된 코드는 조만간 테스트후 배포하도록 하겠습니다.

baekspace88 commented 3 years ago

빠른 원인 파악 및 수정 감사합니다.