前言
目前社会上呈现出一种公司招不到人,大批失业人员的矛盾现象,且大部分公司的离职率居高不下,很多入职没多久就辞职,所花费的培训招聘等资源都浪费了。为了弄清楚公司员工离职原因,通过kaggle上某一家企业员工离职的真实数据来对离职率进行分析建模。
文章目录
一、背景
Ⅰ 数据来源
Ⅱ 数据背景
数据背景: 该数据集是指某公司员工的离职数据, 其包含14999个样本以及10个特征, 这10个特征分别为: 员工对公司满意度, 最新考核评估, 项目数, 平均每月工作时长, 工作年限, 是否出现工作事故, 是否离职, 过去5年是否升职, 岗位, 薪资水平。
Ⅲ 分析目的
结合现有数据特征,需要分析解决的问题如下:
- 员工对公司满意度平均水平如何?员工的最新考核情况又是如何?员工所参加项目数是怎样?员工平均每月工作时长以及平均工作年限分别是多少?
- 当前离职率是多少?工作事故发生率?过去5年升职率?薪资水平又如何?共有多少种岗位?
- 是否离职和其他9个特征的关系如何(相关分析)?
- 根据现有数据, 是否可以对某个员工是否离职进行预测(建模)?
二、数据探索性分析
Ⅰ 数据类型
#coding=utf-8
hr = pd.read_csv('D:\\hr.csv')
hr.info()
前两个特征为64位浮点型, 后两个为字符型, 其余为64位整型, 且均无缺失值。
Ⅱ 描述性统计
print(hr.describe(include=['O']).T)
#员工对公司满意度, 最新评价, 项目数, 平均每月工作时长, 工作年限, 是否出现工作事故,1代表有, 是否离职,1代表离职, 过去5年是否升职,1代表升职, 岗位, 薪资水平.
hr.describe()
- 员工对公司满意度平均水平如何?员工的最新考核情况又是如何?员工所参加项目数是怎样?员工平均每月工作时长以及平均工作年限分别是多少?
员工对公司的满意度: 范围 0.09~1, 中位数0.640, 均值0.613, 总体来说员工对公司较满意。
最新考核评估: 范围 0.36~1, 中位数0.720, 均值0.716, 员工考核平均水平中等偏上。
项目数: 范围 2~7个, 中位数4, 均值3.8, 平均参加项目数为4个。
平均每月工作时长: 范围96~310小时, 中位数200, 均值201。
工作年限: 范围2~10年, 中位数3, 均值3.5。 - 当前离职率是多少?工作事故发生率?过去5年升职率?薪资水平又如何?共有多少种岗位?
当前离职率为23.81%。
工作事故发生率14.46%。
过去5年升职率2.13%。
薪资水平共有3个等级, 最多的是低等, 多达7316人。员工岗位有10种, 其中最多的是销售, 多达4140人。
Ⅲ 数据预处理
a.缺失值处理
之前已经在查看数据中看到本次数据比较“干净”,没有缺失值,所以不需要进行这个操作。如果有缺失值的话,缺失的数据较少则总结删除,如果比较多的话那就均值或中值填充。
b.异常值处理
#利用箱线图查看异常值
fig, ax = plt.subplots(1,5, figsize=(12, 2))
sns.boxplot(x=hr.columns[0], data=hr, ax=ax[0])
sns.boxplot(x=hr.columns[1], data=hr, ax=ax[1])
sns.boxplot(x=hr.columns[2], data=hr, ax=ax[2])
sns.boxplot(x=hr.columns[3], data=hr, ax=ax[3])
sns.boxplot(x=hr.columns[4], data=hr, ax=ax[4])
除了工作年限外, 其他均无异常值。大部分工作年限都在五年以下,"新鲜血液"较多,侧面反映年轻人较多。
c.重复值处理
数据不存在要哪个特征是唯一值的,所以不需要进行重复值处理。
三、数据分析
Ⅰ 可视化分析
a.离职率
利用pyecharts包可视化,pyecharts包动态显示,十分方便。在安装包的时候有很多坑需要避开,很容易某些图表就不可用。
from pyecharts import Pie
attr = ["离职", "在职"]
v1 =[hr.left.value_counts()[1], hr.left.value_counts()[0]]
pie = Pie("该公司人力资源总体情况", title_pos='center')
pie.add(
"",
attr,
v1,
radius=[35, 65],
label_text_color=None,
is_label_show=True,
legend_orient="vertical",
legend_pos="left",
)
pie.render("./公司人力资源总体情况.html")
离职3571人, 在职11428人, 离职率为23.81%
b.公司满意度
sns.set(style="ticks", color_codes=True,font="simhei")
sns.boxplot(x=hr['left'],y=hr['satisfaction_level'], data=hr)
plt.title('对公司满意度与是否离职关系图',fontsize=10)
plt.show()
就中位数而言, 离职人员对公司满意度相对较低, 且离职人员对公司满意度整体波动较大. 另外离职人员中没有满意度为1的评价,大部分都在0.4左右,最低在0.1左右。
c.工作时长
.set(style="ticks", color_codes=True,font="simhei")
sns.boxplot(x=hr['left'],y=hr['average_montly_hours'], data=hr)
plt.title('平均每月工作时长与是否离职关系图'