unlockedpd — pandasの高速化ライブラリ
概要
unlockedpdは「既存のpandasコードに手を加えずに」パフォーマンスを引き上げることを目的としたライブラリです。内部でNumbaによるJITコンパイルとThreadPoolによる並列実行を組み合わせ、rolling/expanding/EWMなどのウィンドウ系演算や集計処理を高速化します。公式ベンチマークでは5〜15倍の高速化が報告されており、Python 3.9以上で動作、MITライセンスで公開されています。導入は簡単で、importするだけで(あるいは最小限の設定で)pandasの既存APIを置き換え、互換性を保ちながら高速化を提供します。
リポジトリの統計情報
- スター数: 3
- フォーク数: 0
- ウォッチャー数: 3
- コミット数: 2
- ファイル数: 8
- メインの言語: Python
主な特徴
- 既存のpandasコードを変更せずに導入可能なドロップイン型(zero code changes)
- rolling、expanding、EWMなどのウィンドウ演算を対象に5〜15倍の高速化を実現
- 実行ホットパスをNumbaでJITコンパイルし、ThreadPoolで並列化
- Python 3.9+対応、MITライセンスで配布
技術的なポイント
unlockedpdの高速化は主に「Numbaによるループ最適化」と「ThreadPoolを使った並列化」の二つの柱で成り立っています。pandasのウィンドウ演算(rolling/expanding/EWM)は内部で多数の要素を逐次処理するため、Pythonレイヤーでそのまま実行するとオーバーヘッドが大きくなりがちです。本ライブラリはそのホットループ部分をNumbaでJITコンパイルし、低レベルなネイティブコードに変換することで、ループオーバーヘッドと型チェックを削減します。さらに、系列(series)やグループごとに独立に処理できる部分をThreadPoolで分割して並列実行することで、マルチコアを利用したスループット向上を実現します。
実装上の注意点として、ウィンドウ関数は欠損値(NaN)の扱いや境界条件、ウィンドウサイズの動的変化(expanding)などステートフルな要素が多く、単純な並列化では結果の整合性が崩れます。unlockedpdはこれらを考慮して、処理単位の境界で正しい初期化と最終化を行い、Numbaコード内でNaN処理や累積統計(分散や指数加重平均の状態遷移)を正確に実装しています。また、全てのpandas APIをカバーするわけではなく、主に数値型の集計(sum、mean、stdなど)や標準的なウィンドウ操作を重点的に最適化する方針をとることで、実用上の高速化効果を最大化しています。
互換性の面では「zero code changes」を謳っているため、import時や初期化時にpandasの対象メソッドをラップ/モンキーパッチして差し替えるアプローチが想定されます。これによりユーザは既存のコードを書き換える必要がなく、環境によってはフォールバック実装(Numbaが使えない場合や対象外の型)に戻す安全策も備えていると考えられます。ベンチマークディレクトリが含まれていることから、代表的なユースケースでの効果測定と再現が可能です。
最後に、Numbaと並列化の組合せはI/OやPythonレベルのボトルネックが残る処理には効果が薄い点、及びNumbaのコンパイルコスト(初回実行時のJITオーバーヘッド)が存在する点に留意が必要です。大量データで繰り返し同じ演算を行うバッチ処理や分析パイプラインで特に恩恵が大きくなります。
プロジェクトの構成
主要なファイルとディレクトリ:
- .gitignore: file
- .sisyphus: dir
- LICENSE: file
- README.md: file
- benchmarks: dir
…他 3 ファイル
(ベンチマークディレクトリには性能比較スクリプトや再現用のコードが含まれており、導入前後での性能差を確認できます。)
まとめ
pandasのウィンドウ系処理を手軽に高速化できる実用的なツール。大規模データ処理で効果大。
リポジトリ情報:
- 名前: unlockedpd
- 説明: Unlock pandas performance with zero code changes. 8-15x faster rolling/expanding operations via Numba + ThreadPool.
- スター数: 3
- 言語: Python
- URL: https://github.com/Yeachan-Heo/unlockedpd
- オーナー: Yeachan-Heo
- アバター: https://avatars.githubusercontent.com/u/54757707?v=4
READMEの抜粋:
unlockedpd
Unlock pandas performance with zero code changes.
unlockedpd is a drop-in performance booster for pandas that achieves 5-15x speedups on rolling, expanding, EWM, and…