基于机器学习的地震风险评估与可视化系统,采用Flask后端与Bootstrap前端,系统集成DBSCAN空间聚类算法与随机森林算法

地震数据分析系统

系统说明

地震数据分析系统是一个基于机器学习的地震风险评估与可视化平台,采用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 用户名(唯一)
email 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接口设计
- ✅ 数据分页与过滤功能

-
相关推荐
一起养小猫9 小时前
LeetCode100天Day12-删除重复项与删除重复项II
java·数据结构·算法·leetcode
jrlong9 小时前
HappyLLM task12 大模型训练流程实践
人工智能·深度学习·机器学习
呆头鸭L9 小时前
用vue3+ts+elementPlus+vite搭建electron桌面端应用
前端·vue.js·electron
aPurpleBerry9 小时前
React Hooks(数据驱动、副作用、状态传递、状态派生)
前端·react.js·前端框架
IT_陈寒9 小时前
2025年React生态最新趋势:我从Redux迁移到Zustand后性能提升40%的心得
前端·人工智能·后端
前端小臻9 小时前
react没有双向数据绑定是怎么实现数据实时变更的
前端·javascript·react.js
困惑阿三9 小时前
CSS 动效交互实验室
前端·css
小O的算法实验室9 小时前
2023年IEEE TITS SCI2区TOP,增强遗传算法+分布式随机多无人机协同区域搜索路径规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
强化试剂9 小时前
荧光标记利器 Alkyne-PEG-FITC;FITC-PEG-Alkyne:核心优势与行业价值
python·flask·pyqt·scipy