polars 基础和实践
在之前的文章中已介绍过 polars 的基础知识, 这篇文章主要从实践出发, 回顾 polars 基础, 并延展出一些实践内容.
二次回顾: Polars 是一个数据操作和转换的基础框架, 特点是高性能, 面向单机, 并提供特别的 lazy API(能够在 query 构造过程对其进行性能优化) 进一步提升性能. 相比 pandas 更年轻, 其中概念和 pandas 很多都是共通的, rust 编写, 提供面向多种语言的 lib 可供 使用.
1 简介
为便于演示,
cargo new polars_intro
创建了一个 rust exe 项目,cargo add polars -F lazy
添加了 polars 作为依赖并打开了 lazy API 功能.Rust 工程在 Debug 模式运行时, 性能可能不佳, 需要 release build 后才能看到效果.
读取 feather ipc 时需要打开这两个功能:
ipc
,dtype-struct
, parquet 有对应的parquet
功能.学习时, 可以通过 python 引入依赖进行. 详见官方文档: https://docs.pola.rs/user-guide/getting-started/#__tabbed_1_1
用于演示的基础数据集自选, 这里随机选了一个网上数据示例.
- Polars 主要功能
- Polars DataFarme 概念
- Polars Series 概念
- Polars LazyFrame 概念
- 基础操作: 列选择和过滤
- 基础操作: 创建/修改/删除列
- 如何处理超过内存大小的数据
另外这里会额外介绍一些数据可视化(Data Visualization)库.
- graphviz: 知名数据可视化库, AT&T 出品.
- seaborn: 基于 matplotlib 提供更多功能
- matplotlib: 最早的 python 数据可视化库
- plotly: 提供 python 和 js 库
Polars 三大主要功能:
- 数据并行处理带来的高性能
- 提供
Expressions
概念用于 Series 转换, 用户友好. 主要包括select
,filter
,group
和aggregation
族的 API. - 提供 Lazy API 进一步提高性能: Lazy API 可通过
collect
族的 API 触发执行.- 类似 Rust 中的 iterator adapter, 只在最终消费 iterator 时才会触发实际处理, 过程中的操作会被进一步优化.
- 同时和 Lazy API 相关的还有 streaming API, 可以通过其处理超过内存大小的数据.
- 和 Lazy API 对应的是一组 Eager API, 即操作立即处理. Polars 的 DataFrame 默认 API 是 Eager 的.
DataFrame 的一些常用基础 API
DataFrame 可以理解为数据表.
其中函数会加括号, 若是属性则没有. DataFrame 后续简称 df.
head()
: 输出前 5 行schema
/columes
/dtypes
/shape
/height
/width
/flags
: 获得 df 的基本信息.describe()
: 获取 df 的摘要信息
Series
Series 可以理解为表示行或列. Series 的 API 有许多和 df 命名和作用类似, 比如 head
.
2 列选择和数据过滤
主要用到三个方法:
select
: 选择列with_column
族: 添加/替换或添加列filter
: 过滤
3 数据分析基础
首先需要了解目标数据集, 包括 schema 和基础的指标.