《鲜活的数据--数据可视化指南》这本书是我最开始了解数据可视化看的第一本书,让我对数据可视化从一个看一团迷雾的小白白可以大概的了解到了一个轮廓。
通过整理,做数据可视化的步骤如下:
- 明确问题/故事
- 处理数据
- 选择可视化工具
- 确定可视化方式
明确问题/故事
每一个数据都代表了一种事实依据,用数字或者文字的方式记录着一些行为和事实。数据是现实生活的一种映射,其中隐藏着许多故事,在那一堆堆的数字之间存在着实际的意义、真相和美学。书中反复提到的一个观点是,要让数据说话,数据可视化的过程就是在给观众讲故事的过程,我们应当以讲故事的角度来思考如何可视化。
因此在做数据可视化之前需要明确,要讲怎样一个故事,即明确观者的需求是什么,他们想要看到什么或是我们想要给他们展示什么。这不同于数据分析的可视化,是可以让用户自由的选择自己想要如何展示数据,而是在明确了数据和需求的基础上,来进行展示。
我曾经在ThoughtWorks内部平台的Monitor&Analysis团队呆过一年的时间。当时我们当时在做的就是对ThoughtWorks内部的众多系统进行监控,当这些系统出现问题时,可以及时的通知到相应的团队,各个团队的人也可以访问到我们的平台来观看自己系统的稳定性。这就是一个典型的数据可视化的平台,整个平台在做的事情就是讲述这些系统的故事,这些系统的可用性、宕机时间、访问人数等等。
处理数据
处理数据包括收集数据和组织数据。
收集数据需要明确数据源,当前搜索引擎上可以提供的数据简直多到无法想象,而且每天人们也在产生着TB级的数据量,在海量的数据中,哪些数据是讲述故事所需的素材需要明确识别出来,因此需要明确数据源。可以通过由他人提供、找寻相应API、寻找一些官方数据等方式来收集数据。
像之前在Monitor&Analysis团队中,我们就是通过其他团队提供一定的数据源和使用第三方的一些收集工具结合,来对哪些内部系统进行数据收集的。
组织数据就是通过将数据进行转换,转换成自己需要的格式即可。就像从json转换成一些特定格式或者从excel转换成json一样。
可视化方式
处理过数据之后,就需要对数据进行可视化。即真正的开始讲述故事。
图表和图形并不只是将统计结果可视化,它们还对可视化展现的内容进行解释。数据本身或许并不一定趣味盎然,令人产生深刻印象的是你设计数据和演示数据的方法。
好的数据设计可以帮助读者更清楚地理解整个故事。因此需要站在读者的角度上进行设计,才能知道对于读者来说,哪些元素是需要解释清楚的。重要的点或区域都带有注释,使用的符号和颜色都进行详细的说明,只有在阅读这样的图表时,读者才能理解数据的意义。没有了标记,图表就毫无意义。
而不好的设计则会直接产生谬误。在某些时候,统计也会产生错误的假象,但造成错觉的并不是数字本身,而是运用数字的人。
之前在Monitor&Analysis团队的时候,有一次和其他团队一同进行敏捷成熟度的评估,进行汇报的时候我们团队的评分就如下图中的第一个柱形所示,显得比其他团队差了一大截,近乎是0分。这个评分一下就吸引了大佬们的眼球。
然而事实如下图所示,我们并不是什么都没有做,仅仅只是制作图表的人将基准线抬高了,给观众的感受就截然不同。
接下来我会就书中提到的可视化展示方式进行简单的介绍(以下图形的例子皆来自网络,如有侵权请联系我,立即删除):
-
有关时间趋势的可视化:目标在于展示趋势,分为离散的时间点和随时间而连续不断变化的现象。
-
柱形图:用高度作为视觉线索。柱形的宽度和彼此之间的间隔不代表数值。要注意,保持数值尺度从0开始标注,否则柱形图表示的关系会有问题,也让人难以从视觉上进行比较。就如上边的例子所写的那样。
-
散点图:用位置作为视觉线索。由于点的占据空间小,能够更好地体现出“流”的感觉。通常用于表现2个变量间的关系(通过位置进行相互比较),由于是相对比较,因此数值轴不必总从0开始。
-
折线图:将点和点相连。数值最好从0开始,这样不会影响到图标的比例范围。注意,水平轴长度会影响到观察到的趋势,如果过短则会显的点和点间的增长比较夸张,而如果过长,则较难发现其中的变化模式。
-
梯形图:与直接连接2点不同,线会保持在同一数值,直到数值发生变化,则线会直接垂直跳跃到下一数值。
-
柱形图:用高度作为视觉线索。柱形的宽度和彼此之间的间隔不代表数值。要注意,保持数值尺度从0开始标注,否则柱形图表示的关系会有问题,也让人难以从视觉上进行比较。就如上边的例子所写的那样。
-
有关比例的可视化:用图表呈现出数据的总体分布
-
饼图:总和应为100%。要良好的组织数据,如按照比例从大到小的方式进行展示等,且不要将饼图分成太多块。颜色会影响人们对图标的阅读。
-
面包圈图:和饼图类似,也不适合应对较多数值。
-
堆叠柱形图:数据存在子分类,且各子分类之和有意义
-
板块层级图:这类图标可展示3类信息:大小、颜色、层级。是基于面积的可视化方式,每个板块的尺寸大小通过面积进行度量和比较,而不是通过方块的边长。外部矩阵代表父类别,内部矩阵代表子类别。更适合展示层级结构/树状结构的数据。面积总和也应是100%
-
堆叠面积图:这个图虽然是展示了比例,但是也带有时间属性。这类图表有一定的缺陷:
- 当类别、数据点过多时,难以阅读,无法体现价值
-
由于每个数据点受下方数据点的影响,因此每一层的变化趋势难以识别
-
饼图:总和应为100%。要良好的组织数据,如按照比例从大到小的方式进行展示等,且不要将饼图分成太多块。颜色会影响人们对图标的阅读。
- 有关关系的可视化:关联性可以帮我们根据某一已知指标来预测另一指标,可以展现群体间、子群体间、子群体内部的个体间的关联关系。
散点图:可以展示时间与某一变量或2个变量之间的关系。
-
LOESS曲线+散点图:使2个变量间的关系更加明确。
-
散点图矩阵:绘制每一种可能的配对。
-
气泡图:可以展示3种信息:x轴、y轴和气泡面积的大小
-
直方图:图形化的茎叶图,水平轴和垂直轴都是连续的。(与柱形图的区别:柱形图的水平轴上各个数值是相互分离的)
* 密度图:对分布的细节变化进行可视化。面积代表整体,即100%![image.png](https://upload-images.jianshu.io/upload_images/3979148-a640757830ba4648.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 直方图矩阵:用于对照和比较分布的变化![image.png](https://upload-images.jianshu.io/upload_images/3979148-301b68efd56576f7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 系列组图:将大量的小表归于一起,方便多个群组、分类之间及其内部比较。![image.png](https://upload-images.jianshu.io/upload_images/3979148-8c966b6d031db028.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
-
用于寻找差异的可视化
-
热力图:横向为一个对象,纵向为一个特征,颜色代表数值/程度。颜色的选择往往会奠定故事的整体基调,严肃的主题一般会使用中性、柔和的色调,而休闲或激昂的主题则会选择明亮的色调。热力图的好处在于可以一次性看到所有数据。缺点在于关注点会落在单个的点上,难以相互比较。
-
切尔诺夫脸谱图:根据数据集中的数字将多个变量一次性展现在人脸的各个部位上。每个部位代表对象的一个变量。可以表示多个变量的数据。
-
星图:又称雷达图、蜘蛛图。可以表示多变量的数据。变体有南丁格尔图、风玫瑰图等。
-
平行坐标图:用于描述群组或个变量之间的关系。(星图和切尔诺夫脸谱图可以方便的找出各个对象与同类之间的差异,但不具备描述群组或个变量之间的关系的能力。)
-
热力图:横向为一个对象,纵向为一个特征,颜色代表数值/程度。颜色的选择往往会奠定故事的整体基调,严肃的主题一般会使用中性、柔和的色调,而休闲或激昂的主题则会选择明亮的色调。热力图的好处在于可以一次性看到所有数据。缺点在于关注点会落在单个的点上,难以相互比较。
-
有关空间的可视化
-
地图
-
地图
关于异常值
大部分异常都只是笔误而已,但有些异常却真的存在,而它们就是有意思的地方,可以作为故事的重点。不要随意的剔除异常值,异常值往往才是故事的关键。
个人感悟
最后想说一点个人的感悟,作为一个想要在大数据方面找到一个方向的程序员,读完这本书之后,就有点儿放弃了数据可视化这个方向。我的理解是,在数据可视化方面,如果想要有一定发展,更多的是要在选择怎样的图形对数据进行展示,就像书中所说的那样,怎样讲好一个故事。如果在指责方面进行划分,这方面的工作会划分到UX的领域,程序员更多的是进行实现方面的事情,这恰恰是个体力活,可能很多程序员都可以很好地胜任,很难说是一个可以向上走的方向。不过我也有一个疑问,在大数据这个方向上,可视化是一个关键、不可失的一环,也有相应的职位,那么对于想要在大数据可视化方向发展的技术人员来说,是否要转型成UX型Dev呢?在这个方向,要怎样更好的向前走呢?如果有了解的同志,希望可以共同探讨。