EDINETからダウンロードしたファイルを分析する
前回EDINETからzipファイルをダウンロードできたので、分析したいんだけど、まずはxbrlファイルからデータを取得するためのテストファイルを作成する(作成してもらう)
取得前に、zipファイルを展開しておく。
from arelle import Cntlr
import os
import pandas as pd
# =========================
# 基本情報
# =========================
COMPANY_NAME = "トヨタ自動車"
XBRL_DIR = "/Users/yo******/******/xbrl/publicdoc"
# =========================
# XBRLファイル取得
# =========================
xbrl_files = [f for f in os.listdir(XBRL_DIR) if f.endswith(".xbrl")]
if not xbrl_files:
raise RuntimeError("XBRLファイルが見つかりません")
xbrl_path = os.path.join(XBRL_DIR, xbrl_files[0])
# =========================
# Arelle 起動
# =========================
cntlr = Cntlr.Cntlr(logFileName=None)
modelXbrl = cntlr.modelManager.load(xbrl_path)
# =========================
# 取得対象
# =========================
TARGET_ITEMS = {
"売上高": "NetSales",
"営業利益": "OperatingIncome"
}
facts_by_item = {k: for k in TARGET_ITEMS.keys()}
# =========================
# fact 走査
# =========================
for fact in modelXbrl.facts:
ctx = fact.context
if ctx is None:
continue
# 連結のみ(暫定)
if "Consolidated" not in ctx.id:
continue
# PL項目(期間)
if not (ctx.startDatetime and ctx.endDatetime):
continue
for label, local_name in TARGET_ITEMS.items():
if fact.qname.localName != local_name:
continue
try:
value = int(float(fact.value))
except Exception:
continue
facts_by_item[label].append(
(ctx.endDatetime, value)
)
# =========================
# 前期・当期を確定
# =========================
records =
for label, items in facts_by_item.items():
if not items:
continue
items.sort(key=lambda x: x[0], reverse=True)
# 当期
records.append({
"会社名": COMPANY_NAME,
"区分": "当期",
"勘定科目": label,
"金額": items[0][1]
})
# 前期
if len(items) > 1:
records.append({
"会社名": COMPANY_NAME,
"区分": "前期",
"勘定科目": label,
"金額": items[1][1]
})
# =========================
# DataFrame 化
# =========================
df = pd.DataFrame(records)
# 見やすい並びに
df = df.sort_values(["区分", "勘定科目"])
print(df)
# =========================
# 保存
# =========================
df.to_csv("financial_summary.csv", index=False, encoding="utf-8-sig")
df.to_excel("financial_summary.xlsx", index=False)
print("\nCSV / Excel に保存しました。")
会社名 区分 勘定科目 金額
3 トヨタ自動車 前期 営業利益 699373000000
1 トヨタ自動車 前期 売上高 11761405000000
2 トヨタ自動車 当期 営業利益 1129689000000
0 トヨタ自動車 当期 売上高 12607858000000