0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

J-Quantsの財務データから主要指標(ROE・自己資本比率・利益率・配当性向)をPythonで計算する

0
Posted at

J-Quantsの財務データから主要指標をPythonで計算する

スクリーニングや銘柄分析をするとき、PERやROEが「データに入っていない」ことはよくあります。
J-Quantsから取れるのは生の財務数値が中心なので、指標は自分で計算する必要があります。

この記事では、財務データから ROE・自己資本比率・営業利益率・配当性向 をPythonで計算する流れをまとめます。
※認証・データ取得の基本は割愛します(V2 APIを x-api-key ヘッダーで叩く前提)。エンドポイント名・キー名は公式ドキュメントで確認してください。

1. 財務データを取得して数値化

財務サマリーを取得し、必要な列を数値型に変換します。

import requests
import pandas as pd

API_KEY = "あなたのAPIキー"
BASE = "https://api.jquants.com/v2"
headers = {"x-api-key": API_KEY}

resp = requests.get(f"{BASE}/fins/statements",
                    params={"code": "86970"}, headers=headers)
resp.raise_for_status()
fins = pd.DataFrame(resp.json().get("statements", []))

# 文字列で返る数値を数値型に(空文字はNaNに)
num_cols = ["NetSales", "OperatingProfit", "Profit",
            "Equity", "TotalAssets",
            "ResultDividendPerShareAnnual", "EarningsPerShare"]
for c in num_cols:
    if c in fins:
        fins[c] = pd.to_numeric(fins[c], errors="coerce")

latest = fins.sort_values("DisclosedDate").iloc[-1]  # 最新の開示

列名はAPIのバージョンで異なります。実レスポンスを print(fins.columns) で確認して合わせてください。

2. 主要指標を計算

def safe_div(a, b):
    return a / b if (b not in (0, None) and pd.notna(b)) else None

roe          = safe_div(latest["Profit"], latest["Equity"])              # 自己資本利益率
equity_ratio = safe_div(latest["Equity"], latest["TotalAssets"])        # 自己資本比率
op_margin    = safe_div(latest["OperatingProfit"], latest["NetSales"])  # 営業利益率
payout       = safe_div(latest["ResultDividendPerShareAnnual"],
                        latest["EarningsPerShare"])                     # 配当性向

print(f"ROE={roe:.1%}  自己資本比率={equity_ratio:.1%}  "
      f"営業利益率={op_margin:.1%}  配当性向={payout:.1%}")

これで「稼ぐ力(ROE・利益率)」「安全性(自己資本比率)」「還元(配当性向)」が一度に見えます。

3. つまずきやすいポイント

  • 単位:配当性向を「1株配当 ÷ EPS」で出す場合と「配当総額 ÷ 純利益」で出す場合がある。混在に注意。
  • 連結/単体:連結(Consolidated)か単体かでEquity等が変わる。どちらを使うか統一する。
  • 予想 vs 実績:ForecastとResultの列を取り違えると指標がブレる。
  • 0除算/欠損:赤字や無配の期はNaN・ゼロが出る。上の safe_div のようにガードする。

4. 複数銘柄に広げる

銘柄ごとに同じ処理を関数化して、DataFrameにまとめれば、スクリーニングの土台になります。

def metrics_for(code):
    r = requests.get(f"{BASE}/fins/statements",
                     params={"code": code}, headers=headers)
    df = pd.DataFrame(r.json().get("statements", []))
    if df.empty:
        return None
    for c in num_cols:
        if c in df:
            df[c] = pd.to_numeric(df[c], errors="coerce")
    x = df.sort_values("DisclosedDate").iloc[-1]
    return {
        "code": code,
        "ROE": safe_div(x["Profit"], x["Equity"]),
        "equity_ratio": safe_div(x["Equity"], x["TotalAssets"]),
        "op_margin": safe_div(x["OperatingProfit"], x["NetSales"]),
        "payout": safe_div(x["ResultDividendPerShareAnnual"], x["EarningsPerShare"]),
    }

rows = [m for c in ["86970", "72030", "99840"] if (m := metrics_for(c))]
table = pd.DataFrame(rows)
print(table)

※全銘柄ループは件数が多いので、必要な銘柄に絞る・適度にwaitを入れると安全です。

まとめ

  • J-Quantsの財務データは「生の数値」中心。指標は自前で計算する
  • ROE・自己資本比率・利益率・配当性向は数行で出せる
  • 連結/単体・予想/実績・配当性向の定義など、前処理の統一がブレ防止の鍵

以上です。ここで作った指標テーブルは、そのまま割安スクリーニングやスコアリングの入力になります。
参考になれば幸いです。

※また、コードで自由にやるのも楽しいけど、毎回は面倒。GUIで完結させたい人は、よければ作ったツールも触ってみてください!

▶ Ha-Co-Va 株価分析ツール
https://hacova-store.com

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?