员工离职原因数据分析|python

一、分析目的

数据源自kaggle,通过分析了解员工离职的原因,为降低员工离职率的举措提供数据支撑。


员工离职原因数据分析|python_第1张图片
图网侵删

二、数据处理

1.数据预览

data = pandas.read_csv('F:\pythonlearn\Spyder\littlefly_dataana\\test\\HR_comma_sep.csv')
#预览数据
data.head()
员工离职原因数据分析|python_第2张图片
默认预览数据前5行

可大体看清数据基本情况。

#数据基本情况
data.info()
#基本统计信息
data.describe()
员工离职原因数据分析|python_第3张图片
数据总体情况
员工离职原因数据分析|python_第4张图片
各字段基本情况

可看出各个字段的计数、平均值、标准差、最小值、最大值等。


员工离职原因数据分析|python_第5张图片
各字段含义、定义

三、数据分析

3.1总体情况

import matplotlib
import matplotlib.pyplot as plt
onJob = data[data['left'] == 0]
leftJob = data[data['left']== 1]
print('未离职员工数: {},所占比例:{}'.format(len(onJob),len(onJob)/len(data)))
print('离职员工数: {},所占比例:{}'.format(len(leftJob),len(leftJob)/len(data)))

#统计离职员工数量、在职员工数量
staffNum = data.left.value_counts()

staffNumbers = pandas.DataFrame({'在职':[staffNum[0]],'离职':[staffNum[1]]})
#画一个在职、离职比例饼图
plt.figure(figsize = (15,15))

font = {
        'family':'SimHei',
        'size':20}

matplotlib.rc('font',**font)

plt.axis('equal')

plt.pie(
        staffNum,
        labels = ['在职','离职'],
        autopct = '%.2f%%'
                )
plt.show()
员工离职原因数据分析|python_第6张图片
总离职情况

此公司未离职员工数11428,占比76.19%,离职员工数3571,占比23.81%。

3.2分布情况

#用countplot查看分布情况
import seaborn as sns
plt.figure()
sns.countplot(x='left',data = data, hue = 'number_project')
sns.countplot(x='left',data = data, hue = 'time_spend_company')
sns.countplot(x='left',data = data, hue = 'Work_accident')
sns.countplot(x='left',data = data, hue = 'promotion_last_5years')
sns.countplot(x='left',data = data, hue = 'departments')
sns.countplot(x='left',data = data, hue = 'salary')

#last_evaluation、satisfaction_level、average_montly_hours因变量过多,需要分组分析

#last_evaluation的分组及分布分析average_montly_hours
bins = [
        min(data.last_evaluation), 0.53,0.7,0.87,max(data.last_evaluation)] #根据 std、min、max分组
labels = [ 
        'low','medium','high','very high'] 
data['group of last_evaluation'] = pandas.cut(
        data.last_evaluation,bins,right = True,labels = labels)  

sns.countplot(x='left',data = data, hue = 'group of last_evaluation')

#satisfaction_level的分组及分布分析
bins = [
        min(data.satisfaction_level), 0.3,0.5,0.7,max(data.satisfaction_level)] 
labels = [ 
        'very unsatisfied','unsatisfied','satisfied','very satisfied'] 
data['group of satisfaction_level'] = pandas.cut(
        data.satisfaction_level,bins,right = True,labels = labels)  

sns.countplot(x='left',data = data, hue = 'group of satisfaction_level')

#average_montly_hours的分组及分布分析
bins = [     min(data.average_montly_hours),156.00,200.00,245.00,max(data.average_montly_hours)] 
labels = [ 'short','formal','long','too long'] 
data['group of average_montly_hours'] = pandas.cut(
        data.average_montly_hours,bins,right = True,labels = labels)  
sns.countplot(x='left',data = data, hue = 'group of average_montly_hours')

注:下文图中横轴left为0,表示未离职,left为1表示离职。

1、员工参与项目数与是否离职的分布

员工离职原因数据分析|python_第7张图片
项目数离职分布

分布图没有考虑各项人数比例,反映了正常的离职率(右低左高)。其中只有参与项目数量为2和6、7的员工,离职的比在职的多,也就是说,员工过多、过少的参与项目都可能导致离职的情况发生。

2、员工工龄与是否离职的分布

员工离职原因数据分析|python_第8张图片
工龄因素离职分布

我们可以看到7年及以上工龄的员工(后三种颜色右边为0)基本没有离职,只有工龄为5年的员工离职人数超过在职人数。可见工龄长于6年的员工,由于种种原因,其“忠诚度”较高。而员工进入公司工作的第五5年是一个较为“危险”的年份,也许是该企业的“5年之痒”,应当重点关注该阶段的员工满意度、职业晋升等情况,以顺利过渡。

3.工作事故离职分布

员工离职原因数据分析|python_第9张图片
工作事故离职分布

从图中可看出,工作是个对员工离职的影响较小,可推测该企业处理工作事故的方式有可取之处。

4.员工晋升离职分布

员工离职原因数据分析|python_第10张图片
晋升离职分布

分布图无法明显看出晋升对离职是否有影响。

5.各部门离职情况分布

员工离职原因数据分析|python_第11张图片
部门离职分布

可大致看出各部门的离职情况,但分布图无法横向对比。

6.各等级薪资与离职分布

员工离职原因数据分析|python_第12张图片
薪资与离职分布

可明显看出,薪资越高离职人数越少。证明为了减少离职率,提升员工福利待遇是一个可行的手段。

7.各等级满意度的员工离职分布

员工离职原因数据分析|python_第13张图片
满意度离职分布

首先该企业员工的满意度还不错,大多数员工的满意度较高。满意度低、非常低的员工离职人数最多,可见提升员工满意度是防止人员流失的关键环节。

8.各受教育水平的员工离职分布

员工离职原因数据分析|python_第14张图片
受教育水平与离职分布

可大致看出,中等受教育程度的员工离职率是最低的。而受教育程度低和受教育程度极高的员工离职人数都比较多,应当对这两类员工给予特别关注,寻找关键原因。

9.月工作时长离职分布

员工离职原因数据分析|python_第15张图片
各工时离职分布

上图清晰地表明了,月工作时长正常的员工离职率最低。而工时过低、过高的员工离职人数最多。证明恰当的工作任务分配是非常重要的。

3.3盒形图单因素分析

#单因素分析 - 盒形图
plt.figure()
#离职与员工满意度的关系
plt.subplot(2,2,1)
sns.boxplot(x = 'left', y = 'satisfaction_level', data = data)
#离职与员工受教育程度的关系
plt.subplot(2,2,2)
sns.boxplot(x = 'left', y = 'last_evaluation', data = data)
#离职与员工月工作时长的关系
plt.subplot(2,2,3)
sns.boxplot(x = 'left', y = 'average_montly_hours', data = data)
#离职与员工参与项目数的关系
plt.subplot(2,2,4)
sns.boxplot(x = 'left', y = 'number_project', data = data)
#离职与员工参与员工工龄的关系
sns.boxplot(x = 'left', y = 'time_spend_company', data = data)
#离职与员工工作事故的关系
sns.boxplot(x = 'left', y = 'Work_accident', data = data)
#离职与过去五年内晋升的关系
sns.boxplot(x = 'left', y = 'promotion_last_5years', data = data)
#离职与员工所在部门的关系
sns.boxplot(x = 'left', y = 'departments', data = data)
#离职与员工工资的关系
sns.boxplot(x = 'left', y = 'salary', data = data)

1、员工离职与满意度的关系

员工离职原因数据分析|python_第16张图片
离职与满意度

附盒形图的阅读方法:最上、下方两根线代表最大值、最小值,盒子中间的线代表数据的中位数,盒子上下边框线代表数据的四分位数。整个盒子表示数据的主体。
上图反映出离职员工的满意度普遍较低。

2、员工离职与受教育水平的关系

员工离职原因数据分析|python_第17张图片
离职与受教育水平

与分布分析一致,离职员工的受教育水平有极低也有极高的。离职员工的受教育水平相差较大,整体而言受教育程度偏高,反映出该企业优秀人才流失较为严重。

3、员工离职与月工作时长的关系

员工离职原因数据分析|python_第18张图片
离职与月工作时长

与分布分析一致,上图表明未离职员工的工作时长趋于正常,整体而言离职员工的工作时长过高。

4、员工离职与项目参与数的关系

员工离职原因数据分析|python_第19张图片
离职与参与项目数

与分布分析一致,上图表明离职员工参与的项目数过高或过低,而未离职员工的3~4个项目参与量是较为合理的。

5、员工离职与工龄的关系

员工离职原因数据分析|python_第20张图片
离职与工龄

反映出工作3~5年的员工离职率较高。

6、员工离职与薪资的关系

员工离职原因数据分析|python_第21张图片
离职与薪资

上图反映出低薪水的离职率较高。

7、员工离职与部门的关系

员工离职原因数据分析|python_第22张图片
离职与部门

上图反映出,财务部门、人力部门和科技部的离职率较高。

3.4离职率-条形图单因素分析

#代码过多只具列代表性的满意度(需分组分析)与薪水
#满意度与离职率
bins = [
        min(data.satisfaction_level), 0.3,0.5,0.7,max(data.satisfaction_level)] 
labels = [ 
        'very unsatisfied','unsatisfied','satisfied','very satisfied'] 
data['group of satisfaction_level'] = pandas.cut(
        data.satisfaction_level,bins,right = True,labels = labels)  
var = data[data['left'] == 1]

result_satisf = var.groupby(
        by = ['group of satisfaction_level'])['left'].agg({
                '该满意度的离职人数':numpy.size})
result = data.groupby(
        by = ['group of satisfaction_level'])['left'].agg({
                '该满意度的人数':numpy.size})
#各等满意度水平离职人数
left_Percent_satisf = result_satisf['该满意度的离职人数']/result['该满意度的人数']
left_Percent_satisf = left_Percent_satisf.to_frame(name=None)
left_Percent_satisf.columns = ['离职率']
#数据排序
_sort_satisf = left_Percent_satisf.sort_values(
        by = '离职率',ascending = False)
index_3 = numpy.arange(
       _sort_satisf.离职率.size)

plt.barh(index_3, _sort_satisf.离职率,)
plt.yticks(index_3,_sort_satisf.index,fontsize = 20)
plt.show()


#薪水与离职率
result_salary = var.groupby(
        by = ['salary'])['left'].agg({
                '该等级薪水离职人数':numpy.size})
result = data.groupby(
        by = ['salary'])['left'].agg({
                '该等级薪水人数':numpy.size})
#各等级薪水离职人数
left_Percent_salary = result_salary['该等级薪水离职人数']/result['该等级薪水人数']
left_Percent_salary = left_Percent_salary.to_frame(name=None)
left_Percent_salary.columns = ['离职率']
#数据排序
_sort_salary = left_Percent_salary.sort_values(
        by = '离职率',ascending = False)
index_2 = numpy.arange(
       _sort_salary.离职率.size)

plt.barh(index_2, _sort_salary.离职率,color = 'rgb')
plt.yticks(index_2,_sort_salary.index,fontsize = 20)
plt.show()

1、各部门离职率

员工离职原因数据分析|python_第23张图片
离职与部门

可见各部门离职率如上图,离职率由高到低分别为:人力部、财务部、科技部、支持部、销售部、市场部、IT部门、产品部、研发部、管理部。对于离职率过高的部门,因进一步分析关键原因。

2、薪水与离职率

员工离职原因数据分析|python_第24张图片
薪水与离职率

再次证明薪水越低离职率越高。

3、满意度的离职率

员工离职原因数据分析|python_第25张图片
满意度与离职率

再次证明,满意度越低离职率越高。

4、各受教育水平的离职率

员工离职原因数据分析|python_第26张图片
受教育水平与离职率

离职率最高的是受教育水平较低的员工,其次是受教育水平最高的员工。对于优秀人才的流失应当引起足够重视。

5、工作时长的离职率

员工离职原因数据分析|python_第27张图片
工时与离职率

离职率最高的是工作时间过长的员工,而工作时长过短的员工离职率也很高,就数据显示而言,月工作时长调整为正常程度有利于降低员工的离职率。

6、项目参与数与离职率

员工离职原因数据分析|python_第28张图片
项目参与与离职率

由图可见,项目数为3~5最为适宜,而项目数为2、7,即参与项目数过多或过少则离职率增加。

7、工龄与离职率

员工离职原因数据分析|python_第29张图片
工龄与离职率

与前述分析一致,工龄5年的员工离职率过高,应当重点关注。

8、工作事故与离职率

员工离职原因数据分析|python_第30张图片
工作事故与离职率

上图显示,出现工作事故的员工离职率反而远远低于未出现工作事故的员工,说明良好的工作事故处理方式可能会增加员工的忠诚度。

9、晋升与离职率

员工离职原因数据分析|python_第31张图片
晋升与离职率

上图显示五年内没有晋升的员工离职率约为有晋升员工的4倍以上。可见为员工提供合理的职业发展空间是十分必要的。

3.5多因素分析

根据上述分析,工作事故对离职的影响不大故剔除,而部门数据不适合量化分析也剔除。

#多因素分析
sns.pairplot(data, hue= 'left', vars = ['satisfaction_level',  'last_evaluation', 'average_montly_hours','number_project','time_spend_company','Work_accident','promotion_last_5years', #'departments', #'salary'
                                       ])

注:黄色为离职,蓝色为未离职

1、概览

员工离职原因数据分析|python_第32张图片
多因素分析

2、关键因素分析

1)员工满意度分析


员工离职原因数据分析|python_第33张图片
员工满意度-1

员工离职原因数据分析|python_第34张图片
员工满意度-2

前述分析中,我们得出员工满意度越低、离职率越高的结论。那么满意度如何与其他因素作用呢?
由上图可知:

  • 满意度高、受教育水平高的员工离职率依然很高,反映出优秀人才流动性大的特点。
  • 满意度没有改变参与项目数量、受教育水平高、工龄、工时、是否晋升、薪水水平对离职的影响(即,满意度高也无法削弱上述因素带来的负面影响)。
    所以,对员工离职与否,“满意度”不是决定性因素。

2)受教育水平分析


员工离职原因数据分析|python_第35张图片
受教育水平-1

员工离职原因数据分析|python_第36张图片
受教育水平-2

上述图片清楚地反映出,对于员工来说:

  • 受教育水平越高、月工作时长越长,离职率越高。
  • 受教育水平越高、参与项目数越多,离职率越高,参与多=达7个项目的员工离职率达到100%。
  • 受教育水平越高、工龄越短的员工离职率越高。
  • 受教育水平越高、晋升越少的员工离职率越高。
  • 普遍来说受教育水平越高、薪水越低的员工离职率越高,但薪水最高、受教育水平最高的员工离职率也很高,即对高受教育水平员工来说,薪水超过一定程度后,并不会降低离职率。

所以,对于优质人才,应当合理分配其工作任务和项目数,避免工时过长、项目过多,薪水适宜,并适当适时给予晋升机会以降低其离职率。

2)工龄分析


员工离职原因数据分析|python_第37张图片
工龄-1

员工离职原因数据分析|python_第38张图片
工龄-2

由图可知,

  • 相对来说,工龄越低、满意度越低,离职率越高。
  • 工龄越低、受教育水平越高,离职率越高。
  • 工龄越低、工作时长越长,离职率越高。
  • 工龄越低的员工没有晋升越容易离职。
  • 工龄低的员工,增加薪水可以降低离职率,工龄高的员工受薪水影响较小(即增减薪水“无所谓”)。
    所以,对于新入职或入职不超过3、5年的员工,特别是受教育程度较高的新员工,应当重点关注其满意度是否正常、薪水是否合理、工作时长是否过长,以减少人员流失。

你可能感兴趣的:(员工离职原因数据分析|python)