搭建完整的前后端分离架构,实现数据概览、预测分析、聚类分析等核心功能模块 详细版: feat: 初始化员工缺勤分析系统项目 - 后端:基于 Flask 搭建 RESTful API,包含数据概览、特征分析、预测模型、聚类分析四大模块 - 前端:基于 Vue.js 构建单页应用,实现 Dashboard、预测、聚类、因子分析等页面 - 模型:集成随机森林、XGBoost、LightGBM、Stacking 等多种机器学习模型 - 文档:完成需求规格说明、系统架构设计、接口设计、数据设计、UI原型设计等文档
614 lines
37 KiB
Markdown
614 lines
37 KiB
Markdown
# 系统架构设计文档
|
||
|
||
## 基于多维特征挖掘的员工缺勤分析与预测系统
|
||
|
||
**文档版本**:V1.0
|
||
**编写日期**:2026年3月
|
||
**编写人**:张硕
|
||
|
||
---
|
||
|
||
## 1. 概述
|
||
|
||
### 1.1 设计目标
|
||
|
||
本系统架构设计旨在实现以下目标:
|
||
|
||
1. **高可用性**:系统稳定可靠,能够持续提供服务
|
||
2. **可扩展性**:便于后续功能扩展和算法升级
|
||
3. **可维护性**:代码结构清晰,便于理解和维护
|
||
4. **高性能**:快速响应前端请求,提供流畅的用户体验
|
||
|
||
### 1.2 设计原则
|
||
|
||
| 原则 | 说明 |
|
||
|------|------|
|
||
| 分层设计 | 前后端分离,后端采用三层架构 |
|
||
| 模块化 | 功能模块独立,高内聚低耦合 |
|
||
| 单一职责 | 每个模块只负责一个特定功能 |
|
||
| 开闭原则 | 对扩展开放,对修改关闭 |
|
||
| 接口隔离 | 接口设计精简,避免冗余 |
|
||
|
||
---
|
||
|
||
## 2. 系统架构
|
||
|
||
### 2.1 整体架构图
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ 用户层 (User Layer) │
|
||
│ 浏览器 (Chrome/Firefox/Edge) │
|
||
└─────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ 前端层 (Frontend Layer) │
|
||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||
│ │ Dashboard │ │ FactorAnalysis│ │ Prediction │ │ Clustering │ │
|
||
│ │ 数据概览 │ │ 影响因素 │ │ 缺勤预测 │ │ 员工画像 │ │
|
||
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ 公共组件 (ChartComponent, ResultCard) │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ Vue 3 + Element Plus + ECharts + Axios + Vue Router │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
│ HTTP/REST API
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ 后端层 (Backend Layer) │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ API Layer (api/) │ │
|
||
│ │ overview_routes │ analysis_routes │ predict_routes │ │
|
||
│ │ cluster_routes │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ Service Layer (services/) │ │
|
||
│ │ data_service │ analysis_service │ predict_service │ │
|
||
│ │ cluster_service │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ Core Layer (core/) │ │
|
||
│ │ preprocessing │ feature_mining │ train_model │ │
|
||
│ │ clustering │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||
│ │ Flask + scikit-learn + XGBoost + pandas │ │
|
||
│ └─────────────────────────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────────────┐
|
||
│ 数据层 (Data Layer) │
|
||
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
|
||
│ │ data/raw/ │ │ data/processed/ │ │ models/ │ │
|
||
│ │ 原始CSV数据 │ │ 处理后数据 │ │ 模型文件.pkl │ │
|
||
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
|
||
└─────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 2.2 技术架构
|
||
|
||
```
|
||
┌────────────────────────────────────────────────────────────────┐
|
||
│ 技术栈总览 │
|
||
├────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ 前端技术栈 后端技术栈 │
|
||
│ ┌──────────────────┐ ┌──────────────────┐ │
|
||
│ │ Vue 3 │ │ Python 3.8+ │ │
|
||
│ │ Element Plus │ │ Flask │ │
|
||
│ │ ECharts 5 │ ◄─────► │ scikit-learn │ │
|
||
│ │ Axios │ HTTP │ XGBoost │ │
|
||
│ │ Vue Router │ REST │ pandas │ │
|
||
│ │ Vite │ │ numpy │ │
|
||
│ └──────────────────┘ │ joblib │ │
|
||
│ └──────────────────┘ │
|
||
│ │
|
||
│ 算法技术 数据存储 │
|
||
│ ┌──────────────────┐ ┌──────────────────┐ │
|
||
│ │ 随机森林 (RF) │ │ CSV文件 │ │
|
||
│ │ XGBoost │ │ PKL模型文件 │ │
|
||
│ │ K-Means │ │ JSON响应 │ │
|
||
│ │ StandardScaler │ │ │ │
|
||
│ │ OneHotEncoder │ │ │ │
|
||
│ └──────────────────┘ └──────────────────┘ │
|
||
│ │
|
||
└────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 2.3 部署架构
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 单机部署架构 │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||
│ │ 服务器 │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────────┐ ┌─────────────────┐ │ │
|
||
│ │ │ Flask Server │ │ Vite Dev │ │ │
|
||
│ │ │ Port: 5000 │ │ Port: 5173 │ │ │
|
||
│ │ │ │ │ │ │ │
|
||
│ │ │ - REST API │ │ - Vue App │ │ │
|
||
│ │ │ - ML Models │ │ - Static │ │ │
|
||
│ │ │ - Data Files │ │ │ │ │
|
||
│ │ └─────────────────┘ └─────────────────┘ │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────────────────────────────────────────┐ │ │
|
||
│ │ │ 文件系统 │ │ │
|
||
│ │ │ /backend/data/ - 数据文件 │ │ │
|
||
│ │ │ /backend/models/ - 模型文件 │ │ │
|
||
│ │ │ /frontend/dist/ - 前端构建产物 │ │ │
|
||
│ │ └─────────────────────────────────────────────────┘ │ │
|
||
│ │ │ │
|
||
│ └─────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 后端架构设计
|
||
|
||
### 3.1 分层设计
|
||
|
||
后端采用经典的三层架构,各层职责明确:
|
||
|
||
| 层级 | 目录 | 职责 | 依赖关系 |
|
||
|------|------|------|----------|
|
||
| API层 | api/ | 接收HTTP请求,参数校验,调用服务层,返回响应 | 依赖Service层 |
|
||
| Service层 | services/ | 业务逻辑处理,协调Core层和Data层 | 依赖Core层 |
|
||
| Core层 | core/ | 核心算法实现,数据处理,模型训练 | 无依赖 |
|
||
|
||
### 3.2 模块划分
|
||
|
||
```
|
||
backend/
|
||
├── app.py # 应用入口,Flask实例配置
|
||
├── config.py # 配置文件(路径、参数等)
|
||
├── requirements.txt # Python依赖清单
|
||
│
|
||
├── api/ # API接口层
|
||
│ ├── __init__.py
|
||
│ ├── overview_routes.py # 数据概览接口
|
||
│ ├── analysis_routes.py # 影响因素分析接口
|
||
│ ├── predict_routes.py # 预测接口
|
||
│ └── cluster_routes.py # 聚类接口
|
||
│
|
||
├── services/ # 业务逻辑层
|
||
│ ├── __init__.py
|
||
│ ├── data_service.py # 数据服务
|
||
│ ├── analysis_service.py # 分析服务
|
||
│ ├── predict_service.py # 预测服务
|
||
│ └── cluster_service.py # 聚类服务
|
||
│
|
||
├── core/ # 核心算法层
|
||
│ ├── __init__.py
|
||
│ ├── preprocessing.py # 数据预处理
|
||
│ ├── feature_mining.py # 特征挖掘
|
||
│ ├── train_model.py # 模型训练
|
||
│ └── clustering.py # 聚类分析
|
||
│
|
||
├── data/ # 数据存储
|
||
│ ├── raw/ # 原始数据
|
||
│ │ └── Absenteeism_at_work.csv
|
||
│ └── processed/ # 处理后数据
|
||
│ └── clean_data.csv
|
||
│
|
||
├── models/ # 模型存储
|
||
│ ├── rf_model.pkl # 随机森林模型
|
||
│ ├── xgb_model.pkl # XGBoost模型
|
||
│ ├── kmeans_model.pkl # K-Means模型
|
||
│ ├── scaler.pkl # 标准化器
|
||
│ └── encoder.pkl # 编码器
|
||
│
|
||
└── utils/ # 工具函数
|
||
├── __init__.py
|
||
└── common.py # 通用工具函数
|
||
```
|
||
|
||
### 3.3 各模块职责详解
|
||
|
||
#### 3.3.1 API层 (api/)
|
||
|
||
| 文件 | 职责 | 主要接口 |
|
||
|------|------|----------|
|
||
| overview_routes.py | 数据概览相关接口 | /api/overview/stats, /api/overview/trend |
|
||
| analysis_routes.py | 影响因素分析接口 | /api/analysis/importance, /api/analysis/correlation |
|
||
| predict_routes.py | 缺勤预测接口 | /api/predict/single, /api/predict/model-info |
|
||
| cluster_routes.py | 聚类分析接口 | /api/cluster/result, /api/cluster/profile |
|
||
|
||
#### 3.3.2 Service层 (services/)
|
||
|
||
| 文件 | 职责 | 核心方法 |
|
||
|------|------|----------|
|
||
| data_service.py | 数据读取与基础统计 | get_raw_data(), get_statistics() |
|
||
| analysis_service.py | 特征分析业务逻辑 | get_importance(), get_correlation() |
|
||
| predict_service.py | 预测业务逻辑 | predict_single(), load_model() |
|
||
| cluster_service.py | 聚类业务逻辑 | get_clusters(), get_profile() |
|
||
|
||
#### 3.3.3 Core层 (core/)
|
||
|
||
| 文件 | 职责 | 核心类/方法 |
|
||
|------|------|-------------|
|
||
| preprocessing.py | 数据预处理 | DataPreprocessor类 |
|
||
| feature_mining.py | 特征挖掘 | calculate_importance(), calculate_correlation() |
|
||
| train_model.py | 模型训练 | train_rf(), train_xgboost() |
|
||
| clustering.py | 聚类分析 | KMeansAnalyzer类 |
|
||
|
||
---
|
||
|
||
## 4. 前端架构设计
|
||
|
||
### 4.1 组件化设计
|
||
|
||
```
|
||
frontend/src/
|
||
├── components/ # 公共组件
|
||
│ ├── ChartComponent.vue # ECharts图表封装组件
|
||
│ ├── ResultCard.vue # 预测结果展示卡片
|
||
│ ├── KPICard.vue # KPI指标卡片
|
||
│ └── LoadingSpinner.vue # 加载动画组件
|
||
│
|
||
├── views/ # 页面组件
|
||
│ ├── Dashboard.vue # 数据概览页
|
||
│ ├── FactorAnalysis.vue # 影响因素分析页
|
||
│ ├── Prediction.vue # 缺勤预测页
|
||
│ └── Clustering.vue # 员工画像页
|
||
│
|
||
├── api/ # API调用
|
||
│ ├── request.js # Axios封装
|
||
│ ├── overview.js # 概览API
|
||
│ ├── analysis.js # 分析API
|
||
│ ├── predict.js # 预测API
|
||
│ └── cluster.js # 聚类API
|
||
│
|
||
├── router/ # 路由配置
|
||
│ └── index.js
|
||
│
|
||
├── assets/ # 静态资源
|
||
│ └── styles/
|
||
│ └── main.css
|
||
│
|
||
├── App.vue # 根组件
|
||
└── main.js # 入口文件
|
||
```
|
||
|
||
### 4.2 状态管理
|
||
|
||
由于本项目状态较为简单,不引入Vuex/Pinia,使用以下方式管理状态:
|
||
|
||
- **组件内部状态**:使用Vue 3的ref/reactive
|
||
- **跨组件通信**:使用props和emit
|
||
- **API状态**:在API层统一管理
|
||
|
||
### 4.3 路由设计
|
||
|
||
```javascript
|
||
const routes = [
|
||
{
|
||
path: '/',
|
||
redirect: '/dashboard'
|
||
},
|
||
{
|
||
path: '/dashboard',
|
||
name: 'Dashboard',
|
||
component: () => import('@/views/Dashboard.vue'),
|
||
meta: { title: '数据概览' }
|
||
},
|
||
{
|
||
path: '/analysis',
|
||
name: 'FactorAnalysis',
|
||
component: () => import('@/views/FactorAnalysis.vue'),
|
||
meta: { title: '影响因素分析' }
|
||
},
|
||
{
|
||
path: '/prediction',
|
||
name: 'Prediction',
|
||
component: () => import('@/views/Prediction.vue'),
|
||
meta: { title: '缺勤预测' }
|
||
},
|
||
{
|
||
path: '/clustering',
|
||
name: 'Clustering',
|
||
component: () => import('@/views/Clustering.vue'),
|
||
meta: { title: '员工画像' }
|
||
}
|
||
]
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 算法架构设计
|
||
|
||
### 5.1 数据预处理流程
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 数据预处理流程 │
|
||
│ │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ 原始CSV数据 │───►│ 数据清洗 │───►│ 特征分离 │ │
|
||
│ │ │ │ (缺失值处理) │ │ │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ 处理后数据 │◄───│ 特征合并 │◄───│ 特征编码 │ │
|
||
│ │ clean_data │ │ │ │ + 标准化 │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
│ │
|
||
│ 特征处理方式: │
|
||
│ ┌────────────────────────────────────────────────────────┐ │
|
||
│ │ 类别型特征 → OneHotEncoder │ │
|
||
│ │ - Reason for absence │ │
|
||
│ │ - Month, Day, Seasons │ │
|
||
│ │ - Education, Disciplinary failure │ │
|
||
│ │ - Social drinker, Social smoker │ │
|
||
│ ├────────────────────────────────────────────────────────┤ │
|
||
│ │ 数值型特征 → StandardScaler │ │
|
||
│ │ - Transportation expense │ │
|
||
│ │ - Distance, Service time, Age │ │
|
||
│ │ - Work load, Hit target │ │
|
||
│ │ - Son, Pet, BMI │ │
|
||
│ └────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 5.2 特征挖掘流程
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 特征挖掘流程 │
|
||
│ │
|
||
│ ┌──────────────────────────────────────────────────────────┐ │
|
||
│ │ 特征重要性计算 │ │
|
||
│ │ │ │
|
||
│ │ 训练数据 ──► 随机森林模型 ──► feature_importances_ │ │
|
||
│ │ │ │ │
|
||
│ │ ▼ │ │
|
||
│ │ 特征重要性排序结果 │ │
|
||
│ │ │ │
|
||
│ └──────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌──────────────────────────────────────────────────────────┐ │
|
||
│ │ 相关性分析 │ │
|
||
│ │ │ │
|
||
│ │ 数据矩阵 ──► pandas.DataFrame.corr() ──► 相关系数矩阵 │ │
|
||
│ │ │ │ │
|
||
│ │ ▼ │ │
|
||
│ │ 热力图数据 │ │
|
||
│ │ │ │
|
||
│ └──────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 5.3 预测模型流程
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 预测模型流程 │
|
||
│ │
|
||
│ 训练阶段: │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ 处理后数据 │───►│ 划分数据集 │───►│ 模型训练 │ │
|
||
│ │ │ │ Train/Test │ │ RF + XGBoost │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌──────────────────────────────────┐ │
|
||
│ │ 模型评估 │ │
|
||
│ │ - R² (决定系数) │ │
|
||
│ │ - MSE (均方误差) │ │
|
||
│ │ - RMSE (均方根误差) │ │
|
||
│ └──────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌──────────────────────────────────┐ │
|
||
│ │ 保存模型 (.pkl文件) │ │
|
||
│ └──────────────────────────────────┘ │
|
||
│ │
|
||
│ 预测阶段: │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ 用户输入 │───►│ 特征预处理 │───►│ 加载模型 │ │
|
||
│ │ (表单数据) │ │ (编码+标准化)│ │ 预测推理 │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌──────────────────────────────────┐ │
|
||
│ │ 返回预测结果 │ │
|
||
│ │ - 预测时长 │ │
|
||
│ │ - 风险等级 │ │
|
||
│ │ - 置信度 │ │
|
||
│ └──────────────────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 5.4 聚类分析流程
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 聚类分析流程 │
|
||
│ │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ 处理后数据 │───►│ 特征选择 │───►│ K-Means │ │
|
||
│ │ │ │ (关键维度) │ │ 聚类 │ │
|
||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌──────────────────────────────────────────────────────────┐ │
|
||
│ │ 聚类结果 │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────────┐ ┌─────────────────┐ │ │
|
||
│ │ │ 聚类标签 │ │ 聚类中心 │ │ │
|
||
│ │ │ (每条记录所属簇) │ │ (每个簇的中心点) │ │ │
|
||
│ │ └─────────────────┘ └─────────────────┘ │ │
|
||
│ │ │ │
|
||
│ └──────────────────────────────────────────────────────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌──────────────────────────────────────────────────────────┐ │
|
||
│ │ 可视化输出 │ │
|
||
│ │ │ │
|
||
│ │ - 雷达图:展示各聚类群体的特征分布 │ │
|
||
│ │ - 散点图:展示员工在聚类空间的分布 │ │
|
||
│ │ - 统计表:各聚类的成员数量、特征均值 │ │
|
||
│ │ │ │
|
||
│ └──────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 6. 技术选型
|
||
|
||
### 6.1 后端技术栈
|
||
|
||
| 技术 | 版本 | 用途 | 选择理由 |
|
||
|------|------|------|----------|
|
||
| Python | 3.8+ | 开发语言 | 丰富的数据科学和机器学习库 |
|
||
| Flask | 2.x | Web框架 | 轻量级,易于上手,适合中小项目 |
|
||
| scikit-learn | 1.x | 机器学习 | 提供完整的机器学习工具链 |
|
||
| XGBoost | 1.x | 梯度提升 | 高性能,适合结构化数据预测 |
|
||
| pandas | 1.x | 数据处理 | 强大的数据分析和处理能力 |
|
||
| numpy | 1.x | 数值计算 | 高效的数组操作 |
|
||
| joblib | 1.x | 模型持久化 | 高效的模型序列化 |
|
||
|
||
### 6.2 前端技术栈
|
||
|
||
| 技术 | 版本 | 用途 | 选择理由 |
|
||
|------|------|------|----------|
|
||
| Vue | 3.x | 前端框架 | 组合式API,性能优秀,生态完善 |
|
||
| Element Plus | 2.x | UI组件库 | 组件丰富,文档完善,适合管理后台 |
|
||
| ECharts | 5.x | 图表库 | 功能强大,图表类型丰富,国内主流 |
|
||
| Axios | 1.x | HTTP客户端 | Promise支持,拦截器功能完善 |
|
||
| Vue Router | 4.x | 路由管理 | Vue官方路由解决方案 |
|
||
| Vite | 4.x | 构建工具 | 开发体验好,构建速度快 |
|
||
|
||
### 6.3 算法选型
|
||
|
||
| 算法 | 用途 | 选择理由 |
|
||
|------|------|----------|
|
||
| 随机森林 | 特征重要性计算、预测 | 可解释性强,能输出特征重要性 |
|
||
| XGBoost | 预测模型 | 性能优异,适合回归任务 |
|
||
| K-Means | 员工聚类 | 简单高效,适合无监督聚类 |
|
||
| StandardScaler | 数值标准化 | 消除量纲影响,提高模型效果 |
|
||
| OneHotEncoder | 类别编码 | 处理类别型特征的标准方法 |
|
||
|
||
---
|
||
|
||
## 7. 附录
|
||
|
||
### 7.1 目录结构完整版
|
||
|
||
```
|
||
Absenteeism_Analysis_System/
|
||
│
|
||
├── backend/ # 后端项目
|
||
│ ├── app.py # 应用入口
|
||
│ ├── config.py # 配置文件
|
||
│ ├── requirements.txt # 依赖清单
|
||
│ │
|
||
│ ├── api/ # API接口层
|
||
│ │ ├── __init__.py
|
||
│ │ ├── overview_routes.py
|
||
│ │ ├── analysis_routes.py
|
||
│ │ ├── predict_routes.py
|
||
│ │ └── cluster_routes.py
|
||
│ │
|
||
│ ├── services/ # 业务逻辑层
|
||
│ │ ├── __init__.py
|
||
│ │ ├── data_service.py
|
||
│ │ ├── analysis_service.py
|
||
│ │ ├── predict_service.py
|
||
│ │ └── cluster_service.py
|
||
│ │
|
||
│ ├── core/ # 核心算法层
|
||
│ │ ├── __init__.py
|
||
│ │ ├── preprocessing.py
|
||
│ │ ├── feature_mining.py
|
||
│ │ ├── train_model.py
|
||
│ │ └── clustering.py
|
||
│ │
|
||
│ ├── data/ # 数据目录
|
||
│ │ ├── raw/
|
||
│ │ │ └── Absenteeism_at_work.csv
|
||
│ │ └── processed/
|
||
│ │ └── clean_data.csv
|
||
│ │
|
||
│ ├── models/ # 模型目录
|
||
│ │ ├── rf_model.pkl
|
||
│ │ ├── xgb_model.pkl
|
||
│ │ ├── kmeans_model.pkl
|
||
│ │ ├── scaler.pkl
|
||
│ │ └── encoder.pkl
|
||
│ │
|
||
│ └── utils/ # 工具函数
|
||
│ ├── __init__.py
|
||
│ └── common.py
|
||
│
|
||
├── frontend/ # 前端项目
|
||
│ ├── public/
|
||
│ ├── src/
|
||
│ │ ├── api/
|
||
│ │ │ ├── request.js
|
||
│ │ │ ├── overview.js
|
||
│ │ │ ├── analysis.js
|
||
│ │ │ ├── predict.js
|
||
│ │ │ └── cluster.js
|
||
│ │ ├── assets/
|
||
│ │ │ └── styles/
|
||
│ │ │ └── main.css
|
||
│ │ ├── components/
|
||
│ │ │ ├── ChartComponent.vue
|
||
│ │ │ ├── ResultCard.vue
|
||
│ │ │ ├── KPICard.vue
|
||
│ │ │ └── LoadingSpinner.vue
|
||
│ │ ├── router/
|
||
│ │ │ └── index.js
|
||
│ │ ├── views/
|
||
│ │ │ ├── Dashboard.vue
|
||
│ │ │ ├── FactorAnalysis.vue
|
||
│ │ │ ├── Prediction.vue
|
||
│ │ │ └── Clustering.vue
|
||
│ │ ├── App.vue
|
||
│ │ └── main.js
|
||
│ ├── index.html
|
||
│ ├── package.json
|
||
│ ├── pnpm-lock.yaml
|
||
│ └── vite.config.js
|
||
│
|
||
├── docs/ # 文档目录
|
||
│ ├── 00_需求规格说明书.md
|
||
│ ├── 01_系统架构设计.md
|
||
│ ├── 02_接口设计文档.md
|
||
│ ├── 03_数据设计文档.md
|
||
│ ├── 04_UI原型设计.md
|
||
│ └── ...
|
||
│
|
||
├── data/ # 原始数据(项目根目录)
|
||
│ └── Absenteeism_at_work.csv
|
||
│
|
||
└── README.md # 项目说明
|
||
```
|
||
|
||
### 7.2 文档修改历史
|
||
|
||
| 版本 | 日期 | 修改人 | 修改内容 |
|
||
|------|------|--------|----------|
|
||
| V1.0 | 2026-03 | 张硕 | 初始版本 |
|
||
|
||
---
|
||
|
||
**文档结束**
|