決算書データを使うファンダメンタルズ分析の入り口が /fins/summary です。本記事では、財務情報の取得とよく使うカラムの読み方を整理します。
目次
- エンドポイント概要
- レスポンスの主なフィールド
- 取得する
- 数値型に変換する
- 通期決算だけを抽出する
- 業績予想の修正履歴
- 指標を計算する
- 株価データとの結合
エンドポイント概要
| 項目 | 内容 |
|---|---|
| パス | /fins/summary |
| メソッド | GET |
| ベース URL | https://api.jquants.com/v2 |
| 認証 | x-api-key: <API キー> |
| 主なクエリ | code(銘柄コード)、date(発表日) |
クエリの組み合わせは次のとおりです。
| 組み合わせ | 取得内容 |
|---|---|
code のみ | 指定銘柄の発表済み決算データ(複数期分) |
date のみ | 指定日に発表された全銘柄の決算データ |
code + date | 指定銘柄の指定日のデータ |
date は 発表日(開示日) であり、決算期末日ではない点に注意します。
レスポンスの主なフィールド
決算データのフィールドは多く、種類別の違いも大きいです。代表的なものを整理します。
| フィールド | 内容 |
|---|---|
Code | 銘柄コード |
DiscDate | 開示日 |
DiscTime | 開示時刻 |
CurPerType | 当期種別(1Q / 2Q / 3Q / FY) |
CurPerSt / CurPerEn | 当期の期間 |
CurFYSt / CurFYEn | 通期の期間 |
Sales | 売上高 |
OP | 営業利益 |
OdP | 経常利益 |
NP | 当期純利益 |
EPS | 1 株あたり純利益(EPS) |
TA / Eq | 総資産 / 純資産 |
FSales / FOP | 通期予想 |
DocType で「決算短信」「業績予想修正」「配当予想修正」などの種類が判別できます。
取得する
単一銘柄の決算履歴を取得する例です。
import osimport requestsimport pandas as pd
BASE_URL = "https://api.jquants.com/v2"
def fetch_statements(headers: dict, code: str | None = None, date: str | None = None) -> pd.DataFrame: """財務情報を取得する。code または date のいずれかを指定する。""" url = f"{BASE_URL}/fins/summary" params: dict[str, str] = {} if code: params["code"] = code if date: params["date"] = date
rows = [] pagination_key: str | None = None while True: if pagination_key: params["pagination_key"] = pagination_key response = requests.get(url, headers=headers, params=params, timeout=30) response.raise_for_status() payload = response.json() rows.extend(payload.get("data", [])) pagination_key = payload.get("pagination_key") if not pagination_key: break
return pd.DataFrame(rows)
# API キーは環境変数から読む(ハードコード禁止)headers = {"x-api-key": os.environ["JQUANTS_API_KEY"]}fins = fetch_statements(headers, code="7203")print(f"件数: {len(fins)}")print(fins.columns.tolist()[:10]) # 列名は数十あるため一部だけ表示戻り値の DataFrame は列が多いので、必要な列だけ抜き出して扱うのが現実的です。
数値型に変換する
レスポンスは多くの列が 文字列 として返ります。数値として扱うには明示的な変換が必要です。空文字や "-" が混入することもあるので、errors="coerce" で NaN に倒すのが安全です。
numeric_cols = [ "Sales", "OP", "OdP", "NP", "EPS", "TA", "Eq",]for col in numeric_cols: if col in fins.columns: fins[col] = pd.to_numeric(fins[col], errors="coerce")
# 開示日は datetime にfins["DiscDate"] = pd.to_datetime(fins["DiscDate"])通期決算だけを抽出する
四半期データと通期データが混在しているため、用途に応じて絞り込みます。通期(FY)だけにしぼる例です。
fy = fins[fins["CurPerType"] == "FY"].copy()fy = fy.sort_values("DiscDate")print(fy[["DiscDate", "CurPerType", "Sales", "NP", "EPS"]])四半期ごとに比較したい場合は、CurPerType ごとに同じ四半期を縦に並べて差分を取る、といった処理が定番です。
業績予想の修正履歴
DocType で文書種別を判別すると、業績予想の修正の履歴を抽出できます。
guidance_revisions = fins[fins["DocType"].astype(str).str.contains("ForecastRevision", na=False)]print(guidance_revisions[["DiscDate", "DocType", "FSales", "FOP"]])文字列の表記は API の仕様変更で変わる可能性があります。実際の値は fins["DocType"].unique() で確認します。
指標を計算する
取得したデータから、よく使う指標を計算する例です。
# 指定したスナップショット行で ROE を計算def compute_roe(row: pd.Series) -> float: profit = row.get("NP") equity = row.get("Eq") if pd.isna(profit) or pd.isna(equity) or equity == 0: return float("nan") return profit / equity
fy["ROE"] = fy.apply(compute_roe, axis=1)print(fy[["DiscDate", "NP", "Eq", "ROE"]])PER のように 株価が必要な指標 は、/equities/bars/daily(#6-5「日次株価四本値を取得する (/equities/bars/daily)」)のデータと結合します。決算開示の 直前営業日の株価 を用いるか、翌営業日の始値 を用いるかは目的に合わせます。
注意点
- 数値は文字列で返るため、明示的に
pd.to_numericで変換する - 通期(
FY)と四半期(1Q〜3Q)の混在に注意。集計前にフィルタする - 業績予想の修正がある場合、後の開示が直近の予想を表す
- 連結 / 単体・IFRS / 日本基準で列の意味が変わる場合があります
- 過去にさかのぼった指標を計算するときは、開示日基準の時点合わせ(point-in-time)を意識します(将来情報の混入を避ける)
株価データとの結合
PER を計算する流れの一例です。日付の取り扱いには注意します。
# 仮: prices は前掲の wide_df(行=Date、列=Code、値=AdjC)# 各 FY 開示について、開示日の前営業日の終値を取って PER を出すper_rows = []for _, r in fy.iterrows(): disc = r["DiscDate"] eps = r.get("EPS") if pd.isna(eps) or eps == 0: continue # 前営業日の値(無ければ直前の値) prior_close = prices.loc[:disc - pd.Timedelta(days=1), "7203"].dropna() if prior_close.empty: continue last_close = prior_close.iloc[-1] per_rows.append({"DiscDate": disc, "C": last_close, "EPS": eps, "PER": last_close / eps})
per_df = pd.DataFrame(per_rows)print(per_df)EPS は通期実績ベースか、会社予想ベースかで意味が変わります。混同しないように、計算時に どの EPS を使ったか を明示しておくと、後で見返したときに混乱しにくくなります。
生成AI へのプロンプト例
通期決算を整形して時系列にする関数の例です。
J-Quants API の /fins/summary から取得した DataFrame を受け取り、次の処理を行う関数 build_fy_history(statements) を書いてください。
要件:- CurPerType が "FY" の行だけ抽出- DiscDate を datetime に変換し昇順ソート- Sales / OP / NP / EPS / Eq / TA を数値型に変換- 戻り値は DiscDate / FiscalYearEnd / Sales / OP / NP / EPS / Eq / ROE 列のみ- pandas 2.2 系の API を使う- docstring を日本語で書くまとめ
/fins/summaryは決算データの取得エンドポイント- レスポンスは列が多く、数値は文字列で返るため変換が必要
- 通期と四半期の混在、業績予想の修正履歴に注意
- 株価指標(PER 等)を計算するときは、
/equities/bars/dailyと日付ベースで結合する - 過去にさかのぼった分析では、開示日基準のタイムスタンプを必ず意識する