使用 Altair 处理从大型数据集聚合的数据

Using Altair on data aggregated from large datasets

我正在尝试对大型(300,000 条记录)时态数据集的计数进行直方图绘制。我现在只是尝试按月绘制直方图,这只有 6 个数据点,但是使用 json 或 altair_data_server 存储进行此操作会使页面崩溃。这不可能用纯 Altair 处理好吗?我当然可以在 pandas 中进行预处理,但这破坏了 altair 美妙的声明性。

如果是这样,这是 altair 缺少的功能还是超出了范围?我了解到 vegalite 存储了整个基础数据并在 运行 时间应用了转换,但似乎 altair 可以(并且可能确实)有办法只存储图表的相关数据。

alt.Chart(df).mark_bar().encode(
    x=alt.X('month(timestamp):T'),
    y='count()'
)

Altair 图表通过将整个数据集发送到您的浏览器并在前端进行处理来工作;因此,无论数据集如何提供给前端,它都不适用于较大的数据集。

在像您这样的情况下,您在显示数据之前聚合数据,理论上可以在后端进行聚合,并且只将聚合数据发送到前端渲染器。有一些项目希望使这更加无缝,包括 scalable Vega and altair-transform,但这两种方法都还不是很成熟。

与此同时,我建议您在 Pandas 中进行聚合,并将聚合数据发送到 Altair 进行绘图。

尝试以下:-

alt.data_transformers.enable('default', max_rows=None)

然后是

alt.Chart(df).mark_bar().encode(
    x=alt.X('month(timestamp):T'),
    y='count()'
)

您将获得图表,但如果浏览器崩溃,请确保保存您的所有工作。