时间序列事件频率可视化:10秒窗口统计与直方图绘制
统计10秒窗口内时间序列数据点数量并绘制直方图
1. 导入原始数据并转换为DataFrame
如果你的原始数据是逗号分隔的字符串形式,先将其转为DataFrame:
import pandas as pd raw_data = "00:00:08,00:00:24,00:00:27,00:00:36,00:00:36,00:00:37,00:00:42,00:00:43,00:00:44,00:00:47,00:00:54,00:00:57,00:00:57,00:01:09,00:01:16,00:01:18,00:01:21,00:01:25,00:01:26,00:01:33,00:01:33,00:01:33,00:01:38,00:01:44,00:01:45,00:01:53,00:01:57,00:02:01,00:02:03,00:02:19,00:02:20,00:02:33,00:02:33,00:02:34,00:02:48,00:02:50,00:03:12,00:03:21,00:03:23,00:03:24,00:03:28,00:03:34,00:03:34,00:03:35,00:03:38,00:03:39,00:03:40,00:03:40,00:03:42,00:03:42,00:03:48,00:03:49,00:03:54,00:03:55,00:04:03,00:04:06,00:04:07,00:04:10,00:04:11,00:04:16,00:04:21,00:04:26,00:04:27,00:04:27,00:04:28,00:04:30,00:04:33,00:04:41,00:04:49,00:04:50,00:04:51,00:04:54,00:04:55,00:04:59,00:05:16,00:05:16,00:05:27,00:05:34,00:05:37,00:05:46,00:05:50,00:05:53,00:06:07,00:06:16,00:06:24,00:06:25,00:06:26,00:06:30,00:06:38,00:06:38,00:06:42,00:06:44,00:06:46,00:06:53,00:07:00,00:07:00" time_list = raw_data.split(',') df = pd.DataFrame({'time': time_list})
2. 转换时间格式并设置索引
将字符串类型的时间转为datetime格式,同时设置为DataFrame索引,方便后续窗口统计:
# 转换为HH:MM:SS格式的datetime对象 df['time'] = pd.to_datetime(df['time'], format='%H:%M:%S') # 设置时间列为索引 df = df.set_index('time')
3. 按10秒窗口统计数据点数量
使用resample方法按10秒窗口分组,统计每个窗口内的数据点数量:
# 按10秒窗口重采样,统计每组记录数 window_counts = df.resample('10S').count() # 重命名列名,便于识别 window_counts = window_counts.rename(columns={window_counts.columns[0]: '数据点数量'})
4. 绘制条形图(直方图)
用matplotlib或seaborn绘制可视化结果,展示每个10秒窗口的数据分布:
方法1:使用matplotlib
import matplotlib.pyplot as plt plt.figure(figsize=(12, 6)) # 绘制条形图 plt.bar(window_counts.index.strftime('%H:%M:%S'), window_counts['数据点数量'], width=0.8) # 旋转x轴标签,避免重叠 plt.xticks(rotation=45, ha='right') # 添加标题和坐标轴标签 plt.title('10秒窗口内数据点数量分布') plt.xlabel('10秒窗口起始时间') plt.ylabel('数据点数量') # 调整布局,防止标签被截断 plt.tight_layout() plt.show()
方法2:使用seaborn(更美观的样式)
import seaborn as sns plt.figure(figsize=(12, 6)) sns.barplot(x=window_counts.index.strftime('%H:%M:%S'), y=window_counts['数据点数量']) plt.xticks(rotation=45, ha='right') plt.title('10秒窗口内数据点数量分布') plt.xlabel('10秒窗口起始时间') plt.ylabel('数据点数量') plt.tight_layout() plt.show()
补充说明
- 如果时间数据包含日期部分,只需修改
pd.to_datetime的format参数,例如%Y-%m-%d %H:%M:%S resample('10S')默认从第一个数据点的时间开始生成窗口,若需指定起始点,可添加origin='start'或origin='epoch'参数
内容的提问来源于stack exchange,提问作者inobrevi
相关产品推荐
相关产品推荐

