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

如何基于DataFrame生成按小时与星期划分的死亡率热力图?

解决方案:绘制车祸死亡率热力图(小时×星期)

核心思路

你需要的是小时与星期组合维度的死亡率数据,而非单独小时或星期的统计值。下面是从数据计算到绘图的完整流程:

步骤1:计算每个(星期+小时)组合的死亡率

# 按星期和小时分组,分别统计致命、非致命车祸数量
fatal_counts = df[df.Fatal == 1].groupby(['Day of the Week', 'Hour of Day']).Fatal.count()
non_fatal_counts = df[df.Fatal == 2].groupby(['Day of the Week', 'Hour of Day']).Fatal.count()

# 计算组合维度的死亡率(转换为百分比)
mortality_rates = (fatal_counts / (fatal_counts + non_fatal_counts) * 100).reset_index()

步骤2:转换为热力图所需的二维矩阵

热力图需要行(星期)×列(小时)的结构化数据,用透视表完成转换:

# 生成透视表,行=星期,列=小时,值=死亡率
heatmap_data = mortality_rates.pivot(
    index='Day of the Week',
    columns='Hour of Day',
    values='Fatal'
)

# 填充缺失值(部分组合可能无车祸记录,用0替代)
heatmap_data = heatmap_data.fillna(0)

步骤3:绘制热力图

使用Seaborn库完成可视化:

import seaborn as sns
import matplotlib.pyplot as plt

# 配置绘图参数
sns.set(font_scale=1.2)
plt.figure(figsize=(16, 8))

# 绘制热力图,显示数值,设置配色和色标标签
ax = sns.heatmap(
    heatmap_data,
    annot=True,
    fmt='.2f',
    cmap='YlOrRd',
    cbar_kws={'label': '死亡率 (%)'}
)

# 设置轴标签和标题
ax.set_xlabel('一天中的小时')
ax.set_ylabel('星期几')
ax.set_title('车祸死亡率热力图(星期×小时)')

# 优化Y轴标签显示(避免旋转)
ax.set_yticklabels(ax.get_yticklabels(), rotation=0)

plt.show()

可选优化

  • 若需将星期数值替换为中文名称,可修改Y轴标签:
    ax.set_yticklabels(['周一', '周二', '周三', '周四', '周五', '周六', '周日'])
    
  • 可更换配色方案,比如cmap='viridis'或cmap='Blues',适配不同视觉需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:25:23