Skip to content

Python API の使い方

kabukit は、複数のソースからデータを取得するための、Python API を提供します。

現在サポートしているソースは以下の通りです。

ノートブックでの非同期処理

kabukit は、httpx を使った非同期設計になっており、Jupytermarimo のような非同期処理を直接扱えるノートブック環境で快適に利用できます。

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)
DateCodeOpenHighLowCloseVolume
datestrf64f64f64f64f64
2016-02-05"72030"1330.01335.41306.21325.05.4852e7
2016-02-08"72030"1290.01320.61265.01311.07.88805e7
2016-02-09"72030"1250.01256.41229.61230.88.59455e7
2016-02-10"72030"1234.01252.61204.01225.49.2904e7
2016-02-12"72030"1160.01183.01140.61142.01.155175e8
2026-01-29"72030"3369.03470.03346.03448.02.44567e7
2026-01-30"72030"3456.03530.03452.03504.02.3842e7
2026-02-02"72030"3600.03627.03516.03535.02.2997e7
2026-02-03"72030"3621.03622.03573.03594.02.0936e7
2026-02-04"72030"3656.03743.03629.03725.02.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日あたり平均取引代金
stru32f64f64f64f64
"67580"2443439.84776.03345.04.2469e10
"72030"2443983.43891.03725.05.7054e10
"83060"2443380.03015.02949.55.7155e10
"99840"2443516.66923.84207.09.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
# 自動でセッションが閉じられる