python 人力资源 数据分析统计服_kaggle数据分析实践项目练习——人力资源分析...

学习完《利用python进行数据分析》之后,学习了Numpy,pandas,matplotlib几个包的使用,于是着手准备在kaggle上找数据集进行练习。

在kaggle中找到了人力资源分析项目,看到不少人拿这个项目练手,本文将会分析为何公司的好员工过早离职?

我要做的是,哪些因素对员工的离职产生了大的影响。

1、导入数据

##首先导入整理数据和数据可视化的包

import pandas as pd

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

%matplotlib inline

##导入数据到python中

df=pd.read_csv('I:\HR_comma_sep.csv')

2、检查和理解数据

通常,清理数据需要大量的工作,并且可能是一个非常繁琐的过程。这个数据集从是Kaggle上下载的数据,相对而言很干净,不含缺失值。但是,我仍然需要检查数据集,以确保所有其他内容都是可读的,并且观察值与特征名称适当地匹配。

##检查是否有缺失值

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()

##查看数据形状和结构

df.shape

(14999, 10)

df.dtypes

left int64

satisfaction_level float64

last_evaluation float64

number_project int64

average_montly_hours int64

time_spend_company int64

Work_accident int64

promotion int64

department int64

salary int64

dtype: object

整理好后,首先对数据变量进行说明:left:是否离职

satisfaction_level:满意度

last_evaluation:绩效评估

number_project:完成项目数

average_montly_hours:平均每月工作时间

time_spend_company:为公司服务的年限

work_accident:是否有工作事故

promotion:过去5 年是否有升职

salary:薪资水平

##看一下整体数据,大概有76%的人留下了,24%的人离开了

left_rate=df.left.value_counts()/14999

0 0.761917

1 0.238083

Name: left, dtype: float64

3、对数据进行探索分析

1)、初步分析

##对left列进行聚合运算,描述性分析

left_summary=df.groupby('left')

left_summary.mean()

format=lambda x: '%.2f'%x

df.describe().applymap(format)

2)、相关性分析

(+)number_project&average_montly_hours&last_evaluation

(-)left&satisfaction_level&salary

sns.heatmap(corr,xticklabels=corr.columns.values,yticklabels=corr.columns.values);

sns.plt.title('Heatmap of Correlation Matrix')

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

3)、变量分析

##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,这可能意味着这个集群的员工是最理想的,他们热爱他们的工作,公司对他们的表现评价很高,这个类别的员工离开可能是因为他们找到了另一个工作机会。

4、总结

员工离职概述:

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

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

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

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

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

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

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

公司需要考虑的问题:

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

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

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

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值