abstractqqq/polars_ds_extension

Polars extension for general data science use cases

PDS (polars_ds) — Polarsのためのデータサイエンスツールキット

概要: PDSは、高速なデータフレームライブラリである Polars の上にデータサイエンスツールを追加するPythonパッケージです。すでにPolarsを使用しており、Pandasやscikit-learnなどの他のツールに切り替えることなく、統計分析、機械学習モデル、特徴量エンジニアリングを行いたいユーザー向けに設計されています。

インストール: pip install polars-ds

主な機能

1. 機械学習メトリクス(並列)

Polarsの遅延評価を利用して、データの異なるスライスに対してROC AUCやlog lossなどのメトリクスを一度に計算できます。READMEの例:

df.lazy().group_by("segments").agg(
    pds.query_roc_auc("actual", "predicted").alias("roc_auc"),
    pds.query_log_loss("actual", "predicted").alias("log_loss"),
).collect()

これは、各セグメントに対してROC AUCとlog-lossの値を持つテーブルを返します。

2. 高速モデリング(非永続的)

個別のトレーニングステップなしで、データフレーム式の中で直接シンプルなモデルを実行できます。利用可能なモデル:

  • 線形回帰(オプションでL1/L2正則化 → Lasso, Ridge, Elastic Net)
  • 非負線形回帰
  • ローリングおよび再帰的線形回帰
  • 二項ロジスティック回帰(L1/L2付き)
  • statsmodelsスタイルの回帰要約テーブル(係数、標準誤差、t統計量、p値、R²)

例:pds.lin_reg(pl.col("x1"), pl.col("x2"), target=pl.col("y"), add_bias=False, return_pred=True) は予測値を構造体列として返します。

3. 距離関数

  • 文字列距離: Levenshtein, Optimal String Alignment, Jaro-Winkler(RapidFuzzにより非常に高速)
  • 配列/リスト距離: 2つの配列列間の二乗L2(ユークリッド)距離

4. 統計検定

group_by 集計内で実行可能な組み込み検定:

  • 独立したt検定(オプションで不等分散)
  • カイ二乗検定
  • F検定(ANOVAスタイル、グループ平均の比較)

それぞれ、統計量とp値を含む構造体を返します。

5. 便利なヘルパー

pds.E(['a', 'b'], ["min", "max", "n_unique", "len"]) は、複数の集計式を一度に生成するため、手動で記述する必要がありません。

6. データ変換パイプライン

再利用可能な前処理ステップを構築するための Blueprint/Pipeline システム:

  • 行のフィルタリング
  • 欠損値の補完(線形または中央値)
  • カスタム式の追加(対数変換、クリッピングなど)
  • 数値列のスケーリング(標準化)
  • ワンホットエンコーディング、Weight of Evidenceエンコーディング、ターゲットエンコーディング
  • 新しいデータを変換できる Pipeline オブジェクトへの具体化

ストリーミング機械学習ワークフロー向けに collect_batches() を介したバッチ処理をサポートしています。

7. 最近傍クエリ

各点から指定された半径内にあるすべての点を検索し(二乗L2距離を使用)、近傍IDを返します。READMEによると、大きなk値や高次元データでは高速ではないとのことです。

8. 他のデータフレームとの互換性

polars_ds.compat モジュールを介して、列が to_numpy() を実装していれば、PDS関数は他のEagerデータフレーム(Pandasなど)でも動作します。例:pds2.lin_reg(df_pd["x1"], df_pd["x2"], target=df_pd["y"], return_pred=True)。

その他の注意点

  • パフォーマンス: READMEでは、特に多くの式を一度に評価する場合やマルチコアマシンにおいて、Pandas + SciPy/Sklearn/NumPyよりも一般的に高速であると主張されています。
  • 依存関係: Polars ≥ 1.4.0が必要です。Python 3.9はPolars 1.xを使用し、Polars 2はPython ≥ 3.10を必要とします。
  • ソースからのビルド: Rustと maturin が必要です。LTS CPUサポートまたはネイティブCPU用に RUSTFLAGS を設定できます。
  • クレジット: Statrs(統計)、faer(線形代数)、RapidFuzz(文字列類似度)を使用しています。
  • メンテナンス: 主に1人でメンテナンスされています。AI支援コードはメンテナによってレビューされ、AI生成のPRは精査されます。

ドキュメント: polars-ds-extension.readthedocs.io

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト