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能够减少数据量(例如,通过分箱、聚合或过滤),那么你将看到更大的好处。