gpt4 book ai didi

python - Altair/Vega-Lite 条形图 : filter top K bars from aggregated field

转载 作者:行者123 更新时间:2023-12-01 01:49:45 27 4
gpt4 key购买 nike

我正在可视化一个具有分类字段等的数据集。我想创建一个条形图,显示该字段的不同类别及其基数,按“升序”/“降序”顺序排序。这可以通过 altair 轻松实现:

import pandas as pd
import altair as alt

data = {0:{'Name':'Mary', 'Sport':'Tennis'},
1:{'Name':'Cal', 'Sport':'Tennis'},
2:{'Name':'John', 'Sport':'Tennis'},
3:{'Name':'Jane', 'Sport':'Tennis'},
4:{'Name':'Bob', 'Sport':'Golf'},
5:{'Name':'Jerry', 'Sport':'Golf'},
6:{'Name':'Gustavo', 'Sport':'Golf'},
7:{'Name':'Walter', 'Sport':'Swimming'},
8:{'Name':'Jessy', 'Sport':'Swimming'},
9:{'Name':'Patric', 'Sport':'Running'},
10:{'Name':'John', 'Sport':'Shooting'}}

df = pd.DataFrame(data).T

bars = alt.Chart(df).mark_bar().encode(
x=alt.X('count():Q', axis=alt.Axis(format='.0d', tickCount=4)),
y=alt.Y('Sport:N',
sort=alt.SortField(op='count', field='Sport:N', order='descending'))
)
bars

Bar chart (full)

现在假设我只对前三个数量最多的类别感兴趣。使用“transform_window”和“transform_filter”来过滤数据似乎是合理的,但我无法找到这样做的方法。我也去了Vega-Lite Top K example尝试适应它但没有成功(我的“最佳”尝试如下所示)。

bars.transform_window(window=[alt.WindowFieldDef(op='count', 
field='Sport:N',
**{'as':'cardinality'})],
frame=[None, None])

bars.transform_window(window=[alt.WindowFieldDef(op='rank',
field='cardinality',
**{'as':'rank'})],
frame=[None, None],
sort=[alt.WindowSortField(field='rank',
order='descending')])

bars.transform_filter( ..... what??? .....)

最佳答案

我可能会首先使用聚合转换来计算每个组中的人数,然后按照您链接到的 top-K 示例进行操作。

alt.Chart(df).mark_bar().encode(
x='count:Q',
y=alt.Y('Sport:N',
sort=alt.SortField(field='count', order='descending', op='sum')
),
).transform_aggregate(
count='count()',
groupby=['Sport']
).transform_window(
window=[{'op': 'rank', 'as': 'rank'}],
sort=[{'field': 'count', 'order': 'descending'}]
).transform_filter('datum.rank <= 3')

enter image description here

请注意,在 Altair 版本 2.2(在我撰写本文时尚未发布)中,由于更改,alt.SortField 将重命名为 alt.EncodingSortField在底层 Vega-Lite 架构中。

(旁注:用于排序和窗口转换的 Altair API 目前相当笨重,但我们正在努力思考如何改进)

关于python - Altair/Vega-Lite 条形图 : filter top K bars from aggregated field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50855610/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com