サイトアイコン SE×FIRE!

[開発進捗3]XBRLファイルをBeautifulSoupで解析する

[開発進捗1]決算短信XBRLをデータベース化する
[開発進捗2]XBRLファイルを決算データ化する

四半期決算を分析するアプリをWordPressで作るの開発進捗の三回目です。

またまた期間が空いてしまいました。

開発をしながらブログ更新を続けるのは無理だと諦めたのが正直なところです。開発は諦めていません。ゆっくりと進んでいます。

また全体図から今回の報告箇所を説明します。前回とほぼ変わってません。

前回はXBRLが非常に複雑で、いきなりデータベースにするのは無茶な設計であること。

そして、XBRLデータを無理なくデータベース化するための必要なデータ構造を以下の様に説明しました。

今回の説明箇所はSTEP1です。実際の開発はSTEP2までテストを残してほぼ完了しています。

このSTEP1の中で、PythonのBeautifulSoupというパッケージが非常に活躍したと予告しました。BeautifulSoupの説明が主になります。

XBRLの構造について

ここも前回にさわりだけやってます。前回は文字列データを例示にしましたが、数値データはもう少し複雑です。

以下は売上高について、決算短信XBRLからデータを抜粋した例です。

XBRLの実データは適時開示情報閲覧サービスから取得可能です。試したい方はここから適当に決算短信のXBRLを取得して下さい。

※説明は決算短信におけるXBRLの解析なので、他のXBRL(例えば有価証券報告書)で通用するかは全く試していないです。

ix:nonfractionというタグが数値系、ix:nonnumericというタグが文字列系です。

ix:nonfractionの各タグの属性と数値について、ざっくり説明すると以下の通りになります。

要素名
contextref CurrentAccumulatedQ3Duration_ConsolidatedMember_ResultMember 第3四半期などの時期
decimals -6 とりあえず無視してOK
format ixt:numdotdecimal データフォーマット
name tse-ed-t:NetSales 売上高などの値の意味
scale 6 乗数
unitref JPY 単位
sign マイナスの時のみ記述

値が3064なので、第3四半期の売上高は3064[百万円]だろうか。と読めるわけです。

まぁ実際XBRLをブラウザで読むとその通り書いてあるのですが、機械的に読み込ませるためにはこの解析が必須となります。

じゃあ実際にプログラムでcontextrefだのnameだのを読むにはどうしたら良いだろうとググりまくった結果が、BeautifulSoupでした。

XBRLに特化したライブラリも発見したのですが、BeautifulSoupの方が恐らく圧倒的に使い易いです。ネット上に情報も多く、応用も効きます。

BeautifulSoupについて

一言で説明すると、HTMLやXMLファイルからデータを抜き出すPythonライブラリです。

私の使っているバージョンはBeautifulSoup4です。記事記載時点では最新みたいです。

ドキュメントの和訳も公開されています。が、ドキュメントにも記述がある通り、あんまり一生懸命読み込まなくても結構使いこなせます。

また、XMLの解析にはツリー構造の解析が付きまといそうなものですが、XBRLの場合は「ix:nonfraction」と「ix:nonnumeric」のタグをまんま抜いてくれば良いだけですので、ツリー構造については一切考えなくて大丈夫です。

この点は非常に救われる構造です。勿論、BeautifulSoupはこのツリー構造の解析もできるみたいですが、今回の解析では出番がありません。

その為、非常に簡単な使い方で、複雑なXBRLの解析をクリアできます。

BeautifulSoupのインストール

ものすごく簡単です。

コマンドプロンプトで、Pythonのインストールフォルダの「Scripts」フォルダに移動して、

pip install beautifulsoup4

を打ちます。終わりです。「Scripts」フォルダはパスを切るべきなのでしょうね。たぶん。

XBRLからデータを取得する

超簡単なサンプルコードを貼り付けます。説明はコメントに書きましたが、本当に簡単です。前置きの方がよっぽど長いですね。すみません。

実際の私の開発コードはこれをテキスト出力では無くて、insert文にして実行している。それだけです。

応用:XBRLを整形する(prettifyメソッド)

XBRLをテキストで読んでみると、モノによるのかもしれませんが、一切のインデントと改行が存在しません。

これがそれぞれの値の意味を調査するに当たってきついです。しかし、beautifulsoupにはXMLを整形するメソッド prettify() があります。

インデントや改行の付け方も非常に受け入れやすい形で、劇的に読みやすくなります。

こちらはxbrlとか関係なく、適当なhtmlやxmlにもそのまま適用可能です。

次回

上記機能で成形したXBRLとHTMLの対比で

name = ‘NetSales’ は売上高だな。

というのを確認して現在のデータ構造から1行の決算データにしていくのが次の行程です。

XBRLの仕様に関する本も探したのですが、ちょっと高度すぎて(XBRLを作る側の専門書っぽい?)ものばっかりで、読む気がしませんでした。

ちょっとでかい本屋くらいじゃ全然置いてなくて立ち読みもできませんでしたので、XBRLについて書籍での学習は完全に諦めました。

知りたいことは決算短信におけるXBRLの各項目の意味だけです。XBRLをこれ以上深掘りしたくはありません。・・・タクソノミとかワカラン。

なので、実データとの対比とグーグル先生で項目の意味を調査してプロシージャを組んでいきます。

調査の過程を記述したところでしょうもないので、調査結果である

「name = ‘NetSales’ は売上高でした!」

という会社業績の数字に関わる情報の一覧をベタっと挙げてしまおうと思います。

XBRLを今後解析する人にはそれが最も有益な情報となる事でしょう。何より私がめんどくさかったので。

というかもうプロシージャは出来ているので文章を書くだけなんですが。

ドキュメントを書くのが億劫なのはエンジニアあるあるですよね・・・?

次回
[開発進捗4]決算短信XBRLから決算情報を抽出する

モバイルバージョンを終了