J-Quants API の使い方
kabukit は、httpx を使った非同期設計になっており、Jupyter や marimo のような非同期処理を直接扱えるノートブック環境で快適に利用できます。
このガイドでは、kabukit が提供する高レベルなモジュール関数と、より詳細な制御が可能な JQuantsClient
の使い方を解説します。
認証設定
API を利用するには、事前にコマンドラインで J-Quants API の ID トークンを取得しておく必要があります。詳細は、CLIの使い方の「認証設定」セクションを参照してください。
モジュールレベル関数
kabukit は、手軽に J-Quants API からデータを取得できるモジュールレベル関数を提供します。これらの関数は内部で非同期処理を並列実行するため、効率的に情報を取得できます。
上場銘柄一覧 (get_info
)
kabukit.get_info
関数は、上場銘柄の情報を取得します。
銘柄コード (4 桁または 5 桁の文字列) を指定すると、指定した銘柄の情報を取得できます。
from kabukit import get_info
df = await get_info("7203") # または "72030"
df.select("Date", "Code", "CompanyName", "MarketCodeName")
Date | Code | CompanyName | MarketCodeName |
---|---|---|---|
date | str | str | cat |
2025-10-20 | "72030" | "トヨタ自動車" | "プライム" |
銘柄コードを省略すると、全上場銘柄の情報を取得できます。
df = await get_info() # 全上場銘柄一覧を取得
df = df.filter(MarketCodeName="プライム") # 市場区分がプライムの銘柄を選択
df.select("Date", "Code", "CompanyName", "MarketCodeName")
Date | Code | CompanyName | MarketCodeName |
---|---|---|---|
date | str | str | cat |
2025-10-20 | "13010" | "極洋" | "プライム" |
2025-10-20 | "13320" | "ニッスイ" | "プライム" |
2025-10-20 | "13330" | "マルハニチロ" | "プライム" |
… | … | … | … |
2025-10-20 | "99910" | "ジェコス" | "プライム" |
2025-10-20 | "99970" | "ベルーナ" | "プライム" |
財務情報 (get_statements
)
kabukit.get_statements
関数は、企業の四半期毎の決算短信サマリーや業績・配当情報の修正に関する開示情報(主に数値データ)を取得します。
銘柄コードを指定すると、指定した銘柄の全期間分の財務情報を取得できます。
from kabukit import get_statements
df = await get_statements("7203")
df.select("DisclosedDate", "Code", "TypeOfDocument")
DisclosedDate | Code | TypeOfDocument |
---|---|---|
date | str | str |
2015-11-05 | "72030" | "2QFinancialStatements_Consolid… |
2016-02-05 | "72030" | "3QFinancialStatements_Consolid… |
2016-05-11 | "72030" | "FYFinancialStatements_Consolid… |
… | … | … |
2025-05-08 | "72030" | "FYFinancialStatements_Consolid… |
2025-08-07 | "72030" | "1QFinancialStatements_Consolid… |
銘柄コードのリストを指定すると、複数銘柄の全期間分の財務情報を一度に取得できます。このとき、J-Quants API へのリクエストは非同期で並列に行われます。
from polars import col as c
import polars as pl
# 複数銘柄の財務情報を取得
df = await get_statements(["7203", "9984", "8306", "6758"])
# 銘柄コードごとに集計
df.group_by(c.Code).agg(
pl.len().alias("財務情報の数"),
c.DisclosedDate.first().alias("初回開示日"),
c.DisclosedDate.last().alias("最終開示日"),
)
Code | 財務情報の数 | 初回開示日 | 最終開示日 |
---|---|---|---|
str | u32 | date | date |
"67580" | 46 | 2015-10-29 | 2025-08-07 |
"72030" | 41 | 2015-11-05 | 2025-08-07 |
"83060" | 45 | 2015-11-13 | 2025-08-07 |
"99840" | 43 | 2015-11-04 | 2025-08-07 |
銘柄コードを指定しない場合、全銘柄の財務情報を全期間に渡って取得します。データ量が大きくなるため、コマンドラインインターフェースの利用を推奨します。ノートブックで試す場合は、max_items
で取得する銘柄数を制限できます。また、progress
に marimo のプログレスバーを指定することで、進捗を可視化することができます。
import marimo as mo
# 最初の3銘柄だけ取得。その際、プログレスバーを表示
df = await get_statements(max_items=3, progress=mo.status.progress_bar)
df.group_by(c.Code).agg(pl.len())
Code | len |
---|---|
str | u32 |
"13010" | 51 |
"130A0" | 9 |
"13320" | 45 |
株価情報 (get_prices
)
kabukit.get_prices
関数は、株価情報を取得します。
株価情報は、分割・併合を考慮した調整済み株価(小数点第2位四捨五入)と調整前の株価の両方を含みます。
銘柄コードを指定すると、指定した銘柄の全期間分の株価情報を取得できます。
from kabukit import get_prices
df = await get_prices("7203")
df.select("Date", "Code", "Open", "High", "Low", "Close", "Volume")
Date | Code | Open | High | Low | Close | Volume |
---|---|---|---|---|---|---|
date | str | f64 | f64 | f64 | f64 | f64 |
2015-10-20 | "72030" | 1480.0 | 1480.2 | 1460.6 | 1464.0 | 2.76615e7 |
2015-10-21 | "72030" | 1470.4 | 1493.6 | 1468.0 | 1493.4 | 4.2705e7 |
2015-10-22 | "72030" | 1481.2 | 1496.6 | 1478.8 | 1485.6 | 3.235e7 |
… | … | … | … | … | … | … |
2025-10-17 | "72030" | 2920.0 | 2960.5 | 2920.0 | 2933.5 | 1.43169e7 |
2025-10-20 | "72030" | 2988.5 | 3003.0 | 2971.0 | 3003.0 | 2.05746e7 |
銘柄コードのリストを指定すると、複数銘柄の全期間分の株価情報を一度に取得できます。
df = await get_prices(["7203", "9984", "8306", "6758"])
# 銘柄コードごとに集計
df.group_by(c.Code).agg(
pl.len().alias("日数"),
c.Low.min().alias("最安値"),
c.High.max().alias("最高値"),
c.Close.last().alias("直近終値"),
c.TurnoverValue.mean().alias("1日あたり平均取引代金"),
)
Code | 日数 | 最安値 | 最高値 | 直近終値 | 1日あたり平均取引代金 |
---|---|---|---|---|---|
str | u32 | f64 | f64 | f64 | f64 |
"67580" | 2444 | 439.8 | 4648.0 | 4420.0 | 4.1575e10 |
"72030" | 2444 | 983.4 | 3891.0 | 3003.0 | 5.7052e10 |
"83060" | 2444 | 380.0 | 2405.0 | 2325.0 | 5.5405e10 |
"99840" | 2444 | 2066.5 | 24985.0 | 24985.0 | 8.3427e10 |
銘柄コードを指定しない場合、全銘柄の株価情報を全期間に渡って取得します。データ量が非常に大きくなるため、コマンドラインインターフェースの利用を推奨します。ノートブックで試す場合は、max_items
で取得する銘柄数を制限できます。また、progress
に marimo のプログレスバーを指定することで、進捗を可視化することができます。
# 最初の3銘柄だけ取得。その際、プログレスバーを表示
df = await get_prices(max_items=3, progress=mo.status.progress_bar)
df.group_by(c.Code).agg(pl.len())
Code | len |
---|---|
str | u32 |
"13010" | 2444 |
"130A0" | 415 |
"13320" | 2444 |
JQuantsClient
JQuantsClient
の各メソッドは、J-Quants APIの仕様
に対応した実装となっています。また、より詳細な制御(例: タイムアウト設定、リトライポリシーの変更など)
が必要な場合に直接利用します。特に、JQuantsClient.client
属性は httpx.AsyncClient
のインスタンスであるため、httpx が提供する豊富なメソッドや設定に直接アクセスすることが可能です。
ノートブックで kabukit.JQuantsClient
をインポートしてインスタンスを作成します。
from kabukit import JQuantsClient
client = JQuantsClient()
# ここで API を呼び出す
await client.aclose() # 最後に手動でセッションを閉じる
async with
構文を使うことで、セッションを安全に管理できます。
async with JQuantsClient() as client:
# このブロック内で API を呼び出す
pass
# 自動でセッションが閉じられる
上場銘柄一覧 (get_info
)
JQuantsClient.get_info
メソッドは、上場銘柄の情報を取得します。J-Quants API の上場銘柄一覧 (/listed/info)
に対応します。
引数に銘柄コードを指定して、指定した銘柄の情報を取得します。実行した日付あるいは翌営業日の情報となります。
from kabukit import JQuantsClient
client = JQuantsClient()
df = await client.get_info("7203") # トヨタ自動車
df.select("Date", "Code", "CompanyName", "Sector17CodeName")
Date | Code | CompanyName | Sector17CodeName |
---|---|---|---|
date | str | str | cat |
2025-10-20 | "72030" | "トヨタ自動車" | "自動車・輸送機" |
date
引数に日付を指定して、指定した日付の全銘柄情報を取得します。
df = await client.get_info(date="2020-10-01")
df = df.filter(c.Sector17CodeName != "その他") # 投資信託などを除く
df.select("Date", "Code", "CompanyName", "Sector17CodeName")
Date | Code | CompanyName | Sector17CodeName |
---|---|---|---|
date | str | str | cat |
2020-10-01 | "13010" | "極洋" | "食品" |
2020-10-01 | "13320" | "日本水産" | "食品" |
2020-10-01 | "13330" | "マルハニチロ" | "食品" |
… | … | … | … |
2020-10-01 | "99960" | "サトー商会" | "商社・卸売" |
2020-10-01 | "99970" | "ベルーナ" | "小売" |
引数を指定しない場合、実行した日付の全銘柄情報を取得します。
df = await client.get_info()
df = df.filter(c.Sector17CodeName != "その他") # 投資信託などを除く
df.select("Date", "Code", "CompanyName", "Sector33CodeName")
Date | Code | CompanyName | Sector33CodeName |
---|---|---|---|
date | str | str | cat |
2025-10-20 | "13010" | "極洋" | "水産・農林業" |
2025-10-20 | "130A0" | "Veritas In Silico" | "医薬品" |
2025-10-20 | "131A0" | "CCNグループ" | "情報・通信業" |
… | … | … | … |
2025-10-20 | "99960" | "サトー商会" | "卸売業" |
2025-10-20 | "99970" | "ベルーナ" | "小売業" |
財務情報 (get_statements
)
JQuantsClient.get_statements
メソッドは、企業の四半期毎の決算短信サマリーや業績・配当情報の修正に関する開示情報(主に数値データ)を取得します。J-Quants API の財務情報 (/fins/statements)
に対応します。
引数に銘柄コードを指定して、指定した銘柄の全期間分の財務情報を取得します。
df = await client.get_statements("7203") # トヨタ自動車
df.select("DisclosedDate", "Code", "TypeOfDocument", "NetSales", "Profit")
DisclosedDate | Code | TypeOfDocument | NetSales | Profit |
---|---|---|---|---|
date | str | str | f64 | f64 |
2015-11-05 | "72030" | "2QFinancialStatements_Consolid… | 1.4091e13 | 1.2581e12 |
2016-02-05 | "72030" | "3QFinancialStatements_Consolid… | 2.1431e13 | 1.8861e12 |
2016-05-11 | "72030" | "FYFinancialStatements_Consolid… | 2.8403e13 | 2.3127e12 |
… | … | … | … | … |
2025-05-08 | "72030" | "FYFinancialStatements_Consolid… | 4.8037e13 | 4.7651e12 |
2025-08-07 | "72030" | "1QFinancialStatements_Consolid… | 1.2253e13 | 8.4134e11 |
date
引数に日付を指定して、指定した日付に開示された財務情報を取得します。
df = await client.get_statements(date="2025-10-16")
df.select("DisclosedDate", "Code", "TypeOfDocument", "Profit", "ForecastProfit")
DisclosedDate | Code | TypeOfDocument | Profit | ForecastProfit |
---|---|---|---|---|
date | str | str | f64 | f64 |
2025-10-16 | "86220" | "EarnForecastRevision" | null | null |
2025-10-16 | "63250" | "EarnForecastRevision" | null | null |
2025-10-16 | "79110" | "EarnForecastRevision" | null | 6.5000e10 |
… | … | … | … | … |
2025-10-16 | "34810" | "FYFinancialStatements_Consolid… | 3.8060e9 | null |
2025-10-16 | "93410" | "EarnForecastRevision" | null | 4.17e8 |
株価情報 (get_prices
)
JQuantsClient.get_prices
メソッドは、株価情報を取得します。J-Quants API の株価四本値 (/prices/daily_quotes)
に対応します。
株価情報は、分割・併合を考慮した調整済み株価(小数点第2位四捨五入)と調整前の株価の両方を含みます。
引数に銘柄コードを指定して、指定した銘柄の全期間分の株価情報を取得します。
df = await client.get_prices("7203") # トヨタ自動車
df.select("Date", "Code", "Open", "High", "Low", "Close", "Volume")
Date | Code | Open | High | Low | Close | Volume |
---|---|---|---|---|---|---|
date | str | f64 | f64 | f64 | f64 | f64 |
2015-10-20 | "72030" | 1480.0 | 1480.2 | 1460.6 | 1464.0 | 2.76615e7 |
2015-10-21 | "72030" | 1470.4 | 1493.6 | 1468.0 | 1493.4 | 4.2705e7 |
2015-10-22 | "72030" | 1481.2 | 1496.6 | 1478.8 | 1485.6 | 3.235e7 |
… | … | … | … | … | … | … |
2025-10-17 | "72030" | 2920.0 | 2960.5 | 2920.0 | 2933.5 | 1.43169e7 |
2025-10-20 | "72030" | 2988.5 | 3003.0 | 2971.0 | 3003.0 | 2.05746e7 |
date
引数に日付を指定して、全上場銘柄について指定された日付の株価情報を取得します。
df = await client.get_prices(date="2025-10-17")
df.select("Date", "Code", "Open", "High", "Low", "Close", "Volume")
Date | Code | Open | High | Low | Close | Volume |
---|---|---|---|---|---|---|
date | str | f64 | f64 | f64 | f64 | f64 |
2025-10-17 | "13010" | 4870.0 | 4900.0 | 4850.0 | 4880.0 | 14300.0 |
2025-10-17 | "13050" | 3368.0 | 3385.0 | 3355.0 | 3365.0 | 167560.0 |
2025-10-17 | "13060" | 3331.0 | 3350.0 | 3319.0 | 3324.0 | 1.82882e6 |
… | … | … | … | … | … | … |
2025-10-17 | "99960" | 2000.0 | 2015.0 | 2000.0 | 2015.0 | 500.0 |
2025-10-17 | "99970" | 995.0 | 999.0 | 992.0 | 997.0 | 111600.0 |
from_
, to
引数で期間を指定することもできます。このとき銘柄コードは必須です。
df = await client.get_prices("7203", from_="2025-01-01", to="2025-05-31")
# 月次の株価四本値を求める
df.group_by(c.Date.dt.truncate("1mo"), c.Code).agg(
c.Open.first(),
c.High.max(),
c.Low.min(),
c.Close.last(),
c.Volume.sum(),
).sort(c.Code, c.Date)
Date | Code | Open | High | Low | Close | Volume |
---|---|---|---|---|---|---|
date | str | f64 | f64 | f64 | f64 | f64 |
2025-01-01 | "72030" | 3103.0 | 3127.0 | 2786.5 | 2973.5 | 4.802512e8 |
2025-02-01 | "72030" | 2825.0 | 3025.0 | 2650.0 | 2689.0 | 5.56039e8 |
2025-03-01 | "72030" | 2744.5 | 2961.0 | 2583.5 | 2616.0 | 5.735038e8 |
2025-04-01 | "72030" | 2649.0 | 2841.0 | 2226.5 | 2729.0 | 8.063114e8 |
2025-05-01 | "72030" | 2727.0 | 2879.5 | 2598.0 | 2769.0 | 5.424135e8 |
DataFrameのカラム名について
J-Quants API から返される JSON 形式のデータは、JQuantsClient
クラスの各メソッドで Polars DataFrame に変換されます。その際、後続の分析を行いやすくするために、一部のカラム名が変更されます。
財務情報
株式数に関するカラム名は、文字数を短縮するため、および、意味を明確にするために、以下のように変更されます。
- 期末発行済株式数(自己株式を含む)
- (変更前)NumberOfIssuedAndOutstandingSharesAtTheEndOfFiscalYearIncludingTreasuryStock
- (変更後)IssuedShares
- 期末自己株式数
- (変更前)NumberOfTreasuryStockAtTheEndOfFiscalYear
- (変更後)TreasuryShares
- 期中平均株式数(自己株式を含まない)
- (変更前)AverageNumberOfShares
- (変更後)AverageOutstandingShares
株価情報
株価に関するカラム名が以下のように変更されます。
- J-Quants API では、調整済みの値に
Adjustment
プレフィックスを付けています。kabukit ではカラム名を単純化するために、プレフィックスのないOpen
,Close
などで、調整済みの値を表します。 Raw
プレフィックスが付いているものが、調整前の実際に取引に使われた値です。
下に対応表を示します。
J-Quants API | kabukit | 説明 |
---|---|---|
AdjustmentOpen | Open | 調整済み始値 |
AdjustmentHigh | High | 調整済み高値 |
AdjustmentLow | Low | 調整済み安値 |
AdjustmentClose | Close | 調整済み終値 |
AdjustmentVolume | Volume | 調整済み取引高 |
Open | RawOpen | 始値(調整前) |
High | RawHigh | 高値(調整前) |
Low | RawLow | 安値(調整前) |
Close | RawClose | 終値(調整前) |
Volume | RawVolume | 取引高(調整前) |