Scriptone Scriptone

PyPIにyfinance-plを公開しました

blog-image

概要

yfinance-plをPyPIに公開しました。yfinance-rsをラップしてPythonで扱えるようにして型安全性を強化した株価情報の取得ライブラリです。従来のyfinanceと異なりpd.DataFrameではなくpl.DataFrameで扱うことができます。

なぜ作ったか

ここ最近Pandasの代替としてPolarsを使う機会があり、モダンなライブラリがPolarsに対応するなど少しずつ浸透してきています。PolarsはRustで作られた高性能なDataFrameライブラリでPandasよりも速度が速くメモリ消費量が少ないなどメリットがあります。大量のデータ分析やPolarsのみでの処理に対応するにあたって、株式分析の入り口であるyfinanceが純粋にPolarsに対応することは円滑な分析と優れた開発者体験の獲得に必要だと考えました。PolarsのDataFrameかPandasのDataFrameかを考えることなくPolarsで分析を行いたい方がPolarsだけで分析できるようなると良いと考えて、yfinance-rsをラップして型安全性を強化してyfinance-plを実装しました。

特徴

yfinance互換API

yfinanceと同じAPIで株価データを取得できます。既存のyfinanceを使ったコードを最小限の変更で移行できます。

import yfinance_pl as yf

ticker = yf.Ticker("AAPL")
history = ticker.history(period="1mo")

Rustバックエンド

yfinance-rsをPyO3でラップしており、データ取得処理がRustで実行されます。

型安全なAPI

periodintervalパラメータにはLiteral型を使用しており、IDEの自動補完が効きます。

# periodには "1d", "5d", "1mo", "3mo", "6mo", "1y", "2y", "5y", "10y", "ytd", "max" が指定可能
# intervalには "1m", "2m", "5m", "15m", "30m", "60m", "90m", "1h", "1d", "5d", "1wk", "1mo", "3mo" が指定可能
history = ticker.history(period="1mo", interval="1d")

また、TickerInfoFastInfoCalendarInfoなどの戻り値にはTypedDictを定義しており、辞書のキーもIDEで補完されます。

yfinanceとの比較

項目yfinanceyfinance-pl
DataFrameの型pd.DataFramepl.DataFrame
バックエンドPythonRust (yfinance-rs)
Seriesの型pd.Seriespl.DataFrame
型ヒント部分的対応

対応機能

yfinance-plは以下の機能をサポートしています。

カテゴリプロパティ/メソッド戻り値の型
価格履歴history()pl.DataFrame
企業情報info, fast_info, calendardict
配当・分割dividends, splits, actions, capital_gainspl.DataFrame
財務諸表income_stmt, balance_sheet, cashflowpl.DataFrame
四半期財務quarterly_income_stmt, quarterly_balance_sheet, quarterly_cashflowpl.DataFrame
株主情報major_holders, institutional_holders, mutualfund_holderspl.DataFrame
インサイダーinsider_transactions, insider_roster_holderspl.DataFrame
アナリストrecommendations, upgrades_downgradespl.DataFrame
オプションoptions, option_chain()list[str], OptionChain

使用例

株価履歴の取得

import yfinance_pl as yf

ticker = yf.Ticker("AAPL")

# 直近1ヶ月の日次データ
history = ticker.history(period="1mo", interval="1d")
print(history)

出力例:

shape: (21, 7)
┌─────────────────────────┬────────────┬────────────┬────────────┬────────────┬──────────────┬───────────┐
│ date                    ┆ open       ┆ high       ┆ low        ┆ close      ┆ volume       ┆ dividends │
│ ---                     ┆ ---        ┆ ---        ┆ ---        ┆ ---        ┆ ---          ┆ ---       │
│ datetime[ns, UTC]       ┆ f64        ┆ f64        ┆ f64        ┆ f64        ┆ i64          ┆ f64       │
╞═════════════════════════╪════════════╪════════════╪════════════╪════════════╪══════════════╪═══════════╡
│ 2024-10-28 00:00:00 UTC ┆ 233.160004 ┆ 234.729996 ┆ 232.550003 ┆ 233.399994 ┆ 23819200     ┆ 0.0       │
│ ...                     ┆ ...        ┆ ...        ┆ ...        ┆ ...        ┆ ...          ┆ ...       │
└─────────────────────────┴────────────┴────────────┴────────────┴────────────┴──────────────┴───────────┘

財務諸表の取得

# 損益計算書
income = ticker.income_stmt
print(income)

# 貸借対照表
balance = ticker.balance_sheet
print(balance)

# キャッシュフロー計算書
cashflow = ticker.cashflow
print(cashflow)

オプションチェーンの取得

# 利用可能な満期日を取得
dates = ticker.options
print(dates)

# 特定の満期日のオプションチェーンを取得
chain = ticker.option_chain("2024-12-20")
print(chain.calls)  # コールオプション
print(chain.puts)   # プットオプション

インストール方法

PyPIにアップロードしていますのでpipでインストール可能です。uvで扱うことももちろん可能です。

pip install yfinance-pl

uvの場合は以下の通りです。

uv add yfinance-pl

今後のアップデート

yfinance-rsのアップデートに合わせてyfinance-plも更新していく予定です。Python側でも型安全性の強化の例のように使いやすくなるアップデートがあれば実装していきます。

リンク

comment

コメントを読み込み中...