填充#
填充转换(impute transform)允许您填充数据集中的缺失条目。例如,考虑以下数据,其中包含我们在长格式表示中过滤掉的缺失值(有关更多信息,请参见长格式与宽格式数据)。
import numpy as np
import pandas as pd
data = pd.DataFrame({
't': range(5),
'x': [2, np.nan, 3, 1, 3],
'y': [5, 7, 5, np.nan, 4]
}).melt('t').dropna()
data
t variable value
0 0 x 2.0
2 2 x 3.0
3 3 x 1.0
4 4 x 3.0
5 0 y 5.0
6 1 y 7.0
7 2 y 5.0
9 4 y 4.0
注意结果:x
系列在 t=1
处没有条目,而 y
系列在 t=3
处有一个缺失条目。如果我们直接使用 Altair 可视化此数据,线条将跳过缺失的条目。
import altair as alt
raw = alt.Chart(data).mark_line(point=True).encode(
x='t:Q',
y='value:Q',
color='variable:N'
)
raw
这并不总是可取的,因为(特别是对于没有点的折线图)它可能暗示存在实际上不存在的数据。
通过编码进行填充#
为了解决这个问题,您可以使用编码通道的填充方法。例如,我们可以使用一个常量值进行填充(背景中会浅色显示原始图表以供参考)。
background = raw.encode(opacity=alt.value(0.2))
chart = alt.Chart(data).mark_line(point=True).encode(
x='t:Q',
y=alt.Y('value:Q').impute(value=0),
color='variable:N'
)
background + chart
或者我们可以使用任何支持的聚合方法进行填充。
chart = alt.Chart(data).mark_line(point=True).encode(
x='t:Q',
y=alt.Y('value:Q').impute(method='mean'),
color='variable:N'
)
background + chart
通过转换进行填充#
与分箱(Bin)和聚合(Aggregate)类似,也可以在编码外部将填充(impute)指定为一种转换。例如,以下是上面两个图表的等效表示。
chart = alt.Chart(data).transform_impute(
impute='value',
key='t',
value=0,
groupby=['variable']
).mark_line(point=True).encode(
x='t:Q',
y='value:Q',
color='variable:N'
)
background + chart
chart = alt.Chart(data).transform_impute(
impute='value',
key='t',
method='mean',
groupby=['variable']
).mark_line(point=True).encode(
x='t:Q',
y='value:Q',
color='variable:N'
)
background + chart
如果您想使用更局部的填充值,可以指定一个 frame
参数,类似于窗口(Window),它将控制用于填充的值。例如,在这里我们使用两侧相邻点的平均值来填充缺失值。
chart = alt.Chart(data).transform_impute(
impute='value',
key='t',
method='mean',
frame=[-1, 1],
groupby=['variable']
).mark_line(point=True).encode(
x='t:Q',
y='value:Q',
color='variable:N'
)
background + chart
转换选项#
transform_impute()
方法基于 ImputeTransform
类构建,该类具有以下选项。
点击显示表格
属性 |
类型 |
描述 |
---|---|---|
frame |
array([null, number]) |
一个双元素数组的框架规范,用于控制应用指定方法的窗口。数组条目应为表示与当前数据对象偏移量的数字,或 null 表示当前数据对象之前或之后的不受限行。例如,值 默认值: |
groupby |
array( |
一个可选的字段数组,用于对值进行分组。然后将按组别执行填充。 |
impute |
应填充缺失值的 数据字段。 |
|
key |
在组内唯一标识数据对象的关键字段。将填充缺失的关键值(数据中存在但在当前组中不存在的值)。 |
|
keyvals |
anyOf(array(any), |
定义应考虑用于填充的关键值。可以是关键值数组,也可以是定义 如果提供,这将与输入数据中观察到的关键值一起使用。如果未提供,则这些值将从 如果没有任何填充分组,则必须指定此属性。 |
method |
用于填充数据对象字段值的填充方法。可以是 默认值: |
|
value |
any |
当填充 |