前言
本文是本人研读《深入浅出数据分析》一书后,使用不同工具对书中案例的分析,一是为了加强自己对案例的理解,二是希望能将各种主流工具学以致用,三是将个人的学习思考进行总结量化;
本文所使用的案例数据均从《深入浅出数据分析》的官网中下载,根据自己的学习需求对数据进行了一些处理,不代表官方,官方下载地址如下:examples / Head First Data Analysis · GitLab (oreilly.com)
背景
一年一度的员工考评即将到来,这一年里你工作无可挑剔,于是想向老板提出加薪,但是应该提出多少加薪呢?是在考评表中吹嘘自己的才能然后要求大幅加薪,还是填好考评表后坐等老板给你加薪呢?你会使用什么数字化的方法解决该提多少加薪的问题呢?
现有数据
人力资源部统计的员工过去五年加薪记录(2005-2009),共3000条记录,表结构如下(仅展示前五条数据):
*说明:received表示实际加薪幅度,negotiated表示加薪前有无谈判(TRUE为有谈判,FALSE为无谈判),gender表示性别,year表示加薪年份
思考引导
Q: 你会如何对这份记录进行分析,挖掘数据的作用?
A:我的思考
首先分析变量received的特征,包括最大值、最小值、中位数、平均数、众数、计数值,简单了解一下数据;使用R来统计变量的数据特征最方便;
其次分析各变量与加薪幅度之间的关系,计算出最合适提的加薪幅度,当然加薪与否和多少也不单单是靠上述定量化数据来决定的,有时候也许还需要一些主观性的因素,比如运气、工作表现、老板风格等;
解决思路
通过直方图呈现出各个加薪区间的人数分布,先用一张总体直方图看一下不考虑任何因素情况下加薪区间的人数分布,再对数据进行下钻,分别对不同维度下的加薪区间的人数分布绘制直方图,对比各个维度下的直方图与总体直方图的差异,如果某个维度内的直方图差异较大,说明这个维度是影响加薪的主要原因。
当然也可以用散点图来探讨各变量与加薪幅度之间的关系,但本章主要学习通过直方图来展示数据;
详细步骤
1.绘制总体直方图呈现出各个加薪区间的人数分布,查看received的特征值;
2.将数据按性别划分为两份,绘制两张图分别体现不同性别中各个加薪区间的人数分布;
3.将数据按年份划分为五份,绘制五张图分别体现不同年份中各个加薪区间的人数分布;
4.将数据按性别划分为两份,绘制两张图分别体现谈判与否中各个加薪区间的人数分布;
工具选择
1.Excel绘制总体直方图
使用Excel绘图,在工具栏按照"数据-数据分析-直方图"顺序进入工具窗口进行绘制;
效果不太好,之后的图改用其他工具绘制。
2.Tableau绘图
可以逐一绘制出不同维度下的直方图,也可以在总体直方图中把其他维度加到颜色呈现出各维度中的成员在直方图中的占比。
使用Tableau将所有图面都放在一个仪表盘,可以更直观看出不同因素影响下人数分布的差异。
3.R绘图
使用RStudio绘制直方图并查看统计值,先使用以下R代码读取数据。
#读取数据,将数据命名为employee;
employee=read.csv("F:/hfda/hfda_ch09_employees.csv")
(1)总体直方图
代码 | #设置y轴标签数字为竖直文字方向,这是一个全局设置,在此代码后绘制的每张图都采用这个设定 par(las=1) #绘制总体直方图,设置区间数breaks为50,每个柱子占25/50=0.5个间隔,颜色col为橙色,边界border为黑色; hist(employee$received,breaks = 50,col="orange", border="black",xlab="加薪幅度",ylab="人数",main="加薪幅度-人数分布直方图") |
结果 | |
代码 | #查看统计值 summary(employee$received) #查看标准偏差 sd(employee$received) |
结果 |
(2)不同性别直方图
代码 | hist(employee$received[employee$gender=="M"],breaks = 50,col="orange", border="black" ,xlab="加薪幅度",ylab="人数",main="加薪幅度-人数分布直方图(男)") hist(employee$received[employee$gender=="F"],breaks = 50,col="orange", border="black" ,xlab="加薪幅度",ylab="人数",main="加薪幅度-人数分布直方图(女)") |
结果 | |
代码 | summary(employee$received[employee$gender=="M"]) sd(employee$received[employee$gender=="M"]) |
结果 | |
代码 | summary(employee$received[employee$gender=="F"]) sd(employee$received[employee$gender=="F"]) |
结果 |
(3)不同年份直方图
代码 | hist(employee$received[employee$year==2005],breaks = 50,col="white", border="black" ,xlab="加薪幅度",ylab="人数",main="加薪幅度-人数分布直方图(2005)") hist(employee$received[employee$year==2006],breaks = 50,col="white", border="black" ,xlab="加薪幅度",ylab="人数",main="加薪幅度-人数分布直方图(2006)") hist(employee$received[employee$year==2007],breaks = 50,col="white", border="black" ,xlab="加薪幅度",ylab="人数",main="加薪幅度-人数分布直方图(2007)") hist(employee$received[employee$year==2008],breaks = 50,col="white", border="black" ,xlab="加薪幅度",ylab="人数",main="加薪幅度-人数分布直方图(2008)") hist(employee$received[employee$year==2009],breaks = 50,col="white", border="black" ,xlab="加薪幅度",ylab="人数",main="加薪幅度-人数分布直方图(2009)") |
结果 | |
代码 | summary(employee$received[employee$year==2005]) sd(employee$received[employee$year==2005]) |
结果 | |
代码 | summary(employee$received[employee$year==2006]) sd(employee$received[employee$year==2006]) |
结果 |
(4)有无谈判直方图
代码 | hist(employee$received[employee$negotiated=="TRUE"],breaks = 50,col="orange", border="black" ,xlab="加薪幅度",ylab="人数",main="加薪幅度-人数分布直方图(有谈判)") hist(employee$received[employee$negotiated=="FALSE"],breaks = 50,col="orange", border="black" ,xlab="加薪幅度",ylab="人数",main="加薪幅度-人数分布直方图(无谈判)") |
结果 | |
代码 | #查看统计值、标准偏差 summary(employee$received[employee$negotiated=="TRUE"]) sd(employee$received[employee$negotiated=="TRUE"]) |
结果 | |
代码 | summary(employee$received[employee$negotiated=="FALSE"]) sd(employee$received[employee$negotiated=="FALSE"]) |
结果 |
工具总结
1.Excel:可以看到Excel在使用3000条数据绘制直方图时的效果并不好,问题在于Excel自动划分成了很多区间,有些区间根本就没有人数分布,导致柱子没有连接起来,手动设置区间间隔又太麻烦,浪费时间,而且可能最后还会分割出没有人数分布的区间;
2.Tableau:有目共睹,可视化十分优秀,而且提供多种呈现方式;
3.R:R中有很多的绘图函数,本文用了最基础的绘图函数,没有额外加载lattice和ggplot2等高级绘图包,基础绘图函数不支持将图像存入到对象中进行回显,每次出图都会覆盖掉上一次的图像显示结果,如果想要重新查看上一次出图结果只能重新输入代码进行生成。如果使用高级绘图函数如lattice包中的xyplot(),可以通过添加图层panel来控制图像输出,真正达到批量出图的效果,而且将高级绘图函数绘制的图像保存为对象后,还能进行回显,重新查看,也能对对象进行添加元素等操作。
图表分析
通过以上图表和统计值,我们可以知道近五年内员工的最大加薪幅度为25.9,最小加薪幅度为-1.8,加薪幅度中位数为5.5,加薪幅度均值为6.028,总体标准偏差为2.43;
在性别维度和年份维度上,各项统计值都和总体直方图的十分接近,与直方图的形态也十分相似,说明加薪和性别/年份没有太大关系;
在谈判维度上,两张直方图的形态十分不同,而且通过统计值就能看出,加薪前无谈判的员工加薪幅度为(1.7,8.1),加薪幅度的标准偏差为0.965,而有谈判的员工加薪幅度为(-1.8,25.9),加薪幅度的标准偏差为3.077,说明有无谈判对加薪幅度的影响非常大,加薪前有谈判能带来更大幅度的涨薪;
因此,我们强烈建议加薪前和老板进行加薪谈判,我们还能知道老板能给的加薪幅度不会超过25.9,大部分人得到的加薪幅度在上下四分位(4.6,6.7)之间,所以可以根据这些数据来辅助自己解决到底提多少加薪比较合适这一问题。
全文总结
本文通过直方图呈现数据分布,通过对比直方图及其统计值分析影响直方图分析的因素,当然在探索变量与变量之间的关系时,我们常用的是散点图,后续也会对这份数据使用散点图进行探索。