
XBRLを読み解く(大量保有報告書)その①
大量保有報告書や変更報告書のデータを抽出したいと思ったことはありませんか?私は毎日金融データのことばかり考えています。
Python初心者ですが、自分なりに頑張ってXBRLデータから欲しい値を抽出して、先日そのデータをcsv出力することに成功しました。折角なので、データの取得手順をネットに書き残そうと思います。
使用言語:Python
ライブラリ:Arelle(環境設定はhttps://srbrnote.work/archives/5588 を参考にしました)
どうやってXBRLからデータを抽出するか
XBRLとは、
XBRL文書は、勘定科目や項目名などの要素名、表示名、属性(金額、日付等)、各要素間の関係(様式、親子関係等)などについて定義した用語集であるタクソノミと、会計システム等のシステムから作成されたデータ(財務諸表数値など)に、タクソノミで定義された意味付け(タグ付け)をすることで、コンピュータが理解できるようにした報告書データの本体としてのインスタンス文書から構成されています
XBRLとは何ですか。 - 上場REIT向けFAQサイト
私が思うに、XBRLというデータ形式は財務関係の報告書に記載するあらゆる項目について、機械フレンドリーな形で意味を持たせた状態で記録する言語だと思っています。例えば、有価証券報告書でも、当期末の純利益についてPDF内では単に「当期純利益¥100,000,000」と表現するところを、XBRLではその100,000,000という数字について「①どの会社の②どの勘定科目の③どの期間の勘定が100,000,000で、⑤その単位は円です」と事細かく指定したもの、だと認識しています。
大量保有報告書・変更報告書から取得するデータについて考える
上では有価証券報告書の勘定科目を例に述べましたが、今回は大量保有報告書・変更報告書についてXBRLからデータを取得しようと思います。どれだけググっても大量保有報告書・変更報告書のXBRL抽出について指南してくれるページはなかったので、このnoteが誰かの役に立てば幸いです。ただ、1つ言えるのは有価証券報告書のような膨大で複雑なデータと比べると大量保有報告書・変更報告書のほうがシンプルですし、初心者がXBRLを触るならまずはこっちのほうがいいのではないか?と感じています。もっと5%ルール報告書の抽出が流行ればいいのに。
勘定科目とその数値について注目するのが有価証券報告書なのに対して、変更報告書で誰もが気にする点といえば、①誰の株式保有率が②何%くらいなのか、という点だと思います。
つまり、今回の報告書で気にしたいのは、
・保有者に関する情報(誰、どこの人、法人?個人?)
・目的となる情報(株の保有数は何%?)
そして報告書のベースとなる情報で、
・基本的情報(提出日、報告義務発生日、どこの株?)
という方向性が見えてきました。
大量保有報告書・変更報告書の構造について調べる
5%ルールのデータを取得するにあたって、試しに1つ、XBRLデータを覗いてみようと思います。


提出者が6人いることから、6人分のデータ…ここは諸事情で5人分のデータが集約されているのが分かる
ひとまず具体的に考えるために変更報告書を覗いてみます。
2017-12-06公表、トリニティ工業株式会社、東証上場の株について、株主であるトヨタ自動車の保有率減少が報告されていて、
この報告書では提出形態が連名のため、6人分の保有比が記載されているようです。
トヨタ自動車株式会社
日野自動車株式会社
ダイハツ工業株式会社
トヨタ車体株式会社
トヨタ自動車東日本株式会社
セントラル自動車株式会社
※セントラル自動車株式会社は吸収で無くなった
(なら提出者5人って表紙に書いてくださいよ)
XBRLデータ内では、報告書に記載する数値1つひとつに意味を持たせている(どの数字が誰に関する数字で、その単位は株なのか円なのか、等)
例:氏名又は名称:トヨタ自動車株式会社について、眼球フレンドリーなhtmlではこのように表示されていますが、

XBRLではこのように記入されています。

↑氏名又は名称の「トヨタ自動車株式会社」の部分について注目すると、
<jplvh_cor:Name
contextRef="FilingDateInstant_jplvh010000-lvh_E02144-000FilerLargeVolumeHolder1Member">
トヨタ自動車株式会社</jplvh_cor:Name>
jphvh_cor:Name
contextRef="FilingDateInstant_jplvh010000-lvh_E02144-000FilerLargeVolumeHolder1Member"
(※value=)トヨタ自動車株式会社
※xbrl内には記載がないが、arelleでは"value"として扱われる
お?、提出者の1人目であるトヨタの項目、cotextRefには
FilingDateInstant_jplvh010000-lvh_E02144-000FilerLargeVolumeHolder1Member
と書かれている。ということは、
➡N人目以降は
FilingDateInstant_jplvh010000-lvh_E02144-000FilerLargeVolumeHolderNMember
と表記されるのではないでしょうか?
2人目の日野自動車はXBRLでこのように示されている:
<jplvh_cor:Name contextRef="FilingDateInstant_jplvh010000-lvh_E02144-000FilerLargeVolumeHolder2Member">日野自動車株式会社</jplvh_cor:Name>
そう、contextRefには、そのValueが誰の数字なのかを機械的に意味付けてくれていました。
つまり、XBRL内の数値について、その値の持ち主はContextRef=で以下のように示される:
トヨタ自動車株式会社
contextRef=FilingDateInstant_jplvh010000-lvh_E02144-000FilerLargeVolumeHolder1Member
日野自動車株式会社
contextRef=FilingDateInstant_jplvh010000-lvh_E02144-000FilerLargeVolumeHolder2Member
ダイハツ工業株式会社
contextRef=FilingDateInstant_jplvh010000-lvh_E02144-000FilerLargeVolumeHolder3Member
トヨタ車体株式会社
contextRef=FilingDateInstant_jplvh010000-lvh_E02144-000FilerLargeVolumeHolder4Member
トヨタ自動車東日本株式会社
contextRef=FilingDateInstant_jplvh010000-lvh_E02144-000FilerLargeVolumeHolder5Member
と記入されているのが分かりました。
次は、上記を手掛かりにして実際にarelleでデータを取得する方法について考えたいと思います。