このサイトについて

このサイトで使用するデータについて

本サイトのコード例は、すべて仮想のサンプルデータで動作します。

本サイトでは日本株の分析にあたり、株価データの取得に J-Quants APIを紹介していますが、 J-Quants APIの規約により、本サイトでは記事中のコード例はすべて仮想のサンプルデータで動作するようにしています。 そのため、実際の株価データを使用した分析結果の掲載はしていません。

サンプルデータは Python の乱数生成機能で作成した架空の数値データです。 株価に見られるトレンド・周期的な変動・日々のばらつきを数式で再現しています。 乱数の seed を固定しているため、同じコードを実行すれば同じ結果が再現されます。

サンプルデータの生成方法

記事中で使用するサンプルデータは、以下の関数で生成しています。 乱数の seed を固定しているため、同じコードを実行すれば同じ結果が再現されます。

株価の時系列データ

株価の時系列はトレンド + 周期(sin 波) + ノイズの 3 要素で構成しています。

generate_stock_prices.py
import numpy as np
import pandas as pd
def generate_stock_prices(
n_tickers: int = 5,
n_days: int = 250,
seed: int = 42,
) -> pd.DataFrame:
"""仮想の株価時系列(日次四本値)を生成する。
列名は J-Quants API V2 の /equities/bars/daily に準拠する。
Parameters
----------
n_tickers : int
銘柄数。
n_days : int
営業日数(デフォルト 250 ≒ 約 1 年)。
seed : int
乱数シード(再現性のため固定)。
Returns
-------
pd.DataFrame
columns: Date, Code, O, H, L, C, Vo
"""
rng = np.random.default_rng(seed=seed)
dates = pd.date_range("2025-06-01", periods=n_days, freq="B")
records = []
for i in range(n_tickers):
code = f"{1301 + i}"
base = rng.uniform(800, 5000) # 初期株価
trend = rng.uniform(-0.02, 0.06) # 年率トレンド
amplitude = rng.uniform(0.03, 0.10) # sin 波の振幅(比率)
period = rng.uniform(40, 80) # 周期(営業日)
vol = rng.uniform(0.01, 0.025) # 日次ボラティリティ
t = np.arange(n_days)
cycle = amplitude * np.sin(2 * np.pi * t / period)
noise = rng.normal(0, vol, size=n_days)
log_returns = trend / 250 + cycle / 250 + noise
close = base * np.exp(np.cumsum(log_returns))
close = np.round(close, 1)
# Open / High / Low / Volume を Close から簡易生成
spread = rng.uniform(0.005, 0.015, size=n_days)
high = np.round(close * (1 + spread), 1)
low = np.round(close * (1 - spread), 1)
open_ = np.round(low + (high - low) * rng.random(n_days), 1)
volume = rng.integers(50_000, 2_000_000, size=n_days)
for j in range(n_days):
records.append({
"Date": dates[j],
"Code": code,
"O": open_[j],
"H": high[j],
"L": low[j],
"C": close[j],
"Vo": int(volume[j]),
})
return pd.DataFrame(records)

銘柄情報と財務データ

ケーススタディや財務分析の記事では、架空の企業リストと財務指標を生成します。

generate_market_data.py
def generate_market_data(
n_companies: int = 80,
seed: int = 42,
) -> dict[str, pd.DataFrame]:
"""仮想の上場企業データ一式を生成する。
列名は J-Quants API V2 に準拠する(listed: /equities/master、
statements: /fins/summary、prices: /equities/bars/daily)。
V2 では財務情報の銘柄コード列も Code に統一されている。
Returns
-------
dict with keys:
"listed" — Code, CoName, S33Nm
"statements" — Code, DiscDate, Sales, EPS, FDivAnn
"prices" — Code, Date, C
"""
rng = np.random.default_rng(seed=seed)
sectors = [
"情報・通信業", "電気機器", "医薬品", "銀行業", "輸送用機器",
"化学", "機械", "食料品", "小売業", "建設業",
"鉄鋼", "海運業", "証券、商品先物取引業", "不動産業", "サービス業",
]
codes = [f"{1301 + i}" for i in range(n_companies)]
sector_assign = rng.choice(sectors, size=n_companies)
names = [f"サンプル商事{i + 1:03d}" for i in range(n_companies)]
listed = pd.DataFrame({
"Code": codes,
"CoName": names,
"S33Nm": sector_assign,
})
# --- 財務情報 ---
eps = np.round(rng.lognormal(mean=4.5, sigma=0.8, size=n_companies), 1)
net_sales = np.round(rng.lognormal(mean=10, sigma=1.2, size=n_companies), 0)
base_dps = np.round(rng.exponential(scale=40, size=n_companies), 1)
base_dps[rng.random(n_companies) < 0.15] = 0.0 # 約 15% は無配
statements = pd.DataFrame({
"Code": codes,
"DiscDate": pd.Timestamp("2026-05-15"),
"Sales": net_sales,
"EPS": eps,
"FDivAnn": base_dps,
})
# --- 株価(直近終値) ---
close = np.round(rng.lognormal(mean=7.0, sigma=0.8, size=n_companies), 1)
prices = pd.DataFrame({
"Code": codes,
"Date": pd.Timestamp("2026-05-27"),
"C": close,
})
return {"listed": listed, "statements": statements, "prices": prices}

列名は J-Quants API V2 に準拠

サンプルデータの列名(カラム名)は J-Quants API V2 の項目名に準拠しています。

V2 の項目名は O(始値)や C(終値)のような省略名です。 列名を V2 に合わせておくことで、サンプルのコードを、 データ取得部分だけ差し替えればそのまま実データに適用できます。 各記事のコードは、以下の列名を前提に書かれています。

取得元(エンドポイント) 列名 説明
listed(/equities/master)Code銘柄コード
listed(/equities/master)CoName会社名
listed(/equities/master)S33Nm33 業種区分名
statements(/fins/summary)Code銘柄コード
statements(/fins/summary)DiscDate開示日
statements(/fins/summary)Sales売上高
statements(/fins/summary)EPS1 株あたり純利益
statements(/fins/summary)FDivAnn通期予想 1 株あたり配当
prices(/equities/bars/daily)Date取引日
prices(/equities/bars/daily)O / H / L / C始値・高値・安値・終値
prices(/equities/bars/daily)Vo出来高

一部のライブラリ(例: mplfinance)は Open/High/Low/Close/Volume という列名を要求します。その場合は rename で V2 の省略名から変換してから渡します。

実データ側の列名や仕様の詳細は、 上場銘柄一覧株価四本値財務情報の各記事で解説しています。

実データへの切り替え

サンプルデータで手法を理解したあとは、実際の株価データで試してみることをおすすめします。 データの入手方法は株価データの入手方法で解説しています。

切り替えに必要な変更は、各記事のコード冒頭にあるデータ生成部分だけです。 たとえば以下のように書き換えます。

# 変更前: サンプルデータ
data = generate_market_data()
listed = data["listed"]
# 変更後: J-Quants API(V2)から取得
# 列名(Code, CoName など)はサンプルデータと一致するため、
# 取得部分だけ差し替えればコードはそのまま動く
import jquantsapi
client = jquantsapi.Client()
listed = client.get_listed_info()

免責

本サイトの内容は学習目的であり、特定の銘柄や手法の 売買を推奨するものではありません

  • 投資判断はご自身の責任において行ってください。
  • 過去のデータ・バックテスト結果は将来の成果を保証しません。
  • 記事中のコード例は、そのまま実取引に使うことを想定していません。