这是一个基于 Dash、Plotly、Pandas 和 SciPy 构建的异常数据可视化系统,主要用于时序数据的展示、异常区间定位,以及异常段与正常段的频域对比分析。
系统围绕时序异常分析提供 4 个核心页面:
- 首页:自动扫描
data/目录下的数据集,并展示数据集名称、文件大小、是否包含标注。 - 数据预览:按日期、时间、变量、异常类型进行筛选,并以多子图形式展示时序曲线。
- 异常可视化:按照异常类型查看异常事件,支持分页和 2×2、3×3、4×4 网格布局。
- 频域分析:从单个异常事件出发,对异常段和正常段进行 PSD、FFT 以及时频综合对比。
- Python 3.9 及以上
- 推荐使用
venv或 Conda 创建独立环境
pip install -r req.txt如果你希望沿用原始依赖文件,也可以执行:
pip install -r requirements.txtpython app.py启动后在浏览器访问:
http://localhost:8050
系统默认监听 0.0.0.0:8050,调试模式为开启状态。
项目会自动扫描 data/ 目录下的子文件夹,每个子文件夹代表一个数据集。每个数据集至少需要一个 data.csv,若有异常标注可额外提供 anno_data.csv。
目录示例:
data/
├── 数据集A/
│ ├── data.csv
│ └── anno_data.csv
└── 数据集B/
└── data.csv
| 列名 | 是否必需 | 说明 |
|---|---|---|
秒序号 |
是 | 连续秒级序号,系统会用它做切片和定位 |
时刻 |
是 | 小时制浮点时间,便于保留原始时间表达 |
time |
是 | 时间字符串,系统会转换成 datetime |
| 其他列 | 是 | 业务变量或传感器变量,每一列代表一个观测指标 |
说明:
time列需要能被 Pandas 正常解析。- 除
秒序号、时刻、time外,其余列都会被识别为可视化变量。
| 列名 | 是否必需 | 说明 |
|---|---|---|
date |
是 | 日期,格式示例:3月14日 |
start |
是 | 异常开始秒偏移 |
end |
是 | 异常结束秒偏移 |
type |
是 | 异常类型名称 |
说明:
start和end是相对于当天数据起点的秒偏移。- 系统会自动把标注换算成绝对时间区间,并叠加到图表上。
启动后先进入首页,点击目标数据集卡片,系统会把当前数据集写入会话状态,然后跳转到数据预览页面。
在数据预览页可以:
- 选择日期范围
- 输入开始时间和结束时间
- 勾选需要查看的变量
- 勾选需要高亮显示的异常类型
系统会按变量生成共享时间轴的多张折线图,并以半透明色块标出异常区间。
在异常可视化页可以:
- 按日期范围过滤异常事件
- 单选某一种异常类型
- 自定义展示变量
- 切换 2×2、3×3、4×4 网格布局
- 通过分页按钮浏览全部异常事件
每个子图都会展示异常前后约 30 秒的上下文,便于观察异常发生前后的波形变化。
在频域分析页可以:
- 选择单个变量
- 选择异常类型
- 选择具体异常事件
- 选择 FFT 窗口长度
- 在
PSD、FFT、时频对比三种模式间切换
系统会自动截取异常段,并选取一段长度相近的正常段作为对照,帮助分析异常是否带来了显著频谱差异。
| 部件 | 作用 |
|---|---|
| Dash | 构建整个 Web 应用和页面回调 |
| Plotly | 绘制折线图、子图、异常高亮区域 |
| Dash Bootstrap Components | 提供导航栏、表单、卡片、按钮等界面组件 |
| Pandas | 读取和清洗 csv 数据 |
| NumPy | 数值计算、FFT 处理 |
| SciPy | 进行 Welch 功率谱密度分析 |
| 文件/目录 | 作用 |
|---|---|
app.py |
应用主入口,负责导航栏、路由切换、全局布局 |
data_loader.py |
数据集扫描、数据读取、异常标注解析、时间切片 |
pages/home.py |
首页数据集选择逻辑 |
pages/preview.py |
数据预览页及筛选回调 |
pages/anomaly.py |
异常网格浏览和分页逻辑 |
pages/frequency.py |
频域分析与对照图构建 |
process_smap.py |
将原始 SMAP 数据转换为系统可识别格式 |
assets/style.css |
页面样式文件 |
img/img1.png |
项目运行示意图 |
如果原始数据不是系统要求的标准格式,可以参考 process_smap.py 进行预处理。该脚本会把 raw/SMAP.csv 转换为:
data/SMAP/data.csvdata/SMAP/anno_data.csv
执行方式:
python process_smap.py当前仓库只保留代码、配置和说明文件,不包含任何示例数据、原始数据或本地运行产物。
如果需要运行项目,请自行按上述格式准备数据后放入本地 data/ 目录;如需做原始数据转换,也请把原始文件放到本地 raw/ 目录后再执行脚本。
