この記事では、EDINETからダウンロードしたXBRLファイルをPythonを使って解析し、数値や文字列のデータを取得してJSON形式で保存する方法を紹介します。このコードを使うことで、XBRLファイル内のタグとその値、そして関連する属性を効率よく処理できます。
なぜXBRLファイルを解析するのか?
XBRL (eXtensible Business Reporting Language) は、企業の財務情報や有価証券報告書を標準化して報告するためのフォーマットです。EDINETからダウンロードしたXBRLファイルには、多くの財務データが含まれており、それを直接目視で確認するのは難しい場合があります。そこで、Pythonを使って自動的に必要な情報を抽出し、解析を行うことで、データの活用が容易になります。
今回のコードの目的
このコードは、XBRLファイルをZIP形式から抽出し、タグに対応する値(数値または文字列)や属性を取得し、それを辞書形式に変換してJSONファイルとして保存します。ポイントは、数値データだけでなく、文字列データも一緒に処理することです。
コードの詳細解説
1.XBRLファイルをZIPから抽出する
import zipfile
# XBRLファイルをZIPから抽出する関数
def extract_xbrl(zip_file_path):
with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
# .xbrlファイルを取得
xbrl_files = [f for f in zip_ref.namelist() if f.endswith('.xbrl')]
if xbrl_files:
return zip_ref.read(xbrl_files[0]) # 最初のXBRLファイルを返す
return None
extract_xbrl
関数は、ZIPファイルからXBRLファイルを抽出します。ZIPファイルの中に複数のファイルがある場合、最初に見つかった.xbrl
ファイルを読み込みます。XBRLファイルが見つからない場合には、None
を返します。
2.タグに対応する値と属性を取得
from lxml import etree
# XBRLファイル内のタグに対応する数値と属性を取得する関数
def get_values_and_attributes_from_xbrl(root):
tag_to_value_and_attrs = {}
for element in root.iter():
# 名前空間プレフィックスと要素名を取得
ns_prefix = element.prefix
ns_tag = etree.QName(element).localname
full_tag = f"{ns_prefix}:{ns_tag}" if ns_prefix else ns_tag
# 要素の値を取得(数値または文字列を含む)
value = element.text.strip() if element.text else None
# 要素の属性を取得し、辞書に変換(複数の属性を含む)
attributes = {attr: val for attr, val in element.attrib.items()} if element.attrib else None
# 辞書に要素の値と複数の属性を保存
tag_to_value_and_attrs[full_tag] = {
"value": value,
"attributes": attributes
}
return tag_to_value_and_attrs
get_values_and_attributes_from_xbrl
関数は、XBRLファイルの各要素を解析し、タグに対応する値(数値・文字列)と、その属性(IDや日時など)を辞書形式で取得します。
ここでのポイントは、タグの名前空間(ns_prefix
)を取得して完全なタグ名を生成し、そのタグに対応する値や属性を一緒に保存している点です。数値と文字列の両方が値として処理されるため、柔軟にデータを扱うことができます。
3.JSONファイルへの保存
import json
# 辞書をJSON形式に変換して保存
with open('xbrl_data.json', 'w', encoding='utf-8') as json_file:
json.dump(tag_to_value_and_attrs, json_file, ensure_ascii=False, indent=4)
取得したデータをxbrl_data.json
という名前で保存します。json.dump
を使い、辞書を整形しながら保存することで、見やすいフォーマットのJSONファイルが作成されます。ensure_ascii=False
により、非ASCII文字(日本語など)も問題なく保存できます。
総まとめ: XBRLからJSONへの変換フロー
ここまで紹介した手順により、EDINETから取得したXBRLデータをPythonで解析し、扱いやすいJSON形式に変換できるようになります。これにより、以下のような利点があります。
- データの視覚化: JSON形式は多くの可視化ツールで利用可能なため、財務データのグラフ化や分析が容易になります。
- データの再利用: JSONデータは他のプログラムやシステムで扱いやすく、例えばWebアプリケーションでの表示や他のデータベースとの連携が可能です。
- 柔軟なデータ分析: 取得したXBRLデータを元に、投資分析や財務状況の把握に役立つカスタム分析を簡単に行えるようになります。
今後の展望
今回の記事では、XBRLデータをJSON形式に変換するまでの基本的な流れを紹介しました。このプロセスを応用すれば、さらに高度なデータ分析や自動化のプロジェクトにも発展させることができます。例えば、企業の財務データを定期的に収集し、過去のパフォーマンスを分析するツールの構築や、データベースに保存して他のシステムと連携するWebアプリケーションの開発も可能です。
XBRLファイルは非常に情報量が多く、直接扱うのは大変ですが、この記事で紹介した手法を用いれば、必要なデータを簡単に抽出し、分析に役立てることができるでしょう。