【Pythonで財務分析】XBRL解析のためにArelleをインストール

【Pythonで財務分析】XBRL解析のためにArelleをインストール プログラミング

XBRLの解析をPythonで行うなら、Arelle一択です。
Arelleはオープンソースで唯一、次の認証を受けたソフトウェアになります。

Arelleは、XBRLの権威ある団体からお墨付きを貰っているということです。

本記事の内容

  • Arelleとは?
  • Arelleのシステム要件
  • Arelleのインストール
  • Arelleの動作確認

それでは、上記に沿って解説していきます。

Arelleとは?

Arelleとは、XBRLの妥当性をチェックするツールのことです。
妥当性をチェックする以上は、XBRLからデータを読み取る機能も備えています。

そして、ArelleはPython製のGUIアプリです。
このアプリは、オープンソースとして公開されています。

また、アプリをインストールすれば、PythonからもAPIとして利用可能になります。
しかし、プログラマーからすればGUIアプリなんて不要です。

つまり、PythonのAPIとして利用したいだけとも言えます。
以前までは、そんな要望にArelle側は応えてくれていました。

この記事では、以前までのArelleを旧Arelleと呼ぶことにします。
それに対して、現在のArelleを新Arelleと呼びます。

話が、ややこしいですね。
利用する側からすると、かなりややこしいです。

どうややこしいかと言うと、旧Arelleはまだ利用可能です。
pipコマンドで簡単にインストールできます。

この際にpipでインストールできるのは、arelleモジュールとなります。
GUIアプリはありません。

逆に、新ArelleはGUIアプリがメインになります。
そのついでに、arelleモジュールを利用できるという形です。
プログラマーからすると、新Arelleは嫌な形になります。

以上、Arelleについて説明しました。
次は、Arelleのシステム要件を確認します。

Arelleのシステム要件

現時点(2021年5月)でのArelleの最新バージョンは、1.2020.05.10です。
この最新バージョンは、2020年5月10日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応となります。

  • Windows
  • macOS
  • Linux

そして、サポート対象となるPythonのバージョンはPython 3.5以降のようです。
公式のダウンロードページを見る限りは、そのように書いてあります。

でも、setup.pyを中身を見ると、Python 2.7にも対応しているような感じです。
そうだとしても、新しいPythonを使うべきでしょうね。

あと、依存関係のあるライブラリが存在しています。

lxmlpg8000pymysqlnumpyrdflib
isodateregexaniso8601graphvizholidays
openpyxlPillowpycountrycherrypycheroot
python-dateutilpytztornadopyparsingmatplotlib
pyodbc



GUIアプリとしてインストールするなら、上記のすべてが必要となります。
しかし、今回はarelleモジュールのみが動けばOKです。

この場合に必要となるのは、以下の2つです。

  • lxml
  • isodate

したがって、上記の二つは事前にインストールしておきます。
次のコマンドでインストール可能です。

pip install lxml
pip install isodate

以上、Arelleのシステム要件の説明でした。
次は、Arelleのインストールを行います。

Arelleのインストール

かなり特殊なインストール方法を行います。
Windows環境で説明していますが、LinuxでもmacOSでも変わりありません。

  • pipコマンドで旧Arelleをインストール
  • 新Arelleのarelleモジュールに置き換える

それぞれを以下で確認していきます。

pipコマンドで旧Arelleをインストール

旧ArelleのPyPIページ
https://pypi.org/project/arelle/

上記ページのライブラリをインストールしていきます。
その前に、現状のインストール済みパッケージを確認しておきます。

>pip list
Package    Version
---------- -------
isodate    0.6.0
lxml       4.6.3
pip        21.1.1
setuptools 56.1.0
six        1.16.0

次にするべきことは、pip自体の更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip

では、旧Arelleのインストールです。
旧Arelleのインストールは、以下のコマンドとなります。

pip install arelle

インストールは、一瞬で終わります。
では、どんなパッケージがインストールされたのかを確認しましょう。

>pip list
Package    Version
---------- -------
arelle     2.2
isodate    0.6.0
lxml       4.6.3
pip        21.1.1
setuptools 56.1.0
six        1.16.0

arelleパッケージが、インストールされています。
このarelleパッケージの場所を特定します。

以下のコードを実行すると、場所がわかります。

import arelle
print(arelle.__file__)

上記を実行すると、以下のような結果が表示されます。

●●●\lib\site-packages\arelle\__init__.py

●●●は、各環境で異なります。
ここまで終われば、次は新Arelleに関する作業に着手します。

新Arelleのarelleモジュールに置き換える

まずは、新Arelleをダウンロードします。

新ArelleのGitHubページ
https://github.com/Arelle/Arelle

手段は何でもいいので、Arelleフォルダを取得してください。
そして、Arelleフォルダの下にarelleフォルダがあることを確認します。
arelleフォルダは、arelleモジュールのことです。

このarelleフォルダの中のあるフォルダ・ファイルをすべてコピーします。

コピーしたモノを、上記で特定した以下の場所に上書きコピーします。

●●●\lib\site-packages\arelle\

これにより、新Arelleのarelleモジュールへの置き換えが完了です。

まとめ

はっきり言って、強引な方法です。
しかし、現状のArelle自体はかなり面倒なシステムになっています。

  • GUIアプリのインストールが強制
  • pipコマンドでのインストールは未対応

Pythonで動くことだけを目的にすれば、今回の強引な方法はアリだと考えています。
強引とは言え、所詮はファイルコピーに過ぎません。
依存関係などに影響が及ぶわけでもありませんから。

以上、Arelleのインストールの説明でした。
最後に、Arelleの動作確認を行います。

Arelleの動作確認

Arelleを使って、東芝の有価証券報告書から情報を取得していきます。
まずは、EDINETで対象のXBRLをダウンロードします。

ZIPを解凍して、XBRLフォルダ以下を適当な場所に設置。
その状態で、以下のサンプルコードを実行します。

from arelle import Cntlr

xbrl_file = "XBRL/PublicDoc/jpcrp030000-asr-001_E01738-000_2020-03-31_01_2020-07-30.xbrl"

ctrl = Cntlr.Cntlr(logFileName='logToPrint')
model_xbrl = ctrl.modelManager.load(xbrl_file)

company = None
salary = None
age = None

for fact in model_xbrl.facts:

    if fact.concept.qname.localName == "FilerNameInJapaneseDEI":
        company = fact.value
    elif fact.concept.qname.localName == "AverageAnnualSalaryInformationAboutReportingCompanyInformationAboutEmployees":
        salary = fact.value
    elif fact.concept.qname.localName == "AverageAgeYearsInformationAboutReportingCompanyInformationAboutEmployees":
        age = fact.value

print("企業名:" + company)
print("平均年間給与(円):" + salary)
print("平均年齢(歳):" + age)

XBRLのパスは、各自の環境に合わせてください。
実行した結果は、以下。

企業名:株式会社 東芝
平均年間給与(円):8675871
平均年齢(歳):44.8

東芝の有価証券報告書から、上記の情報を取得しています。
ここまで確認できれば、Arelleの動作確認は完了です。

タイトルとURLをコピーしました