hr员工数据分析项目实战

(数据已脱敏)

背景说明

某公司最近公司发生多起重要员工意外离职、部分员工工作缺乏积极性等问题,受hr部门委托,开展数据分析工作。

经与hr部门沟通,确定以下需求:

制定数据仪表盘实时监控人员变动情况(比如能预知员工离职节点),制作员工画像。

原始数据说明:

共两个sql数据,“hr数据”、“员工满意度及绩效考核数据”。其中hr数据中,转过岗的员工有转岗前和转岗后的两条数据;“员工满意度及绩效考核数据”中有测试数据ID为负,职务序列为管理的员工没有满意度数据。

项目实施:

1.数据获取&数据集制作

原始数据情况介绍:原始数据为两个sql文件,“员工绩效及满意度数据”、“hr数据”。而且根据业务方的介绍“员工绩效及满意度数据”中存在ID为负值的测试数据,“hr数据”中转过岗位(从其他岗位转管理的员工有两条记录。这里首先需要将数据导入mysql workbench对其进行清洗和转换。

基于数据介绍可知,需要对转过岗的人保留新岗位记录(删除转岗之前的数据),并新加一列标注每位员工是否转过岗

# 第一步 转过岗的人只保留新岗位记录
# MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令,
# 执行命令SET SQL_SAFE_UPDATES = 0
DELETE FROM `hr数据`
WHERE `ID` IN (
SELECT a.`ID`
from(
SELECT `ID`
FROM `hr数据`
GROUP BY `ID`
HAVING COUNT(`ID`) > 1
)AS a
) AND `职务序列` != '管理'; # 第二步 新加一列标注每位员工是否转过岗
SELECT
*,
CASE
WHEN `ID` IN (
SELECT`ID`
FROM`hr数据`
GROUP BY `ID`
HAVING COUNT(`ID`) > 1
) AND `职务序列` = '管理' THEN 1
ELSE 0
END AS `是否转岗过`
FROM `hr数据` # 第三步 表格合并+只导出id为正值的数据 SELECT
a.*,
b.`员工满意度`,
b.`最后一次绩效评估`
FROM
`hr数据` AS a
LEFT JOIN `员工绩效及满意度数据` AS b
ON a.`ID` = b.`ID`
WHERE b.`ID`>0;
# 将以上结果以csv文件导出

得到的csv文件(样例)如下:

2 R语言读取数据

2.1处理缺失值

setwd("D:/R/practise/biysheji/三节课_结课设计")
hr_data <- read.csv("aikeseng_hr_data.csv",header = T,stringsAsFactors = F)
#summary(hr_data)
# 发现变量员工满意度有缺失值,需要处理
hr_data$员工满意度[is.na(hr_data$员工满意度)] <- mean(hr_data$员工满意度,na.rm=T) #这里用简单的缺失值办法 将该变量均值,填充缺失值
summary(hr_data)
head(hr_data$离职)

通过四分位数来看补全的缺失值与其他数差异不大,基本可用。

3 对数据做进一步清理

3.1 转换数据类型

将数据集里的与分类有关的变量改为因子型

new_data <- hr_data
new_data$离职 <- factor(new_data$离职)
new_data$过去5年是否有升职 <- factor(new_data$过去5年是否有升职)
new_data$职务序列 <- factor(new_data$职务序列)
new_data$薪资水平 <- factor(new_data$薪资水平)
summary(new_data)

3.2创建新的特征变量

创建特征变量1:平均每天工作时间,依据劳动法计算每月平均上班时间为21.75天

```{R}
new_data <- transform(new_data,平均日工作时间= new_data$平均每月工作小时/21.75)
```

创建特征变量2:排序,员工满意度、最后一次绩效评估、平均每日工作时间等皆可排序。
员工满意度排名

```{R}
library(dplyr) # 加载数据处理专用包dplyr
new_data <- new_data %>%
mutate('员工满意度排名'=rank(desc(new_data$员工满意度))) %>%
as.data.frame
head(new_data)
```

最后一次绩效评估排名

```{R}
new_data <- new_data %>%
mutate('最后一次绩效评估排名'=rank(desc(new_data$最后一次绩效评估))) %>%
as.data.frame
head(new_data)
```

平均每日工作时间排名

```{R}
new_data <- new_data %>%
mutate('平均日工作时间排名'=rank(desc(new_data$平均日工作时间))) %>%
as.data.frame
head(new_data)
```

4 数据探索

4.1 公司不同职务人员流失情况

```{R}
library(ggplot2)
ggplot(new_data,aes(x=职务序列,fill=离职))+
geom_bar(position = "dodge")+
scale_fill_manual(values=c("#58FA82","#FF0000"))+
xlab("公司各岗位人员流失情况")
```

4.2 员工满意度分布情况

```{R}
ggplot(new_data,aes(x=员工满意度))+
geom_histogram()+
xlab("员工满意度分布密度图") ggplot(new_data,aes(x=员工满意度,colour=职务序列))+
geom_density() quantile(new_data$员工满意度)
mean(new_data$员工满意度) ggplot(new_data,aes(x=职务序列,y=员工满意度))+
geom_boxplot()+
xlab("各部门员工满意度分布")
```

根据上述结果,员工满意度平均分为0.612分,中值为0.62,根据直方图可见大部分员工满意分在0.5分以上;根据密度图,不同职务打分接近,管理类员工满意度成正态分布与补充的平均值有关;根据各部门员工满意度分布图,财务部门平均分略低于其他部门,进一步的情况待后续观察。

4.4最后一次绩效评估分布

```{R}
ggplot(new_data,aes(x=最后一次绩效评估))+
geom_histogram()+
xlab("员工最后一次绩效评估分布图")
```

从整体看最后一次绩效评估分数集中在0.5分以上。

4.5 不同工作年限员工流失情况

```{R}
ggplot(new_data,aes(x=在公司工作年限,fill=离职))+
geom_bar(position = "dodge")+
scale_fill_manual(values=c("#58FA82","#FF0000"))+
xlab("公司不同工作年限员工离职情况")
```

根据上述条形图,可见工作2——5年的员工离职率相对较高,尤其是工作4年和工作三年的员工。而工作6年及以上的员工比较稳定。

5.员工画像分析

mydata <- read.csv(file="D:/R/practise/biysheji/三节课_结课设计/aikeseng_hr_data.csv")
mydata$薪资水平 <- as.integer(factor(mydata$薪资水平,levels=c('low','medium','high'),ordered=TRUE))
mydata$员工满意度[is.na(mydata$员工满意度)] <- mean(mydata$员工满意度,na.rm=T)
# 确定聚类数量(K=?)
cost.df <- data.frame()
for(k in 1:10){
kmeans.fit <- kmeans(x=scale(mydata[,c("过去5年是否有升职","薪资水平","在公司工作年限","工作事故","员工满意度")]),centers=k)
cost.df <- rbind(cost.df,cbind(k,kmeans.fit$tot.withinss))
}
names(cost.df) <- c("k","d2")
# 画图
ggplot(cost.df,aes(k,d2)) +
geom_point()+
xlab("聚类数目")+
ylab("到聚类中心的距离平方和(cost)") # 运行k—means模型
set.seed(10) # 确定随机数生成函数的初始数
kmeans_cluster <- kmeans(scale(mydata[,c("薪资水平","在公司工作年限","员工满意度","过去5年是否有升职","工作事故")]),5)
mydata$新标签 <- as.factor(kmeans_cluster$cluster)
# 画图
library(ggplot2)
ggplot(mydata,aes(薪资水平,在公司工作年限,员工满意度,过去5年是否有升职,工作事故,color=新标签)) + geom_point()
ggplot(mydata,aes(在公司工作年限,员工满意度,过去5年是否有升职,工作事故,薪资水平,color=新标签)) + geom_point()
ggplot(mydata,aes(员工满意度,过去5年是否有升职,工作事故,薪资水平,在公司工作年限,color=新标签)) + geom_point()
ggplot(mydata,aes(过去5年是否有升职,工作事故,薪资水平,在公司工作年限,员工满意度,color=新标签)) + geom_point()
ggplot(mydata,aes(工作事故,薪资水平,在公司工作年限,员工满意度,过去5年是否有升职,color=新标签)) + geom_point()
#ggplot(mydata,aes(员工满意度,薪资水平,在公司工作年限,color=新标签)) + geom_point()
#library(ggpairs)
#ggpairs(mydata[,c("薪资水平","在公司工作年限","员工满意度")], aes(colour = mydata$新标签, alpha = 0.4)) # 计算每个聚类下的员工数量、平均工作年限、员工平均满意度、平均工作事故、平均薪资
library(dplyr)
mydata %>%
group_by(新标签)%>%
dplyr::summarise(员工数量=length(ID),平均工作年限=mean(在公司工作年限),员工平均满意度=mean(员工满意度),平均工作事故=mean(工作事故),平均薪资=mean(薪资水平))

根据聚类结果可以将全部员工分成五大类:

高年限高满意度高薪员工 ;

中等年限高满意度高薪员工 ;

低年限低满意度低薪资员工;

低年限高满意度低薪资高事故率员工;

低年限高满意度低薪资员工

根据聚类结果发现以下问题:

第四类员工群体,即低工龄低薪员工 工作失误率高,这部分员工占总数的1/7,

值得我们关注, 建议增加这部分员工的培训,优化薪资待遇及奖惩措施。

实时监控系统——power bi仪表盘

https://app.powerbi.com/view?r=eyJrIjoiNDJiZjJhNTctOWZjZi00MmQ2LWI1OGYtMzk5OTM4NDM3YTVkIiwidCI6ImE0NmQwMTZhLTA1NTQtNGE0Yy05OTM5LTgxMWQwM2U0Yzk1YyIsImMiOjEwfQ%3D%3D

hr员工数据分析(实战)的更多相关文章

  1. Python数据分析实战

    Python数据分析实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1nlHM1IW8MYg3z79TUwIsWg 提取码:ux8t 复制这段内容后打开百度网盘手 ...

  2. Python数据分析实战视频教程【小蚊子数据分析实战课程】

    点击了解更多Python课程>>> Python数据分析实战视频教程[小蚊子数据分析实战课程] [课程概述] Python数据分析实战' 适用人群:适合需提升竞争力.提升工作效率.喜 ...

  3. 【python数据分析实战】电影票房数据分析(一)数据采集

    目录 1.获取url 2.开始采集 3.存入mysql 本文是爬虫及可视化的练习项目,目标是爬取猫眼票房的全部数据并做可视化分析. 1.获取url 我们先打开猫眼票房http://piaofang.m ...

  4. 【python数据分析实战】电影票房数据分析(二)数据可视化

    目录 图1 每年的月票房走势图 图2 年票房总值.上映影片总数及观影人次 图3 单片总票房及日均票房 图4 单片票房及上映月份关系图 在上一部分<[python数据分析实战]电影票房数据分析(一 ...

  5. 《MySQL数据分析实战》八句箴言前四句解析

    大家好,我是jacky朱元禄,很高兴继续跟大家学习<MySQL数据分析实战>,从本节课程开始,jacky将从SQL语句入手,给大家解析八句箴言: 不管三七二十一,先把数据show来看: 数 ...

  6. MySQL数据分析实战-朱元禄-专题视频课程

    MySQL数据分析实战-496人已学习 课程介绍        本套课程由知名数据分析博主jacky老师录制,深入浅出讲解MySQL数据分析,从实战角度出发,帮助大家制胜职场!课程收益    1.学会 ...

  7. 《数据分析实战:基于EXCEL和SPSS系列工具的实践》一1.4 数据分析的流程

    本节书摘来华章计算机<数据分析实战:基于EXCEL和SPSS系列工具的实践>一书中的第1章 ,第1.4节,纪贺元 著 更多章节内容可以访问云栖社区"华章计算机"公众号查 ...

  8. 万字长文,Python数据分析实战,使用Pandas进行数据分析

    文章目录 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...

  9. Python数据分析实战-Boston Public Schools GEO数据分析-Part1

    项目目标: Boston Public Schools Geo数据是来自于Boston地区的公共学校的数据,具体描述了学校的坐标,名字,类型等.基于此数据,我们可以学习一些基本的Python数据分析的 ...

随机推荐

  1. 超大文件上传方案( Java )

    1.介绍enctype enctype 属性规定发送到服务器之前应该如何对表单数据进行编码. enctype作用是告知服务器请求正文的MIME类型(请求消息头content-type的作用一样) 1. ...

  2. P1092 虫食算——题解

    题目传送 (据说官方正解为高斯消元,但用搜索也能过,这里就讲讲搜索算法吧.) 对于一道搜索题,首先考虑一下大体怎样搜索.因为要考虑加法的进位,所以从左往右搜索对于考虑进位来说十分麻烦,而从右往左搜索就 ...

  3. TCP学习笔记

    TCP/IP 协议分层模型 TCP/IP 协议族按层次分别分为以下 4 层:应用层.传输层.网络层和数据链路层.层次化之后,每个层级只需要考虑自己的任务就可以了,不再需要弄清其他层级的功能了. TCP ...

  4. height设置百分比的条件

    很多时候我们在给height设置百分比的时候不起作用, 这时候就要来谈谈什么情况下才起作用了 1)所有父级元素必须有高度: 2)必须是块级元素,行内元素不起作用: 3)ie9 以下 使用 positi ...

  5. 设计模式学习笔记——Bridge 桥接模式

    先说一下我以前对桥接模式的理解:当每个类中都使用到了同样的属性或方法时,应该将他们单独抽象出来,变成这些类的属性和方法(避免重复造轮子),当时的感觉是和三层模型中的model有点单相似,也就是让mod ...

  6. CSS选择器(CCS第三版)

    什么是选择器? CSS选择器就是使样式找到应用对象. 简单选择器(Simple selectors) 在日常开发中,最常用的选择器,也是最基本的选择器. 元素选择器(Type selector) 针对 ...

  7. java的基本数据类型有

    整型数据根据它所占内容大小的不同可分为4种类型. 数据类型 内存 byte 8位 short 16位 int 32位 long 64位 浮点类型 数据类型 内存 float 32位 double 64 ...

  8. Oracle10g 64位 在Windows 2008 Server R2 中的安装 DBconsole无法启动

    致谢!本文参考http://www.cnblogs.com/leiOOlei/archive/2013/08/19/3268239.html 背景: 操作系统Windows 2008 Server R ...

  9. 十八、浏览器不能打开jenkins报告,报错Opening Robot Framework report failed

    解决方案一:(推荐) 打开jenkins----系统管理---输入:  System.setProperty("hudson.model.DirectoryBrowserSupport.CS ...

  10. HttpModule 介绍

    引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类进 ...