1.什么是长数据, 什么是宽数据?
首先我们来看两个最简单的例子. 假设我们有一个产品从一月份到十二月份的销售额, 那么我们可以用下边两种方式来展示.
宽数据:
宽数据的特点就是一个变量往往会重复很多列, 如果我们从一月份一直看到十二月份, 它们本质上都是销售额 Sales这个变量在不同月份的数值, 只不过出现在了不同的列
长数据:
跟宽数据对比, 我们发现长数据保存有相同的信息量, 但是长数据的一个特点就是所有的销售额都保存在一列下边而不是像宽数据一样保存在不同的列.
如果你已经有了一定的工作经验,那么你会发现好像数据库里的数据往往都长成左边长数据这样, 而你经常看到的报告大部分都长成宽数据这样. 数据库的数据是绝对不会长成宽数据这样的. 那么这是为什么
2. 两种格式在数据逐渐积累情况下的不同
我们在前一部分看到的这种长数据和宽数据的对比是基于已经在一年的年底产生了十二个月的数据的情况下. 那么现在如果我们从一年当中的第一天来开始看, 我们宽数据从第一天到第十二天的销售额数据的积累应该是这样的
换句话说, 每过一天, 我们的销售额就要多一列. 一年过去一家店就要有365列
与宽数据不同的是, 长数据每多一天,那么数据会增加一行
到这想必你就能感觉到宽数据如果作为你Tableau的数据源的话,好像就有点不对劲了。 如果有两年的数据那岂不是要几百列,而且每一列就两行数据,这怎么看怎么感觉别扭。
那么这个时候我们再继续对比这两种结构, 我们就会发现宽格式的列标题2024-01-01, 2024-01-02等等其实本质上也是数据,他们不应该作为列的标题。 只不过我们因为人为方便,把它们放在标题的位置上。
到了这里,我们就可以得到我在这一课当中需要强调的第一个知识点, 在拿到数据准备导入到Tableau之前, 一定要确保我们的数据是宽格式而不是长格式。
3. 两种格式的不同使用场景
宽格式并非一无是处,只不过它出现在了错误的地方。 宽格式数据在没有进一步加工的情况下,非常便于人们的理解, 比如在我们的第一个截图当中, 我们可以通过从向右阅读清晰的获取每个月的销售额信息, 而且可以非常轻松的比较A, B这两家店在同一个月的销售额。 假设我们在十二月的最后加上一列总计Total的话, 那这就是我们日常最常见到的年度报表。
而我们再回到长数据格式, 你几乎很难看出来店铺A这一年的销售额数据是怎么变化的,因为每个月店铺B也会产生一行数据。 假设你不单单只有A,B这两家店的话, 那么数据就会更加混乱。 但是反过来,假设我要寻找店铺A在2024-02-01的数据, 我可以非常容易的过滤数据, 让[store] = A, [date]= 20240-02-01 就可以了。
总结下来, 宽数据适合人类阅读, 长数据适合数据的保存和提取
4. 长宽数据格式的转换以及Tableau的意义
这两种格式的转化可以说是一个巨大的课题, 每一种数据库,数据处理工具在这种数据格式转化上可谓都是花尽了心思。各种函数,方法应运而生。而Tableau的一大贡献之一就是让这种转换变得无比简单和丝滑。不管是Excel的pivot table,还是python里的pivot_tables等等等等都无法和Tableau的拖拽想比较。无数的Tableau项目有时候的终极目的就是能够将数据库中这种人类不好理解的,但是方便机器存储的长数据格式,转化成我们易于理解的宽数据格式, 只是单纯的做成你所看到的这种宽表格就是巨大的进步。
5.解读长数据 Dimension + Fact的模式
在前边我们介绍完这两种数据格式之后, 接下来我们专注讲解长数据格式。 长数据是你所接触到的绝大多数数据源的格式,因此它本身就值得我们好好研究一下。这时候回到我们的Tableau, 打开Sample Super Store这个数据源, 我们就只看Orders订单这一个表. 在下边的这个动图当中,我从左到右把所有的列都过了一遍。
如果我用最简单的话来描述这个表格的特点就是所有带字母的列都出现在左侧,而包含各种数的列基本都在右侧。带字的这些列,他们上边的图标基本都是蓝色的,而带数的这些列,他们上边的那个图标好像都是绿色的。 这个观察的结果就代表了我们平常所能看到的数据源的绝大多数模式Dimension + Fact
在数据工程师 Data Engineer这个数据源其实并不是一个单一的表格,而是由多个表格拼接而成。 所有那些图标是蓝色的列, 数值都是字母的列叫做Dimension,中文翻译成维度。在后边我有一课会专门讲什么是维度,在这里,你唯一需要记住的是,这些带字母的列基本上储存的都是描述性的信息,它们都是描述一个东西的特点的,比如你的名字啊,学生号啊,产品的颜色,名字,产地等等。 这些特点我一般用一个简单的方法来区分,比如这一列的值会不会随时间改变。 比如你的性别不会随着时间改变吧,维度就是这样的信息。
而与之相对的这类会随着时间变化的列所储存的数据一般叫做Fact。Fact英文翻译过来是事实,但是我喜欢把它替换成Record这个词,也就是记录,这些数据就是记账,记录着现实世界当中真实发生的事情,比如你花的钱, 你这个人本身不会变的,那你的Dimension一般不会变,然后你每天花的钱啊,看短视频的时间,通勤的时间都不一样,Fact就是这些数据。万一你要来个大的说老师,我咔一下我性别变了呢, 那老师先敬你是个汉子,然后在数据库里把性别一改就完了。
6. 长数据的不止一种格式: 只有一列Fact的长数据(超纲内容)
这一节是属于超纲知识,一般是要额外花钱的。但是我决定在这给你讲一下。 有的时候,注意啊,是有的时候,有些图你是怎么做都做不出来的。这不是你Tableau的技术不行,而是一些特殊的图需要你的数据源中的Fact只有一列才行。 这个解释没有用,我来给你举一个例子
左边的这个截图里,是一个标准的Dimension加上Fact的数据结构。
Store, Product这些是Dimension,描述我们卖的是什么产品。而Sales,Cost分别对应的是销售额和成本。
但就是这样的一个结构,还可以进一步的把Fact变成一列
好了, 我们现在再来看左侧的这个表格,还是玩玩全全相同的数据,但是销售额或者是成本本质上都是一种变量, 那我们就可以把它转化成一列,然后保存在一个叫做变量的列下边。
我每一个产品可以有多种变量,比如销售额,比如成本,比如运费,比如重量,所有这些都可以包含在Variable一列下,用Sales,Cost,Weight,Delivery来区分,不管你有多少Fact,我只要增加Variable这一列的值就行了,而Value这一列就是对应的这个变量的数值。
很多初学者卡在某个图怎么做都做不出来的时候,其实你不知道,问题出在根上,你的数据源的格式不支持你做出那种图你肯定做出不来啊。
讲到这一点主要是在初级课程里边给你种下一个种子, 让你知道原来还有这种数据结构。很多人跟着课程学,然后就以为只有Super Store这一种结构,换一个就不会了。
后边我会在另一节课里专门讲讲什么样的图需要这种结构的数据源。