数据转换#
在可视化数据的过程中,通常需要对数据进行转换或过滤。在 Altair 中,您可以通过以下两种方式实现:
在图表定义之前,使用标准的 pandas 数据转换。
在图表定义之内,使用 Vega-Lite 的数据转换工具。
在大多数情况下,我们建议您使用第一种方法,因为它对于熟悉 Python 中数据操作的人来说更直接,而且 pandas 包在数据操作方面比 Vega-Lite 提供了更多的灵活性。
当数据源不是 dataframe,而是例如指向 JSON 或 CSV 文件的 URL 指针时,第二种方法就会派上用场。它在复合图表中也很有用,其中数据集的不同视图需要不同的转换。
第二种方法——在图表规范本身中指定数据转换——可以通过顶级对象的 transform_*
方法来实现
转换 |
方法 |
描述 |
---|---|---|
|
通过聚合现有列来创建新的数据列。 |
|
|
通过对现有列进行分箱来创建新的数据列。 |
|
|
使用对现有列进行算术计算来创建新的数据列。 |
|
|
创建一个包含输入数据的核密度估计的新数据列。 |
|
|
查找字段的范围并将结果存储在参数中。 |
|
|
根据条件选择数据子集。 |
|
|
将数组数据展平为列。 |
|
|
将宽格式数据转换为长格式数据(与 pivot 相反)。 |
|
|
填充缺失数据。 |
|
|
聚合转换后与原始数据连接。 |
|
|
创建包含数据 LOESS 平滑结果的新列。 |
|
|
基于查找键对两个数据集进行单边连接。 |
|
|
将长格式数据转换为宽格式数据(与 fold 相反)。 |
|
|
计算数据集的经验分位数。 |
|
|
对数据集拟合回归模型。 |
|
|
从数据集的行中进行随机子采样。 |
|
|
计算值的堆叠版本。 |
|
|
按时间单位(日、月、年等)对日期进行离散化/分组。 |
|
|
计算窗口聚合 |
访问转换后的数据#
当图表显示时,数据转换由 Vega JavaScript 库在浏览器中执行。在构建图表的过程中检查转换后的数据结果通常很有帮助。一种方法是在由文本标记组成的表中显示转换后的数据结果,就像在刷选散点图以在表中显示数据图库示例中所示。
虽然这种方法可行,但有些繁琐,并且仍然无法从 Python 中访问转换后的数据。为了使转换后的数据结果在 Python 中可用,Altair 提供了 transformed_data()
图表方法,该方法与 VegaFusion 集成,以便在 Python 内核中评估数据转换。
首先,安装启用嵌入附加功能的 VegaFusion。
pip install "vegafusion[embed]"
然后创建一个 Altair 图表并调用 transformed_data()
方法来提取包含转换后数据的 pandas DataFrame。
import altair as alt
from vega_datasets import data
cars = data.cars.url
chart = alt.Chart(cars).mark_bar().encode(
y='Cylinders:O',
x='mean_acc:Q'
).transform_aggregate(
mean_acc='mean(Acceleration)',
groupby=["Cylinders"]
)
chart.transformed_data()
Cylinders mean_acc mean_acc_start mean_acc_end
0 8 12.837037 0.0 12.837037
1 4 16.616425 0.0 16.616425
2 6 16.263095 0.0 16.263095
3 3 13.250000 0.0 13.250000
4 5 18.633333 0.0 18.633333
transformed_data()
方法目前支持 Altair 的大部分(但非全部)转换。请参见下表。