数据分析项目实战:人力资源数据分析 —— R篇

一:分析背景

在年底的时候,埃克森公司盘点了过去一年工作时发现,公司在人力方面的工作并不尽人意。具体表现是:在一年中多次出现重要与员工离职情况:部分员工的工作积极性不高:员工的培训不够及时,导致业务进展缓慢;人力部分对员工整体情况了解不到位等等。

二、数据导入和预览

## 加载包
library(dplyr)
library(ggplot2)
library(Rmisc)         # multiplot()  分割绘图区域

#导入数据集
data<-read.csv('员工数据.csv')

#查看数据的内容摘要
summary(data)

#展示数据的结构摘要
str(data)

在这里插入图片描述在这里插入图片描述

#展示部分数据
head(data)

在这里插入图片描述
员工满意度这一字段的存在缺失值,后续需要进一步进行数据的清洗;

三、数据整理和转换

用平均数对缺失值进行补值:

data[is.na(data$员工满意度),'员工满意度']<-mean(data$员工满意度,na.rm = TRUE)
head(data,15)

在这里插入图片描述

将相关数据类型转换成因子类型,便于后续进一步做分析

# 将数据类型转换成便于后续分析的类型
data$职位变动<-as.factor(data$职位变动)
data$离职<-as.factor(data$离职)
data$过去5年是否有升职<-as.factor(data$过去5年是否有升职)
str(data)

在这里插入图片描述
创建新的特征变量(列):总工作时长&员工平均项目数

# 创建新的特征变量()-总工作时长&员工平均项目数
new.data<-data%>%
  mutate('总工作时长'= 平均每月工作小时 * 12 * 在公司工作年限,'年均项目数' = 项目数/在公司工作年限)%>%
  as.data.frame

# 查看数据
str(new.data)

在这里插入图片描述

四、数据探索性分析

探索员工对公司满意度、绩效评估和月均工作时长与是否离职的关系

# 绘制对公司满意度与是否离职的箱线图
box_sat <- ggplot(new.data, aes(x = 离职, y = 员工满意度, fill = 离职)) +
  geom_boxplot() + 
  theme_bw() +  # 一种ggplot的主题
  labs(x = '离职', y = '员工满意度') # 设置横纵坐标标签
box_sat

在这里插入图片描述

# 绘制绩效评估与是否离职的箱线图
box_eva <- ggplot(new.data, aes(x = 离职, y = 最后一次绩效评估, fill = 离职)) + 
  geom_boxplot() +
  theme_bw() + 
  labs(x = '离职', y = '最后一次绩效评估')
box_eva

在这里插入图片描述

# 绘制平均月工作时长与是否离职的箱线图
box_mon <- ggplot(new.data, aes(x = 离职, y = 平均每月工作小时, fill = 离职)) + 
  geom_boxplot() + 
  theme_bw() + 
  labs(x = '离职', y = '平均每月工作小时')
box_mon

在这里插入图片描述

# 绘制员工在公司工作年限与是否离职的箱线图
box_time <- ggplot(new.data, aes(x = 离职, y = 在公司工作年限, fill = 离职)) + 
  geom_boxplot() + 
  theme_bw() + 
  labs(x = '离职', y = '在公司工作年限')
box_time

在这里插入图片描述

# 合并这些图形在一个绘图区域,cols = 2的意思就是排版为一行二列
multiplot(box_sat, box_eva, box_mon, box_time, cols = 2)

在这里插入图片描述
总结:

通过探索员工对公司满意度、绩效评估和月均工作时长与是否离职的关系,可以得出离职员工的特点:

  • 对公司满意度较低,大多集中在0.4左右;
  • 绩效评估较高,在0.8以上的较为集中; (
  • 平均余额工作时长较高,一多半超过了平均水平(200小时);
  • 工作年限在4年左右

探索参与项目个数、五年内有没有升职和薪资与离职的关系

# 绘制参与项目个数与是否离职的百分比堆积条形图
bar_pro <- ggplot(new.data, aes(x = as.factor(new.data$项目数), fill = 离职)) +
  geom_bar(position = 'fill') + # position = 'fill'即绘制百分比堆积条形图
  theme_bw() + 
  labs(x = '项目数', y = '离职')
bar_pro

在这里插入图片描述

# 绘制5年内是否升职与是否离职的百分比堆积条形图
bar_5years <- ggplot(new.data, aes(x = 过去5年是否有升职, fill = 离职)) +
  geom_bar(position = 'fill') + 
  theme_bw() + 
  labs(x = '过去5年是否有升职', y = '离职')
bar_5years

在这里插入图片描述

# 绘制薪资与是否离职的百分比堆积条形图
bar_salary <- ggplot(new.data, aes(x = 薪资水平, fill = 离职)) +
  geom_bar(position = 'fill') + 
  theme_bw() + 
  labs(x = '薪资水平', y = '离职')
bar_salary

在这里插入图片描述

# 合并这些图形在一个绘图区域,cols = 3的意思就是排版为一行三列
multiplot(bar_pro, bar_5years, bar_salary, cols = 3)

在这里插入图片描述
通过探索参与项目个数、五年内有没有升职和薪资与离职的关系,可以得出以下分析结果:

  • 参与项目数越多的员工离职率越大(去除项目数为2的样本)
  • 五年内没有晋升的员工的离职率比较大
  • 薪资越高离职率越低

绘制职务序列与是否离职的百分比堆积条形图

bar_salary <- ggplot(new.data, aes(x = 职务序列, fill = 离职)) +
  geom_bar(position = 'fill') + 
  theme_bw() + 
  labs(x = '职务序列', y = '离职')
bar_salary

在这里插入图片描述
整体来看,不同职务序列的员工离职比例大体相当,不过管理类、科研这些相对的核心岗位离职比例更低。


绘制不同职务序列的员工满意度的箱线图

box_eva <- ggplot(new.data, aes(x = 职务序列, y = 员工满意度, 
                            fill = 职务序列)) + 
  geom_boxplot() +
  theme_bw() + 
  labs(x = '职务序列', y = '员工满意度')
box_eva

在这里插入图片描述
整体来看,不同职务序列的员工满意度的分布大体相当,不过HR、财务类的员工打分相对较低。

探索员工总工作时长、年均项目数和离职的关系

# 员工总工作时长
box_total_time <- ggplot(new.data, aes(x = 离职, y = 总工作时长, fill = 离职)) + 
  geom_boxplot() + 
  theme_bw() + 
  labs(x = '离职', y = '总工作时长')
box_total_time

在这里插入图片描述

# 年均项目数数分布

box_avg_pro <- ggplot(new.data, aes(x = 离职, y = 年均项目数, fill = 离职)) + 
  geom_boxplot() + 
  theme_bw() + 
  labs(x = '离职', y = '年均项目数')
box_avg_pro 

在这里插入图片描述

五、统计分析与建模

# 步骤1:生成表格,体现不同年限员工流失率
new.data$离职<-as.integer(new.data$离职) # 转换数据类型为整型
library(dplyr)
data.Turnover <- new.data %>%
  group_by(在公司工作年限) %>%  # 按工作年限进行分组
  arrange(在公司工作年限) %>%   # 按工作年限升序排列
  dplyr::summarise(该年限离职员工数=sum(离职==2), 该年限员工总数=n()) %>%  # 对分组后的工作年限进行离职人数和所有人数的汇总
  mutate(该年限及以上所有员工数=rev(cumsum(rev(该年限员工总数)))) %>%  # 新增列“该年限及该年限以上所有人数”
  mutate(该年限员工流失率=该年限离职员工数/该年限及以上所有员工数) %>%  # 新增列“该年限员工流失率”
  select(在公司工作年限, 该年限离职员工数, 该年限员工总数, 该年限及以上所有员工数, 该年限员工流失率)%>%   # 只保留表格的特定列
  as.data.frame

# 步骤2:将体现不同年限员工流失率的表格可视化,找出流失率最高对应的年限

#install.packages("ggplot2")
library(ggplot2)
g <- ggplot(data.Turnover, aes(在公司工作年限,该年限员工流失率))  # 绘制散点图-流失率与工作年限的关系
g + geom_point() + 
  geom_line() +
  theme_bw()+
  labs(x = "在公司工作年限") +
  labs(y = "该年限员工流失率") +
  labs(title = "员工流失率与工作年限的关系") 

流失率最高的工作年限是 5 年
在这里插入图片描述

# 步骤3:做流失驱动力分析,寻找员工在流失率最高的年份离职的主要因素
data.5year <- new.data %>%
  filter(在公司工作年限 >= '5') %>%  # 筛选工作年限为 5 的数据
  mutate(是否在第五年流失 = ifelse(在公司工作年限=='5' & 离职==2,1,0))  # 新增列“是否在第五年流失”
summary(data.5year)

在这里插入图片描述

# 步骤4:线性回归,了解各因素对员工流失的影响

lm_fit <- lm(是否在第五年流失 ~ 项目数+平均每月工作小时+工作事故+过去5年是否有升职+职务序列+薪资水平+职位变动+员工满意度+最后一次绩效评估, data=data.5year)
library("car")
vif(lm_fit) # GVIF 均小于10,不存在共线性的干扰

# 挑选模型输入自变量 
library(olsrr) 

model <- lm(是否在第五年流失 ~ 项目数+平均每月工作小时+工作事故+过去5年是否有升职+职务序列+薪资水平+职位变动+员工满意度+最后一次绩效评估,data= data.5year) 
k <- ols_step_all_possible(model) 
print(k)
k[k$adjr==max(k$adjr),]

在这里插入图片描述

# 将调整R2最大的变量输入到线性回归模型
lm_fit <- lm(是否在第五年流失 ~ 项目数+平均每月工作小时+工作事故+过去5年是否有升职+薪资水平+职位变动+员工满意度+最后一次绩效评估, data.5year) 
summary(lm_fit) 

在这里插入图片描述
使用线性回归对第五年员工离职的首要因素进行分析,可得线性回归结果为:

是否在第五年流失 = 1.31+ 0.76 * 最后一次绩效评估 + 0.30 * 员工满意度 + 0.10 * 薪资水平low + 0.07 * 项目数 + 0.05 *薪资水平medium - 0.11 * 工作事故 - 0.11 * 过去5年是否有升职1 - 0.22 * 职位变动1

在这里插入图片描述

六、分析结论与建议

结论:

  • 员工满意度和薪资水平成正相关,薪资越高满意度越高,离职率也越低;
  • 绩效评估高、员工满意度低、薪资水平低的员工非常容易离职;
  • 平均月工作时长较长,超过平均水平(200小时)较容易离职;
  • 参与项目数越多的员工离职率相对越大;
  • 工作4-6年的员工的离职率相对较高。

建议:

  • HR部门要重点关注绩效评估高、员工满意度低、薪资水平低的这部分员工的晋升情况、满意度和心理状况。
  • 针对工作时间长、工作压力大的员工,及时进行工作量调整,合理安排工作计划;
  • 项目数多可能意味着对该员工的工作要求更高,部门负责人是否根据员工能力给予了相应的足够的支持,也是需要关注的因素;
  • 对应4-6年的骨干员工要多加关注,可根据实际情况,做出相应的奖励和提拔,以增加员工的满意度,提升此类员工的留存率。
发布了17 篇原创文章 · 获赞 10 · 访问量 1666

猜你喜欢

转载自blog.csdn.net/weixin_44976611/article/details/104936420