EDINETからダウンロードしたXBRLファイルをそのまま読むのは非常に困難です。特に、要素名が全て英語で書かれているため、どの項目が何を表しているのか直感的に理解しにくいという問題があります。そこで、Pythonを使用してタクソノミの要素を日本語に変換し、可読性を向上させる方法をご紹介します。
この記事では、Pythonを用いてExcelファイルからタクソノミの要素名と日本語訳を抽出し、辞書形式に変換するコードの実装を解説します。最終的にその結果をJSONファイルとして保存することで、他のプログラムでも活用可能な形式にします。
今回のコード
import os
import pandas as pd
import json
from pprint import pprint
# フォルダ内のExcelファイルを取得する関数
def get_excel_files_from_folder(folder_path):
return [os.path.join(folder_path, file) for file in os.listdir(folder_path) if file.endswith('.xlsx')]
# フォルダのパス
folder_path = 'dict_elements' # Excelファイルが入ったフォルダのパス
# Excelファイルのパスを取得
excel_file_paths = get_excel_files_from_folder(folder_path)
# 辞書を初期化
translation_dict = {}
# 各ファイルに対して処理を行う
for file_path in excel_file_paths:
# 全シートを読み込むが、header=1で2行目を列名として扱う
sheets_dict = pd.read_excel(file_path, sheet_name=None, header=1)
for sheet_name, df in sheets_dict.items():
# '名前空間プレフィックス', '要素名', '標準ラベル(日本語)', '詳細ツリー-標準ラベル(日本語)' の列が存在するか確認して辞書に追加
if '名前空間プレフィックス' in df.columns and '要素名' in df.columns:
for _, row in df.iterrows():
ns_prefix_tag = f"{row['名前空間プレフィックス']}:{row['要素名']}"
# '標準ラベル(日本語)' がある場合それを、なければ '詳細ツリー-標準ラベル(日本語)' を使用
if '標準ラベル(日本語)' in df.columns and pd.notna(row['標準ラベル(日本語)']):
label = row['標準ラベル(日本語)']
elif '詳細ツリー-標準ラベル(日本語)' in df.columns and pd.notna(row['詳細ツリー-標準ラベル(日本語)']):
label = row['詳細ツリー-標準ラベル(日本語)']
else:
label = None
# キーと値が異なる場合のみ辞書に追加
if label and ns_prefix_tag != label:
translation_dict[ns_prefix_tag] = label
# 結果の辞書をpprintで表示
pprint(translation_dict)
# 結果をJSONとして保存
with open('translation_dict.json', 'w', encoding='utf-8') as json_file:
json.dump(translation_dict, json_file, ensure_ascii=False, indent=4)
print("JSONファイルに保存されました。")
以下にこのコードの解説をしていきます。
使用するライブラリ
まず、以下のPythonライブラリを使用しています。
- os: フォルダ内のファイルを操作するために使用します。
- pandas: Excelファイルを扱うためのデータ操作ライブラリです。
- json: データをJSON形式に保存するために使用します。
- pprint: 整形された辞書の表示をサポートします。
フォルダ内のExcelファイルを取得する関数
def get_excel_files_from_folder(folder_path):
return [os.path.join(folder_path, file) for file in os.listdir(folder_path) if file.endswith('.xlsx')]
この関数では、指定したフォルダ内に存在するすべてのExcelファイル(.xlsx
拡張子のもの)をリストで取得します。
メイン処理の流れ
1. フォルダパスの指定: Excelファイルが入っているフォルダのパスを指定します。
folder_path = 'dict_elements'
2. Excelファイルの取得: 上記の関数を使ってフォルダ内のExcelファイルのパスを取得します。
excel_file_paths = get_excel_files_from_folder(folder_path)
3. 辞書の初期化: 翻訳された要素を保存する辞書を用意します。
translation_dict = {}
4. Excelファイルの読み込み: 各Excelファイルに対して、全シートの内容を pandas
を使って読み込みます。
sheets_dict = pd.read_excel(file_path, sheet_name=None, header=1)
ここでは header=1
を指定することで、2行目を列名として扱います。
5. 日本語訳の抽出と辞書への格納:
各シートで、’名前空間プレフィックス’, ‘要素名’, ‘標準ラベル(日本語)’, ‘詳細ツリー-標準ラベル(日本語)’ の列が存在するかを確認し、名前空間プレフィックスと要素名をキーに、日本語訳を辞書に格納します。
for _, row in df.iterrows():
ns_prefix_tag = f"{row['名前空間プレフィックス']}:{row['要素名']}"
# '標準ラベル(日本語)' がある場合それを、なければ '詳細ツリー-標準ラベル(日本語)' を使用
if '標準ラベル(日本語)' in df.columns and pd.notna(row['標準ラベル(日本語)']):
label = row['標準ラベル(日本語)']
elif '詳細ツリー-標準ラベル(日本語)' in df.columns and pd.notna(row['詳細ツリー-標準ラベル(日本語)']):
label = row['詳細ツリー-標準ラベル(日本語)']
else:
label = None
# キーと値が異なる場合のみ辞書に追加
if label and ns_prefix_tag != label:
translation_dict[ns_prefix_tag] = label
ここでは、タクソノミ要素名と日本語訳が異なる場合のみ辞書に追加しています。
結果の表示と保存
最後に、pprint
を使用して整形された辞書をコンソールに表示し、結果をJSONファイルとして保存します。
pprint(translation_dict)
with open('translation_dict.json', 'w', encoding='utf-8') as json_file:
json.dump(translation_dict, json_file, ensure_ascii=False, indent=4)
print("JSONファイルに保存されました。")
JSONファイルに保存する際には、日本語の文字が正しく表示されるように ensure_ascii=False
を指定しています。
結果のJSONファイル
このコードを実行すると、translation_dict.json
というファイルが生成され、以下のような辞書形式でタクソノミ要素名とその日本語訳が保存されます。
{
"jpcrp_cor:OperatingIncome": "営業利益",
"jpcrp_cor:NetSales": "売上高",
...
}
まとめ
この記事では、EDINETからダウンロードしたタクソノミ要素をPythonを使って日本語に翻訳し、可読性を向上させる方法を解説しました。この手法により、XBRLファイルの理解がより簡単になり、投資分析などのデータ処理にも役立てることができます。JSON形式で保存することで、後続の処理やデータ分析にも応用可能です。