feat: 将数据集从国外员工缺勤数据替换为中国企业缺勤模拟数据
- 新增中国企业员工缺勤模拟数据集生成脚本(generate_dataset.py),覆盖7个行业、180家企业、2600名员工 - 重构 config.py,更新特征字段为中文名称,调整目标列、员工ID、行业类型等配置 - 重构 clustering.py,简化聚类逻辑,更新聚类特征和群体命名(高压通勤型、健康波动型等) - 重构 feature_mining.py,更新相关性分析和群体比较维度(按行业、班次、婚姻状态等) - 新增 model_features.py 定义模型训练特征 - 更新 preprocessing.py 和 train_model.py 适配新数据结构 - 更新各 API 路由默认参数(model: random_forest, dimension: industry) - 前端更新主题样式和各视图组件适配中文字段 - 更新系统名称为 China Enterprise Absence Analysis System
This commit is contained in:
@@ -1,14 +1,15 @@
|
||||
import os
|
||||
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
DATA_DIR = os.path.join(BASE_DIR, 'data')
|
||||
RAW_DATA_DIR = os.path.join(DATA_DIR, 'raw')
|
||||
PROCESSED_DATA_DIR = os.path.join(DATA_DIR, 'processed')
|
||||
|
||||
MODELS_DIR = os.path.join(BASE_DIR, 'models')
|
||||
|
||||
RAW_DATA_PATH = os.path.join(RAW_DATA_DIR, 'Absenteeism_at_work.csv')
|
||||
RAW_DATA_FILENAME = 'china_enterprise_absence_events.csv'
|
||||
RAW_DATA_PATH = os.path.join(RAW_DATA_DIR, RAW_DATA_FILENAME)
|
||||
CLEAN_DATA_PATH = os.path.join(PROCESSED_DATA_DIR, 'clean_data.csv')
|
||||
|
||||
RF_MODEL_PATH = os.path.join(MODELS_DIR, 'rf_model.pkl')
|
||||
@@ -17,132 +18,127 @@ KMEANS_MODEL_PATH = os.path.join(MODELS_DIR, 'kmeans_model.pkl')
|
||||
SCALER_PATH = os.path.join(MODELS_DIR, 'scaler.pkl')
|
||||
ENCODER_PATH = os.path.join(MODELS_DIR, 'encoder.pkl')
|
||||
|
||||
CSV_SEPARATOR = ';'
|
||||
|
||||
CSV_SEPARATOR = ','
|
||||
RANDOM_STATE = 42
|
||||
TEST_SIZE = 0.2
|
||||
|
||||
FEATURE_NAMES = [
|
||||
'ID',
|
||||
'Reason for absence',
|
||||
'Month of absence',
|
||||
'Day of the week',
|
||||
'Seasons',
|
||||
'Transportation expense',
|
||||
'Distance from Residence to Work',
|
||||
'Service time',
|
||||
'Age',
|
||||
'Work load Average/day ',
|
||||
'Hit target',
|
||||
'Disciplinary failure',
|
||||
'Education',
|
||||
'Son',
|
||||
'Social drinker',
|
||||
'Social smoker',
|
||||
'Pet',
|
||||
'Weight',
|
||||
'Height',
|
||||
'Body mass index',
|
||||
'Absenteeism time in hours'
|
||||
]
|
||||
|
||||
CATEGORICAL_FEATURES = [
|
||||
'Reason for absence',
|
||||
'Month of absence',
|
||||
'Day of the week',
|
||||
'Seasons',
|
||||
'Disciplinary failure',
|
||||
'Education',
|
||||
'Social drinker',
|
||||
'Social smoker'
|
||||
]
|
||||
|
||||
NUMERICAL_FEATURES = [
|
||||
'Transportation expense',
|
||||
'Distance from Residence to Work',
|
||||
'Service time',
|
||||
'Age',
|
||||
'Work load Average/day ',
|
||||
'Hit target',
|
||||
'Son',
|
||||
'Pet',
|
||||
'Body mass index'
|
||||
]
|
||||
|
||||
REASON_NAMES = {
|
||||
0: '未知原因',
|
||||
1: '传染病',
|
||||
2: '肿瘤',
|
||||
3: '血液疾病',
|
||||
4: '内分泌疾病',
|
||||
5: '精神行为障碍',
|
||||
6: '神经系统疾病',
|
||||
7: '眼部疾病',
|
||||
8: '耳部疾病',
|
||||
9: '循环系统疾病',
|
||||
10: '呼吸系统疾病',
|
||||
11: '消化系统疾病',
|
||||
12: '皮肤疾病',
|
||||
13: '肌肉骨骼疾病',
|
||||
14: '泌尿生殖疾病',
|
||||
15: '妊娠相关',
|
||||
16: '围产期疾病',
|
||||
17: '先天性畸形',
|
||||
18: '症状体征',
|
||||
19: '损伤中毒',
|
||||
20: '外部原因',
|
||||
21: '健康因素',
|
||||
22: '医疗随访',
|
||||
23: '医疗咨询',
|
||||
24: '献血',
|
||||
25: '实验室检查',
|
||||
26: '无故缺勤',
|
||||
27: '理疗',
|
||||
28: '牙科咨询'
|
||||
}
|
||||
TARGET_COLUMN = '缺勤时长(小时)'
|
||||
EMPLOYEE_ID_COLUMN = '员工编号'
|
||||
COMPANY_ID_COLUMN = '企业编号'
|
||||
|
||||
WEEKDAY_NAMES = {
|
||||
2: '周一',
|
||||
3: '周二',
|
||||
4: '周三',
|
||||
5: '周四',
|
||||
6: '周五'
|
||||
1: '周一',
|
||||
2: '周二',
|
||||
3: '周三',
|
||||
4: '周四',
|
||||
5: '周五',
|
||||
6: '周六',
|
||||
7: '周日',
|
||||
}
|
||||
|
||||
SEASON_NAMES = {
|
||||
1: '夏季',
|
||||
2: '秋季',
|
||||
3: '冬季',
|
||||
4: '春季'
|
||||
1: '冬季',
|
||||
2: '春季',
|
||||
3: '夏季',
|
||||
4: '秋季',
|
||||
}
|
||||
|
||||
EDUCATION_NAMES = {
|
||||
1: '高中',
|
||||
2: '本科',
|
||||
3: '研究生',
|
||||
4: '博士'
|
||||
}
|
||||
INDUSTRY_NAMES = [
|
||||
'制造业',
|
||||
'互联网',
|
||||
'零售连锁',
|
||||
'物流运输',
|
||||
'金融服务',
|
||||
'医药健康',
|
||||
'建筑工程',
|
||||
]
|
||||
|
||||
LEAVE_TYPE_NAMES = [
|
||||
'病假',
|
||||
'事假',
|
||||
'年假',
|
||||
'调休',
|
||||
'婚假',
|
||||
'丧假',
|
||||
'产检育儿假',
|
||||
'工伤假',
|
||||
'其他',
|
||||
]
|
||||
|
||||
REASON_CATEGORY_NAMES = [
|
||||
'身体不适',
|
||||
'家庭事务',
|
||||
'子女照护',
|
||||
'交通受阻',
|
||||
'突发事件',
|
||||
'职业疲劳',
|
||||
'就医复查',
|
||||
]
|
||||
|
||||
FEATURE_NAME_CN = {
|
||||
'ID': '员工标识',
|
||||
'Reason for absence': '缺勤原因',
|
||||
'Month of absence': '缺勤月份',
|
||||
'Day of the week': '星期几',
|
||||
'Seasons': '季节',
|
||||
'Transportation expense': '交通费用',
|
||||
'Distance from Residence to Work': '通勤距离',
|
||||
'Service time': '工龄',
|
||||
'Age': '年龄',
|
||||
'Work load Average/day ': '日均工作负荷',
|
||||
'Hit target': '达标率',
|
||||
'Disciplinary failure': '违纪记录',
|
||||
'Education': '学历',
|
||||
'Son': '子女数量',
|
||||
'Social drinker': '饮酒习惯',
|
||||
'Social smoker': '吸烟习惯',
|
||||
'Pet': '宠物数量',
|
||||
'Weight': '体重',
|
||||
'Height': '身高',
|
||||
'Body mass index': 'BMI指数',
|
||||
'Absenteeism time in hours': '缺勤时长'
|
||||
'企业编号': '企业编号',
|
||||
'所属行业': '所属行业',
|
||||
'企业规模': '企业规模',
|
||||
'所在城市等级': '所在城市等级',
|
||||
'用工类型': '用工类型',
|
||||
'部门条线': '部门条线',
|
||||
'岗位序列': '岗位序列',
|
||||
'岗位级别': '岗位级别',
|
||||
'员工编号': '员工编号',
|
||||
'性别': '性别',
|
||||
'年龄': '年龄',
|
||||
'司龄年数': '司龄年数',
|
||||
'最高学历': '最高学历',
|
||||
'婚姻状态': '婚姻状态',
|
||||
'是否本地户籍': '是否本地户籍',
|
||||
'子女数量': '子女数量',
|
||||
'是否独生子女家庭负担': '独生子女家庭负担',
|
||||
'居住类型': '居住类型',
|
||||
'班次类型': '班次类型',
|
||||
'是否夜班岗位': '是否夜班岗位',
|
||||
'月均加班时长': '月均加班时长',
|
||||
'近30天出勤天数': '近30天出勤天数',
|
||||
'近90天缺勤次数': '近90天缺勤次数',
|
||||
'近180天请假总时长': '近180天请假总时长',
|
||||
'通勤时长分钟': '通勤时长分钟',
|
||||
'通勤距离公里': '通勤距离公里',
|
||||
'是否跨城通勤': '是否跨城通勤',
|
||||
'绩效等级': '绩效等级',
|
||||
'近12月违纪次数': '近12月违纪次数',
|
||||
'团队人数': '团队人数',
|
||||
'直属上级管理跨度': '直属上级管理跨度',
|
||||
'BMI': 'BMI',
|
||||
'是否慢性病史': '是否慢性病史',
|
||||
'年度体检异常标记': '年度体检异常',
|
||||
'近30天睡眠时长均值': '睡眠时长',
|
||||
'每周运动频次': '运动频次',
|
||||
'是否吸烟': '是否吸烟',
|
||||
'是否饮酒': '是否饮酒',
|
||||
'心理压力等级': '心理压力等级',
|
||||
'是否长期久坐岗位': '是否久坐岗位',
|
||||
'缺勤月份': '缺勤月份',
|
||||
'星期几': '星期几',
|
||||
'是否节假日前后': '节假日前后',
|
||||
'季节': '季节',
|
||||
'请假申请渠道': '请假申请渠道',
|
||||
'请假类型': '请假类型',
|
||||
'请假原因大类': '请假原因大类',
|
||||
'是否提供医院证明': '医院证明',
|
||||
'是否临时请假': '临时请假',
|
||||
'是否连续缺勤': '连续缺勤',
|
||||
'前一工作日是否加班': '前一工作日加班',
|
||||
'缺勤时长(小时)': '缺勤时长',
|
||||
'加班通勤压力指数': '加班通勤压力指数',
|
||||
'家庭负担指数': '家庭负担指数',
|
||||
'健康风险指数': '健康风险指数',
|
||||
'岗位稳定性指数': '岗位稳定性指数',
|
||||
'节假日风险标记': '节假日风险标记',
|
||||
'排班压力标记': '排班压力标记',
|
||||
'缺勤历史强度': '缺勤历史强度',
|
||||
'生活规律指数': '生活规律指数',
|
||||
'管理负荷指数': '管理负荷指数',
|
||||
'工龄分层': '工龄分层',
|
||||
'年龄分层': '年龄分层',
|
||||
'通勤分层': '通勤分层',
|
||||
'加班分层': '加班分层',
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user