计算并绘制时间序列DataFrame中客户交互类型的滚动占比
滚动时间窗口内交互类型占比计算与可视化
1. 数据预处理
先把时间戳列转成datetime格式并设为DataFrame索引,这是后续滚动计算的基础:
import pandas as pd import matplotlib.pyplot as plt # 示例数据 data = { 'interaction_type': ['Chat', 'Chat', 'Chat', 'Chat', 'Chat', 'Call', 'Chat', 'Email'], 'timestamps': ['2017-05-01 00:00:01', '2017-05-01 00:00:04', '2017-05-01 00:00:15', '2017-05-01 00:00:15', '2017-05-01 00:00:21', '2017-05-01 00:00:24', '2017-05-01 00:00:31', '2017-05-01 00:00:32'] } df = pd.DataFrame(data) # 转换时间戳格式并设置为索引 df['timestamps'] = pd.to_datetime(df['timestamps']) df = df.set_index('timestamps')
2. 生成交互类型哑变量
用get_dummies把分类类型转成二进制列,方便后续统计各类型的出现次数:
df_dummies = pd.get_dummies(df['interaction_type'], dtype=int)
3. 滚动窗口计算占比
全程采用矢量化操作,避免循环,适配大数据集:
# 定义滚动时间窗口,比如'5s'、'10s'、'1min' window_size = '5s' # 计算窗口内各交互类型的累计数量 rolling_counts = df_dummies.rolling(window_size).sum() # 计算窗口内总交互次数 rolling_total = rolling_counts.sum(axis=1) # 计算各类型占比,加1e-10避免除以0的情况 rolling_ratios = rolling_counts.div(rolling_total + 1e-10, axis=0)
注:如果业务场景中滚动窗口不可能为空,可以去掉
+1e-10。
4. 绘制可视化曲线
把各类型的滚动占比和时间戳绘在同一张图中:
plt.figure(figsize=(10, 6)) # 遍历每个交互类型,绘制曲线 for interaction_type in rolling_ratios.columns: plt.plot(rolling_ratios.index, rolling_ratios[interaction_type], label=interaction_type) plt.xlabel('时间戳') plt.ylabel('滚动占比') plt.title(f'{window_size}滚动窗口内交互类型占比') plt.legend() plt.xticks(rotation=45) plt.tight_layout() plt.show()
核心优势
- 完全依赖pandas原生矢量化运算,处理百万级数据集效率极高
- 支持任意时间格式的滚动窗口(秒、分钟、小时等)
- 自动处理重复时间戳的情况,无需额外逻辑
内容的提问来源于stack exchange,提问作者beaglul
相关产品推荐
相关产品推荐

