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を使うべきでしょうね。
あと、依存関係のあるライブラリが存在しています。
lxml | pg8000 | pymysql | numpy | rdflib |
isodate | regex | aniso8601 | graphviz | holidays |
openpyxl | Pillow | pycountry | cherrypy | cheroot |
python-dateutil | pytz | tornado | pyparsing | matplotlib |
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の動作確認は完了です。