一、分析背景

人力资源分析数据集汇聚了对大量员工的信息数据统计,包括企业因素(如部门)、员工行为相关因素(如参与过项目数、每月工作时长、薪资水平等)、以及工作相关因素(如绩效评估、工伤事故),这些因素都有很好的分析价值。

年底,xxx公司盘点过去一年工作时,发现公司在HR(人力资源)方面的工作不尽人意,具体表现为:多次出现重要的员工意外离职的情况,部分员工积极性不高,员工的培训不及时,人力部门对员工整体情况了解不到位……

本文将基于科赛网得到人力资源数据集,https://www.kesci.com/home/dataset/5a1fa61ed0178b641c3fa93c/document,通过数据分析解决上述问题,帮助HR部门产生更多的洞见。

二、分析任务

2.1 数据理解

源数据集包含10个不同字段,共14999条员工数据记录

2.2 问题分析

  • 探索有价值的数据分析结果
  • 员工生存分析,寻找员工离职的首先因素
  • 基于对于HR团队有价值的信息,制作一个全面体现HR信息的BI仪表盘

三、数据概览

## 加载包
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年的骨干员工要多加关注,可根据实际情况,做出相应的奖励和提拔,以增加员工的满意度,提升此类员工的留存率。

R项目:使用R分析人力资源数据相关推荐

  1. 教你用R语言分析招聘数据,求职/转行不求人~(附代码、数据集)

    来源:R语言中文社区 作者:Joffy Zhong 本文共4500字,建议阅读8分钟. 本文针对招聘网站的数据分析岗位的数据进行分析与挖掘实战. 项目背景 在学习数据分析的路上,少不了经常逛知乎,这也 ...

  2. 基于R语言的关联规则分析项目

    转自http://blog.163.com/dm_team/blog/static/2379750132014891084989/ 摘要 抱着成为一名优秀的数据分析师/数据挖掘师的理想,我们组成了一个 ...

  3. R语言回归模型构建、回归模型基本假设(正态性、线性、独立性、方差齐性)、回归模型诊断、car包诊断回归模型、特殊观察样本分析、数据变换、模型比较、特征筛选、交叉验证、预测变量相对重要度

    R语言回归模型构建.回归模型基本假设(正态性.线性.独立性.方差齐性).回归模型诊断.car包诊断回归模型.特殊观察样本分析.数据变换.模型比较.特征筛选.交叉验证.预测变量相对重要度 目录

  4. R语言data.table进行滚动数据连接,滚动连接通常用于分析涉及时间的数据(例如商业销售活动和对应的广告投放的安排之之间的关系)实战:实战和动画说明滚动数据连接的形式及方法

    R语言data.table进行滚动数据连接,滚动连接通常用于分析涉及时间的数据(例如商业销售活动和对应的广告投放的安排之之间的关系)实战:实战和动画说明滚动数据连接的形式及方法 目录

  5. R语言data.table进行滚动数据连接,滚动联接通常用于分析涉及时间的数据实战(动画说明滚动数据连接的形式):rolling joins data.table in R

    R语言data.table进行滚动数据连接,滚动联接通常用于分析涉及时间的数据实战(动画说明滚动数据连接的形式):rolling joins data.table in R 目录

  6. 贝叶斯软件genle教程_手把手教你用R的gemtc包对生存数据进行贝叶斯网状Meta分析...

    大家好,本教程将介绍如何使用R的gemtc包对生存数据(HR为效应量)进行贝叶斯网状Meta分析. 前提条件: 需要下载R软件(推荐使用的R版本为3.5.3),以及RStudio(一个R的友好交互界面 ...

  7. R语言主成分回归(PCR)、 多元线性回归特征降维分析光谱数据和汽车油耗、性能数据...

    原文链接:http://tecdat.cn/?p=24152 什么是PCR?(PCR = PCA + MLR)(点击文末"阅读原文"获取完整代码数据). • PCR是处理许多 x ...

  8. R语言对推特twitter数据进行文本情感分析

    原文链接:http://tecdat.cn/?p=4012 我们以R语言抓取的推特数据为例,对数据进行文本挖掘,进一步进行情感分析,从而得到很多有趣的信息(点击文末"阅读原文"获取 ...

  9. 熟练掌握R语言的Meta分析全流程和不确定性分析,并结合机器学习等方法讲解Meta分析在文献大数据的延伸应用

    Meta分析是针对某一科研问题,根据明确的搜索策略.选择筛选文献标准.采用严格的评价方法,对来源不同的研究成果进行收集.合并及定量统计分析的方法,最早出现于"循证医学",现已广泛应 ...

最新文章

  1. const与#define相比,区别和优点超详解总结
  2. oracle rac 中的ocr,11g rac中 ocr和 votingdisk疑问
  3. 天池 在线编程 所有子数组之和(排列组合)
  4. Web 设计与开发终极资源大全
  5. 招聘 | 刘知远老师博士生涂存超博士创办的「幂律智能」招NLP算法工程师啦
  6. python logisticregression_Python机器学习sklearn LogisticRegression用户流失预测模型初探
  7. SpringAop源码一:通知方法优先级
  8. Rational Rose下载安装教程
  9. Android 12 WiFi 框架
  10. 计算机没有鼠标用英语怎么说,鼠标用英语怎么说
  11. Unable to find a single main class from the following candidates
  12. NUC8冥王峡谷改装苹果网卡完美方案
  13. 算法第十九期——图论初入门
  14. 【最新】M1芯片Mac安装PS2021/2020卡在启动页解决教程下载方法
  15. Iphone手机企业邮箱设置 九步轻松搞定
  16. 如何在Debian 9上安装和使用Docker
  17. c++----随机数算法
  18. 遍历日历 LocalDate
  19. 间歇性宏图大志,持续性混吃等死...
  20. 九针串口跟电脑主板接法

热门文章

  1. 为什么现在很多人在用影刀,影刀突然火起来了?
  2. 雄智影视直播王 bt
  3. Excel技能树系列02:公式中单元格的绝对引用、相对引用和混合引用
  4. 交换机用户模式、特权模式、全局模式、端口模式
  5. 旗帜工作室2021年会总结
  6. java: 错误: 找不到符号
  7. 积木拼图游戏-积木游戏世界中文版
  8. tomcat的下载和启动
  9. intellij idea maven项目jdk版本会自动重置
  10. IDEA中maven项目的language level 修改后自动重置问题