首页 > 解决方案 > 如何将熊猫时间序列拟合到 24 小时图?

问题描述

我有一个多个月的 pandas 时间序列,并且想计算一天中不同时间某个功能的出现次数。

即我想创建一个图表(使用 seaborn 或 matplotlib),其中 x 轴(0 到 24 小时)上的时间和 y 轴上列的相对出现次数(像这样)

我不知道如何正确格式化时间序列以使其工作。

编辑

这是我正在处理的数据样本。“开放数据通道类型”可以假设五种(在线、电话、移动、未知、其他)。我的目标是将每种类型绘制成一个图表,显示一天中的哪个时间出现哪种类型。

标签: pythonpandasmatplotlibseaborn

解决方案


您需要先准备绘图数据:

hour = df['Created Date'].dt.hour.rename('Hour')
df_plot = df.groupby(hour).apply(lambda x: x['Open Data Channel Type'].value_counts() / x.shape[0]) \
            .rename_axis(index=['Hour', 'Channel Type']) \
            .to_frame('Frequency') \
            .reset_index()

样本df_plot

   Hour Channel Type  Frequency
0     0        OTHER   0.223744
1     0        PHONE   0.210046
2     0       MOBILE   0.205479
3     0      UNKNOWN   0.198630
4     0       ONLINE   0.162100
5     1      UNKNOWN   0.206311
6     1        OTHER   0.203883
7     1        PHONE   0.201456
8     1       MOBILE   0.196602
9     1       ONLINE   0.191748

然后你可以制作情节(这里使用 Seaborn):

ax = sns.lineplot(data=df_plot, x='Hour', y='Frequency', hue='Channel Type')
ax.figure.set_size_inches(10, 4)
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))

结果(使用随机数据):

相对频率图


推荐阅读