搭建完整的前后端分离架构,实现数据概览、预测分析、聚类分析等核心功能模块 详细版: feat: 初始化员工缺勤分析系统项目 - 后端:基于 Flask 搭建 RESTful API,包含数据概览、特征分析、预测模型、聚类分析四大模块 - 前端:基于 Vue.js 构建单页应用,实现 Dashboard、预测、聚类、因子分析等页面 - 模型:集成随机森林、XGBoost、LightGBM、Stacking 等多种机器学习模型 - 文档:完成需求规格说明、系统架构设计、接口设计、数据设计、UI原型设计等文档
112 lines
6.9 KiB
Markdown
112 lines
6.9 KiB
Markdown
这是一个典型的**前后端分离**架构的毕设项目结构。为了契合你的题目《基于多维特征挖掘的员工缺勤分析与预测系统设计与实现》,我们将项目分为 `Backend`(Python 后端,负责算法与逻辑)和 `Frontend`(Vue 前端,负责展示与交互)。
|
||
以下是详细的工程目录结构及说明:
|
||
---
|
||
### 📁 项目根目录:Absenteeism_Analysis_System/
|
||
```
|
||
Absenteeism_Analysis_System/
|
||
│
|
||
├── backend/ # 后端项目目录 (Python/Flask)
|
||
│ ├── app.py # 程序入口文件 (启动服务)
|
||
│ ├── config.py # 配置文件 (路径、密钥等)
|
||
│ ├── requirements.txt # Python依赖库清单 (pandas, scikit-learn, flask等)
|
||
│ │
|
||
│ ├── data/ # 数据存储目录
|
||
│ │ ├── raw/ # 原始数据集
|
||
│ │ │ └── Absenteeism_at_work.csv # 从UCI下载的原始数据
|
||
│ │ └── processed/ # 处理后的数据集
|
||
│ │ └── clean_data.csv # 经过清洗、编码后的数据
|
||
│ │
|
||
│ ├── models/ # 模型存储目录
|
||
│ │ ├── rf_model.pkl # 训练好的随机森林模型文件
|
||
│ │ ├── xgb_model.pkl # 训练好的XGBoost模型文件
|
||
│ │ └── kmeans_model.pkl # 聚类模型文件
|
||
│ │
|
||
│ ├── core/ # 核心算法模块 (对应论文的“多维特征挖掘”)
|
||
│ │ ├── __init__.py
|
||
│ │ ├── preprocessing.py # 数据预处理:缺失值填充、独热编码、归一化
|
||
│ │ ├── feature_mining.py # 特征挖掘:相关性分析、特征重要性计算
|
||
│ │ ├── train_model.py # 模型训练脚本:训练RF/XGBoost并保存模型
|
||
│ │ └── clustering.py # 聚类分析:K-Means算法实现
|
||
│ │
|
||
│ ├── services/ # 业务逻辑层
|
||
│ │ ├── __init__.py
|
||
│ │ ├── analysis_service.py # 分析服务:调用特征挖掘模块,返回图表数据
|
||
│ │ ├── predict_service.py # 预测服务:加载模型,进行推理
|
||
│ │ └── data_service.py # 数据服务:读取CSV,提供基础统计
|
||
│ │
|
||
│ ├── api/ # API接口层 (路由)
|
||
│ │ ├── __init__.py
|
||
│ │ ├── analysis_routes.py # 接口:获取特征重要性、相关性等
|
||
│ │ ├── predict_routes.py # 接口:接收前端表单,返回预测结果
|
||
│ │ └── cluster_routes.py # 接口:返回聚类结果/员工画像
|
||
│ │
|
||
│ └── utils/ # 工具函数
|
||
│ └── common.py # 通用工具:JSON封装、CORS处理等
|
||
│
|
||
├── frontend/ # 前端项目目录
|
||
│ ├── public/ # 静态资源
|
||
│ ├── src/
|
||
│ │ ├── assets/ # 资源文件 (图片、样式)
|
||
│ │ ├── components/ # 公共组件
|
||
│ │ │ ├── ChartComponent.vue # ECharts图表封装组件
|
||
│ │ │ └── ResultCard.vue # 预测结果展示卡片
|
||
│ │ │
|
||
│ │ ├── views/ # 页面视图 (对应你的前端设计)
|
||
│ │ │ ├── Dashboard.vue # 页面一:数据概览与统计
|
||
│ │ │ ├── FactorAnalysis.vue # 页面二:影响因素分析 (核心)
|
||
│ │ │ ├── Prediction.vue # 页面三:缺勤预测 (输入表单+结果)
|
||
│ │ │ └── Clustering.vue # 页面四:员工画像与聚类
|
||
│ │ │
|
||
│ │ ├── router/ # 路由配置
|
||
│ │ │ └── index.js
|
||
│ │ ├── api/ # 前端API调用封装
|
||
│ │ │ └── request.js # 配置axios,连接后端接口
|
||
│ │ ├── App.vue # 根组件
|
||
│ │ └── main.js # 入口文件
|
||
│ │
|
||
│ ├── package.json # 前端依赖 (vue, element-plus, echarts)
|
||
│ └── vite.config.js # Vue构建配置 (如果用Vite) 或 vue.config.js
|
||
│
|
||
└── README.md # 项目说明文档
|
||
```
|
||
---
|
||
### 🔧 核心模块功能详解(对应论文)
|
||
#### 1. 后端 `core/` 模块详解
|
||
这是你论文中“算法设计”部分的代码落地:
|
||
* **`preprocessing.py`**:
|
||
* 实现 `OneHotEncoder` 处理 `Reason for absence` 等类别。
|
||
* 实现 `StandardScaler` 处理 `Transportation expense` 等数值。
|
||
* 实现 `get_clean_data()` 函数,供其他模块调用。
|
||
* **`feature_mining.py`**:
|
||
* 实现 `calculate_correlation()`: 使用 Pandas 计算相关系数矩阵。
|
||
* 实现 `get_feature_importance()`: 加载随机森林模型,提取 `feature_importances_`。
|
||
* **`train_model.py`**:
|
||
* 包含 `train_rf()` 和 `train_xgboost()` 函数。
|
||
* 负责划分训练集/测试集,计算 MSE/R2,并保存 `.pkl` 文件。
|
||
* **`clustering.py`**:
|
||
* 包含 `kmeans_analysis()` 函数。
|
||
* 对员工进行分类,并返回每个簇的中心点数据(用于画雷达图)。
|
||
#### 2. 后端 `api/` 模块详解
|
||
这是前后端交互的桥梁:
|
||
* **`analysis_routes.py`**:
|
||
* 路由: `/api/analysis/importance`
|
||
* 作用: 调用 `feature_mining.py`,返回格式化后的 JSON (例如 `{'feature': 'Distance', 'score': 0.45}`) 供前端画柱状图。
|
||
* **`predict_routes.py`**:
|
||
* 路由: `/api/predict/single`
|
||
* 作用: 接收前端 POST 过来的 JSON (表单数据),调用 `predict_service.py` 加载模型,返回预测的小时数。
|
||
#### 3. 前端 `views/` 模块详解
|
||
这是你论文中“系统实现”部分的展示:
|
||
* **`FactorAnalysis.vue`**:
|
||
* 引入 `ECharts`。
|
||
* `mounted()` 生命周期里调用 `/api/analysis/importance`。
|
||
* 渲染:横向柱状图(特征重要性)、热力图(相关性矩阵)。
|
||
* **`Prediction.vue`**:
|
||
* 左侧:`el-form` 表单,字段包含 `age`, `distance`, `drink` 等。
|
||
* 右侧:`el-card`,初始状态为空,点击“开始预测”后,显示返回的 `hours` 和风险等级(红/黄/绿标签)。
|
||
---
|
||
### 💡 为什么要这样设计?
|
||
1. **分层清晰(MVC模式)**:`core` 专心算算法,`services` 处理业务,`api` 管接口。这在答辩时非常有优势,老师会觉得你代码结构规范,软件工程素养好。
|
||
2. **算法模块化**:你没有把算法代码直接写在接口文件里,而是单独封装了 `core` 目录。这意味着如果以后你想换算法(比如不用随机森林改用神经网络),只需要改 `core` 里的代码,不需要动接口,这叫**“高内聚低耦合”**。
|
||
3. **数据隔离**:原始数据 (`raw`) 和 清洗数据 (`processed`) 分开,训练好的模型单独放在 `models`,这样项目管理非常干净,不会一团乱麻。
|
||
按照这个结构去写代码和画图(系统架构图、时序图),你的论文逻辑会非常顺畅!
|