地震数据分析系统
系统说明
地震数据分析系统是一个基于机器学习的地震风险评估与可视化平台,采用Flask后端框架与Bootstrap前端框架构建。系统集成了DBSCAN空间聚类算法与随机森林分类器,能够对地震数据进行智能分析和风险预测。平台提供用户端与管理端双端功能,支持数据导入、清洗、可视化展示、风险评估及用户权限管理。系统采用SQLite数据库存储数据,使用ECharts实现交互式数据可视化,界面设计采用深色科技风格,支持响应式布局,为地震研究与管理决策提供数据支持。

功能说明
1. 用户认证与权限管理
用户认证模块提供完整的登录注册功能,支持用户名与邮箱双重认证方式。系统采用Flask-Login实现用户会话管理,支持"记住我"功能增强用户体验。权限管理分为普通用户与管理员角色,管理员可访问后台管理功能。注册时首个用户自动获得管理员权限,后续用户默认为普通用户。密码采用 werkzeug 进行哈希加密存储,确保账户安全。用户可通过安全退出功能结束会话,系统自动清理登录状态。


2. 数据可视化
数据可视化模块采用ECharts图表库实现多维度地震数据展示。全球地震分布地图支持按震级(M5+/M6+/M7+)与风险等级(低/中/高)双重过滤,点的大小根据震级动态调整。模块还包含震级分布饼图、深度分布柱状图、时间序列折线图等多图表展示,帮助用户快速理解地震数据特征。聚类分析结果地图展示DBSCAN识别的地震活跃带中心,点的大小表示该区域地震数量。所有图表支持鼠标悬停查看详细信息,提供良好的交互体验。



3. 数据分析
数据分析模块整合DBSCAN空间聚类与随机森林分类两种机器学习模型,能够自动识别地震活跃区域并预测地震风险等级。用户可通过界面触发模型训练,系统自动从数据库读取数据并更新模型预测结果。分析结果实时反映在数据库的cluster_label与risk_level字段中。模块提供API接口支持单条地震事件的风险预测,输入参数即可返回预测结果。分析功能帮助用户发现地震空间分布规律,为灾害预防与风险评估提供科学依据。

4. 管理端功能
管理端为管理员提供全面的数据与用户管理能力。仪表盘页面展示系统核心指标,包括用户总数、地震记录数与高风险事件数。用户管理页面支持查看所有注册用户信息。数据管理页面提供完整的CRUD操作,支持按时间分页查询地震数据,通过弹窗形式添加新数据、编辑现有数据与删除异常记录。模型管理页面提供模型训练入口,管理员可一键触发DBSCAN与随机森林模型训练,系统自动更新预测结果。所有操作提供实时反馈,确保数据一致性。



5. 机器学习模型集成
机器学习模块集成DBSCAN空间聚类算法与随机森林分类器。DBSCAN算法使用经度、纬度与震级作为特征,自动识别地震活跃区域并标记噪声点。随机森林分类器采用深度、震级、经度、纬度作为特征,基于监督学习预测地震风险等级(低/中/高)。模型训练过程包含数据标准化、训练测试集划分、模型评估与持久化存储,支持交叉验证评估模型性能。训练好的模型自动预测所有地震数据并更新数据库,同时提供单点预测API接口。模块输出轮廓系数、准确率等评估指标。

数据库表设计
users 表(用户表)
| 字段名 | 数据类型 | 约束 | 说明 |
|---|---|---|---|
| id | INTEGER | PRIMARY KEY | 用户ID(自增主键) |
| username | VARCHAR(80) | UNIQUE, NOT NULL | 用户名(唯一) |
| VARCHAR(120) | UNIQUE, NOT NULL | 电子邮箱(唯一) | |
| password_hash | VARCHAR(255) | NOT NULL | 密码哈希值(加密存储) |
| role | VARCHAR(20) | DEFAULT 'user' | 用户角色(user/admin) |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 账户创建时间 |
earthquake_data 表(地震数据表)
| 字段名 | 数据类型 | 约束 | 说明 |
|---|---|---|---|
| id | INTEGER | PRIMARY KEY | 地震记录ID(自增主键) |
| time | DATETIME | NOT NULL, INDEX | 地震发生时间(索引优化查询) |
| latitude | FLOAT | NOT NULL | 纬度 |
| longitude | FLOAT | NOT NULL | 经度 |
| depth | FLOAT | NOT NULL | 震源深度(km) |
| mag | FLOAT | NOT NULL | 震级 |
| mag_type | VARCHAR(10) | - | 震级类型(Mw/Ms/Mb等) |
| nst | INTEGER | - | 用于定位震相的台站数 |
| gap | FLOAT | - | 最近的台站之间的方位角间隔(度) |
| dmin | FLOAT | - | 最近台站的距离(km) |
| rms | FLOAT | - | 震源定位的均方根残差(秒) |
| place | VARCHAR(255) | - | 地震位置描述 |
| type | VARCHAR(50) | - | 地震类型 |
| horizontal_error | FLOAT | - | 水平误差(km) |
| depth_error | FLOAT | - | 深度误差(km) |
| mag_error | FLOAT | - | 震级误差 |
| mag_nst | INTEGER | - | 计算震级使用的台站数 |
| cluster_label | INTEGER | DEFAULT -1 | DBSCAN聚类标签(-1为噪声点) |
| risk_level | VARCHAR(20) | DEFAULT 'low' | 风险等级(low/medium/high) |
物理设计
技术架构
┌─────────────────────────────────────────────────────────┐
│ 前端层 │
├─────────────────────────────────────────────────────────┤
│ Bootstrap 5 + ECharts 5 + jQuery │
│ - 科技感深色主题界面 │
│ - 响应式布局设计 │
│ - 交互式数据可视化 │
└─────────────────────────────────────────────────────────┘
↕ HTTP/RESTful API
┌─────────────────────────────────────────────────────────┐
│ 后端层 │
├─────────────────────────────────────────────────────────┤
│ Flask 3.0.0 + Flask-Login + Flask-SQLAlchemy │
│ - 用户认证与会话管理 │
│ - 权限控制与路由保护 │
│ - RESTful API接口设计 │
└─────────────────────────────────────────────────────────┘
↕ SQLAlchemy ORM
┌─────────────────────────────────────────────────────────┐
│ 数据层 │
├─────────────────────────────────────────────────────────┤
│ SQLite 数据库 │
│ - users 表(用户数据) │
│ - earthquake_data 表(地震数据) │
└─────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────┐
│ 机器学习层 │
├─────────────────────────────────────────────────────────┤
│ Scikit-learn │
│ - DBSCAN 空间聚类算法(识别地震活跃带) │
│ - Random Forest 分类器(预测风险等级) │
│ - 模型持久化(Joblib) │
└─────────────────────────────────────────────────────────┘
### 目录结构
earthquake-analysis-system/
├── app/ # 应用主目录
│ ├── init .py # Flask应用工厂
│ ├── config.py # 配置文件
│ ├── models.py # 数据库模型定义
│ ├── admin/ # 管理端模块
│ │ ├── init .py
│ │ └── routes.py # 管理端路由
│ ├── api/ # API模块
│ │ ├── init .py
│ │ └── routes.py # API接口路由
│ ├── auth/ # 认证模块
│ │ ├── init .py
│ │ └── routes.py # 认证路由
│ ├── main/ # 主页模块
│ │ ├── init .py
│ │ └── routes.py # 主页路由
│ ├── services/ # 服务层
│ │ ├── init .py
│ │ ├── data_processing.py # 数据处理服务
│ │ └── ml_models.py # 机器学习模型服务
│ └── templates/ # 模板目录
│ ├── base.html # 基础模板
│ ├── auth/ # 认证页面
│ ├── admin/ # 管理端页面
│ └── main/ # 主页面
├── static/ # 静态文件目录
│ ├── css/ # 样式文件
│ ├── js/ # JavaScript文件
│ └── data/ # 数据文件
├── models/ # 机器学习模型目录
│ ├── dbscan_model.joblib # DBSCAN模型
│ ├── rf_model.joblib # 随机森林模型
│ └── scaler.joblib # 数据标准化器
├── instance/ # 实例配置目录
│ └── data.db # SQLite数据库文件
├── data_import.py # 数据导入脚本
├── generate_test_data.py # 测试数据生成脚本
├── train_models.py # 模型训练脚本
├── run.py # 应用启动文件
└── README.md # 项目说明文档
## 项目特色
- ✅ 基于机器学习的智能分析(DBSCAN聚类 + 随机森林分类)
- ✅ 交互式数据可视化(全球地图 + 多图表展示)
- ✅ 完善的用户权限管理(普通用户/管理员双角色)
- ✅ 科技感深色主题UI设计
- ✅ 响应式布局,支持移动端访问
- ✅ 完整的CRUD数据管理功能
- ✅ RESTful API接口设计
- ✅ 数据分页与过滤功能
-