EDINETのXBRL用のPythonライブラリを作った - Parser編


1. はじめに

まず、EDINETとXBRLについて軽く。

1.1 EDINETとは

EDINETは、「金融商品取引法に基づく有価証券報告書等の開示書類に関する電子開示システム」のことで、有価証券報告書、有価証券届出書、大量保有報告書等の開示書類について、その提出から公衆縦覧等に至るまでの一連の手続きを電子化するために開発された1ようで、株式投資の重要な判断材料になる決算書が、後述するXBRLという特殊なXMLファイルでダウンロードできる(検索もできる)。まとめてドカっとダウンロードしたいひとはこれを参考にしてほしい。

1.2 XBRLとは

XBRL JAPANによると、XBRL(eXtensible Business Reporting Language)は、各種事業報告用の情報(財務・経営・投資などの様々な情報)を作成・流通・利用できるように標準化されたXMLベースのコンピュータ言語2らしいが、とてもそのまま利用できるシロモノではない。例えば、2017年の仕様は2017年版EDINETタクソノミの公表についてにまとまっているが、まぁ意味不明である3

EDINETのXBRLをPythonでパースする

ひとまず、せっかくXBRLという構造化されたファイル(しかも、仕様が複雑とは言え所詮はXML)なので、parserさえ作ればなんとかなるだろうということで作ったのがedinet-xbrl である。

$ pip install edinet-xbrl

でインストール後、こんな感じでxbrlファイルへのpathを渡せばクソみたいなXBRLを、Pythonのオブジェクトとして扱える。

from edinet_xbrl.edinet_xbrl_parser import EdinetXbrlParser

## init parser
parser = EdinetXbrlParser()

## parse xbrl file and get data container
xbrl_file_path = "set your xbrl file path"
edinet_xbrl_object = parser.parse_file(xbrl_file_path)

## 例えば、該当年度の総資産を取ってみる
key = "jppfs_cor:Assets"
context_ref = "CurrentYearInstant"
current_year_assets = edinet_xbrl_object.get_data_by_context_ref(key, context_ref).get_value()

keyとcontext_refを特定するのは相応に大変だけど、有報のPDFとXBRLを並べてにらめっこすればなんとかなるはずだ。コードはGitHubに置いておくので、後は良しなに4

最後に

これを使って大量のXBRLと格闘してバフェット・コードというウェブサービスを作ってるので、興味があればのぞいてみてください。繰り返しになりますが、EDINETからXBRLから入手する方法もこのエントリにまとめたので、是非ご利用ください。
Parserの使い方がわからない、XBRLについて相談したいことがある等についてはTwitterからお気軽にご連絡いただければと思います(DMでも大丈夫です)。

注釈等


  1. 金融庁のページ より引用 

  2. XBRL JAPAN: XBRLとはより引用 

  3. そもそも、どの要素に何が入っているかを確認するのにはこのページの"タクソノミ要素リスト"というexcelファイルを参照する必要があるのだが、これを開いて心が折れない人は皆無であろう。 

  4. 内部では、python-xbrlを利用させてもらっている