Skip to main content

polars 基础和实践

· 4 min read

之前的文章中已介绍过 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, groupaggregation 族的 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 和基础的指标.