PyPIにyfinance-plを公開しました
Table of Contents
💡 Summary
Polars DataFrameを返す型安全なYahoo Financeデータ取得ライブラリ「yfinance-pl」のPyPI公開のお知らせ。Rustバックエンド(yfinance-rs)による高速処理、yfinance互換API、型ヒントのサポート等の特徴と基本的な使用方法を紹介。
概要
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
periodやintervalパラメータには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")また、TickerInfo、FastInfo、CalendarInfoなどの戻り値にはTypedDictを定義しており、辞書のキーもIDEで補完されます。
yfinanceとの比較
| 項目 | yfinance | yfinance-pl |
|---|---|---|
| DataFrameの型 | pd.DataFrame | pl.DataFrame |
| バックエンド | Python | Rust (yfinance-rs) |
| Seriesの型 | pd.Series | pl.DataFrame |
| 型ヒント | 部分的 | 対応 |
対応機能
yfinance-plは以下の機能をサポートしています。
| カテゴリ | プロパティ/メソッド | 戻り値の型 |
|---|---|---|
| 価格履歴 | history() | pl.DataFrame |
| 企業情報 | info, fast_info, calendar | dict |
| 配当・分割 | dividends, splits, actions, capital_gains | pl.DataFrame |
| 財務諸表 | income_stmt, balance_sheet, cashflow | pl.DataFrame |
| 四半期財務 | quarterly_income_stmt, quarterly_balance_sheet, quarterly_cashflow | pl.DataFrame |
| 株主情報 | major_holders, institutional_holders, mutualfund_holders | pl.DataFrame |
| インサイダー | insider_transactions, insider_roster_holders | pl.DataFrame |
| アナリスト | recommendations, upgrades_downgrades | pl.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-pluvの場合は以下の通りです。
uv add yfinance-pl今後のアップデート
yfinance-rsのアップデートに合わせてyfinance-plも更新していく予定です。Python側でも型安全性の強化の例のように使いやすくなるアップデートがあれば実装していきます。
リンク
- PyPI: https://pypi.org/project/yfinance-pl/
- GitHub: https://github.com/rmc8/yfinance-pl
- Documentation: https://yfinance-pl.rmc-8.com
コメントを読み込み中...