feat: 初始化员工缺勤分析系统项目
搭建完整的前后端分离架构,实现数据概览、预测分析、聚类分析等核心功能模块 详细版: feat: 初始化员工缺勤分析系统项目 - 后端:基于 Flask 搭建 RESTful API,包含数据概览、特征分析、预测模型、聚类分析四大模块 - 前端:基于 Vue.js 构建单页应用,实现 Dashboard、预测、聚类、因子分析等页面 - 模型:集成随机森林、XGBoost、LightGBM、Stacking 等多种机器学习模型 - 文档:完成需求规格说明、系统架构设计、接口设计、数据设计、UI原型设计等文档
This commit is contained in:
426
docs/03_数据设计文档.md
Normal file
426
docs/03_数据设计文档.md
Normal file
@@ -0,0 +1,426 @@
|
||||
# 数据设计文档
|
||||
|
||||
## 基于多维特征挖掘的员工缺勤分析与预测系统
|
||||
|
||||
**文档版本**:V1.0
|
||||
**编写日期**:2026年3月
|
||||
**编写人**:张硕
|
||||
|
||||
---
|
||||
|
||||
## 1. 数据集概述
|
||||
|
||||
### 1.1 数据来源
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 数据集名称 | Absenteeism at work |
|
||||
| 数据来源 | UCI Machine Learning Repository |
|
||||
| 原始提供方 | 巴西某快递公司 (2007-2010年) |
|
||||
| 数据提供者 | Andrea Martiniano, Ricardo Pinto Ferreira, Renato Jose Sassi |
|
||||
| 所属机构 | Universidade Nove de Julho, Brazil |
|
||||
|
||||
### 1.2 数据规模
|
||||
|
||||
| 项目 | 数值 |
|
||||
|------|------|
|
||||
| 记录总数 | 740条 |
|
||||
| 特征数量 | 21个字段 |
|
||||
| 员工数量 | 36人 |
|
||||
| 时间跨度 | 2007年7月 - 2010年7月 |
|
||||
|
||||
### 1.3 数据质量
|
||||
|
||||
| 检查项 | 结果 | 说明 |
|
||||
|--------|------|------|
|
||||
| 缺失值 | 无 | 数据完整无缺失 |
|
||||
| 重复记录 | 无 | 无重复数据 |
|
||||
| 异常值 | 需检查 | 部分字段可能存在异常值 |
|
||||
| 数据一致性 | 良好 | 字段格式一致 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 字段说明
|
||||
|
||||
### 2.1 字段完整列表
|
||||
|
||||
| 序号 | 字段名 | 中文名称 | 数据类型 | 取值范围 | 说明 |
|
||||
|------|--------|----------|----------|----------|------|
|
||||
| 1 | ID | 员工标识 | int | 1-36 | 唯一标识员工 |
|
||||
| 2 | Reason for absence | 缺勤原因 | int | 0-28 | ICD代码或非疾病原因 |
|
||||
| 3 | Month of absence | 缺勤月份 | int | 1-12 | 月份 |
|
||||
| 4 | Day of the week | 星期几 | int | 2-6 | 2=周一, 6=周五 |
|
||||
| 5 | Seasons | 季节 | int | 1-4 | 1=夏, 4=春 |
|
||||
| 6 | Transportation expense | 交通费用 | int | 118-388 | 月交通费用(雷亚尔) |
|
||||
| 7 | Distance from Residence to Work | 通勤距离 | int | 5-52 | 公里数 |
|
||||
| 8 | Service time | 工龄 | int | 1-29 | 年数 |
|
||||
| 9 | Age | 年龄 | int | 27-58 | 周岁 |
|
||||
| 10 | Work load Average/day | 日均工作负荷 | float | 205-350 | 目标达成量/天 |
|
||||
| 11 | Hit target | 达标率 | int | 81-100 | 百分比 |
|
||||
| 12 | Disciplinary failure | 违纪记录 | int | 0-1 | 0=否, 1=是 |
|
||||
| 13 | Education | 学历 | int | 1-4 | 1=高中, 4=博士 |
|
||||
| 14 | Son | 子女数量 | int | 0-4 | 子女人数 |
|
||||
| 15 | Social drinker | 饮酒习惯 | int | 0-1 | 0=否, 1=是 |
|
||||
| 16 | Social smoker | 吸烟习惯 | int | 0-1 | 0=否, 1=是 |
|
||||
| 17 | Pet | 宠物数量 | int | 0-8 | 宠物数量 |
|
||||
| 18 | Weight | 体重 | int | 56-108 | 公斤 |
|
||||
| 19 | Height | 身高 | int | 163-196 | 厘米 |
|
||||
| 20 | Body mass index | BMI指数 | float | 19-38 | 体重/身高² |
|
||||
| 21 | Absenteeism time in hours | 缺勤时长 | int | 0-120 | 目标变量(小时) |
|
||||
|
||||
### 2.2 特征分类
|
||||
|
||||
#### 2.2.1 类别型特征
|
||||
|
||||
| 字段名 | 类别数 | 类别说明 |
|
||||
|--------|--------|----------|
|
||||
| Reason for absence | 29 | 0-28,ICD疾病代码或非疾病原因 |
|
||||
| Month of absence | 12 | 1-12月 |
|
||||
| Day of the week | 5 | 周一至周五 |
|
||||
| Seasons | 4 | 夏秋冬春 |
|
||||
| Disciplinary failure | 2 | 是/否 |
|
||||
| Education | 4 | 高中/本科/研究生/博士 |
|
||||
| Social drinker | 2 | 是/否 |
|
||||
| Social smoker | 2 | 是/否 |
|
||||
|
||||
#### 2.2.2 数值型特征
|
||||
|
||||
| 字段名 | 类型 | 范围 | 均值 | 标准差 |
|
||||
|--------|------|------|------|--------|
|
||||
| Transportation expense | 连续 | 118-388 | 221.3 | 69.1 |
|
||||
| Distance from Residence to Work | 连续 | 5-52 | 29.6 | 14.8 |
|
||||
| Service time | 连续 | 1-29 | 12.0 | 5.7 |
|
||||
| Age | 连续 | 27-58 | 36.9 | 6.5 |
|
||||
| Work load Average/day | 连续 | 205-350 | 270.7 | 37.1 |
|
||||
| Hit target | 连续 | 81-100 | 94.6 | 4.0 |
|
||||
| Son | 离散 | 0-4 | 1.0 | 1.1 |
|
||||
| Pet | 离散 | 0-8 | 0.8 | 1.5 |
|
||||
| Weight | 连续 | 56-108 | 79.0 | 12.4 |
|
||||
| Height | 连续 | 163-196 | 172.9 | 6.0 |
|
||||
| Body mass index | 连续 | 19-38 | 26.7 | 4.3 |
|
||||
| Absenteeism time in hours | 连续 | 0-120 | 6.9 | 13.3 |
|
||||
|
||||
### 2.3 缺勤原因详细说明
|
||||
|
||||
#### 2.3.1 ICD疾病分类(代码1-21)
|
||||
|
||||
| 代码 | ICD分类 | 疾病类型 |
|
||||
|------|---------|----------|
|
||||
| 1 | I | 传染病和寄生虫病 |
|
||||
| 2 | II | 肿瘤 |
|
||||
| 3 | III | 血液及造血器官疾病 |
|
||||
| 4 | IV | 内分泌、营养和代谢疾病 |
|
||||
| 5 | V | 精神和行为障碍 |
|
||||
| 6 | VI | 神经系统疾病 |
|
||||
| 7 | VII | 眼及其附属器疾病 |
|
||||
| 8 | VIII | 耳及乳突疾病 |
|
||||
| 9 | IX | 循环系统疾病 |
|
||||
| 10 | X | 呼吸系统疾病 |
|
||||
| 11 | XI | 消化系统疾病 |
|
||||
| 12 | XII | 皮肤和皮下组织疾病 |
|
||||
| 13 | XIII | 肌肉骨骼系统和结缔组织疾病 |
|
||||
| 14 | XIV | 泌尿生殖系统疾病 |
|
||||
| 15 | XV | 妊娠、分娩和产褥期 |
|
||||
| 16 | XVI | 围产期疾病 |
|
||||
| 17 | XVII | 先天性畸形 |
|
||||
| 18 | XVIII | 症状、体征异常发现 |
|
||||
| 19 | XIX | 损伤、中毒 |
|
||||
| 20 | XX | 外部原因导致的发病和死亡 |
|
||||
| 21 | XXI | 影响健康状态的因素 |
|
||||
|
||||
#### 2.3.2 非疾病原因(代码22-28)
|
||||
|
||||
| 代码 | 名称 | 说明 |
|
||||
|------|------|------|
|
||||
| 22 | 医疗随访 | 患者定期随访复查 |
|
||||
| 23 | 医疗咨询 | 门诊就医咨询 |
|
||||
| 24 | 献血 | 无偿献血活动 |
|
||||
| 25 | 实验室检查 | 医学检验检查 |
|
||||
| 26 | 无故缺勤 | 未经批准的缺勤 |
|
||||
| 27 | 理疗 | 物理治疗康复 |
|
||||
| 28 | 牙科咨询 | 口腔科就诊 |
|
||||
|
||||
#### 2.3.3 特殊值
|
||||
|
||||
| 代码 | 说明 |
|
||||
|------|------|
|
||||
| 0 | 未知原因(数据中存在) |
|
||||
|
||||
### 2.4 季节编码说明
|
||||
|
||||
| 代码 | 季节 | 月份范围(巴西) |
|
||||
|------|------|------------------|
|
||||
| 1 | 夏季 | 12月-2月 |
|
||||
| 2 | 秋季 | 3月-5月 |
|
||||
| 3 | 冬季 | 6月-8月 |
|
||||
| 4 | 春季 | 9月-11月 |
|
||||
|
||||
### 2.5 学历编码说明
|
||||
|
||||
| 代码 | 学历 | 说明 |
|
||||
|------|------|------|
|
||||
| 1 | 高中 | 高中及以下学历 |
|
||||
| 2 | 本科 | 大学本科学历 |
|
||||
| 3 | 研究生 | 硕士研究生 |
|
||||
| 4 | 博士 | 博士研究生 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 数据预处理
|
||||
|
||||
### 3.1 数据清洗
|
||||
|
||||
#### 3.1.1 缺失值处理
|
||||
|
||||
数据集本身无缺失值,但在预处理过程中需确保:
|
||||
|
||||
```
|
||||
检查步骤:
|
||||
1. 统计每个字段的缺失值数量
|
||||
2. 如发现缺失值,数值型用中位数填充,类别型用众数填充
|
||||
```
|
||||
|
||||
#### 3.1.2 异常值处理
|
||||
|
||||
| 字段 | 异常值判定标准 | 处理方式 |
|
||||
|------|----------------|----------|
|
||||
| Absenteeism time in hours | > 24小时(超过一天) | 保留,但做标记 |
|
||||
| Work load Average/day | < 100 或 > 500 | 检查后决定保留或剔除 |
|
||||
| Age | < 18 或 > 65 | 检查数据有效性 |
|
||||
|
||||
#### 3.1.3 数据类型转换
|
||||
|
||||
| 字段 | 原始类型 | 转换后类型 | 说明 |
|
||||
|------|----------|------------|------|
|
||||
| ID | int | int | 保持不变 |
|
||||
| Reason for absence | int | category | 转为类别型 |
|
||||
| Month of absence | int | category | 转为类别型 |
|
||||
| Day of the week | int | category | 转为类别型 |
|
||||
| Seasons | int | category | 转为类别型 |
|
||||
| Education | int | category | 转为类别型 |
|
||||
| Disciplinary failure | int | category | 转为类别型 |
|
||||
| Social drinker | int | category | 转为类别型 |
|
||||
| Social smoker | int | category | 转为类别型 |
|
||||
|
||||
### 3.2 特征编码
|
||||
|
||||
#### 3.2.1 独热编码 (One-Hot Encoding)
|
||||
|
||||
对以下类别型特征进行独热编码:
|
||||
|
||||
| 字段 | 编码后特征数 | 说明 |
|
||||
|------|--------------|------|
|
||||
| Reason for absence | 29 | 每个原因一个二进制特征 |
|
||||
| Month of absence | 12 | 每个月份一个二进制特征 |
|
||||
| Day of the week | 5 | 每个星期一个二进制特征 |
|
||||
| Seasons | 4 | 每个季节一个二进制特征 |
|
||||
| Education | 4 | 每个学历一个二进制特征 |
|
||||
| Disciplinary failure | 2 | 是/否两个特征 |
|
||||
| Social drinker | 2 | 是/否两个特征 |
|
||||
| Social smoker | 2 | 是/否两个特征 |
|
||||
|
||||
**编码示例**:
|
||||
|
||||
```
|
||||
原始数据:Reason for absence = 23
|
||||
|
||||
编码后:
|
||||
Reason_0: 0
|
||||
Reason_1: 0
|
||||
...
|
||||
Reason_23: 1
|
||||
...
|
||||
Reason_28: 0
|
||||
```
|
||||
|
||||
#### 3.2.2 标准化处理 (StandardScaler)
|
||||
|
||||
对以下数值型特征进行标准化处理(均值为0,标准差为1):
|
||||
|
||||
| 字段 | 标准化公式 |
|
||||
|------|------------|
|
||||
| Transportation expense | (x - μ) / σ |
|
||||
| Distance from Residence to Work | (x - μ) / σ |
|
||||
| Service time | (x - μ) / σ |
|
||||
| Age | (x - μ) / σ |
|
||||
| Work load Average/day | (x - μ) / σ |
|
||||
| Hit target | (x - μ) / σ |
|
||||
| Son | (x - μ) / σ |
|
||||
| Pet | (x - μ) / σ |
|
||||
| Weight | (x - μ) / σ |
|
||||
| Height | (x - μ) / σ |
|
||||
| Body mass index | (x - μ) / σ |
|
||||
|
||||
### 3.3 特征工程
|
||||
|
||||
#### 3.3.1 派生特征
|
||||
|
||||
可考虑创建以下派生特征:
|
||||
|
||||
| 派生特征 | 计算方式 | 说明 |
|
||||
|----------|----------|------|
|
||||
| has_children | Son > 0 | 是否有子女(二分类) |
|
||||
| has_pet | Pet > 0 | 是否有宠物(二分类) |
|
||||
| age_group | 年龄分组 | 青年/中年/老年 |
|
||||
| service_category | 工龄分组 | 新员工/老员工 |
|
||||
| bmi_category | BMI分组 | 正常/超重/肥胖 |
|
||||
| workload_level | 负荷等级 | 低/中/高 |
|
||||
|
||||
#### 3.3.2 特征选择
|
||||
|
||||
基于特征重要性分析,选择对预测最有价值的特征:
|
||||
|
||||
| 优先级 | 特征 | 选择依据 |
|
||||
|--------|------|----------|
|
||||
| 高 | Reason for absence | 业务含义明确,影响直接 |
|
||||
| 高 | Transportation expense | 特征重要性高 |
|
||||
| 高 | Distance from Residence to Work | 特征重要性高 |
|
||||
| 高 | Service time | 特征重要性高 |
|
||||
| 高 | Age | 特征重要性高 |
|
||||
| 中 | Work load Average/day | 有一定影响 |
|
||||
| 中 | Body mass index | 有一定影响 |
|
||||
| 中 | Social drinker | 群体差异明显 |
|
||||
| 低 | Pet | 影响较小 |
|
||||
| 低 | Height | 信息可由BMI代替 |
|
||||
|
||||
### 3.4 数据划分
|
||||
|
||||
#### 3.4.1 训练集/测试集划分
|
||||
|
||||
| 数据集 | 比例 | 记录数 | 用途 |
|
||||
|--------|------|--------|------|
|
||||
| 训练集 | 80% | 592条 | 模型训练 |
|
||||
| 测试集 | 20% | 148条 | 模型评估 |
|
||||
|
||||
#### 3.4.2 划分方式
|
||||
|
||||
- 使用分层抽样,确保各缺勤原因在训练集和测试集中比例一致
|
||||
- 随机种子固定(random_state=42),保证结果可复现
|
||||
|
||||
---
|
||||
|
||||
## 4. 数据存储方案
|
||||
|
||||
### 4.1 目录结构
|
||||
|
||||
```
|
||||
backend/data/
|
||||
├── raw/ # 原始数据
|
||||
│ └── Absenteeism_at_work.csv # UCI原始数据集
|
||||
│
|
||||
├── processed/ # 处理后数据
|
||||
│ ├── clean_data.csv # 清洗后的数据
|
||||
│ ├── encoded_data.csv # 编码后的数据
|
||||
│ ├── train_data.csv # 训练数据
|
||||
│ └── test_data.csv # 测试数据
|
||||
│
|
||||
└── analysis/ # 分析结果数据
|
||||
├── statistics.json # 统计结果
|
||||
├── correlation.json # 相关性矩阵
|
||||
└── feature_importance.json # 特征重要性
|
||||
```
|
||||
|
||||
### 4.2 模型存储
|
||||
|
||||
```
|
||||
backend/models/
|
||||
├── rf_model.pkl # 随机森林模型
|
||||
├── xgb_model.pkl # XGBoost模型
|
||||
├── kmeans_model.pkl # K-Means模型
|
||||
├── scaler.pkl # StandardScaler对象
|
||||
├── encoder.pkl # OneHotEncoder对象
|
||||
└── model_info.json # 模型元信息
|
||||
```
|
||||
|
||||
### 4.3 数据文件格式
|
||||
|
||||
#### 4.3.1 CSV文件格式
|
||||
|
||||
```
|
||||
分隔符:分号 (;)
|
||||
编码:UTF-8
|
||||
表头:第一行为字段名
|
||||
```
|
||||
|
||||
#### 4.3.2 JSON文件格式
|
||||
|
||||
```json
|
||||
{
|
||||
"created_at": "2026-03-01T10:00:00",
|
||||
"version": "1.0",
|
||||
"data": {
|
||||
// 具体数据内容
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 数据字典
|
||||
|
||||
### 5.1 原始数据字典
|
||||
|
||||
| 字段名 | 数据类型 | 是否为空 | 默认值 | 说明 |
|
||||
|--------|----------|----------|--------|------|
|
||||
| ID | INTEGER | NOT NULL | - | 员工唯一标识 |
|
||||
| Reason for absence | INTEGER | NOT NULL | - | 缺勤原因代码 |
|
||||
| Month of absence | INTEGER | NOT NULL | - | 月份(1-12) |
|
||||
| Day of the week | INTEGER | NOT NULL | - | 星期(2-6) |
|
||||
| Seasons | INTEGER | NOT NULL | - | 季节(1-4) |
|
||||
| Transportation expense | INTEGER | NOT NULL | - | 交通费用 |
|
||||
| Distance from Residence to Work | INTEGER | NOT NULL | - | 通勤距离(km) |
|
||||
| Service time | INTEGER | NOT NULL | - | 工龄(年) |
|
||||
| Age | INTEGER | NOT NULL | - | 年龄 |
|
||||
| Work load Average/day | REAL | NOT NULL | - | 日均工作负荷 |
|
||||
| Hit target | INTEGER | NOT NULL | - | 达标率(%) |
|
||||
| Disciplinary failure | INTEGER | NOT NULL | 0 | 违纪记录(0/1) |
|
||||
| Education | INTEGER | NOT NULL | - | 学历(1-4) |
|
||||
| Son | INTEGER | NOT NULL | 0 | 子女数量 |
|
||||
| Social drinker | INTEGER | NOT NULL | 0 | 饮酒习惯(0/1) |
|
||||
| Social smoker | INTEGER | NOT NULL | 0 | 吸烟习惯(0/1) |
|
||||
| Pet | INTEGER | NOT NULL | 0 | 宠物数量 |
|
||||
| Weight | INTEGER | NOT NULL | - | 体重(kg) |
|
||||
| Height | INTEGER | NOT NULL | - | 身高(cm) |
|
||||
| Body mass index | REAL | NOT NULL | - | BMI指数 |
|
||||
| Absenteeism time in hours | INTEGER | NOT NULL | - | 缺勤时长(目标变量) |
|
||||
|
||||
---
|
||||
|
||||
## 6. 附录
|
||||
|
||||
### 6.1 数据统计摘要
|
||||
|
||||
```
|
||||
数据集基本信息:
|
||||
- 记录数:740
|
||||
- 特征数:21
|
||||
- 员工数:36
|
||||
- 缺勤总时长:5028小时
|
||||
- 平均缺勤时长:6.9小时
|
||||
|
||||
缺勤原因TOP5:
|
||||
1. 医疗咨询(23):149次 (20.1%)
|
||||
2. 牙科咨询(28):112次 (15.1%)
|
||||
3. 理疗(27):94次 (12.7%)
|
||||
4. 疾病咨询(22):74次 (10.0%)
|
||||
5. 消化系统疾病(11):59次 (8.0%)
|
||||
|
||||
学历分布:
|
||||
- 高中:633人 (85.5%)
|
||||
- 本科:79人 (10.7%)
|
||||
- 研究生及以上:28人 (3.8%)
|
||||
|
||||
生活习惯:
|
||||
- 饮酒者:340人 (45.9%)
|
||||
- 吸烟者:90人 (12.2%)
|
||||
```
|
||||
|
||||
### 6.2 文档修改历史
|
||||
|
||||
| 版本 | 日期 | 修改人 | 修改内容 |
|
||||
|------|------|--------|----------|
|
||||
| V1.0 | 2026-03 | 张硕 | 初始版本 |
|
||||
|
||||
---
|
||||
|
||||
**文档结束**
|
||||
Reference in New Issue
Block a user