kaggle数据分析实践项目练习——人力资源分析

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

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

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

数据来源:Human Resources Analytics | 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、为什么离开的员工平均比没有离开的员工得到更高的评价,甚至是项目数量的增加?低评价的员工不应该更倾向于离开公司吗?

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

  • 7
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
背景描述 在人力资源管理领域中,分析各项员工工作相关的数据和指标,可以揭示员工流失的趋势和原因、薪酬公平性、员工满意度以及职业发展路径等关键指标。这些见解对于优化人才招聘、留存策略、绩效评估体系和员工发展计划至关重要。 通过对这些多维数据的深入分析,组织可以制定更加人性化的管理措施,改进工作环境,提高员工的工作满意度和忠诚度,从而推动组织的整体业绩和竞争力。此外,分析结果还支持制定更加公正和激励性的薪酬体系,以吸引和保留顶尖人才,确保组织的长期成功和可持续发展。 数据说明 字段 说明 EmpID 唯一的员工ID Age 年龄 AgeGroup 年龄组 Attrition 是否离职 BusinessTravel 出差:很少、频繁、不出差 DailyRate 日薪 Department 任职部门:研发部门、销售部门、人力资源部门 DistanceFromHome 通勤距离 Education 教育等级 EducationField 专业领域:生命科学、医学、市场营销、技术、其他 EnvironmentSatisfaction 工作环境满意度 Gender 性别 HourlyRate 时薪 JobInvolvement 工作参与度 JobLevel 工作级别 JobRole 工作角色 JobSatisfaction 工作满意度 MaritalStatus 婚姻状况 MonthlyIncome 月收入 SalarySlab 工资单 MonthlyRate 月薪 NumCompaniesWorked 工作过的公司数量 PercentSalaryHike 加薪百分比 PerformanceRating 绩效评级 RelationshipSatisfaction 关系满意度 StandardHours 标准工时 StockOptionLevel 股票期权级别 TotalWorkingYears 总工作年数 TrainingTimesLastYear 去年培训时间 WorkLifeBalance 工作生活平衡评价 YearsAtCompany 在公司工作年数 YearsInCurrentRole 担任现职年数 YearsSinceLastPromotion 上次晋升后的年数 YearsWithCurrManager 与现任经理共事年数 问题描述 员工流失分析 识别导致员工离职的因素(Attrition与其他字段的关系,如满意度、工资、通勤距离等)。 分析不同年龄组、婚姻状况、工作年数与离职率之间的关系。 薪酬公平性研究 比较不同性别(Gender)、教育等级(Education)和专业领域(EducationField)的薪资差异。 探讨工作级别(JobLevel)、工作角色(JobRole)与月收入(MonthlyIncome)、时薪(HourlyRate)、日薪(DailyRate)之间的关系。 工作满意度分析 评估工作满意度(JobSatisfaction)、工作环境满意度(EnvironmentSatisfaction)、关系满意度(RelationshipSatisfaction)与员工绩效(PerformanceRating)之间的关联。 分析工作生活平衡评价(WorkLifeBalance)与工作参与度(JobInvolvement)、在公司工作年数(YearsAtCompany)之间的关系。 职业发展和晋升路径分析 检查晋升历史(YearsSinceLastPromotion)与工作满意度、工作级别和绩效评级之间的关联。 分析员工在当前角色的时间(YearsInCurrentRole)对于工作参与度和晋升机会的影响。 培训和发展需求评估 评估培训次数(TrainingTimesLastYear)与员工绩效评级的关系。 分析工作经验(TotalWorkingYears)与培训需求之间的关系。 员工福利和激励措施分析 探索股票期权级别(StockOptionLevel)对员工留存的影响。 分析加薪百分比(PercentSalaryHike)与员工满意度和绩效的关系。 人力资源规划和预测 预测哪些因素会影响员工留存(如工资、工作满意度、工作环境)。 用历史数据建模,预测员工晋升路径和潜在的流失风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值