関連記事
EDINETのXBRLを分析した結果を公開しています。
PythonでEDINETのXBRLを分析する記事を書いています。
3.XBRLを解析する
3.要素の日本語名称を調べる
1.読み込む名称リンクベースファイルを特定する
前回までで有報の構造や構成要素の名前、それが何か(タイトル、数値、表の構成要素)までわかりました。ここでは各要素をなんという日本語で表示したらよいのかを調査します。具体的には「jppfs_cor_CashAndDeposits」は「現金及び現金同等物」だということを調査します。そのためには名称リンクベースファイルを読み込む必要があります。
有報が参照する名称リンクベースファイルの一覧は、ダウンロードしたXBRLのZIP中のスキーマファイルに記載されています。スキーマファイルは「jpcrp030000-asr-001_E00007-000_2022-03-31_01_2022-06-27.xsd」のようにファイル名がxsdで終わるものです。
スキーマファイルの先頭部分に参照リンクベース要素というやつが並んでおり、それをまず読み取ります。
以下はスキーマファイルのxmlファイルとしての構造です。簡略化して書いています。
<参照リンクベースファイル要素1>
<参照リンクベースファイル要素2>
・・・
<要素A 属性1の値、属性2の値、・・・・属性nの値>
<要素B 属性1の値、属性2の値、・・・・属性nの値>
<要素C 属性1の値、属性2の値、・・・・属性nの値>
(くりかえし続く)
参照リンクベース要素を読み取ると以下のようなリンクベースファイルの一覧を取得できます。ここでは名称リンクベースファイルのみを記載しています。名称リンクベースファイルはファイル名がlab.xlmで終わるファイルです。
- jpcrp030000-asr-001_E00007-000_2022-03-31_01_2022-06-27_lab.xml
- http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp/2021-11-01/label/jpcrp_2021-11-01_lab.xml
- http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2021-11-01/label/jppfs_2021-11-01_lab.xml
- http://disclosure.edinet-fsa.go.jp/taxonomy/jpigp/2021-11-01/label/jpigp_2021-11-01_lab.xm
- http://disclosure.edinet-fsa.go.jp/taxonomy/jpdei/2013-08-31/label/jpdei_2013-08-31_lab.xml
どの名称リンクベースファイルを参照すればよいかは、要素名を見ればわかります。要素名中のスキーマファイルのディレクトリ名(正しい言い方ではないかも)から始まる名称リンクベースファイルを参照すればよいです。
例えば現金及び現金同等物の要素名は「http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2021-11-01/jppfs_cor_2021-11-01.xsd#jppfs_cor_CashAndDeposits」です。この場合は「http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2021-11-01/」から始まる名称リンクベースファイルを参照します。
2.名称リンクベースファイルを読み込む
以下は名称リンクベースファイルのxmlファイルとしての構造です。簡略化して書いています。
<要素名とキーワードを関連づけている要素>
<キーワードと名称要素1を関連づけている要素>
<キーワードと名称要素2を関連づけている要素>
<名称要素1(優先ラベルA)>名称A<名称要素1>
<名称要素2(優先ラベルB)>名称B<名称要素2>
(くりかえし続く)
上記の構造の名称リンクベースファイルに対して
- 要素名で検索し、名称リンクベースファイル内で用いられているキーワードを取得する
- キーワードから名称要素をたどり、優先ラベルごとの名称文字列を習得する
の処理を行い、要素ごとの名称文字列を取得します。
すると以下のようなデータを得ることが出来ます。
要素名1, 優先ラベルA, 名称文字列A
要素名1, 優先ラベルB, 名称文字列B
要素名1, 優先ラベルC, 名称文字列C
要素名2, 優先ラベルA, 名称文字列D
要素名2, 優先ラベルB, 名称文字列E
要素名2, 優先ラベルC, 名称文字列F
(くりかえし続く)
あとは、要素名からデータを検索することで日本語名称を取得することが出来ます。
4.要素の値を取得する
要素の値をxbrlファイルから取得します。xbrlファイルはダウンロードしたZIPファイルにあるファイル名が.xbrlで終わるファイルです。
以下はxbrlファイルのイメージです。かなり簡略化しています。
<要素A(コンテキスト1)>要素Aのコンテキスト1に対応する数値<要素A>
<要素A(コンテキスト2)>要素Aのコンテキスト2に対応する数値<要素A>
・・・
<要素B(コンテキスト1)>要素Bのコンテキスト1に対応する数値<要素B>
<要素B(コンテキスト2)>要素Bのコンテキスト2に対応する数値<要素B>
(くりかえし続く)
xbrlファイルには要素の値がコンテキスト毎に並んでいます。コンテキストとは大雑把に言うと「いつのデータか」を表す識別子です。例えば
- コンテキスト「CurrentYearDuration」は今期中
- コンテキスト「Prior1YearDuration」は1年前の決算期間中
- コンテキスト「CurrentYearInstant」は今期末時点
- コンテキスト「Prior1YearInstant」は1年前の決算期末時点
といった感じです。
xbrlファイルのイメージをもう少し簡易に書くと以下のようになります。
<要素A(今年)>今年の要素Aの数値<要素A>
<要素A(去年)>去年の要素Aの数値<要素A>
・・・
<要素B(今年)>今年の要素Bの数値<要素B>
<要素B(去年)>去年の要素Bの数値<要素B>
(くりかえし続く)
コンテキスト中のDurationは損益計算書など値が期間中のものであることを示しており、Instantは貸借対照表など値が特定の時点のものであることを示しています。各要素の値がDuration、InstantのどちらなのかはスキーマファイルのperiodType属性をみればわかります。
各種財務諸表の値を取得するためにどのコンテキストを使えばよいかについてですが、わたしは「CurrentYearDuration」「CurrentYearInstant」を決め打ちで使うことにしています(財務諸表についてはそれで問題なく値を取れた)。
したがって、要素のperiodType属性を見て、Durationなら「CurrentYearDuration」の値を、Instantなら「CurrentYearInstant」の値をxbrlファイルから取得すればよいです。
注意しなくてはならいのは要素の優先ラベルが「http://www.xbrl.org/2003/role/periodStartLabel」の場合は「Prior1YearInstant」の値を取得しなくてはなりません。キャッシュ・フロー計算書の「現金同等物の期首残高」がこれに該当します。
コンテキストの特定についてはもっとスマートな方法があるはずで、具体的には表示リンクベースファイルのメンバー要素からコンテキストを特定できそうなのですが、うまくいきませんでした。
5.XBRLを分析した結果を出力する
ここまでで
- 各種財務諸表の構造および含まれる要素
- 要素の用途、値、日本語名称
を全て取得できているので、あとはそれを自身が欲しい形式にまとめて出力すればよいです。
わたしは「親要素の日本語名称, 要素の日本語名称, 要素の値」という形式で、数値要素を全て出力しています。ここらへんは人によってほしい形式が異なると思うので自由にやったらよいと思います。
この形式で出力すると以下のページのような結果になります。
参考になるサイトの紹介
この記事はおおよその内容しか書いていないため、より詳しい情報を知りたい場合は以下のページが参考になります。
- EDINET API】Python で XBRL を取得する方法【決算分析】
- EDINETの各種仕様書、ガイドライン等
- 財務分析に欠かせない、XBRLを理解する Part1
- 財務分析に欠かせない、XBRLを理解する Part2
- 財務分析に欠かせない、XBRLを理解する Part3
おわりに
EDINETから有報のデータを取得するためには「大体こんなことをすればよい」ということをざっくりと説明しました。使うべきコンテキストの特定方法はかなりおざなりなので、後々やり方がわかった段階で加筆修正したいと思っています。
この記事が皆さんの参考になると嬉しいです。
今回はここまでです。