EDINET活用記
きっかけ
株式投資をしていると、企業の業績を調べる機会が多い。でも有価証券報告書を1社ずつ読むのは時間がかかる。「もっと手早くまとめて見られないか」と思っていた。
そこで知ったのがEDINETだ。金融庁が運営する電子開示システムで、上場企業が提出した有価証券報告書などを無料で閲覧できる。しかもAPIが公開されており、プログラムからデータを取得できる。
個人でも使えるのか試してみることにした。
EDINETとは
EDINETは「Electronic Disclosure for Investors' NETwork」の略で、金融庁が運営する有価証券報告書等の開示システムだ。上場企業は決算ごとに有価証券報告書を提出する義務があり、その書類がEDINETに集約されている。
書類はXBRL(eXtensible Business Reporting Language)という形式で提出される。XMLをベースにした財務報告専用のフォーマットで、売上高や営業利益といった財務項目が機械的に読み取れるよう構造化されている。
APIを叩いてみた
EDINETはAPIを公開しており、書類のリストや本文データをプログラムから取得できる。Pythonで試してみたところ、思っていたより簡単に書類一覧が取得できた。
大まかな流れはこうだ。
- EDINET APIで指定日の書類リストを取得する
- 書類リストから有価証券報告書(docTypeCode: 120)を絞り込む
- 書類IDをもとにZIPファイルをダウンロードする
- ZIPを展開してXBRLファイルを取り出す
- XBRLを解析して財務項目を抽出する
1〜3はすんなり進んだ。問題は5のXBRL解析だった。
XBRLの読み解きに苦労した
XBRLはXMLなので読めるが、財務項目の名称が独特だ。売上高なら jppfs_cor:NetSales のように、タクソノミ(項目定義)で決まった名称を使う。これを理解するのに時間がかかった。
さらに、提出年度によって使われるタクソノミのバージョンが異なり、同じ「売上高」でも年度によって名称や属性の書き方が違うことがある。2016〜2018年頃の古い書類と最近の書類では構造が微妙に変わっており、年度をまたいで統一的に処理するのが難しい。
ここでもAIに相談しながら進めた。「このXMLの構造はどう解釈するか」「古い書式と新しい書式の違いは何か」といった質問に、AIが都度答えてくれた。完全に正確なわけではないが、方向性を確認するには十分だった。
個人でも扱える規模か
EDINETには大量のデータがある。2016年度以降の有価証券報告書だけでも数万件のオーダーになる。Pythonで1件ずつ処理していると時間がかかるため、並列処理や日単位のバッチ処理で効率化する必要があった。
ローカルマシンで処理するには限界があるが、工夫次第で個人でも扱える範囲には収まると感じた。Dockerで処理環境を固め、外付けSSDにデータを積み上げていく方法で進めている。
わかったこと
- EDINETのAPIは個人でも無料で使える
- XBRLの解析は知識が必要だが、AIを使いながらであれば独学でもある程度できる
- 年度によって書式が変わるため、過去データを統一的に処理するのが最大の難所
次回はXBRLのデータを実際に処理して気づいたことを書く。