Python API の使い方
kabukit は、複数のソースからデータを取得するための、Python API を提供します。
現在サポートしているソースは以下の通りです。
ノートブックでの非同期処理
kabukit は、httpx を使った非同期設計になっており、Jupyter や marimo のような非同期処理を直接扱えるノートブック環境で快適に利用できます。
2 つのインターフェース
Python API は、モジュール関数と Client クラスの 2 のインターフェースを提供します。
モジュールレベル関数
httpx クライアントを意識することなく、手軽にデータを取得にするのに適しています。また、銘柄コードや日付を複数指定すると、関数内部で非同期処理を並列実行するため、効率的に情報を取得できます。
以下の例では、J-Quants API から株価情報を取得します。get_prices 関数に銘柄コードを与えます。
from kabukit import get_prices
df = await get_prices("7203")
df.select("Date", "Code", "Open", "High", "Low", "Close", "Volume")
shape: (2_443, 7)
| Date | Code | Open | High | Low | Close | Volume |
|---|---|---|---|---|---|---|
| date | str | f64 | f64 | f64 | f64 | f64 |
| 2016-02-05 | "72030" | 1330.0 | 1335.4 | 1306.2 | 1325.0 | 5.4852e7 |
| 2016-02-08 | "72030" | 1290.0 | 1320.6 | 1265.0 | 1311.0 | 7.88805e7 |
| 2016-02-09 | "72030" | 1250.0 | 1256.4 | 1229.6 | 1230.8 | 8.59455e7 |
| 2016-02-10 | "72030" | 1234.0 | 1252.6 | 1204.0 | 1225.4 | 9.2904e7 |
| 2016-02-12 | "72030" | 1160.0 | 1183.0 | 1140.6 | 1142.0 | 1.155175e8 |
| … | … | … | … | … | … | … |
| 2026-01-29 | "72030" | 3369.0 | 3470.0 | 3346.0 | 3448.0 | 2.44567e7 |
| 2026-01-30 | "72030" | 3456.0 | 3530.0 | 3452.0 | 3504.0 | 2.3842e7 |
| 2026-02-02 | "72030" | 3600.0 | 3627.0 | 3516.0 | 3535.0 | 2.2997e7 |
| 2026-02-03 | "72030" | 3621.0 | 3622.0 | 3573.0 | 3594.0 | 2.0936e7 |
| 2026-02-04 | "72030" | 3656.0 | 3743.0 | 3629.0 | 3725.0 | 2.85209e7 |
get_prices 関数に銘柄コードのリストを与えると、非同期処理を並列実行して、複数銘柄の株価情報を一度に取得します。
import polars as pl
from polars import col as c
# 複数銘柄の株価情報を取得
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日あたり平均取引代金"),
)
shape: (4, 6)
| Code | 日数 | 最安値 | 最高値 | 直近終値 | 1日あたり平均取引代金 |
|---|---|---|---|---|---|
| str | u32 | f64 | f64 | f64 | f64 |
| "67580" | 2443 | 439.8 | 4776.0 | 3345.0 | 4.2469e10 |
| "72030" | 2443 | 983.4 | 3891.0 | 3725.0 | 5.7054e10 |
| "83060" | 2443 | 380.0 | 3015.0 | 2949.5 | 5.7155e10 |
| "99840" | 2443 | 516.6 | 6923.8 | 4207.0 | 9.3556e10 |
Client クラス
より詳細な制御(例: タイムアウト設定、リトライポリシーの変更など)
が必要な場合に直接利用します。特に、各クラスの client 属性は httpx.AsyncClient のインスタンスであるため、httpx が提供する豊富なメソッドや設定に直接アクセスすることが可能です。
たとえば、J-Quants API に対応した JQuantsClient は以下のように使います。
from kabukit import JQuantsClient
client = JQuantsClient()
# ここで API を呼び出す
await client.aclose() # 最後に手動でセッションを閉じる
async with 構文を使うことで、セッションを安全に管理できます。
async with JQuantsClient() as client:
# このブロック内で API を呼び出す
pass
# 自動でセッションが閉じられる