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

 

CSV / Excel に保存しました。