You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Altair按多变量分组统计Hit/Miss与sza的月度关联?

解决思路与代码示例

步骤1:数据预处理

首先从时间戳提取月份、季节,并对太阳天顶角(sza)做分箱处理,这是后续统计和绘图的基础。假设你的数据集已用pandas读入为df:

import pandas as pd

# 确保时间戳为datetime类型
df['timestamp'] = pd.to_datetime(df['timestamp'])

# 提取月份(1-12)
df['month'] = df['timestamp'].dt.month

# 划分季节(以北半球为例,可根据实际需求调整)
df['season'] = pd.cut(
    df['month'],
    bins=[0, 3, 6, 9, 12],
    labels=['冬季', '春季', '夏季', '秋季']
)

# 对sza分箱,这里按0-30°、30-60°、60-90°划分,可自行修改区间
df['sza_bin'] = pd.cut(
    df['sza'],
    bins=[0, 30, 60, 90],
    labels=['0-30°', '30-60°', '60-90°']
)

步骤2:统计各类别数量

按月份/季节、sza分箱、Hit/Miss分类分组,统计每组的样本数量:

# 按月份统计
monthly_count = df.groupby(['month', 'sza_bin', 'Hit/Miss']).size().reset_index(name='count')

# 按季节统计(用于分析季节关联)
seasonal_count = df.groupby(['season', 'sza_bin', 'Hit/Miss']).size().reset_index(name='count')

步骤3:用Altair绘制可视化图表

图表1:每月各Hit/Miss类别在不同sza分箱的数量分布

用分组柱状图展示,以月份为横轴,数量为纵轴,颜色区分Hit/Miss类别,列区分sza分箱,直观呈现每月的分布差异:

import altair as alt

month_chart = alt.Chart(monthly_count).mark_bar().encode(
    x=alt.X('month:O', title='月份'),  # O表示离散型数据
    y=alt.Y('count:Q', title='样本数量'),  # Q表示连续型数据
    color=alt.Color('Hit/Miss:N', title='Hit/Miss分类'),  # N表示标称型数据
    column=alt.Column('sza_bin:N', title='太阳天顶角分箱'),
    tooltip=['month', 'sza_bin', 'Hit/Miss', 'count']  # 鼠标悬停显示详细信息
).properties(
    width=180,
    height=350,
    title='每月Hit/Miss类别在不同SZA分箱中的数量分布'
)

month_chart.show()

图表2:各季节Hit/Miss类别在不同sza分箱的数量分布

如果重点分析季节关联,将横轴替换为季节即可:

season_chart = alt.Chart(seasonal_count).mark_bar().encode(
    x=alt.X('season:O', title='季节'),
    y=alt.Y('count:Q', title='样本数量'),
    color=alt.Color('Hit/Miss:N', title='Hit/Miss分类'),
    column=alt.Column('sza_bin:N', title='太阳天顶角分箱'),
    tooltip=['season', 'sza_bin', 'Hit/Miss', 'count']
).properties(
    width=180,
    height=350,
    title='各季节Hit/Miss类别在不同SZA分箱中的数量分布'
)

season_chart.show()

注意事项

  • 若你的sza范围不是0-90°,可调整pd.cut的bins参数,添加对应区间。
  • 季节划分可根据所在半球修改,比如南半球冬季为6-8月,需同步调整labels和bins。
  • 若数据存在缺失值,建议先执行df = df.dropna(subset=['sza', 'Hit/Miss'])清理无效数据。

内容的提问来源于stack exchange,提问作者confused student

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:15:49