3.2 初级字段整理:数据清理和筛选
数据清理是数据准备过程中最烦琐的过程,必须精准地定位问题,然后改正。数据清理有两个基本目标:改正或排除错误数据、根据分析需求调整数据。
从数据清理的实操中看,清理可以分为两大类:针对数据字段的清理和针对数据内容的整理;前者关注标题,后者关注内容。常见操作如图3-5所示。
图3-5 常见的数据整理类型
几乎所有的数据清理工作,都可以用Desktop或者Prep Builder独立完成,具体使用哪一种工具,取决于清理的复杂性和分析背景。实现的方式所有差异,但基本逻辑完全一致。
比如最常见的“更改字段名称”(重命名)、“复制字段”等功能,如图3-6所示,在Desktop和Prep Builder多个位置都可以通过鼠标右击快速处理。
图3-6 修改字段类型和重命名
而点击字段前面的类型标识符(常见Abc字符串)手动则可以快速“更改数据类型”,在Prep Builder中甚至可以借助AI驱动的智能建议快速定位并更改(见图3-7)。此类简单的操作,多加练习,即可游刃有余,本书在介绍这些常规操作的同时,会重点阐述逻辑和思维方法,帮助读者深入地理解Tableau。
图3-7 借助智能推荐快速整理数据
在讲解具体的内容之前,先说明一下Desktop和Prep Builder的不同之处,特别是产品的定位和理念的差异。
(1)Desktop的清理是直接面向可视化分析的,而Prep Builder的清理则完全面向更进一步的整理环节(比如合并、转置、聚合等)。因此,Desktop的数据清理,胜在与可视化分析过程融为一体,有助于保持思维的连贯性;而Prep Builder则胜在专业性,凡是Desktop能完成的数据清理和处理,Prep Builder都能更好地完成。
打个比方,Desktop的数据清理犹如画家手中的橡皮擦,随检随用,胜在灵活;而Prep Builder则如同容纳各种染料、画笔、灯光的专业工作室,胜在专业,理解了这样的区别,就能理解下面的功能差异,也能更好地理解后面我们即将阐述的“选择Desktop和Prep Builder的使用场景”。
(2)对于字段而言,在Desktop中可“隐藏”,而在Prep Builder中则为“移除”。
Desktop是可视化分析工具,它直接和数据库打交道,自身没有数据库保存。“隐藏”的意思是无须从数据库查询这个字段,但需要查询时,又可以随时引用。如果字段已经使用,则此时就不能被隐藏。
而Prep Builder是数据ETL软件,是分步骤、分流程节点对数据的处理过程,每一个环节都为下一个环节而准备,而非直接为可视化准备。被“移除”的字段,之后所有的流程节点就不复存在了,想要在后面节点中使用它,必须回到“移除”字段的节点,删除移除操作。Prep Builder最后生成的数据结果,不管是.hyper文件还是本地.csv文件,都可以被视为和数据库不同的独立数据源。对比如图3-8所示。
图3-8 Desktop和Prep Builder在字段上处理的差异
可见,Desktop是为分析而做查询,可隐藏、可显示,隐藏是相对于数据库查询而言的;Prep Builder是为了生成独立的数据源,“移除”是相对于Prep Builder生成的新数据源而言的,被移除的字段在最终结果中不存在,也无法像Desktop一样重新显示。
(3)Desktop不能修改数据内容,而Prep Builder可以直接修改。
这与“隐藏”“移除”类似。Desktop只是从数据库中查询数据,如果能大量更改数据,则需要用“回写数据库”功能,这将引起数据安全风险。但是偶然有这种需求时怎么办?Desktop提供了“别名”,相当于在错误的字段内容上打一个正确的标签。注意,别名仅限于离散的维度,而且多个字段的别名不能重复。如图3-9所示,在Desktop中选择字段后用鼠标右击,在弹出的下拉菜单中选择“别名”,即可在弹出的对话框中设置别名。注意,不要在连续的日期和度量中增加别名。
图3-9 Desktop的别名功能
而在Prep Builder中,可以更改任意数据,不管是连续维度(如日期),还是连续度量。如图3-10所示,在Prep Builder中选择字段后通过鼠标右击,在弹出的下拉菜单中选择“编辑值”或者直接双击字段,都可以更改错误的数据。如果把“办公用品”改为“家具”,二者就会自动分组。
图3-10 Prep Builder的数据编辑
Prep Builder通过流程节点分阶段整理数据,每一步都会相对独立,以自身数据引擎压缩、保存了数据,只有这样才能做连续性的复杂整理。从这个角度,Prep Builder虽然是数据整理和准备工具,也可以与Server结合胜任一部分数据仓库的工作——借助于Tableau Data Management,Prep Builder摇身一变就实现了敏捷ETL的流程自动化。
上面是两个软件的关键差异性,一并介绍了几个关键的字段清理功能。接下来,我们介绍其他几个常见功能:数据拆分、数据分组、筛选器、字符串清理。
3.2.1 数据拆分
很多情况下,我们必须把一个字段拆分为两个甚至更多的字段。广义的拆分包括提取,比如在Excel中,我们常用LEFT、RIGHT、MID函数从字符串中提取左侧、右侧、中间的某一部分。
比如,HR部门借助拆分和逻辑判断,可以从员工身份证号码中自动提取出生年月日、性别甚至籍贯等。只要身份证ID是标准的18位,出生年月日就可以用MID([ID],7,8)来拆分第7位之后的8位数字,提取结果的数据类型改为“日期”即可(对应的类型转换函数DATE,详见第8章)。甚至可以基于身份证号码第15位的奇偶数推算性别,如图3-11所示。
图3-11 基于身份证号码截取出生年月和性别
基于计算字段的处理相当于定制化的整理,需要用到各种计算函数,推荐在学习第8章之后进一步理解这个过程。
还有一种拆分是有特定分割字符规律的拆分。如图3-10所示,超市数据中的“订单ID”,假设我们想要提取其中的区域(CN/US)和日期部分,则可以用LEFT、MID等函数,也可以使用更简单的方式:字符串拆分函数SPLIT。这个函数在两个工具中的体验完全一致。在Prep Builder的操作方法如图3-12所示。
图3-12 Prep Builder的拆分函数SPLIT
而在Desktop中,选择字段点击,在弹出的下拉菜单中选择“变换→拆分/自定义拆分”命令拆分字段。如图3-13所示,将“订单ID”自动拆分会基于“-”为分隔符创建3个字段。
图3-13 Desktop的字段拆分功能
LEFT、RIGHT、MID函数一般适用于位置和长度确定的字段拆分;而SPLIT函数适用于有特定分割字符的字段拆分。如果长度不确定,又没有分割字符,那么该怎么办?就需要借助其他字符串函数,比如LOOKUP函数、正则匹配函数等。本书会在第8章中介绍。
3.2.2 数据分组
“分组”是多个字段合并为一组的过程。Tableau的分组功能简单明了,特别是Desktop,可以边分析边创建,保持思维的连贯性。如图3-14所示,在按住Ctrl键的同时选择多个字段,之后用鼠标右击,在弹出的下拉菜单中选择“组”命令,即可自动创建一个新字段替代当前的字段。
图3-14 在Desktop中创建分组
而Prep Builder的强大在于提供了更多灵活的分组算法,比如按照拼写、常见字符等方式,还可以自动调整合并的阈值(可以理解为相似度),如图3-15所示。
图3-15 Prep Builder的“分组和替换”功能
注意,Prep Builder的分组是“分组和替换”功能,也就是用分组的方式,把多个字段内容合并在一起,如图3-16所示,比如把“石药新诺威”“石药中企制药”“石药恩必普”多个字段替换为“石药集团”,之后就没有原来的3个数据了;而Desktop的分组,是在原来字段的基础上新建一个字段,原来的字段依然保留。
图3-16 Desktop和Prep Builder分组功能的差异
如图3-17所示,Desktop的分组字段用“曲别针”图标标识,这样就保留了上下的层次关系。而在Prep Builder中,分组字段就是直接合并与替换,通常用第一个字段名称作为分组名称。在使用Prep Builder进行分组时,除非是正确和错误值的清理合并,否则建议先复制字段再分组,从而保留上下的层次关系。
图3-17 用Prep Builder创建分组和编辑成员
在Desktop中,多个字段可以组成“层次结构”,此功能方便在可视化图表中实现层次钻取,而不属于数据整理阶段,无法在数据源实现。在Desktop中如何创建“层次结构”详见第5章。
3.2.3 筛选器
针对数据内容的清理,大部分是借助“筛选器”完成的。顾名思义,筛选(Filter)就是筛掉无用的,留下可用的,因此它由两类动作组成:“排除”和“只保留”。在数据分析过程中,筛选器是一个特别庞大的体系,在Desktop中尤为如此,随着分析的深入,大家会逐步认识到它的魅力。
此前,我们对Prep Builder和Desktop的差异性进行了比较,“Desktop为可视化过程而整理,而Prep Builder则为接下来的数据整理而整理”,二者的筛选器用法也不同。Desktop的筛选主要为满足交互访问的需求,比如总经理想看全公司销售情况、东区负责人要看东区销售情况等,因此Desktop的筛选器是“差异化查询”的过程,是随时可以变化的。而Prep Builder筛选器则是去伪存真,是在当前节点删除(Delete)无效的数据,是静态的,而非随时可以调整的查询(Search)。
笔者会在第5章5.5节专门介绍Desktop的筛选器。这里,我们重点说一下Prep Builder筛选器的操作方法。
一种常见的筛选是空值(null)筛选,凡是标记为null的字段,即表示此字段空无一物。但是在排除空值时,务必清楚它和其他字段的关联关系——即在当前字段中为空的数据行,在其他字段的数据是否有效。Prep Builder为此提供了极其简单的关联查看的方法——高亮显示。如图3-18所示,在想排除某个字段的数据时,可先点击它,从而查看这个数据在其他字段的高亮分布。
图3-18 Prep Builder高亮选定值在其他字段的分布
而针对非空值的筛选就丰富多样了。比如图3-19所示,针对日期,筛选2017年以后的数据;针对类别,只保留“办公用品”;针对利润,只保留小于0的交易等。
图3-19 Prep Builder中的多种筛选器:维度、日期和度量
稍微复杂的筛选也会用到查询和匹配,比如筛选以a开头的订单编号(假设这一类代表某个特别渠道)、筛选身份证ID编码不等于18位的乘客(查找不是二代身份证的乘客)等。更复杂的操作可以通过计算字段来完成,我们会在第8章介绍。
上面的各种筛选方法,都设置在字段右侧的菜单选项“筛选器”中。针对离散维度、日期、度量又稍有差异,针对连续的日期和度量,还可以选择一个范围,这时就会有滑块可用(见图3-20)。后面我们会越来越多地用到类似的功能,此处不再赘述。
图3-20 Prep Builder中的离散/连续字段筛选器
3.2.4 字符串清理
Prep Builder有一个功能非常好用——清理,它内置了常见的清理函数工具,如图3-21所示,包括移除数字、移除字母、移除标点符号等。在处理复杂数据时,经常能一招制胜。比如把身份证号码后面的x统一改为大写,避免匹配失败。
图3-21 Prep Builder的清理功能
上面我们按照字段标题清理(重命名、类型、移除/隐藏)和字段内容清理(修改、合并、拆分、筛选、清理)两大分类,重点介绍了Prep Builder的数据清理功能,同时介绍了部分功能在Desktop中的实现方法。数据清理和筛选看似功能复杂多样,但相对容易理解,不再一一详述。