由于Powerquery的加入,极大地提升了Excel处理数据的能力,这使得在Excel中对中等规模的数据做数据清洗已经成为现实。而过去Excel在这方面所能做的非常有限,主要无非是在表格中对数据进行检查、修改,这或者是依靠人工肉眼观察完成,或者靠一些公式辅助。而现在利用Powerquery,则可以覆盖到数据抽取、转换和加载的全部三个方面。首先是可以连接到多种数据源,然后在Powerquery提供的功能下将一个结构化数据集从原始数据集,经过有序的一系列步骤,转换成我们需要的数据集,有时候我们也管这样的过程叫数据重塑(Reshape)。最后将获得的新数据集,加载到Excel的工作表(Sheet)中。
利用Powerquery进行上述的ETL过程可以十分简单,甚至简单到只需要有业务知识或者常识,而无须编写任何代码的程度,因为全程操作可以只需要点击鼠标进行选择。下面演示的是一个对日期进行处理,衍生出像年,季度,月份等更多字段的例子。该例子完全是通过鼠标点击操作完成的。
最初数据集仅仅是最左侧的日期列,其余所有字段都是通过Powerquery的处理生成的。
首先是点击数据选项卡下的“查询和连接”中的“查询和链接”功能。Excel界面右侧会出现“查询&连接”的提示面板。在“查询”栏目下,会有一个用Powerquery处理并加载好的数据集列表。选择一个数据集,在我们下图的示例中,是“Date”数据集。右键点击编辑,会进入到Powerquery处理的界面。整个过程展示在下面几个图中。
上图就是Powerquery中的界面。界面中间是数据面板区域,供观察要具体处理的数据状态。右侧则详细记录了数据处理的步骤,它以一个“管道”的形式体现出数据处理的先后顺序。通常前面的步骤一旦改动,将会影响后面步骤的处理结果。这是数据处理的一个显著特点,因此类似的ETL工具必须提供详细记录每一步操作的功能,以允许数据处理人员一旦发现错误或者产生新的想法,能够回溯到之前的某一步,重新开始处理数据。
我们具体来看下该数据集处理过程的每一步。
从应用的步骤中第一步“源”开始,“源”代表最初的原始数据集。
接下来就是生成年,季度等新字段的处理步骤,从步骤的名称就可以很直观地看出来。
这就是一个最简单的数据处理过程,全程只靠Powerquery提供的内置功能,用鼠标点击即可。当然它实际上是通过一个称作M的语言工具实现的。具体如下图。
点击Powerquery操作选项卡中的“查询”下的“高级编辑器”,就可以看到如上图所示的界面。在这里可以清晰地看到,前面我们介绍的数据处理的若干步骤,其实都在这里重现,具体的代码放在了“let……in”之间,每行用一个英文半角逗号隔开。let之后实际上是原始数据集以及后续操作的各步骤,而in之后则是要最终呈现的数据集。
欲灵活自由地在Powerquery框架内实现数据处理,需要投入一定的精力学习M语言。而且M语言也并非如想象的那样简单易学。但是Powerquery的强大还体现在,几乎日常数据处理操作中的绝大部分情况,都已经只需要用鼠标操作即可实现;其次不得不需要写M代码的大部分情况里,又是相对简单的情形,这部分掌握起来不是很困难。而真正需要亲自写M语言做一些有挑战的处理操作少之又少。因此可以说Powerquery对用户上手的门槛已经降到了非常低的程度,可用性易用性非常高。
上文例子中的日期转换过程,具体实现是点击顶部选项卡“添加列”下的“日期”,选择自己要转换的日期单位就可以了。具体如下图。
当我们确认处理的数据集满足需要后,回到“主页”选项卡,然后点击左上角的“关闭并上载”,就可以看到前文图片示意的加载后的表格了。
下面我们展示一个利用Powerquery处理更大规模数据的例子。使用的是一个零售POS数据,处理目标是得到一个我们想要的结构化数据集。原始数据集已经被笔者保存在另一个Excel工作表中,以方便演示。实践场景中,我们可以连接数据库或其它数据源,不一定是连接到Excel文件。
第1步,首先是连接到数据源,选中要导入的数据集后,点击“导入”。
第2步,接着是在“导航器”界面中选择我们要处理的源数据,然后点击“转换数据”。由此进入Powerquery界面。
从上图能看出,原始数据集比较混乱,比如存在null值,这并不完全符合我们对结构化数据的要求。此外很多字段的数据实际上我们并不需要。我们称这种不符合要求,而且结构混乱,需要清洗的数据为“脏数据”。
究竟怎样处理这个脏数据集,需要先大致了解下原始数据集的情况。它看起来如下。
下面我们具体操作这个数据处理过程。
第1步,删除头2行。选择Powerquery“主页”选项卡下的“删除行”功能,弹出如下图所示的对话框,填入想要删除的行数。
第2步,将第一行作为标题,以方便后续观察数据集。选项Powerquery“转换”选项卡下的“将第一行用作标题”。
第3步,删除我们不需要的列。回到主页选项卡,选择“删除列”功能。
第4步,修改一些字段的数据类型。具体是:单号和条码改为文本数据类型,单价,实价,金额改为货币数据类型。此外我们需要对日期列进行转换,增加年、季度、月、周、星期几字段。在主页选项卡下,进入“数据类型”操作。
第5步,我们注意到某些行似乎存在缺失值,就是那些显示“null”的地方。对该数据集来说,它们其实不是真的缺失了,而是由于POS记录数据的方式所致。那些显示null的行,实际上与它上一行的记录是同一笔订单。由于在一笔订单中顾客购买了多件商品,因此造成了单号等字段有null值的出现。对这种情况,我们只需要简单地将上一行的记录,向下填充到null处就可以。具体来说就是利用Powerquery中“转换”选项卡下“填充-向下”功能。因为之前的几步我们已经做了足够的数据清洗,现在所有有null值的列都应该被向下填充,按住键盘上的Shift键或者Ctrl键,再选择要填充的列,在“转换”选项卡下,点击“填充”,“向下”。
第6步,最终形成了我们想要的结构化数据集。如下图所示。
然后点击主页选项卡下的“关闭并上载”,就可以把清洗好的数据集,加载到我们指定Excel的工作表(Sheet)中去。
经过第一章的学习,我们了解了商业分析中需要用到的几类Excel核心功能。到这一章,我们就可以学习怎样使用Excel进行数据处理。这里的数据处理主要指两类,一是指数据ETL、清洗,二是指数据探索中做的预处理。