【问题标题】:How to create a seaborn heatmap by hour/day from timestamp with multiple data points per hour如何根据每小时多个数据点的时间戳按小时/天创建 seaborn 热图
【发布时间】:2020-10-16 11:28:39
【问题描述】:

我有一个带有date 列的数据框,该列是timestamp。一天中每小时有多个数据点,例如2014-1-1 13:10, 2014-1-1 13:20 等。我想对特定日期同一小时的数据点进行分组,然后使用 seaborn 创建热图并绘制不同的列。

我曾尝试使用groupby,但我不确定如何指定我想要hourday

date             data
2014-1-1 13:10  50
2014-1-1 13:20  51
2014-1-1 13:30  51
2014-1-1 13:40  56
2014-1-1 13:50  67
2014-1-1 14:00  43
2014-1-1 14:10  78
2014-1-1 14:20  45
2014-1-1 14:30  58 

我想按平均值合并数据

【问题讨论】:

  • 你想如何组合一小时内的数据点?您还应该在问题中包含一些示例数据。
  • @QuangHoang对不起,我已经用一些示例数据编辑了这个问题。我想按小时平均值合并数据

标签: python matplotlib seaborn


【解决方案1】:

您可以使用dt.strftime('%H') 获取小时数,使用dt.strftime('%Y-%m-%D')dt.normalize() 获取天数

sns.heatmap(df.groupby([df.date.dt.normalize(), df.date.dt.strftime('%H:00')])
   ['data'].mean()
   .rename_axis(index=['day','hour'])
   .unstack(level=0)
)

输出:


更新:在这几周内,我们可以使用类似的方法

s = (df.groupby([df.date.dt.isocalendar().week,
                 df.date.dt.strftime('%Y-%m-%d'), 
                 df.date.dt.strftime('%H:00')])
       ['data'].mean()
       .rename_axis(index=['week','day','hour'])
    )

fig, axes = plt.subplots(2,2, figsize=(10,10))
for w, ax in zip(s.index.unique('week'), axes.ravel()):
    sns.heatmap(s.loc[w].unstack(level='day'), ax=ax)
    ax.set_title(f'Week {w}')

输出:

【讨论】:

  • 对于更大的数据集(我正在绘制 4 周的数据)是否可以按周拆分热图?
  • @TBolton 按周划分是什么意思?
  • 我正在绘制 4 周的数据,而不是一个大的热图,我想将它分成 4 个热图,一个用于每周的数据。
猜你喜欢
  • 1970-01-01
  • 2019-01-10
  • 2020-05-06
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2013-06-13
相关资源
最近更新 更多