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

如何用Python将带起止时间的事件转换为并发数时间序列

事件并发数统计与可视化自动化实现

核心思路

把每个事件的开始时间标记为「并发数+1」的事件,结束时间标记为「并发数-1」的事件;将所有时间点排序后,按时间顺序累加这些变化值,就能得到任意时刻的并发数。再基于这个结果生成连续时间序列,最后完成可视化。

代码实现步骤

1. 导入依赖库

import pandas as pd
import matplotlib.pyplot as plt

2. 准备/加载事件数据

假设你的事件数据是包含start_time和end_time的结构,这里用示例数据演示(可直接替换为你的实际数据):

# 示例事件数据
events = [
    {"start_time": "2024-05-20 09:00:00", "end_time": "2024-05-20 09:30:00"},
    {"start_time": "2024-05-20 09:15:00", "end_time": "2024-05-20 09:45:00"},
    {"start_time": "2024-05-20 09:20:00", "end_time": "2024-05-20 10:00:00"},
    {"start_time": "2024-05-20 09:50:00", "end_time": "2024-05-20 10:20:00"},
]

# 转为DataFrame并解析时间格式
df = pd.DataFrame(events)
df["start_time"] = pd.to_datetime(df["start_time"])
df["end_time"] = pd.to_datetime(df["end_time"])

3. 生成事件变化点

将每个事件拆分为「开始+1」和「结束-1」两个记录:

# 拆分开始事件
start_events = df[["start_time"]].rename(columns={"start_time": "timestamp"})
start_events["delta"] = 1

# 拆分结束事件
end_events = df[["end_time"]].rename(columns={"end_time": "timestamp"})
end_events["delta"] = -1

# 合并并排序所有事件点
all_events = pd.concat([start_events, end_events]).sort_values("timestamp")

4. 计算并发数时间序列

累加delta值得到每个时间点的并发数,再生成连续时间序列(按1分钟采样,可按需调整频率):

# 计算累计并发数
all_events["concurrent"] = all_events["delta"].cumsum()

# 生成连续时间序列(覆盖所有事件的时间范围)
min_time = all_events["timestamp"].min()
max_time = all_events["timestamp"].max()
time_range = pd.date_range(start=min_time, end=max_time, freq="1min")

# 合并到连续时间序列,填充缺失值(前向填充保证中间时刻并发数正确)
concurrent_ts = pd.merge(
    pd.DataFrame({"timestamp": time_range}),
    all_events,
    on="timestamp",
    how="left"
).fillna(method="ffill").fillna(0)  # 初始时刻并发数设为0

5. 绘制可视化图表

plt.figure(figsize=(12, 6))
plt.plot(concurrent_ts["timestamp"], concurrent_ts["concurrent"], marker="o", markersize=3, linestyle="-")

# 设置图表样式
plt.title("事件并发数变化趋势")
plt.xlabel("时间")
plt.ylabel("并发事件数量")
plt.grid(True, alpha=0.3)
plt.xticks(rotation=45)
plt.tight_layout()

# 保存或显示图表
plt.savefig("concurrent_events.png")
plt.show()

自定义调整点

  • 采样频率:修改pd.date_range的freq参数,比如"30s"(30秒)、"5min"(5分钟)
  • 时间精度:如果事件时间包含毫秒,确保pd.to_datetime解析逻辑适配
  • 异常处理:可添加对无效时间、重复事件的校验逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 03:15:03