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