[XBRL分析] Arelleの使い方の基本

EDINETの有価証券報告書や四半期報告書から、不正会計の兆候を検出するアプリを作成しています。現在、CSVファイルをダウンロードして分析するアプリは完成していますが、これだとまだ手動部分が残るので、できればさらに楽をしたいと考えています。

EDINETで開示されているCSVファイルは癖があって、そのままではPythonのPandasライブラリで読み込むことができません。

そこで、CSVファイルを扱うのではなく、APIを使用してXBRLを直接扱うことで、さらなる自動化を目指しています。

このような財務分析を行う上ではPythonが便利です。PythonでXBRLを扱う方法についていろいろ調べたのですが、かなりニッチな分野なので、情報がほとんど出てきません。そのため、備忘として残しておきたいと思います。

目次

Arelleのインストール

XBRL(eXtensible Business Reporting Language)は、各種事業報告用の情報(財務・経営・投資などの様々な情報)を作成・流通・利用できるように標準化されたXMLベースのコンピュータ言語です。特に、組織における財務情報・開示情報(財務諸表や内部報告など)の記述に適しています。

XBRL Japanのサイトより

しかし、このXBRLはかなり難しく、これを読み解いて分析するためのコードを作成するのは容易ではありません。そこで、少しでも楽ができるツールが欲しいところですが、さすがは世界は広く、すでにそのような便利なツールが存在します。

せっかく便利な道具があるので、車輪の再発明をする必要はありません。

それが、「Arelle」というパッケージです。これをPython環境にインストールすれば、XBRLを解析することができます。

Arelleは、XBRL(eXtensible Business Reporting Language)ファイルを処理し、解析するためのオープンソースのツールです。以下は、Arelleの使い方について簡単に説明したものです。

Arelleのインストール

さて、まずはArelleをインストールする必要がありますが、他の環境に影響を及ぼさないように、インストール前に、XBRL解析用の仮想環境を構築しておくことをお勧めします。

さて、このArelleのインストール手続きですが、実は一手間必要です。

Pythonで使うパッケージは依存関係があり、そのパッケージが入っていないと動かない、ということが多いです。Arelleも同様で、まずArelleを作動させるためのパッケージをインストールしておきます。(condaコマンドで入るものは、できるだけcondaを使用します)

conda install lxml
conda install isodate
conda install regex
conda install pyparsing
  1. インストール: Arelleを使うには、まずArelleをインストールする必要があります。一般的には、pipを使ってArelleをインストールします。

続いて、Arelleをインストールします。これはcondaでは入りませんので、pipを使います。

pip install arelle

しかし、インストールされたArelleは旧型です。新型のArelleのインストールはかなり厄介なので、一旦旧型をインストールした後に手動でファイルを上書きします。まず、旧型のArelleがシステムのどこに入っているのかを知る必要があります。以下のコードを実行すると、ファイルパスが表示されます。

import arelle
print(arelle.__file__)

場所がわかったら、Arelleのファイルが公開されているGitHubに行き、「Code」をクリックし、「Download ZIP」をクリックします。ファイルがダウンロードできます。

Screenshot

zipファイルを解凍し、arelleフォルダの中身をすべて先ほど調べたarelleフォルダに上書きコピーします。これで環境構築は終わりです。

Arelleの動作確認

EDINETから、トヨタ自動車の最新の有価証券報告書のXBRLファイルをダウンロードし、解凍したらXBRL以下のフォルダをフォルダごと適当な場所に保存します。

Jupyter Labなどを使って、以下のコードを入力して、結果が正しく表示されればOKです。

from arelle import Cntlr, ModelManager
from arelle.ModelValue import qname

xbrl_file = "/Users/フォルダ名/XBRL/PublicDoc/jpcrp030000-asr-001_E02144-000_2023-03-31_01_2023-06-30.xbrl"
 
ctrl = Cntlr.Cntlr(logFileName='logToPrint')
model_xbrl = ctrl.modelManager.load(xbrl_file)
 
company = None
 
for fact in model_xbrl.facts:
 
    if fact.concept.qname.localName == "FilerNameInJapaneseDEI":
        company = fact.value

print("企業名:" + str(company))

企業名:トヨタ自動車株式会社

目次