python - 如何将熊猫时间序列拟合到 24 小时图?
问题描述
我有一个多个月的 pandas 时间序列,并且想计算一天中不同时间某个功能的出现次数。
即我想创建一个图表(使用 seaborn 或 matplotlib),其中 x 轴(0 到 24 小时)上的时间和 y 轴上列的相对出现次数(像这样)。
我不知道如何正确格式化时间序列以使其工作。
编辑:
这是我正在处理的数据样本。“开放数据通道类型”可以假设五种(在线、电话、移动、未知、其他)。我的目标是将每种类型绘制成一个图表,显示一天中的哪个时间出现哪种类型。
解决方案
您需要先准备绘图数据:
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))
结果(使用随机数据):