2017belief

一、数据描述

1.数据字段及解释

  • left:是否离职
  • satisfaction_level:满意度
  • last_evaluation:绩效评估
  • number_project:完成项目数
  • average_montly_hours:平均每月工作时间
  • time_spend_company:为公司服务的年限
  • work_accident:是否有工作事故
  • promotion:过去5 年是否有升职
  • salary:薪资水平

2.导入数据

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
df=pd.read_csv(\'I:\HR_comma_sep.csv\')

 

 共有14999条数据,这里代码默认展示前五行

 

 

##看一下整体数据,大概有76%的人留下了,24%的人离开了
left_rate=df.left.value_counts()/14999
0    0.761917
1    0.238083
Name: left, dtype: float64

二、提出问题

1、失去优秀员工会让公司产生多大损失?招新人和优秀老员工之间的成本与变现孰轻孰重?

2、什么原因产生了较低的满意度?

3、为什么离开的员工平均比没有离开的员工得到更高的评价,甚至是项目数量的增加?低评价的员工不应该更倾向于离开公司吗?

三、数据清洗和预处理

##检查是否有缺失值
df.isnull().any()
satisfaction_level       False
last_evaluation          False
number_project           False
average_montly_hours     False
time_spend_company       False
Work_accident            False
left                     False
promotion_last_5years    False
sales                    False
salary                   False
dtype: bool
##适当改名,方便选取列
df = df.rename(columns={\'satisfaction_level\': \'satisfaction_level\', 
                        \'last_evaluation\': \'last_evaluation\',
                        \'number_project\': \'number_project\',
                        \'average_montly_hours\': \'average_montly_hours\',
                        \'time_spend_company\': \'time_spend_company\',
                        \'Work_accident\': \'Work_accident\',
                        \'promotion_last_5years\': \'promotion\',
                        \'sales\' : \'department\',
                        \'left\' : \'left\'
                        })
##由于“部门”和“薪金”的功能是明确的,我将把它转换为数值,以便更好地分析。
##分别查看department列和salary列唯一值有多少个
df1=pd.Series(df[\'department\']).unique()
df2=pd.Series(df[\'salary\']).unique()
##把两列的值转化为数值
df[\'department\'].replace(list(pd.Series(df[\'department\']).unique()),np.arange(10),inplace=True)
df[\'salary\'].replace(list(pd.Series(df[\'salary\']).unique()),[0,1,2],inplace=True)
##把left列移到表的前面,方便分析
front=df[\'left\']
df.drop(labels=\'left\',axis=1,inplace=True)
df.insert(0,\'left\',front)
df.head()

四、数据可视化

 1.相关性分析

sns.heatmap(corr,xticklabels=corr.columns.values,yticklabels=corr.columns.values);
sns.plt.title(\'Heatmap of Correlation Matrix\')

(+)number_project&average_montly_hours&last_evaluation

(-)left&satisfaction_level&salary

从热图上看,有大的正(+)相关性的有,完成项目数(number_project)和平均月度工作时间(average_montly_hours),它们分别和绩效评估有较大的正相关,这可能意味着花了更多时间和做了更多项目的员工得到了高度评价。但是,绩效评估与响应变量转换之间几乎没有相关关系,也就是说绩效评估的高度评价没有转换到薪资水平和升职上来,只是得到了好的评价而已,对于负(-)关系,离职率、满意度和薪水是高度相关的。我们假设员工在不太满意投入产出比的情况下往往会离开公司。

2.变量分析

##department  vs  left
depart_left_table=pd.crosstab(index=df[\'department\'],columns=df[\'left\'])
##职位:\'sales\', \'accounting\', \'hr\', \'technical\', \'support\', \'management\',\'IT\', \'product_mng\', \'marketing\', \'RandD\'
depart_left_table.plot(kind=\'bar\',figsize=(5,5),stacked=True)
##department  vs  salary
depart_salary_table=pd.crosstab(index=df[\'department\'],columns=df[\'salary\'])
depart_salary_table.plot(kind="bar",figsize=(5,5),stacked=True)
##salary  vs left
salary_left_table=pd.crosstab(index=df[\'salary\'],columns=df[\'left\'])
salary_left_table.plot(kind=\'bar\',figsize=(5,5),stacked=True)
##promotion  vs  left
promotion_left_table=pd.crosstab(index=df[\'promotion\'],columns=df[\'left\'])
promotion_left_table.plot(kind=\'bar\',figsize=(5,5),stacked=True)
##number_project  vs  left
project_left_table=pd.crosstab(index=df[\'number_project\'],columns=df[\'left\'])
project_left_table.plot(kind=\'bar\',figsize=(5,5),stacked=True)
df.loc[(df[\'left\']==1),\'number_project\'].plot(kind=\'hist\',normed=1,bins=15,stacked=False,alpha=1)
##time_spend_company  vs  left
company_left_table=pd.crosstab(index=df[\'time_spend_company\'],columns=df[\'left\'])
company_left_table.plot(kind=\'bar\',figsize=(5,5),stacked=True)
df.loc[(df[\'left\']==1),\'time_spend_company\'].plot(kind=\'hist\',normed=1,bins=10,stacked=False,alpha=1)
##average_montly_hours  vs  left
hours_left_table=pd.crosstab(index=df[\'average_montly_hours\'],columns=df[\'left\'])
fig=plt.figure(figsize=(10,5))
letf=sns.kdeplot(df.loc[(df[\'left\']==0),\'average_montly_hours\'],color=\'b\',shade=True,label=\'no left\')
left=sns.kdeplot(df.loc[(df[\'left\']==1),\'average_montly_hours\'],color=\'r\',shade=True,label=\'left\')
##last_evaluation  vs  left
evaluation_left_table=pd.crosstab(index=df[\'last_evaluation\'],columns=df[\'left\'])
fig=plt.figure(figsize=(10,5))
left=sns.kdeplot(df.loc[(df[\'left\']==0),\'last_evaluation\'],color=\'b\',shade=True,label=\'no left\')
left=sns.kdeplot(df.loc[(df[\'left\']==1),\'last_evaluation\'],color=\'r\',shade=True,label=\'left\')
##satisfaction_level  vs  left  
satis_left_table=pd.crosstab(index=df[\'satisfaction_level\'],columns=df[\'left\'])
fig=plt.figure(figsize=(10,5))
left=sns.kdeplot(df.loc[(df[\'left\']==0),\'satisfaction_level\'],color=\'b\',shade=True,label=\'no left\')
left=sns.kdeplot(df.loc[(df[\'left\']==1),\'satisfaction_level\'],color=\'r\',shade=True,label=\'left\')
##last_evaluation  vs  satisfaction_level
df1=df[df[\'left\']==1]
fig, ax = plt.subplots(figsize=(10,10))
pd.scatter_matrix(df1[[\'satisfaction_level\',\'last_evaluation\']],color=\'k\',ax=ax)
plt.savefig(\'scatter.png\',dpi=1000,bbox_inches=\'tight\')
  • department vs left

职位分别是:\'sales\', \'accounting\', \'hr\', \'technical\', \'support\', \'management\',\'IT\', \'product_mng\', \'marketing\', \'RandD\'

公司职位基本对应业务支持,技术,和销售。大多数部门的离职率相似,也就管理层和研发低一些,但管理层离职率最低。这可能意味着地位较高的人倾向于不离开。

 

 

 

  • department vs salary

可以看出管理层的薪资最高,离职率最低

 

 

 

  • salary vs left

很形象的看出,离职的员工薪资几乎都在低到中等水平,很少有高新的员工离开公司。

 

 

 

  • promotion vs left

在离职的员工中几乎都没有得到升职。

  • number_project vs left

本图显示超过一半的员工只有2个项目就离开了公司,但同样有从4-7个项目统计的员工离开。我们可以猜测一下,也许这意味着,项目数量在2或更少的员工工作不够,或者没有被高度重视,从而离开了公司?6个项目以上员工会过度劳累,从而离开公司?3个项目的员工离职率最低。

 

 

 

 

 

 

  • time_spend_company vs left

离职员工在离职前大部分在公司已经工作了3-6年,在公司工作7-10年的员工没有人离开。

 

 

 

  • average_montly_hours vs left

是一个很明显的双峰分布,说明员工平均每月工作时间少的(低于150小时)和工作时间多的(高于250小时)的员工离职率最高。

所以一般离开公司的员工要么工作时间少的,要么过度工作的。

  • last_evaluation vs left

又是一个双峰分布,表现糟糕的和表现出色的出现了离职的两个峰值,根据前边的分析,效绩评估出色的员工,公司没有相应的转化到升职和薪资上。0.6-0.8之间有比较好的员工留存。

 

 

 

  • satisfaction_level vs left

出现了三个峰值,满意度低于0.1的员工基本离职,满意度在0.3-0.5之间离开的员工又到达一个峰值,满意度在0.8左右时,又出现了一个峰值,这些是满意度较高的员工,这些员工可能找到了更好的工作机会,离职不是对公司不满,这些员工对公司是有比较高的满意度的。

 

 

 

  • last_evaluation vs satisfaction_level

在绩效评估与满意度的散射矩阵中,可以看到有三个不同的集群。

集群1:满意度低于0.2,绩效评估大于0.75,这可以很好地表明离开公司的员工都是好员工,但对自己的工作感到不满意,当你受到高度评价的时候,这个集群应该代表着“过度劳累”的员工。

集群2:满意度在0.35~0.45之间,绩效评估在0.58以下,这可以被看作是雇员受到了不太好的评价,这可能意味着这些员工表现不好,所以员工自己的满意度也不好,这个集群代表着表现不佳的员工。

集群3:满意度在0.7~1之间,评价大于0.8,这可能意味着这个集群的员工是最理想的,他们热爱他们的工作,公司对他们的表现评价很高,这个类别的员工离开可能是因为他们找到了另一个工作机会。

 

 

 五、总结

员工离职概述:

离职员工工作时间大部分是~6hours /天(工作)和~10小时/天(劳累);

大部分离职员工薪资都在low~medium这一档,薪资水平低;

离职员工,几乎都没有得到升职;

大多数离职员工的评价分数在0.6以下和0.8以上;

离职员工大多数有2个项目,但同样有4-7个项目的员工离开,3个项目的员工离职率最低;

完成项目数,每月平均工作时间,绩效评估有正相关关系。意味着你工作越多,得到的评价就越高;

离职率、满意度与薪酬呈负相关关系。这意味着较低的满意度和工资产生了较高的离职率;

优秀员工看中的是良好的待遇,和更好的职业发展,这些因素都直接影响员工的主观感受,公司给予了员工高的评价,但没有相应转化到薪资和升职的变量中,即使一部分离职的优秀员工给予了公司不错的满意度,但依然不能阻挡他们会追寻更好的工作机会。

 

分类:

技术点:

相关文章: