2.4 整理数据
2.4.1 关于一维表
老梁:经理,收集了数据之后,是不是就可以进行数据分析了呢?
Miss陈:这需要看数据的质量。如果数据质量高的话,就可以进行分析;如果数据质量不高的话,就需要进行数据整理,也叫作数据清洗。就好比我们做菜,蔬菜可能含有农药要用水漂洗多次,肉需要切成肉丝或肉丁,鱼要去鳞清洗肚腹等,这是将原材料加工成可以烹饪的形态,然后才进行烹饪,而不是直接就开始烹饪,否则做出来的菜谁也不敢吃。数据整理就是对数据进行清洗的过程,清洗后才能进行数据分析。
遗憾的是,多数时候收集到的数据质量都不太高,或多或少有些问题,所以需要进行数据整理,而且这个过程是数据分析中耗时最长的。
老梁:那么要怎样进行数据整理呢?
Miss陈:首先我们讲一个数据整理中比较常见的问题。你看下面的两张表,表中数据是员工绩效考核成绩,表2-1和表2-2的数据有什么不同?
表2-1 数据整理样表一
表2-2 数据整理样表二
老梁:我看看,表2-1好像是汇总表,是我们常用来做报表的样式;表2-2则是一排排数据,像是数据库中的数据表。
Miss陈:是的。平常我们用表2-1的表格较多,这种表格称为二维表。就是横排和纵列分别代表不同的维度,甚至多个维度。比如表2-1中,横排是考核分数的类型,纵列是部门和性别。绝大多数情况下,这种二维表不适合做数据分析。
老梁:您的意思是像表2-2样式的表格才适合进行数据分析吗?
Miss陈:是的,像表2-2这种样式的数据我们称之为一维表,第一行代表了分析的维度,从第二行开始就是一条条数据。在不同的知识领域,一维表的叫法不同,比如在数据库中,一维表叫作数据表,第一行是字段,第二行开始叫作记录;在数据分析中,第一行叫作变量,从第二行开始叫作观测值。
老梁:原来如此,我以前接触过数据库,对这种形式的数据还是有些了解的,但不知道数据分析需要这种形式。
Miss陈:数据分析领域绝大多数的算法,都是基于一维表进行的,所以如果我们要进行数据分析,但手头上只有二维表,就必须将二维表转换为一维表,才能进行数据分析。
老梁:这个很重要,我们很多报表的数据都是二维表,照这样看都不能进行数据分析,要转换成一维表才行。但是怎样将二维表转换成一维表呢?如果将一个个数据拆开再组合起来,要花不少时间呢,还容易出错。
Miss陈:这种二维表转一维表的数据转换可以用Excel来做,整个操作方便又快捷。以表2-3的数据为例。
表2-3是性别和三个评价维度组成的二维表,其中绩效总分、情绪总分、适应总分都是对员工绩效的测评结果,可以合并为一个变量,但这里分成了三个变量。下面我们看看如何用Excel来将这种二维表转换为一维表。
表2-3 待转换的二维表
(1)打开Excel,先按“Alt+D”键,然后再按“P”键,在弹出的对话框中打开“数据透视表和数据透视图向导”对话框,选中“多重合并计算数据区域”选项,如图2-13所示。
图2-13 数据透视表和数据透视图向导
(2)选中“创建单页字段”选项,单击“下一页”按钮,如图2-14所示。
(3)在“选择区域”中选中待转换的二维表,单击“添加”按钮,如图2-15所示。
(4)单击“新建工作表”按钮,再单击“完成”按钮,此时会生成一个数据透视表,如图2-16所示。
图2-14 创建单页字段
图2-15 添加待转换的数据区域
(5)双击数据透视表的最后一个单元格,Excel会自动创建一个新的工作表,新的工作表就是转换后的一维表,具体见表2-4。
图2-16 生成数据透视表
表2-4 转换后的一维表
老梁:原来Excel还有这种隐藏的功能啊!
Miss陈:Excel把二维表转换为一维表时利用了数据透视表的功能,转换过程显得简单、直观、快捷,所以遇到这种情况用Excel最方便。当把数据转换为一维表后,就可以导入R语言进行数据的整理和分析了。
2.4.2 处理缺失值
Miss陈:进行数据整理时最常碰到的,最令人头疼的事情是出现数据缺失,就是数据不完整,出现了空值。这种缺失会影响数据分析的效果,导致分析结论出现错误。
老梁:是啊,辛辛苦苦收集来的数据,发现这里缺少数据,那里缺少数据,很头疼。这种缺失情况是怎么造成的呢?
Miss陈:造成数据缺失的原因是多种多样的,总体来说分为机械原因和人为原因。机械原因是指由于硬件原因导致数据收集或保存失败而造成的数据缺失。比如数据存储失败,存储器损坏,机械故障导致某段时间的数据未能收集。而人为原因是人的主观失误、历史局限或有意隐瞒造成的数据缺失,比如在问卷调研中填报人拒绝透露相关问题的答案,或者回答的问题是无效的、是谎言,再比如数据录入人员在录入数据时失误,漏录了数据,等等。这些原因都会造成数据缺失。
老梁:那怎么检查数据是否有缺失呢?
Miss陈:最简单的办法是打开数据看看。
老梁:哎呀,糊涂了,直接打开看不就知道了吗?哈哈。
Miss陈:如果数据量大的的话,直接看就比较花时间了。在数据量大的情况下,要直观了解数据缺失情况,可以用R语言中的VIM包函数aggr来查看。以我们公司在应届大学毕业生招聘时的测评数据为例,数据见表2-5(数据较多,只显示了其中一部分)。
其缺失值情况经分析绘制成图形,如图2-17所示。
表2-5 应届大学毕业生招聘时的测评数据
图2-17的左边是缺失值在各个变量中的占比情况,右边是各个变量中的缺失值分布情况,黑色代表有缺失值。通过图形就能比较直观地看到缺失值的情况了。
处理缺失值的R语句如下:
老梁:有这么多缺失值啊,该怎么办呢?
Miss陈:别担心,缺失值是比较常见的,只要比例不超过总数据量的10%,影响也不见得很大。不过咱们还是要对这些缺失值进行处理。
对于缺失值的处理,常用的方法有:直接删除法、均值插补法、同类值插补法、极大似然估计法、多重插补法。
比较简单的是直接删除法,就是直接将有缺失值的那行数据删除,但是会带来数据信息的流失。如果数据量很大,并且缺失值不多的时候,用直接删除法不失为一种简单、经济、快速的方法。
图2-17 应届大学毕业生招聘时测评数据的缺失情况
比较常用的方法是多重插补法。多重插补的思想源于贝叶斯估计,该理论认为待插补的值是随机的,它的值来自已观测到的值。多重插补通过变量间关系来预测缺失数据,利用蒙特卡罗方法生成多个完整数据集,再对这些数据集分别进行分析,最后对这些分析结果进行汇总处理。在R语言中是使用mice包中的mice函数。
采用多层插补法的R语句如下:
上述语句中,已经通过mice函数将毕业生测评数据的缺失值进行了多重插补运算,默认生成5组插补值,然后存储到变量d1中,之后的各种分析用d1来进行即可。
老梁:多重插补法虽然比较复杂,但计算过程交给函数去处理,倒也省事啊。
2.4.3 处理重复数据
老梁:经理,我经常在工作中遇到重复数据,这种情况是否也要处理呢?比如前两天我们收集各个分公司培训主管的个人数据,也不知道上报的人员是怎么搞的,报上来的数据有些是重复的,拿到这种数据要怎么处理呢?具体数据见表2-6。
Miss陈:重复数据也是常见的错误数据类型,需要进行清洗,删除多余的重复数据。在R语言中可以用unique函数进行去除重复数据的操作。清洗后的结果见表2-7。
表2-6 各分公司培训主管基本信息数据(清洗前)
续表
表2-7 各分公司培训主管基本信息数据(清洗后)
续表
续表
处理重复数据的R语句如下:
老梁:真方便,原来R语言中剔除重复数据用一个函数就完成了啊。
2.4.4 数据分组
Miss陈:老梁,再问你一个问题,你遇到过需要对数据进行分组的情况吗?
老梁:经常遇到,比如按年龄段分组,按单位分组,按薪酬等级分组等,分组之后就可以按组别进行统计。
Miss陈:嗯,分组也是进行数据整理的一个重要环节。在数据分析领域,这种分组叫作分类,是将连续数据转换为类别(因子)数据的过程。举个例子,就用刚才各分公司培训人员数据。我们知道每个人都有年龄,现在我们拟对年龄进行分组。根据观察,最小的20岁,最大的45岁,可以分为三个组别,分别是:①30岁及以下;②大于30岁小于等于40岁;③大于40岁小于等于50岁。我们就按照这个规则对数据进行分组吧,分组后的数据见表2-8,分组结果见“年龄组”字段。
表2-8 各分公司培训主管基本信息数据(分组数据)
续表
续表
进行数据分组的R语句如下:
老梁:明白了。不过在数据分析中将原始的连续数据转换为分组数据有什么特别用意吗?
Miss陈:是的,分组后有许多好处呢,最直接的好处就是方便进行分组统计,可以计算每组数据的均值、方差等;还可以进行组间对比分析,研究不同组之间的差异情况,比如可以分析不同年龄组人员之间的绩效是否有差异,哪个年龄组绩效最高,哪个最低;更重要的是分组数据还可以通过一些算法进行预测,如通过判别分析、机器学习等算法可以建立分析模型,用模型对未知情况进行预测。你还记得前段时间网上流行的传照片测年龄的游戏吗?
老梁:记得记得,就是把照片传到一个网站上,该网站就能显示照片中每个人的年龄。我们都试了一下,还挺准呢。现在有些手机在照相时也可以显示年龄,挺神奇。这是怎么做到的呢?难道和数据分组有关系吗?
Miss陈:其实是运用了分类算法,年龄就是分组,只不过这个分组比较细,按1岁来分组。在收集了大量的人脸信息数据和年龄数据后,就可以通过统计分析软件,用分类算法建立统计模型,模型建立之后就可以根据照片中的人脸信息计算年龄了。
老梁:原来如此。
2.4.5 生成新数据
Miss陈:还有些时候,我们想根据一列数据生成另一列数据,用新生成的数据来进行分析,这时候就需要通过计算产生新变量。
老梁:嗯,常碰到这种情况呢。我上个月进行员工薪酬分析的时候,想要分析员工薪酬和市场薪酬之间的差距,就通过计算直接得出员工薪酬和市场薪酬之间的差距,然后再进行分析。
Miss陈:对于通过计算生成新变量的情况,只要我们确定了计算规则,剩下的就好办了。还是拿刚才培训人员的数据来举例吧,如我们公司员工的平均年龄是29岁,现在想知道每个人的年龄和平均年龄之间的差距是多少。这时,我们需要生成一个新的变量,用来保存年龄差距,可以将这个变量命名为“与平均年龄之差”。这个新变量的计算规则比较简单,是员工年龄与平均年龄之差,通过计算,结果见表2-9。
表2-9 各分公司培训主管基本信息数据(生成新数据)
续表
续表
生成新数据的R语句如下:
老梁:原来是这样生成新变量的,看上去只要知道了新变量的计算规则,就很容易操作了。
Miss陈:是的。关于数据整理咱们就谈这么多。你明白了吧,数据整理涉及很多方面的内容。
老梁:是啊,没想到整理数据这么麻烦。
Miss陈:其实数据整理还不止这些内容。
老梁:经理,还有什么技术,您给点提示吧。如果您没有时间,我们可以自己去找资料学习啊。
Miss陈:在数据整理方面,还有一些技术我们没讲到,包括以下方面。
(1)数据抽样:如果数据量很大,导致数据分析速度很慢,可以考虑通过数据抽样的方法,抽取一部分数据作为样本,来代表总体进行分析。
(2)噪声处理:就是异常值的处理。有时候数据包含一些极端值、异常值,这些数据的存在会较大地影响数据分析、建模、预测的结果,可以通过噪声处理的技术剔除这些数据。
(3)数据集成:如果有多个相关联的数据表,比如有员工培训、薪酬、绩效考核三张表,都与员工相关,那么可以通过数据集成的技术将这三张表合并成一张表,进行分析,这有点儿像数据库中的数据表联结。
(4)数据标准化:将不同量纲的数据转换为量纲一致的数据,以避免因为量纲不同带来的分析误差。一般是将不同量纲的数据进行标准化或者归一化,转换为标准分或者[-1,1]之间的数值。
老梁:难怪数据整理要花很多时间,原来有这么多内容要处理,我得赶快去网上查找资料学习一下,免得连数据都整理不好,就更别提进行后续的分析了。还有,今后要求各个分公司报数据时一定要准确,一旦发现不准确的就退回重报。咱们得把数据整理的工作分摊给大家,尽量保证快速、高效地收集高质量的数据,减少数据整理的时间。
Miss陈:老梁你果然是位经验丰富的人力资源管理人员啊,知道从管理方式入手改进数据质量。