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