abstractqqq/polars_ds_extension
Polars extension for general data science use cases
PDS (polars_ds) — 面向 Polars 的数据科学工具包
简介: PDS 是一个 Python 包,它在快速数据框库 Polars 之上添加了数据科学工具。它专为那些已经使用 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 提供支持,速度极快)
- 数组/列表距离: 两个数组列之间的平方 L2(欧几里得)距离
4. 统计检验
内置可在 group_by 聚合中运行的检验:
- 独立 t 检验(可选不等方差)
- 卡方检验
- F 检验(ANOVA 风格,比较组均值)
每个检验返回一个包含统计量和 p-值的结构体。
5. 便捷辅助工具
pds.E(['a', 'b'], ["min", "max", "n_unique", "len"]) 可一次性生成多个聚合表达式,无需手动编写。
6. 数据转换管道
用于构建可重用预处理步骤的 Blueprint/Pipeline 系统:
- 过滤行
- 填充缺失值(线性或中位数)
- 添加自定义表达式(对数变换、截断等)
- 数值列缩放(标准化)
- 独热编码、证据权重编码、目标编码
- 实例化为可转换新数据的
Pipeline对象
它支持通过 collect_batches() 进行批处理,适用于流式机器学习工作流。
7. 最近邻查询
查找每个点给定半径内的所有点(使用平方 L2 距离),并返回邻居 ID。README 指出这对于大 k 值或高维数据并不快。
8. 与其他数据框的兼容性
通过 polars_ds.compat 模块,只要列实现了 to_numpy(),PDS 函数就可以与其他急切数据框(如 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。你可以设置RUSTFLAGS以支持 LTS CPU 或原生 CPU。 - 致谢: 使用了 Statrs(统计)、faer(线性代数)和 RapidFuzz(字符串相似度)。
- 维护: 主要由一人维护;AI 辅助代码由维护者审核,AI 生成的 PR 会受到严格审查。
相关
- 项目
- 项目
- 项目
- 项目