四、沥尽狂沙方见金:数据的清洗与可视化
题解 用刘禹锡《浪淘沙》中的两句诗来形容数据清洗再恰当不过了——“千淘万漉虽辛苦,吹尽狂沙始到金[9]”。数据清洗是提高数据质量、使数据变得可用的过程,数据清洗会提升数据分析的准确率。
[9] 《浪淘沙九首》之八。全诗:“莫道谗言如浪深,莫言迁客似沙沉。千淘万漉虽辛苦,吹尽狂沙始到金。”这首诗告诉我们:辛苦、委屈和磨砺都是达到目标、实现价值的过程中必须经历的。
咖哥问小雪:“谈一谈你对数据清洗的看法吧。”
小雪答:“我认识一位在银行做数据分析师的学长。我曾问他每天都在做什么项目,是不是要分析给什么样的用户发什么卡,判断什么样的用户风险高。学长很实在,告诉我其实他日常工作的大部分内容是把数据整理成能用的格式。所以我想数据清洗是数据分析师工作中很繁重的一部分吧。”
咖哥点点头:“的确是这样的。”
1 “脏”数据的清洗
很多人都说做饭时油下锅开始炒菜是最爽的环节,但一般炒菜时间只占做饭时间的20%,剩下的时间都是在准备食材,如买菜、择菜、洗菜。数据清洗就是在开始“炒菜”(数据分析)之前的准备工作(见下页图)。准备工作做得越好,数据越干净,数据分析结果就会越准确。
数据清洗占数据分析师的大部分工作时间
看看下面这个从数据库中直接提取出来的Excel表,你就会发现,“脏”数据的种类很多。
“脏”数据的示例
数据清洗过程中主要处理下面这4种数据。
(1)缺失的数据。
这里有两种可能的情况:一种是缺少数据记录;另一种是有数据记录,但是不完整。
对于缺少整条数据记录的情况,要分析埋点过程中哪里存在流程或技术上的问题。对于重要数据因误操作丢失的情况,如果备份系统里面还有该数据,可以重新载入:如果备份系统里面没有该数据,试一试是否能通过原始文件手动补录。
对于有数据记录但是含有缺失值的情况,有以下两种处理方法。
■ 如果含有缺失值的数据记录不影响数据分析结果,可以将其删除,但这样做会减少样本的数量。
■ 如果不希望删除含有缺失值的数据记录,则可以通过一些方法补充缺失值,如取其他数据记录的平均值、随机值或者0值来补充缺失值,这称为数据修复。
Python的Pandas中有工具(API[10])可以用来完成上述的删除和补充缺失值工作。
[10] Pandas等Python包中提供的方法、属性和函数统称为API,即用于实现某种功能的程序接口。
(2)重复的数据。
完全相同的重复数据处理起来比较简单,用数据处理工具删除冗余数据即可。Excel和Python的Pandas中都有相应工具或API。
但是如果同一个主键出现两行不同的数据,例如同一个身份证号出现两行不同的地址数据,此时要看看有没有其他辅助信息可以帮助判断(如时戳)哪一行数据是正确的。若无法判断,只好删除其中一行,或者全部保留。
(3)错误的数据。
数据中可能有各种逻辑错误。例如,商品的销售量、销售金额出现负值,此时就需要将其删除或者转成有意义的正值。又如表示百分比或概率的字段的值大于1,这也属于逻辑错误数据。
(4)不可用的数据。
还有一些数据不能算是错误数据,但是需要转换格式后才能够正确使用,如价格字段,有些以人民币为单位,有些以美元为单位,如果直接对这些数据进行求和,得到的结果就是错误的。另一些常见例子是把“是”“否”分别转换成“1”“0”再输入机器学习模型,或者把多分类字段转换成模型能够识别的多个二分类字段。
通过数据治理将上述所有情况从源头处理好,其效果远远好过事后补救。
“脏”数据清洗的工作完成之后,数据分析师的下一步工作通常是把数据可视化。
2 数据的可视化
“小雪,看一下咱们数据科学讲习所的年利润率增幅图(见下图)。”
给投资人看的利润率增幅图
小雪说:“好大的增幅啊。”
咖哥说:“很大是吗?那你再看看下面这张图(见下图)。”
咖哥自己看的利润率增幅图
小雪定睛细看,喃喃自语:“怎么回事,一样的数据,现在又不觉得有多大的增幅。这是用了什么障眼法?”
咖哥笑道:“这就是数据可视化过程中的一个小技巧。”
用同样的数据制作的图,第一张图适合给投资人看;而第二张图适合给自己人看,以提醒大家不要对小小的增长过于沾沾自喜。第二张图中的视觉增长和我们营收的实际增速一致,都约为25%;而第一张图在并没有修改数据的前提下把25%的营收增速在视觉上放大至近300%。
因此,数据还是那些数据,如何展现它们,其中的学问可就太大了。
有很多种工具可以实现数据的可视化。
■ 我们常接触的Excel中可视化工具不少,基于数据透视表的透视图就是其中之一。
■ 专业的数据分析工具,如Power BI、Tableau等,它们也提供了强大的数据可视化功能。
■ 各种商用数据分析平台,如Google Analytics、百度统计、GrowingIO、诸葛IO、神策数据、西瓜数据,都可以实现数据的可视化。
■ Python、R语言、MATLAB语言中都有数据可视化包,如Python中常用的Matplotlib,R语言中的ggplot2。
“数据可视化与用户体验直接相关,那么谁是数据可视化的用户?”咖哥问。
小雪说:“数据分析师本人?”
“当然,还有其他部门的同事,更重要的是数据可视化后的结果往往要呈现给老板或者客户。因此用户体验至关重要。”
在后续的实践篇中会讲解数据可视化的大量细节,这里只说一些用户体验要素,可作为数据可视化的指导思想。
(1)永远要记得你的用户。数据可视化的结果是数据分析师的产品,而产品是给用户看的,要让用户看得懂,看得清楚。
(2)少即多,简单就是美。尽量简化数据可视化的结果的配色与排版。一般情况下,一张图片中的颜色不要超过3种,字体不要超过3种,能不用的背景色就不用,不需要的网格线全部删除。
(3)注意对比。单独一行数据包含的信息有限,把两行或两行以上的数据放在一起展示更易于发现其中的问题。
(4)强调一致性。一系列的数据可视化的结果要基于相同的标准,最好让它们使用同样的模板。因为人的思维有惯性,要避免易引起混淆的跳跃。如果有两张业务增长图,其中部门A的y轴从0开始,部门B的y轴从50%开始,这两张图在同一份报告中出现就很不合适。
类似的指导原则还有很多。它们是我们在一开始就应领悟的“道”。虽然“道”和“术”都很重要,但我想反复强调“道”。因为对“道”的深入理解能够让我们走得更稳,走得更远。