Я делаю точечный график удовлетворенности людей по возрасту:
alt.Chart(df).mark_circle().encode(
alt.X('d2_age', bin = True),
alt.Y('3_satisfied'),
size = 'count()'
)
Но вместо того, чтобы размер каждой метки был абсолютным числом, я хочу, чтобы он был пропорцией или процентом этого возрастного диапазона. Таким образом, вместо того, чтобы видеть, что 300 человек в возрасте 60 лет оценили свое удовлетворение на 7, вы увидите, что 50% людей в возрасте 60 лет сделали это.
Да, это возможно, но для такого рода вычислений вы должны выполнять биннинг и агрегацию с помощью трансформирует, а не с помощью ярлыков кодирования.
Вот пример типа диаграммы, о которой вы спрашиваете:
import altair as alt
import pandas as pd
import numpy as np
rng = np.random.RandomState(1)
df = pd.DataFrame({
'd2_age': rng.normal(40, 10, 100),
'3_satisfied': rng.randint(1, 11, 100)
})
alt.Chart(df).transform_bin(
'd2_age_binned', field='d2_age'
).transform_joinaggregate(
total='count()',
groupby=['d2_age_binned']
).transform_joinaggregate(
in_group='count()',
groupby=['d2_age_binned', '3_satisfied']
).transform_calculate(
percentage=alt.datum.in_group / alt.datum.total
).mark_circle().encode(
alt.X('d2_age_binned:Q', bin='binned'),
alt.Y('3_satisfied'),
alt.Size('percentage:Q', legend=alt.Legend(format='%', title='Percent in agegroup'))
)