Files
traffic-safe/readme.md
2026-01-04 10:16:34 +08:00

7.3 KiB
Raw Blame History

TrafficSafeAnalyzer

基于 Streamlit 的交通安全分析系统,支持事故数据分析、多模型预测、异常检测、策略评估和 AI 智能分析。

功能特性

核心功能模块

模块 功能说明
总览 可视化事故趋势、KPI 指标展示(今日/本周事故数、预测偏差、策略覆盖率等)
事故热点 识别高发路口,生成风险分级与整治建议
AI 分析 基于 DeepSeek API 生成专业分析报告和改进建议
预测模型 支持 ARIMA、KNN、GLM、SVR 等多模型预测对比
模型评估 对比各模型预测效果RMSE、MAE 等指标)
异常检测 基于 Isolation Forest 算法检测异常事故点
策略评估 评估单一交通策略实施效果
策略对比 多策略效果横向对比分析
情景模拟 模拟策略上线对事故趋势的影响

技术亮点

  • 支持实时自动刷新
  • 交互式 Plotly 图表
  • 多格式数据导出CSV、HTML
  • Docker 容器化部署
  • 中文分词支持jieba

项目结构

TrafficSafeAnalyzer/
├── app.py                 # 主应用入口
├── services/              # 业务逻辑层
│   ├── forecast.py        # 预测模型ARIMA、KNN、GLM、SVR
│   ├── hotspot.py         # 热点分析
│   ├── io.py              # 数据加载与清洗
│   ├── metrics.py         # 模型评估指标
│   └── strategy.py        # 策略评估
├── ui_sections/           # UI 组件层
│   ├── overview.py        # 总览页面
│   ├── forecast.py        # 预测页面
│   ├── model_eval.py      # 模型评估页面
│   ├── strategy_eval.py   # 策略评估页面
│   └── hotspot.py         # 热点分析页面
├── config/
│   └── settings.py        # 配置参数
├── docs/                  # 文档
│   ├── install.md         # 安装指南
│   └── usage.md           # 使用说明
├── Dockerfile             # Docker 配置
├── requirements.txt       # Python 依赖
└── environment.yml        # Conda 环境配置

安装步骤

前提条件

  • Python 3.8+(推荐 3.12
  • Git
  • 可选Docker用于容器化部署

方式一:本地安装

  1. 克隆仓库:
git clone https://github.com/tongnian0613/TrafficSafeAnalyzer.git
cd TrafficSafeAnalyzer
  1. 创建虚拟环境(推荐):
# 使用 conda
conda create -n trafficsa python=3.12 -y
conda activate trafficsa

# 或使用 venv
python -m venv venv
source venv/bin/activate  # Linux/macOS
# venv\Scripts\activate   # Windows
  1. 安装依赖:
pip install -r requirements.txt
  1. 运行应用:
streamlit run app.py

方式二Docker 部署

# 构建镜像
docker build -t trafficsafeanalyzer .

# 运行容器
docker run --rm -p 8501:8501 trafficsafeanalyzer

访问 http://localhost:8501 即可使用。

如需挂载本地数据目录:

docker run --rm -p 8501:8501 \
  -v "$(pwd)/data:/app/data" \
  trafficsafeanalyzer

自定义端口:

docker run --rm -p 8080:8501 \
  -e STREAMLIT_SERVER_PORT=8501 \
  trafficsafeanalyzer

依赖项

核心依赖

包名 版本要求 用途
streamlit >=1.20.0 Web 应用框架
pandas >=1.3.0 数据处理
numpy >=1.21.0 数值计算
matplotlib >=3.4.0 静态图表
plotly >=5.0.0 交互式图表
scikit-learn >=1.0.0 机器学习模型
statsmodels >=0.13.0 统计模型ARIMA

可选依赖

包名 用途
scipy 统计检验t-test、Mann-Whitney U
streamlit-autorefresh 页面自动刷新
openpyxl / xlrd Excel 文件读写
openai AI 分析(兼容 DeepSeek API
jieba 中文分词
cryptography 安全加密

使用说明

数据格式要求

事故数据 Excel

必需列 说明
事故时间 事故发生时间
所在街道 事故地点
事故类型 事故分类

可选列:region(区域)、严重程度等

策略数据 Excel

必需列 说明
发布时间 策略发布日期
交通策略类型 策略分类

基本操作流程

  1. 启动应用后在左侧边栏上传事故数据和策略数据Excel 格式)
  2. 设置全局筛选器:区域、时间范围、策略类型
  3. 点击"应用数据与筛选"按钮加载数据
  4. 在顶部标签页切换不同功能模块进行分析

AI 分析配置

系统使用 DeepSeek API 进行 AI 智能分析:

配置项 默认值 说明
API Key 预填示例密钥 可在侧边栏替换为自有密钥
Base URL https://api.deepseek.com DeepSeek API 地址

AI 分析功能可生成:

  • 核心指标洞察
  • 策略绩效评估
  • 短期/中期/长期优化建议

输出文件

类型 文件名示例 说明
预测结果 arima_forecast.csv ARIMA 模型预测数据
模型评估 model_evaluation.csv 各模型指标对比
异常检测 anomalies.csv 异常日期列表
策略对比 strategy_compare.csv 策略效果对比表
交互图表 simulation.html Plotly 图表导出

配置参数

环境变量

变量名 说明 默认值
LOG_LEVEL 日志级别 INFO
STREAMLIT_SERVER_PORT 服务端口 8501
STREAMLIT_SERVER_HEADLESS 无头模式 trueDocker 中)

模型参数

配置文件:config/settings.py

# ARIMA 参数搜索范围
ARIMA_P = range(0, 4)
ARIMA_D = range(0, 2)
ARIMA_Q = range(0, 4)

# 预测与评估
DEFAULT_HORIZON_PREDICT = 30  # 默认预测天数
DEFAULT_HORIZON_EVAL = 14     # 默认评估窗口
MIN_PRE_DAYS = 5              # 最小历史数据天数
MAX_PRE_DAYS = 120            # 最大历史数据天数

# 异常检测
ANOMALY_N_ESTIMATORS = 50     # Isolation Forest 估计器数量
ANOMALY_CONTAMINATION = 0.10  # 预期异常比例

常见问题

问题 解决方案
ModuleNotFoundError 运行 pip install -r requirements.txt
数据加载失败 检查 Excel 文件格式,确保包含必需列名
预测图表未显示 确保干预日期前至少有 10 条历史数据
AI 分析无响应 检查 API Key 有效性及网络连接
热点分析提示无数据 先上传事故数据并点击"应用数据与筛选"

更新日志

参见 CHANGELOG.md

当前版本v1.1.0

v1.1.0 主要更新

  • 集成 DeepSeek AI 分析功能(流式输出)
  • 新增事故热点分析模块
  • 优化预测模型性能
  • 支持 Docker 容器化部署
  • 改进数据可视化交互体验
  • 修复多标签页导航状态问题

升级指南

# 备份现有数据
cp -r data data_backup

# 拉取最新代码
git pull origin main

# 更新依赖
pip install -r requirements.txt --upgrade

# 重启应用
streamlit run app.py

许可证

MIT License - 详见 LICENSE

贡献

欢迎提交 Issue 和 Pull Request。


GitHub license