前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用polars进行数据分析

使用polars进行数据分析

作者头像
杜逸先
发布2023-04-13 16:34:33
1.2K0
发布2023-04-13 16:34:33
举报

日常工作中我经常会收到数据分析的需求,目前大部分常规任务都可以在公司内部的 BI 平台(基于 superset)上完成。

不过业务数据需要先同步到数据仓库后才能在 BI 平台内使用,偶尔还是需要在本地进行一些离线数据分析,我一般会使用 pandas。作为老牌的数据分析工具,pandas 基本上可以满足日常的数据分析需求,但是在处理大数据时,pandas 的性能就显得不够优秀了,并且会占用大量的内存。另外在进行多个数据源的联合查询时,pandas 也不够灵活。

最近调研了一下 polars库,体验相当不错,已经可以说服我将 pandas 替换为 polars 了。今天就来简单介绍一下 polars。

polars 简介

polars是一个基于 Rust 的数据分析库,它的目标是提供一个高性能的数据分析工具,同时也提供了 Python 的接口。

polars 最核心的概念是表达式(expressions),也是其拥有快速性能的核心。polars 提供了一个强大的表达式 API。表达式 API 允许你创建和组合多种操作,例如过滤、排序、聚合、窗口函数等。表达式 API 也可以优化查询性能和内存使用。

polars VS pandas

polars 与 pandas 在许多方面具有截然不同的设计与实现。

  • 不像 pandas 中每个 DataFrame 都有一个索引列(pandas 的很多操作也是基于索引的,例如 join 两个 DataFrame 进行联合查询),polars 并没有 Index 概念。
  • polars 使用 Apache Arrow 作为内部数据格式,而 pandas 使用 NumPy 数组。
  • polars 提供比 pandas 更多的并发支持。
  • polars 支持惰性查询并提供查询优化。

polars 提供了与 pandas 相似的 API,以便于用户更快地上手。但是按照 pandas 语法编写的 polars 代码虽然可以工作,但很有可能会更慢(与推荐用法相比)。具体可以参考 官方文档

实战

下面我们用一个实际的例子来演示如何使用 polars 进行数据分析,并与 pandas 进行对比。

安装 polars

代码语言:javascript
复制
pip install polars

载入数据集

我们使用 polars 的惰性计算 API 来载入数据集,可以有效减少内存开销,并且可以进行更有效的查询优化。

polars lazy load
polars lazy load
pandas load
pandas load

我们使用了scan_csv函数延迟加载数据集,并且指定了每一列的名称。 对比使用 pandas 将全部数据载入内存花费了一分钟,polars 的scan_csv方法可以瞬间执行完成。

展示数据

可以通过head方法展示数据集的前 5 行,由于我们是延迟加载的数据,需要先通过collect方法将数据载入 Dataframe 中。

polars head
polars head

collect方法实际上载入了所有的数据,我们完全可以通过limit方法限制所需的行数。

polars limit
polars limit

我们可以查看p.limit(5)的查询计划。

polars plan
polars plan

在实际执行查询时,polars 会对计划进行一定的优化,可以通过describe_optimized_plan方法查看。

polars optimized plan
polars optimized plan

进行数据分析

我们可能想要知道不同的商品类目的访问数据,包括 UV 和 PV。可以分别使用 polars 和 pandas 进行聚合查询。

polars pv uv
polars pv uv

在这个查询计划中,我们首先过滤出所有的 pv 行为,然后只关注 CATEGORY_ID 和 UID 两列数据,按照 CATEGORY_ID 分组,统计每个分组下的独立 UV 数量和 PV 数量,并按照 PV 数据从大到小排序,保留前二十条数据。可以看一下优化后的执行计划。

polars pv uv plan
polars pv uv plan

调用collect方法执行查询,用时 11 秒。

polars pv uv result
polars pv uv result

使用 pandas 进行同样的查询,用时 42 秒。

pandas uv pc result
pandas uv pc result

可以看到在大数据集下,polars 拥有明显的性能优势。

在 polars 中使用 SQL 查询

polars 提供了 SQL 查询的支持,可以创建一个 SQLContext 对象,然后使用sql方法执行 SQL 查询。

polars sql context
polars sql context

然后编写 sql 语句查询商品类目的访问数据。

polars sql query
polars sql query

查看 sql 查询的执行计划,与之前之前使用 Python API 进行查询的执行计划基本相同。实际上 polars 会将 SQL 查询解析为一个语法树,然后将语法树转换为 polars 的表达式 API。

polars sql plan
polars sql plan

执行查询,用时 9 秒。

polars sql result
polars sql result

使用 SQL 进行跨表联合查询

polars 提供 join 方法进行联合查询,不过 join API 比较繁琐,也不是很直观,我们可以使用 SQL 进行跨表联合查询。

首先定义一个 LazyFrame cat_info,包含商品类目的基本信息。

polars define lazyframe
polars define lazyframe

然后将 cat_info 注册为一个临时表。

polars register new table
polars register new table

修改之前的 SQL 查询,使用cat_info表进行联合查询,在结果中包括每个类目的名字。

polars sql join
polars sql join

可以查看一下执行计划。

polars sql join plan
polars sql join plan

执行查询,用时 12 秒。

polars sql join result
polars sql join result

利用 polars 的 SQL 查询功能,我们可以借助已有的 SQL 知识,快速进行数据分析。

总结

polars 是一个高性能的 DataFrame 库,提供了类似 pandas 的 API,可以很方便地进行数据分析。 polars 的惰性计算 API 可以有效减少内存开销,并且可以进行更有效的查询优化。 polars 还提供了 SQL 查询的支持,可以借助已有的 SQL 知识,快速进行数据分析。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-03-052,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • polars 简介
  • polars VS pandas
  • 实战
    • 安装 polars
      • 载入数据集
        • 展示数据
          • 进行数据分析
          • 在 polars 中使用 SQL 查询
            • 使用 SQL 进行跨表联合查询
            • 总结
            相关产品与服务
            腾讯云 BI
            腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档