从 Pandas 到 Polars 四十五:Polars、Altair 和 Vegafusion

Altair长期以来一直是我最喜欢的可视化库。它允许我通过简洁且一致的API制作美丽的可视化图表。然而,去年我发现我无法将Polars的DataFrame传递给Altair图表时,我感到很失望。

但那些日子已经过去了。在这篇文章中,我们将探讨随着Altair 5的发布,我们如何可以使用Altair和Polars,以及VegaFusion如何帮助Altair扩展到更大的数据集。

这是我使用泰坦尼克号数据集在我的课程中制作的一个简单图表。

class_survival_counts = (
    df
    .groupby('Survived','Pclass')
    .count())alt.Chart(
    class_survival_counts,
    width=600).mark_bar().encode(
    x="Pclass:N",
    y="count:Q",
    color="Survived:N")

很棒的一点是,这段代码和输出结果看起来与从Pandas中来的完全一样。

然而,对于像Polars这样的基于Arrow的库来说,Altair还处于早期阶段,您可能仍然会遇到一些奇怪的bug。

要使用Polars,您需要Altair v5+版本。在撰写本文时,您可以从PyPi安装此版本作为发布候选版。

Vegafusion

围绕Altair的另一个激动人心的发展是Vegafusion。Vegafusion可以帮助Altair图表通过服务器端渲染来克服著名的MaxRowsError。

(注:Vega Fusion 是一个用于 Python 的库,它旨在提供高性能的交互式可视化工具。Vega Fusion 是基于 Vega-Lite 语法的,这是一种轻量级的声明性语法,用于描述数据可视化。Vega Fusion 通过结合 Python 的数据处理能力和 Vega-Lite 的可视化能力,使得在 Python 中创建复杂的交互式图表变得更加容易。

Vega Fusion具有以下特点

  • 高性能:Vega Fusion 通过客户端和服务器端的数据转换和计算来提高可视化性能,特别是对于大数据集。
  • 交互性:创建的图表具有丰富的交互性,如缩放、平移、筛选等功能。
  • 易于使用:用户可以使用 Python 代码定义 Vega-Lite 规格,而不需要直接编写 JSON。
  • 兼容性:可以在 Jupyter Notebook、JupyterLab、Python Web 应用等环境中使用。)

什么是服务器端渲染?

在传统的Altair图表中,您将数据行提供给Altair,然后Altair(通过Vega-lite库)将这些数据传递给您的浏览器,浏览器使用Vega-lite将数据转换为可以渲染的HTML对象。然而,随着数据行数的增加,这种客户端渲染方式会让您的浏览器需要处理越来越多的数据。

使用Vegafusion时,渲染过程发生在服务器端。这意味着您可以像往常一样创建Altair图表,但随后数据会被传递给Vegafusion引擎。相比于浏览器,Vegafusion引擎更擅长处理大型数据集。然后,Vegafusion引擎将渲染好的HTML传递给您的浏览器。

要使用Vegafusion,您需要导入它并运行vf.enable(),这会告诉Altair由Vegafusion负责渲染工作。

import altair as altimport vegafusion as vfvf.enable()

当然,如果你的浏览器需要渲染大量的HTML对象,它可能仍然会感到不堪重负!例如,如果你正在制作一个包含数千个点的散点图,这仍然会给你的浏览器带来很大的工作量(甚至可能导致崩溃)。但是,如果Vegafusion能够减少数据量(例如,通过分箱、聚合或过滤),那么你将看到更大的好处。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值