Skip to content
On this page

基础-数据分析模型


在开篇我们提到了我们的小册子将围绕着“可视化苏菲的世界”这个具体任务展开,这样可以让我们在一边学习理论的时候,一边用它们去解决实际的问题,加深我们对理论的记忆和理解。

为了完成任务,我们首先要了解什么是“苏菲的世界”,知道它是什么,它的背景,以及它有什么特别的东西,从而找到我们的数据分析方向。

在这之后,我们也许仍然不能提出具体的分析任务和相应的设计方案,所以我们将学习 Tamara Munzner 的 《Visualization Analysis & Design》这本书中提到的数据分析模型,这个模型分为三个部分:认识数据、确定任务和设计方案

在学习模型的过程中,我们依据模型提供的理论去分析“苏菲的世界”,这样学以致用的模式也大大降低了学习抽象模型的难度。

苏菲的世界

《苏菲的世界》是挪威作家乔斯坦·贾德书写的一本享誉全球的儿童哲学读物,它描述了一名哲学家向一个叫苏菲的女孩传授哲学知识的过程,以这种童话故事的形式向我们讲述了西方哲学的历史。

14岁的少女苏菲某天放学回家,收到了神秘的一封信——“你是谁?世界从哪里来?”与此同时,她收到一封古怪的明信片,上面的收件人是“请苏菲转交给席德(Hilde)”,邮戳来自黎巴嫩。

从这一天开始,苏菲不断接到一些极不寻常的来信,世界像谜团一般在她眼底展开。她运用少女天生的悟性与后天知识,企图解开这些谜团.....

哲学在大家的印象里面是抽象难懂的,而数据可视化的优势就是将抽象的东西变得形象,所以为什么我们不去可视化一下《苏菲的世界》中和哲学相关的一些东西,来改变大家对哲学的看法?有了这个想法,那么我们首先得确定一下分析方向,其实也就是哲学这个学科的主要研究对象。

任何一门学科都有自己的主要研究对象,如果这个对象不存在了,那么这门学科就失去了研究的意义。比如经济学是研究稀缺性的,概率论是研究不确定性的,计算机(Computer Science)是研究计算的,狄杰斯特拉说过:"Computer science should be called computing science, for the same reason why surgery is not called knife science."

那么哲学主要研究对象是什么呢?答案是永恒的问题。永恒的问题不是“今天中午吃什么”,也不是“蚂蚁什么时候会上市”,这些问题在历史的长河里面显得太渺小了,不值得一代代人前仆后继的研究。像“世界从何而来”,“世界由什么搞成”等这种能跨越时空的问题才是永恒的问题。

有了问题,就有回答问题的哲学家和答案,拥有相似观点的答案就会形成哲学流派,哲学的历史就围绕着问题缓缓拉开了帷幕。所以我们的数据分析任务将围绕着“永恒的问题”展开,于是我们从书中收集并整理了一些和“永恒的问题”相关的数据,包括这些问题本身、回答这些问题的哲学家和这些哲学家构成的流派,具体的数据可以看这里

有了分析方向,接下来,我们就可以去学习分析模型并确定分析任务了。

认识数据:What

该模型的第一部分是认识数据,也就是认识我们可视化的对象:数据。

认识数据的核心就是确定数据的类型,只有正确地认识数据类型才能选择正确的可视化方法。比如分类数据就应该用差别比较大的颜色去可视化,如果用连续的颜色去可视化就会带来错误的信息。现实生活的数据是复杂多层次的,不同的层次有不同的分类方法,这是认识数据的难点所在。

总的来说数据分为三个层次:数据集、数据和属性,这里需要说明一下层次中的数据和前面提到的数据是不一样的:前面是一个统称,这里的是具体的实例。数据是由一些数据集(DataSet) 构成的,数据集又是由一条条数据(Data) 构成的,每一条数据是由属性(Attribute) 构成的。接下来我们就分别看看它们对应的类型。

数据集类型

在信息可视化中,数据集主要分为:表格(Table)网络(Network)几何(Geometry) 。下面是《Visualization Analysis & Design》的一个解释它们的形象的插图。

表格想必大家都不陌生,是由行(Row)和列(Col)构成。对于一个一维表格(Flat Table)来说,每一行是一个实体( Item ,每一列是该实体的一个属性(Attribute 。《苏菲的世界》数据集中的philosophers.json,schools.json 和 questions.json 都是表格,因为它们的每一行都代表了一个实体,这些实体分别是:哲学家、哲学流派、哲学问题。下面用 philosophers.json 中的一条哲学家实体举例:

idnamebirthdaylast daycountrypoints
75苏格拉底-470-399雅典["我只知道一件事情,那就是我一无所知", "…"]

这表格的一行表示:编号 75 的哲学家名叫苏格拉底,他出生于雅典,生于公元前 470 年,死于公元前 399 年,他的其中一条哲学观点是:“我只知道一件事情,那就是我一无所知”。

说完了表格,我们来看看网络数据。网络数据主要用来表示实体之间的关系,在网络中的实体往往被称作为节点( node ,节点之间的关系被称作为链接(link) 。《苏菲的世界》数据集中的 relations.csv 就是一个网络,因为它有作为节点的哲学家和哲学流派,也有表示它们关系的链接。下面就是其中一条数据,我们以它为例:

fromtotype
151660

上面的 from 和 to 分别代表两个节点的编号,其中编号为151的节点是哲学中的自然学派,编号为66的节点是哲学家泰利斯,type 为0表示这条链接是流派和哲学家的关系,也就是这条数据表示:泰利斯属于自然学派,也就是说他是一个自然学派的哲学家。

聊完了网络数据,最后我们里看看几何数据。几何数据用构成这个东西的点的位置(Position) 去描述一个实体的形状,这些实体可能是点,线,平面等。在《苏菲的世界》数据集合中,country.json 就是一个几何数据,因为它描述了每个国家的位置和形状的数据。其中 "centroid": [35.55686145836136, \-17.30493389122804] ,就是国家的位置经纬度数据。coordinates": []里面的数据就是国家的形状数据。

数据类型

了解完数据集的类型,我们来看看构成它的数据的类型。其实在上面数据集类型的介绍中已经提到了不少类型了,那在信息可视化中,数据的主要种类是:实体( Item 链接(Link)、位置(Position)属性(Attribute) 。下面的插图展示了表示数据集和数据的之间的关系。

实体是一个单独的个体,比如表格中的一行,网络中一个节点。可以是一个人,也可以是一只蚂蚁,上面的 (75, '苏格拉底', \-470, 399, '雅典', ["我只知道一件事情..."]) 其实就是一个实体,因为它描述了“苏格拉底”这个哲学家的一些基本信息。

链接是实体之间的关系(Relationship),比如上面提到的 relations.csv 中的 (151, 66, 0),因为它将对应编号的两个节点链接起来了,并且指明了链接的类型。

位置是空间数据,描述二维或者三维空间的一个位置,比如上面提到的 country.csv 中的 (38, 24) 就是一个位置,因为它描述了雅典这个国家的地理位置。

属性类型

其实,不仅仅数据有类型,构成数据的属性同样有类型。

属性是一个可以被测量、观察和记录的特性,所有的实体、链接和位置都由属性构成。属性又被称为变量(Variable) 或者数据维度(Data Dimension)

属性可以分为分类属性(Categorical)可排序属性(Ordered) 。分类数据不能排序,比如对于上面任何一条哲学家的数据来说:name 和 country 不能排序,都算是分类属性。可排序的数据都具有显示的排序方法,比如 birthday 和 last day 可以直接根据年份大小排序,所以是可排序的数据。

对于可排序的属性来讲,又可以分为序数属性(Ordinal)数值属性(Quantitative) 。序数属性本身不能通过计算来排序,但是存在一个约定俗成的排序方法,比如衣服的尺码,它们的排序规则就是:XXL > XL > L > M > S。相对来讲,数值属性可以直接通过计算来排序,比如上面提到的 birthday 和 last day 就可以直接根据年份大小排序。

大家可以通过下面书中的插图感受一下它们的区别。

对于可排序的属性来讲,它们还可以按照方向去排序:顺序属性(Sequential)发散属性(Diverging)周期属性(Cyclic)

顺序属性往往有一个最大值和最小值,比如上面数据中的 id 属性,最大值是 171,最小值是 0。

发散属性往往是两个方向相反的序列在一个零点相遇,比如上面的 birthday,因为年份分为公元前和公元后,是两个相反的序列,同时它们的零点就是公元零零年。周期属性在增加到一定程度之后就不会增加了,会回到原点,比如上面的 longitude 和 latitude 都是周期属性,因为它们增加到 180 度之后都会回到0度,也就是上面提到的原点。

下面的书中的插图形象展示了它们的区别。

确定任务:Why

当认识了手中的数据之后,接下来就是确定任务了,这也是我们数据模型的第二部分。

在描述任务的时候往往会存在一个挑战:不同领域有不同的术语,但是在数据分析的层面它们其实表达是相同的意思。比如,一个问题是哲学家中寿命最长的是多少岁,另一个问题是回答中出现次数最多词的数量是多少?这两个看上去是两种不同的问题,但其实都是:发现属性的极值。

所以我们需要一些确定的词去描述任务,去将这些任务一步步抽象,变成和领域知识没有关系的描述。这些词可以分成两个部分:行动(Action)目标(Target)

行动:Action

行动是动词,主要用来描述用户想要通过可视化达到的目的。这里主要介绍最常见的两种行动:发现(Discover)和展现(Present)。

发现的主要目的是找到之前不知道的新信息或者知识。可以是提出一个新的假设,也可以是验证一个假设是否为正确。比如验证哲学家是否真的都是讨论永恒的问题?展现的主要目的就是让用户和信息之间进行交流,可以是用数据来讲故事。一个典型的例子就是新闻,PPT 或者博客里面的一些信息图。

目标:Target

有了行动,就可以看我们的目标了:目标是动词,是用户对数据感兴趣的方面,对于不同的数据类型可能会有不同的目标。

对于所有种类的数据来说,这个目标可能会是数据的趋势(Trend) :数据的模式,比如增加、减少等,也可能是数据的异常值(Outliers) :那些不符合数据趋势的数据,也可能是数据的特征(Feature) :数据的特殊结构。(可以参考下面的插图)

对于单一属性来讲,我们可能会关心属性的分布(Distribution)极值(Extremes) ;对于多个属性来讲,我们可能关心的就是属性之间的依赖关系(Dependency)相关性(Correlation)相似性(Similarity) ;对于网络数据来讲,一般就会去探索它们的拓扑结构(Topology) ;对于几何数据来讲,我们一般关心的就是它们的形状(Shape) 。(可以参考下面的插图)

根据上面提到的行动和目标,我们可以确定如下的任务。

  1. 揭露中世纪是一个压抑的时代。(展现时代和哲学家数量的相关性和异常值)。
  2. 证明哲学家谈论的都是一些永恒的问题。(展现哲学家观点的特征)。
  3. 哲学家,哲学问题和流派的数量关系是怎样的?(展现哲学家,哲学问题和流派的数量的特征)。
  4. 哲学问题,哲学家和流派的数量随着时间是如何变化的?(探索哲学问题,哲学家,流派的数量的趋势,以及它们和时间的依赖关系)。
  5. 有多少哲学家的寿命超过了40岁,其中年龄最大和最小分别是多少?(探索哲学家寿命的分布和极值)。
  6. 每个哲学家回答了哪些问题?每个问题有哪些哲学家回答了?哲学家和问题之间的关系又如何?(探索哲学家和问题——网络数据之间的拓扑结构)。
  7. 每个流派有哪些哲学家?哪个流派的哲学家比较多?哪个比较少?(探索哲学家和流派——网络数据之间的拓扑结构)。
  8. 哲学的中心是怎么变化的的?(哲学家聚集地点——几何数据的形状)。

设计方案:How

在清楚了任务或者问题之后,就应该去设计方案去解决问题了,这也是该数据模型的最后一部分。

这个部分的挑战在于有太多的设计方案可以选择,哪一种才是简单又有效的,才是真正美丽的?就像上一章提到的那样,选择错误的设计方案,不仅不能提高信息传递的效率,还会传递错误信息。那么这篇文章中我们先看看一些基本的手段,在后面分析的部分再提出具体的设计方案。

在设计一个可视化的时候,我们主要有多种基本手段比如:分面(Facet)操作(Manipulate)减少(Reduce) ,但是这里主要介绍编码(Encode) 这种方式。上一章节里面提到:“数据可视化将不可见或难以直接显示的数据转化为可感知的图形、符号、颜色、纹理等”,这个从数据到视觉元素的过程就是编码。

编码过程主要有两个部分:布局(Arrange)映射(Map) 。布局的主要任务就是确定视觉元素在最后画布上的位置,映射的主要任务就是用视觉元素的属性去表示数据的属性。比如在条形图中,我们需要根据数据种类确定每一个条的位置,这就是布局,也需要根据数据的大小去确定每一个条的高度,这就是映射。

不同的布局和映射方法可以先简单看看上面的插图,这个地方只是简单, 后面我们会深入讨论。在接下来的章节中我们会用不同的可视化方法去解决上面提出的8个问题,在解决每个问题的过程中会带领大家更加深入的了解编码这个强有力的工具。

小结

这一章节我们首先认识了“苏菲的世界”,知道了哲学是研究永恒的问题的。然后通过学习一个由认识数据确定任务设计方案构成的数据分析模型(具体参考下面的思维导图)。我们用该模型去分析了“苏菲的世界”里面的数据,并且得到了分析任务和之后解决该这些问题的主要手段,同时也对该模型也有了比较深刻的理解。

那么下一章我们就先通过条形图去解决其中一个问题,在这个过程中我们将学习到基本的数据处理方法和基于浏览的 Canvas2D 和 SVG 绘制技术。

参考资料

  • Visualization Analysis & Design,Tamara Munzner
  • 苏菲的世界,乔斯坦·贾德