feat: 初始化员工缺勤分析系统项目

搭建完整的前后端分离架构,实现数据概览、预测分析、聚类分析等核心功能模块

  详细版:
  feat: 初始化员工缺勤分析系统项目

  - 后端:基于 Flask 搭建 RESTful API,包含数据概览、特征分析、预测模型、聚类分析四大模块
  - 前端:基于 Vue.js 构建单页应用,实现 Dashboard、预测、聚类、因子分析等页面
  - 模型:集成随机森林、XGBoost、LightGBM、Stacking 等多种机器学习模型
  - 文档:完成需求规格说明、系统架构设计、接口设计、数据设计、UI原型设计等文档
This commit is contained in:
2026-03-08 14:48:26 +08:00
commit a39d8b2fd2
48 changed files with 9546 additions and 0 deletions

111
docs/1.md Normal file
View File

@@ -0,0 +1,111 @@
这是一个典型的**前后端分离**架构的毕设项目结构。为了契合你的题目《基于多维特征挖掘的员工缺勤分析与预测系统设计与实现》,我们将项目分为 `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`,这样项目管理非常干净,不会一团乱麻。
按照这个结构去写代码和画图(系统架构图、时序图),你的论文逻辑会非常顺畅!