一、数据描述
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个项目的员工离职率最低;
完成项目数,每月平均工作时间,绩效评估有正相关关系。意味着你工作越多,得到的评价就越高;
离职率、满意度与薪酬呈负相关关系。这意味着较低的满意度和工资产生了较高的离职率;
优秀员工看中的是良好的待遇,和更好的职业发展,这些因素都直接影响员工的主观感受,公司给予了员工高的评价,但没有相应转化到薪资和升职的变量中,即使一部分离职的优秀员工给予了公司不错的满意度,但依然不能阻挡他们会追寻更好的工作机会。