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 に保存しました。

EDINETから指定した銘柄をダウンロードする

chatGPTに書いてもらった。とりあえず有価証券報告書だけ。

 

import requests
import os
import zipfile
from datetime import date, timedelta

# =========================
# 設定
# =========================
API_KEY = "ここにAPI KEYを入力する"
SECURITY_CODE = "72030"   # ← 7203 + "0"
TARGET_YEAR = 2022
SAVE_DIR = "edinet_xbrl"

# =========================
# 年度 → 日付範囲
# =========================
start_date = date(TARGET_YEAR, 4, 1)
end_date = date(TARGET_YEAR + 1, 3, 31)

os.makedirs(SAVE_DIR, exist_ok=True)

# =========================
# 書類検索
# =========================
url_list = "https://api.edinet-fsa.go.jp/api/v2/documents.json"
target_docs =

current_date = start_date
while current_date <= end_date:
    params = {
        "date": current_date.isoformat(),
        "type": 2,
        "Subscription-Key": API_KEY
    }

    res = requests.get(url_list, params=params)
    res.raise_for_status()

    results = res.json().get("results", )

    for doc in results:
        if (
            doc.get("secCode") == SECURITY_CODE and
            doc.get("docTypeCode") == "120"
        ):
            target_docs.append(doc)

    current_date += timedelta(days=1)

if not target_docs:
    print("該当する有価証券報告書が見つかりませんでした。")
    exit()

print("見つかった件数:", len(target_docs))

# =========================
# XBRL ダウンロード
# =========================
for doc in target_docs:
    doc_id = doc["docID"]
    filer = doc["filerName"]

    print("ダウンロード中:", filer, doc_id)

    url_doc = f"https://api.edinet-fsa.go.jp/api/v2/documents/{doc_id}"
    params = {
        "type": 1,
        "Subscription-Key": API_KEY
    }

    r = requests.get(url_doc, params=params)
    r.raise_for_status()

    zip_path = os.path.join(SAVE_DIR, f"{doc_id}.zip")
    with open(zip_path, "wb") as f:
        f.write(r.content)

    with zipfile.ZipFile(zip_path, "r") as zip_ref:
        zip_ref.extractall(os.path.join(SAVE_DIR, doc_id))

    print("完了:", doc_id)

print("すべて完了しました。")

yfinanceで、日本株の指標per,pbrを取得するコード

yfinanceで、日本株の指標per,pbrを取得するコード

 

 

import yfinance as yf

 

# 銘柄コード

ticker_code = '7203.T'

ticker = yf.Ticker(ticker_code)

 

# 企業情報を取得

info = ticker.get_info()

 

# PER (forwardPE・trailingPE)

per = info.get("forwardPE") or info.get("trailingPE")

# PBR (priceToBook)

pbr = info.get("priceToBook")

 

print("PER:", per)

print("PBR:", pbr)

 

財務諸表は、アメリカ株だけ取得できる。日本株は取得できない。

結局edinetしかないのか

yfinanceから株の指標を取得するコード

import yfinance as yf

 

# 銘柄コード

ticker_code = '7203.T'

ticker = yf.Ticker(ticker_code)

 

# 企業情報を取得

info = ticker.get_info()

 

# PER (forwardPE・trailingPE)

per = info.get("forwardPE") or info.get("trailingPE")

# PBR (priceToBook)

pbr = info.get("priceToBook")

 

print("PER:", per)

print("PBR:", pbr)

久しぶりにコーディング

思い出したようにコーディングをすると、プログラミング環境が古くなっていて動かないことが多く、環境を更新するだけで多大な労力がかかる。

 

今回はPythonのバージョンが古くてyfinanceが動かなかったのでPythonを新しくしたかったんだけど、anacondaで動いているので、anacondaを新しくして。。。

そしたら仮想環境を作ってからPythonのバージョンをあげないと危ない、という記事を読んだので仮想環境を作ったりして。

新しいPythonは仮想空間上で動くので、使うたびに仮想空間をアクティベートしなくちゃいけないとか、面倒。

昔は簡単だったのにな。

ということで、次からは

conda activate py311

とターミナルで入力してからじゃないと、python3.11はつかえないとのこと

・・・これ、anaconda入れ直した方が早いんじゃ・・・

 

 

日経平均の信用倍率

メモ。puzzlefishさんのx記事の備忘録

 

日経平均の信用倍率はここで見ることができる

https://nikkei225jp.com/data/sinyou.php#google_vignette

信用倍率は買い残/売り残

4倍程度だと需給が引き締まっている状態。

信用買いが進んで信用倍率が上がってくると危険な状態なんだって。

 

勉強になりまする