Ⅰ 一图胜千言:数据可视化不完全总结(一)
这篇学习笔记是对数据可视化的一个较为全面的总结。大部分的内容来自于自己之前所学过的数据分析知识,还有一部分内容来自于我收集的一些资料,我将在这篇学习笔记中回答如下几个关键问题:
数据可视化(Data Visualization)是涉及信息技术、自然科学、统计分析、图形学、交互、地理信息等多种学科交叉领域,通过将非数字的信息进行可视化以表现抽象或复杂的概念和信息的技术。简单的说,这种技术将数据以图表的方式呈现,用以传递信息。人类有五官,能通过5种渠道感受这个物质世界,那么为什么单单要青睐可视化的方式来传递信息呢?这是因为人类利用视觉获取的信息量巨大,人眼结合大脑构成了一台高带宽巨量视觉信号输入的并行处理器,具有超强模式识别能力,有超过50%功能用于视觉感知相关处理的大脑,大量视觉信息在潜意识阶段就被处理完成,人类对图像的处理速度比文本快6万倍,所以数据可视化是一种高带宽的信息交流方式。
如果我们的视野再开阔些,数据可视化从广义上来说包含了三个分支:科学可视化(Scientific Visualization),信息可视化(Information Visualization)和可视分析学(Visual Analytics)。科学可视化是跨学科研究与应用领域,关注三维现象的可视化,在建筑学、气象学、医学或生物学方面的各种系统中有广泛的应用,这个领域研究的数据具有天然几何结构(如磁感线、流体分布等)。
信息可视化则研究抽象数据的交互式视觉表示以加强人类认知。抽象数据包括数字和非数字数据,如地理信息与文本,这个领域研究的数据具有抽象的结构,比如柱状图,趋势图,流程图和树状图,这些图表将抽象的概念转化成为可视化信息,常常以数据面板的形式体现。
可视分析学结合了交互式视觉表示以及基础分析过程(统计过程、数据挖掘技术),执行高级别、复杂的活动(推理、决策)。
数据科学的主要组成部分包含三个大的阶段:数据整理,探索性数据分析和数据可视化。站在一个更高的位置来看,数据可视化在数据科学中的位置是比较靠后的,是属于最后的成果展示阶段。如果要从头说起的话,首先,在 数据整理 阶段,我们的主要任务是数据的获取和解析,包括一系列对原始数据的清洗和加工工作,这一块的知识领域主要涉及计算机科学。紧接着是 探索性数据分析 阶段,这个阶段要大量使用统计和数据挖掘方面的专业知识,也需要绘制图表来解释数据和探索数据,这个阶段的主要任务是过滤和挖掘。但这个阶段的可视化分析只是你和数据之间的“对话”,是数据想要告诉你什么,而数据可视化则是数据和你的读者之间的对话,是你通过数据想要告诉读者什么,这是它们之间最大的区别。完成了上面两个阶段的内容,才到了我们最后的 数据可视化 阶段,这是一个多学科交叉的领域,涉及到图形设计,信息可视化和人机交互,我们的主要任务是对信息进行精炼,然后通过可视化表示出来,并与读者产生交互。然而,如果将数据科学的这三个阶段理解为按严格顺序进行的“线性”的模型那就大错特错了,它经历的是一个迭代的,非线性的过程。后面的步骤会让你更了解之前所做的工作,可能到了数据可视化阶段,才意识到还有太多疑点要弄明白,我们需要回到上一步重新进行之前的工作,就像画家翻来覆去才能最终完成一幅杰作一样,数据可视化的过程并不是给数据分析这个刚出炉的蛋糕加点糖霜,,而是有一个反复迭代,不断优化的过程。
数据可视化是一个再典型不过的多学科交叉领域了,可以说数据可视化所需要用到的知识,就是数据科学庞大知识体系的一个剪影。你会感受到数据科学理性的一面,同样也会感受到她感性的一面。你可以穷尽自己的一生,在这个浩如烟海的领域中尽情的探索,常学常新,其乐无穷。
数据可视化的本质,是充分理解业务的基础上对数据进行深入分析和挖掘,然后将探索数据所得到的信息和知识以可视化的形式展现出来。也就是说我们做的工作其实就是从数据空间映射到图形空间。我们要做的第一步工作是充分的结合业务理解数据,然后采用某些方法选择合适的图表类型,这又要求我们先对图表类型有个比较全面的了解。绘制完图表是不是就完成了呢?其实不是。我们还要对图表进行优化,优化所针对的对象是各种图表元素,对此我们有一系列的设计技巧,下面将一步一步的来介绍这些知识。
离开对业务的理解谈数据分析都是耍流氓。这里介绍一种快速了解数据与业务以开展进一步的探索与分析的方法,叫“5W2H法”。步骤一:WHAT,这是关于什么业务的什么事?数据所描述的业务主题是什么?步骤2:HOW,即如何采集的数据?采集规则会影响后续分析,比如如果是后端数据埋点,那么数据一般是实时的;而如果是前端数据埋点,那么就要进一步弄清楚数据在什么网络状态会上传?无网络状态下是如何处理的?这些都会影响最后数据的质量进而影响分析质量。步骤三:WHY,为什么搜集此数据?我们想从数据中了解什么?数据分析的目标是什么?步骤四:WHEN,是何时段内的业务数据?步骤五:WHERE,是何地域范围内的业务数据?步骤六:WHO,谁搜集了数据(Who)?在企业内可能更关注是来自哪个业务系统。步骤七:HOW MUCH,各种数据有多大的量,足够支持分析吗?数据充足和不足的情况下,分析方法是有所不同的。如果七个问题中有一个答复不能令人满意,则表示这方面有改进余地。
用简单的三个步骤就可以选择合适的图表类型:一看数据类型,二看数据维度,三看要表达的内容。
我们有两种数据类型,每种数据类型又有两个子类别。首先,我们有 分类数据 和 定量数据 。分类数据用来表示类别,比如苹果,香蕉,梨子和葡萄,就是水果的4种类别,称为 分类定类 ;有的分类变量是有一定顺序的,比如可以把红酒的品质分为低,中,高三档,人的身材有偏瘦,正常和肥胖等等,这种特殊的分类变量称为 分类定序 。定量数据也可以进一步分为两类,一类叫 连续值数据 ,比如人的年龄;一类叫 离散值数据 ,比如猫咪的数量。选择图表的第一步就是要看我要展示的数据是什么类型,最典型的例子就是相关性分析,如果要分析定量数据和定量数据之间的关系,那么散点图无疑是最佳选择,但如果有其他情况出现该怎么选择呢?数据类型直接影响你能选择的图表类型:
举几个例子来说明大家可能就明白了。
首先来看一个散点图的例子,比如我要分析一下汽车每加仑行驶的英里数和汽车重量之间的关系,因为两个都是定量数据,那么我们就应该选择散点图:
从散点图中我们可以看到每加仑行驶的英里数和汽车重量之间是呈线性负相关关系的,车的重量越重,每加仑行驶的英里数就越小。
下面这个马赛克图分析了《冰与火之歌》中五王之战各战争与战争类别之间的关系:
五王之战中总共有这样几种战争类别:
战争类型是分类变量,战争的胜负也是分类变量,马赛克图(也就是下面要介绍的“不等宽柱状图”)分析了战争类型和战争胜负的关系,可以很明显的看出ambush,siege和razing类型的战争,进攻方的胜率都是很高的。这意味着什么?如果我要建立一个预测战争胜负的模型,那么战争类型就是一个非常好的特征。
如果要分析分类数据和定量数据的相关性,那么箱线图就是一个比较好的选择了,请看下面这个例子:
这个箱线图展示了汽车的气缸数量和每加仑行驶的英里数之间的关系,气缸数量越多,每加仑汽油行驶公里数越少,说明相应的油耗越高,间接说明气缸数量和油耗具有相关性。这里可以将气缸数量这个离散型数值变量当做分类变量来看待。
看完了数据类型,接着看维度,要展示的数据是一维,二维还是多维的?如果是一维或者二维,那么一般的统计图表都能满足要求,但如果我们有多维的数据,我们就要把第三维开始的数据映射到上面提到的那7大视觉编码中。比如散点图表示了两个定量数据之间的关系,如果还存在第三个定量数据,那么我们就可以用点的大小来表示,那么散点图就变成了气泡图,如果第三个数据是分类数据,那么我们可以在散点图的基础上标记颜色来表示。
最后,还要考虑可视化主要想表达的内容是什么。对于4大内容:比较,分布,组合和关系,下面这张图给出了一份简单的指南。比如我想表达的是数据的分布,如果是单变量且只有比较少的数据点时,可以选择直方图。比如想表达数据之间的关系,如果是两个变量,则使用散点图,如果有第三个变量,那么如果编码成大小,则得到气泡图。
这也是当初一个比较困扰我的地方,到底有多少种图表可供我选择?作为数据分析师,我们得先对自己的武器库有个基本的认识和了解,才能在使用的时候挑选趁手的武器,下面将介绍一些常见的图表。
也称为「棒形图」或「柱形图」。条形图 (Bar Chart) 采用水平或垂直条形(柱形图)来比较不同类别的离散数值。图表其中一条轴代表要比较的具体类别,另一条则用作离散数值的标尺。条形图与直方图不同,前者不会显示数值在某时间段内的持续发展。条形图的离散数据是分类数据,针对的是单一类别中的数量多少。条形图其中一个缺点是当有大量条形时,将难以标签图表。
条形图有两种常见的变种: 多组条形图 和 堆叠式条形图 。多组条形图也称为“分组条形图”或“复式条形图”,在同一轴线上将两个或多个数据集并排,绘制数据并进行分类。跟条形图同样,每个条形的长度用来显示不同类别之间的离散数值比较。每个数据系列将获分配一种颜色(或同一颜色的其中一种深浅度)以进行区分,然后每组条形将独立放置,并与其他条形组分隔开。多组条形图通常用来将分组变量或类别与其他数据组(具有相同变量或类别种类)进行比较,也可用来比较迷你直方图,每组内的每个条形将表示变量的显著间隔。多组条形图的缺点:当有太多条形组合在一起时将难以阅读。
跟多组条形图不同(并排显示条形),堆叠式条形图 (Stacked Bar Graph) 将多个数据集的条形彼此重迭显示,适合用来显示大型类别如何细分为较小的类别,以及每部分与总量有什么关系。堆叠式条形图共分成两种:简单堆叠式条形图将分段数值一个接一个地放置。条形的总值就是所有段值加在一起。适合用来比较每个分组/分段的总量。100% 堆叠式条形图会显示每组占总体的百分比,并按该组每个数值占整体的百分比来绘制,可用来显示每组中数量之间的相对差异。堆叠式条形图的一个主要缺点:条形分段越多,图表就越难以阅读。另外,我们也较难比较不同分段,因为它们不在同一基线之上。
径向/圆形条形图只是在极座标系(而非笛卡尔座标系)上绘制的条形图。虽然看起来很美观,但径向条形图的问题在于条形的长度可能会被人误解。即使所代表的数值相同,但外围的条形看起来还是会比较长。由于每个条形都必须处于不同的半径,所以只能用角度来判断数值多少。我们的视觉系统比较擅于理解直线,因此笛卡尔条形图是比较数值的更好选择。因此,使用径向条形图通常只是为了美观。
也称为“圆形柱图”或“星图”。这种图表使用同心圆网格来绘制条形图。每个圆圈表示一个数值刻度,而径向分隔线(从中心延伸出来的线)则用作区分不同类别或间隔(如果是直方图)。刻度上较低的数值通常由中心点开始,然后数值会随着每个圆形往外增加,但也可以把任何外圆设为零值,这样里面的内圆就可用来显示负值。条形通常从中心点开始向外延伸,但也可以别处为起点以显示数值范围(如跨度图)。此外,条形也可以如堆叠式条形图般堆叠起来。
子弹图 (Bullet Graph) 能显示表现数据,功能类似于条形图,但加入更多视像元素,提供更多补充信息。子弹图最初由 Stephen Few 开发,用来取代仪表盘上如里程表或时速表这类图形仪表,解决显示信息不足的问题,而且能有效节省空间,更可除掉仪表盘上一些不必要的东西。主要数据值由图表中间主条形的长度所表示,称为“功能度量”(Feature Measure);而与图表方向垂直的直线标记则称为“比较度量”(Comparative Measure),用来与功能度量所得数值进行比较。如果主条形长度超越比较度量标记的位置,则代表数据达标。功能度量背后的分段颜色条形用来显示定性范围得分。每种色调(如上面示例中三种不同深度的灰色)表示不同表现范围等级,如欠佳、平均和良好。当使用子弹图时,建议最多使用五个等级。
平行座标图 (Parallel Coordinates Plots) 能显示多变量的数值数据,最适合用来同一时间比较许多变量,并表示它们之间的关系。举个例子:比较具有相同属性的一系列产品(比较不同型号的计算机或汽车规格)。在平行座标图中,每个变量都有自己的轴线,所有轴线彼此平行放置,各自可有不同的刻度和测量单位;或者我们也可以统一处理所有轴线以保持所有刻度间隔均匀。然后我们绘制一系列的直线穿越所有轴线来表示不同数值。轴线排列的顺序可能会影响读者如何理解数据,其中一个原因是相邻变量之间的关系会比非相邻的变量容易进行比较。因此重新排列轴线可以帮助了解不同变量之间的模式或相关性。平行座标图的缺点是容易变得混乱,当数据密集时更加难以辨认。解决这个问题的最好办法是通过一种名为「刷理」的互动技术,突出显示所选定的一条或多条线,同时淡化所有其他线条,让我们能更集中研究感兴趣的部分,并滤除干扰数据。
又称为“蜘蛛图”、“极地图”或“星图”。雷达图 (Radar Chart) 是用来比较多个定量变量的方法,可用于查看哪些变量具有相似数值,或者每个变量中有没有任何异常值。此外,雷达图也可用于查看数据集中哪些变量得分较高/低,是显示性能表现的理想之选。每个变量都具有自己的轴(从中心开始)。所有的轴都以径向排列,彼此之间的距离相等,所有轴都有相同的刻度。轴与轴之间的网格线通常只作指引用途。每个变量数值会画在其所属轴线之上,数据集内的所有变量将连在一起形成一个多边形。
然而,雷达图有一些重大缺点:在一个雷达图中使用多个多边形,会令图表难以阅读,而且相当混乱。特别是如果用颜色填满多边形,表面的多边形会覆盖着下面的其他多边形。此外,过多变量也会导致出现太多的轴线,使图表难以阅读和变得复杂,故雷达图只能保持简单,因而限制了可用变量的数量。雷达图的另一缺点是它未能很有效地比较每个变量的数值。即使借助蜘蛛网般的网格指引,在直线轴上比较数值始终较为容易。
也称为「象形统计图」。使用图案来显示数据量的象形图 (Pictogram Chart) 让人可以更全面地了解小型数据集,而且所用图案通常切合数据主题或类别,例如关于人口数据的图表将使用人物图案。每个图案可以表示一个单位或任何数量或单位(例如每个图案表示 10 个)。通过了解列或行中的图案多少,我们可以对数据集的每个类别进行比较。使用图案能克服语言、文化和教育水平方面的差异,是更具代表性的数据显示方法。举个例子,如果数据是「5 辆车」,图中便会显示 5 个汽车图案。使用象形图时有两点要避免:用于大型数据集,令人难以计数。只显示部分图案,令人混淆它们到底代表什么。
也称为“范围条形/柱形图”或“浮动条形图”。用来显示数据集内最小值和最大值之间的范围,适合用来比较范围,尤其是已分类的范围。跨度图只集中显示极端数值,不提供任何关于最小值和最大值之间的数值、整体平均值或数据分布等其他信息。
点阵图表 (Dot Matrix Chart) 以点为单位显示离散数据,每种颜色的点表示一个特定类别,并以矩阵形式组合在一起。适合用来快速检视数据集中不同类别的分布和比例,并与其他数据集的分布和比例进行比较,让人更容易找出当中模式。当只有一个变量/类别时(所有点都是相同颜色),点阵图表相等于比例面积图。
又称为“极面积图”。统计学家和医学改革家佛罗伦萨‧南丁格尔 (Florence Nightingale) 曾在克里米亚战争期间使用这种图表传达士兵身亡情况,故得名。南丁格尔玫瑰图 (Nightingale Rose Charts) 绘制于极座标系之上。每个数据类别或间隔在径向图上划分为相等分段,每个分段从中心延伸多远(与其所代表的数值成正比)取决于极座标轴线。因此,从极座标中心延伸出来的每一环可以当作标尺使用,用来表示分段大小并代表较高的数值。在南丁格尔玫瑰图中,代表数值的是分段面积,而不是其半径。南丁格尔玫瑰图的主要缺点在于面积较大的外围部分会更加引人注目,这跟数值的增量成反比。
非常适合用来比较数值和显示比例(尺寸、数量等),以便快速全面地了解数据的相对大小,而无需使用刻度。这种图表的缺点在于使用面积图难以得出估值,也就是说它们几乎只能用于通信目的,而不能作分析用途。虽然比例面积图通常使用正方形或圆形,但其实也可以使用任何形状,只要所使用的形状面积是表示数据即可。这种面积图的常见技术错误是,使用长度来确定形状大小,而非计算形状中的空间面积,导致数值出现指数级的增长和减少。
也称为“标签云图”。通过使每个字的大小与其出现频率成正比,显示不同单词在给定文本中的出现频率,然后将所有的字词排在一起,形成云状图案,也可以任何格式排列:水平线、垂直列或其他形状。字云图 (Word Cloud) 也可用于显示获分配元数据的单词。举个例子,我们把世界各地所有国家的名称加到字云中,再将人口数量分配给每个国家,以确定其名称的字体大小。在字云图上使用颜色通常都是毫无意义的,主要是为了美观,但我们可以用颜色对单词进行分类或显示另一个数据变量。字云图通常用于网站或博客上,以描述关键字或标签使用,也可用来比较两个不同的文本。
虽然简单易懂,但字云图有着一些重大缺点:较长的字词会更引人注意。字母含有很多升部/降部的单词可能会更受人关注。分析精度不足,较常是为了美观。
饼形图 (Pie Chart) 获广泛应用于项目演示和办公室,把一个圆圈划分成不同比例的分段,以展示各个类别之间的比例和百分比。每个圆弧的长度代表每个类别的所占比例,而全圆则表示所有数据的总和,相等于 100%。
饼形图适合用来快速展示数据比例分布,但主要缺点是:
尽管如此,如要在单一饼形图中比较给定类别在整体中所占的比例,这仍是有效之选。
圆环图 (Donut Chart) 基本上就是饼形图,只是中间的部分被切掉。然而,圆环图比饼形图略有优势,因为后者不时被人批评,说它只将重点放在不同部分彼此或相对于整体的大小关系,但当与其他饼形图作整体比较时,却不能显示出任何变化。圆环图算是解决了这个问题的其中一部分,让人不再只看“饼”的面积,反面更重视总体数值的变化:专注于阅读弧线的长度,而不是比较“饼与饼”之间的比例不同。另外,圆环图中间的空白处更可以用来显示其他信息,因此更能节省空间。
桑基图 (Sankey Diagram) 用来显示流向和数量(彼此之间的比例)。箭头或线的宽度用于显示大小,因此箭头越大,流量也越大。在每个流程阶段中,流向箭头或线可以组合在一起,或者往不同路径各自分开。我们可用不同颜色来区分图表中的不同类别,或表示从一个阶段到另一个阶段的转换。桑基图通常用于显示能量、金钱或材料数据的转移,但也可用于显示任何独立系统的流程。
热图 (Heatmap) 通过色彩变化来显示数据。当应用在表格时,热图适合用来交叉检查多变量的数据,方法是把变量放置于行和列中,再将表格内的不同单元格进行着色。热图适用于显示多个变量之间的差异;显示当中任何模式;显示是否有彼此相似的变量;以及检测彼此之间是否存在任何相关性。通常所有水平行都同属一个类别(在左侧或右侧显示的标签);而所有垂直列将被分配为另一类别(在顶部或底部显示的标签)。每行或每列会再被分成子类别,全都以矩阵形式相互匹配。表格中的单元格内有不同颜色编码的分类数据,或是基于颜色标度的数字数据。单元格内的数据是基于相连行和列中两个变量之间的关系。我们需要图解来帮助阅读热图。分类数据采用不同颜色编码表示,而数字数据则需要一个颜色标度(从一种颜色转到另一种颜色)来帮忙表示高低值之间的差异。我们可以使用一系列的纯色来表示多个范围的数值(0-10、11-20、21-30等),或者可以将两种或多种颜色混合在一起,使用渐变标度来表示单一范围(例如 0 - 100)。由于热图依赖颜色来表达数值,它比较适合用来显示广泛数值数据,因为要准确地指出色调之间的差异始终有难度,也较难从中提取特定数据点(除非在单元格中加入原始数据)。如果将其中一行/列设为时间间隔,热图也可用于显示数据随时间的变化。其中一个例子就是使用热图来比较全年多个城市的温度变化,看看最热或最冷的地方在哪儿:我们可以把要比较的城市在水平行中列出,而垂直列则是月份,然后在单元格内填上温度值。
也称为“集合图”。文氏图 (Venn Diagram) 显示集与集之间所有可能存在的逻辑关系,每个集通常以一个圆圈表示。每个集都是一组具有共同之处的物件或数据。当多个圆圈(集)相互重迭时,称为交集 (intersection),里面的数据同时具有重迭集中的所有属性。这里只显示了由 2 个数据集组成的文氏图,但也有 3、4、5、6 甚至 7 个数据集相互重迭的例子。
弧线图 (Arc Diagram) 是二维双轴图表以外另一种数据表达方式。在弧线图中,节点 (Nodes) 将沿着 X轴(一维轴)放置,然后再利用弧线表示节点与节点之间的连接关系。每条弧线的粗幼度表示源节点和目标节点之间的频率。弧线图适合用来查找数据共同出现的情况。弧线图的缺点:不能如其他双轴图表般清楚显示节点之间的结构和连接,而且过多连接也会使图表难于阅读。
弦图 (Chord Diagram) 可以显示不同实体之间的相互关系和彼此共享的一些共通之处,因此这种图表非常适合用来比较数据集或不同数据组之间的相似性。节点围绕着圆周分布,点与点之间以弧线或贝塞尔曲线彼此连接以显示当中关系,然后再给每个连接分配数值(通过每个圆弧的大小比例表示)。此外,也可以用颜色将数据分成不同类别,有助于进行比较和区分。弦图的缺点是过于混乱,尤其是当要显示太多连接的时候。
非彩带弦图 (Non-ribbon Chord Diagram) 是弦图的一个精简版本,仅显示节点和连接线,更加强调数据之间的连接关系。
也称为“网络地图”或“节点链路图”。这种图表使用节点/顶点和连接线来显示事物之间的连接关系,并帮助阐明一组实体之间的关系类型。这些节点通常是圆点或小圆圈,但也可以使用图标。节点之间的连接关系通常以简单的线条表示,但在某些网络图中,并非所有节点和连接都有相同属性,故可藉此显示其他变量,例如通过节点大小或连接线的粗幼来表示其与数值之间的比例。通过描绘出链路连接系统、查找任何节点集群、节点连接的密度或图表布局,网络图可以用来解释各种网络结构。两种主要网络图分别为“不定向”和“定向”网络图;不定向网络图仅显示实体之间的连接,而定向网络图则可显示连接是单向还是双向(通过小箭头)。网络图数据容量有限,并且当节点太多时会形成类似“毛球”的图案,使人难以阅读。
后续内容,请查看 一图胜千言:数据可视化不完全总结(二)