# 系统架构设计文档 ## 基于多维特征挖掘的员工缺勤分析与预测系统 **文档版本**: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 | 张硕 | 初始版本 | --- **文档结束**