🧑 博主简介:曾任某智慧城市类企业
算法总监
,目前在美国市场的物流公司从事高级算法工程师
一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907
)
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
【数据可视化-20】员工离职数据可视化:洞察离职趋势与关键因素
一、项目背景与目标
员工离职不仅影响企业的正常运营,还会增加招聘和培训成本。通过数据可视化,我们可以快速识别离职趋势和影响因素,从而采取针对性措施降低离职率。
二、数据集介绍
使用公开HR数据集,包含14,999条员工记录,关键特征包括:
特征名称 | 说明 | 类型 |
---|---|---|
satisfaction_level | 员工对公司的满意度 | float64 |
last_evaluation | 绩员工上次KPI评分 | float64 |
number_project | 同时处理的项目数 | int64 |
average_montly_hours | 平均每个月的工作时间 | int64 |
time_spend_company | 在公司的时间 | int64 |
Work_accident | 是否出现过工作事故 | int64 |
left | 是否离开 | int64 |
promotion_last_5years | 最近5年是否升职 | int64 |
sales | 员工部门 | object |
salary | 薪资等级 | object |
三、完整代码实现
3.1 环境准备与数据加载
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
# 配置可视化样式
plt.style.use('ggplot')
%matplotlib inline
# 加载数据
df = pd.read_csv('/path/to/HR_comma_sep.csv')
3.2 数据预处理
# 特征重命名
df = df.rename(columns={
'satisfaction_level': 'satisfaction',
'last_evaluation': 'evaluation',
'number_project': 'projectCount',
'average_montly_hours': 'averageMonthlyHours',
'time_spend_company': 'yearsAtCompany',
'Work_accident': 'workAccident',
'promotion_last_5years': 'promotion',
'sales': 'department',
'left': 'turnover'
})
# 处理分类变量
df['department'] = df['department'].astype('category').cat.codes
df['salary'] = df['salary'].astype('category').cat.codes
# 检查数据平衡性
print(f"离职比例:{df.turnover.value_counts(normalize=True)[1]:.1%}")
3.3 特征分布可视化
# 设置画布
fig, axes = plt.subplots(2, 2, figsize=(15, 10))
# 满意度分布对比
sns.kdeplot(data=df, x='satisfaction', hue='turnover', ax=axes[0,0], fill=True)
axes[0,0].set_title('满意度分布对比')
# 工时分布对比
sns.boxplot(data=df, x='turnover', y='averageMonthlyHours', ax=axes[0,1])
axes[0,1].set_title('月均工时分布')
# 项目数分布
sns.countplot(data=df, x='projectCount', hue='turnover', ax=axes[1,0])
axes[1,0].set_title('参与项目数分布')
# 司龄分布
sns.histplot(data=df, x='yearsAtCompany', hue='turnover', multiple='stack', ax=axes[1,1])
axes[1,1].set_title('司龄分布')
plt.tight_layout()
plt.show()
3.4 相关性分析
# 计算相关系数矩阵
corr_matrix = df.corr()
# 绘制热力图
plt.figure(figsize=(12,8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('特征相关性热力图')
plt.show()
四、离职原因可视化分析
4.1.离职率与满意度和绩效评分关系
# 绘制离职率与满意度的散点图
plt.figure(figsize=(12, 6))
sns.scatterplot(x='satisfaction', y='evaluation', hue='turnover', data=df, palette='coolwarm')
plt.title('离职率与满意度和绩效评分的关系')
plt.xlabel('满意度')
plt.ylabel('绩效评分')
plt.grid(True)
plt.show()
- 1、绩效评分高的离职率高于绩效评分低的;
- 2、绩效评分高的离职满意度要么很低,要么很高;低满意度高绩效评分的员工离职可能是对公司的薪资、制度等问题选择离职,高满意度的高绩效评分的员工离职可能是因为在企业自身能力得不到提升而选择离职;
- 3、对企业满意度中等偏下的低绩效员工离职率也比较高,可能是一直保持着骑驴找马的姿态在工作,找到的新得工作选择了离职;
下面将不对各图进行分析,请读者自行分析;
4.2 部门离职率分析
# 计算各部门离职率
department_turnover = df.groupby('department')['turnover'].mean().reset_index()
# 绘制部门离职率柱状图
plt.figure(figsize=(12, 6))
sns.barplot(x='department', y='turnover', data=department_turnover)
plt.title('各部门离职率分析')
plt.xlabel('部门')
plt.ylabel('离职率')
plt.grid(True)
plt.show()
4.3 不同薪资等级的离职率分布
plt.figure(figsize=(12, 6))
sns.countplot(x='salary', hue='turnover', data=df)
plt.title('不同薪资等级的离职率分布')
plt.xlabel('薪资等级')
plt.ylabel('人数')
plt.legend(title='离职情况')
plt.show()
4.4 离职员工的项目参与情况
plt.figure(figsize=(12, 6))
sns.boxplot(x='projectCount', y='turnover', data=df)
plt.title('离职员工的项目参与情况')
plt.xlabel('项目数量')
plt.ylabel('离职率')
plt.grid(True)
plt.show()
4.5 离职员工的月均工时分布
plt.figure(figsize=(12, 6))
sns.violinplot(x='turnover', y='averageMonthlyHours', data=df)
plt.title('离职员工的月均工时分布')
plt.xlabel('离职情况')
plt.ylabel('月均工时')
plt.grid(True)
plt.show()
4.6 离职员工的出现过工作事故分布
plt.figure(figsize=(12, 6))
# (x='satisfaction', y='evaluation', hue='turnover', data=df, palette='coolwarm')
sns.countplot(x='workAccident', hue='turnover',data=df)
plt.title('离职员工的出现过工作事故分布')
plt.xlabel('离职情况')
plt.ylabel('出现过工作事故')
plt.grid(True)
plt.show()
4.7 离职员工的薪资等级分布
plt.figure(figsize=(12, 6))
sns.violinplot(x='turnover', y='salary', data=df)
plt.title('离职员工的薪资等级分布')
plt.xlabel('离职情况')
plt.ylabel('薪资等级')
plt.grid(True)
plt.show()
4.8 离职员工的在公司的工作年限和薪资等级的分布
plt.figure(figsize=(12, 6))
sns.scatterplot(x='yearsAtCompany', y='salary', hue='turnover', data=df)
plt.title('离职员工的在公司的工作年限和薪资等级的分布')
plt.xlabel('工作年限')
plt.ylabel('薪资等级')
plt.grid(True)
plt.show()
五、分析结论与业务洞见
关键离职驱动因素
- 员工满意度:与离职率呈强负相关(相关系数-0.39)。
- 高绩效员工:离职呈现双峰现象,满意度分布分析显示高绩效员工离职率较高。
- 月均工时:超过250小时的员工离职风险显著增加。
业务建议
- 建立满意度实时监测系统:及时发现和解决员工的不满情绪。
- 优化高绩效员工的工作强度分配:避免过度工作导致的离职。
- 对司龄3-5年的员工加强关怀计划:提高员工的归属感和忠诚度。
通过数据可视化,我们可以快速识别员工离职的趋势和影响因素,进而采取有效措施留住人才。希望本文能为您提供有价值的参考,帮助您优化员工管理策略。