zoukankan      html  css  js  c++  java
  • 数据可视化的秘密

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

     

    研究数据的方法有很多,比如利用统计方法,计算数据的平均值和标准差;再比如使用模型,拟合数据。数据通常是大量的,人脑难以直接把握其中的信息。研究数据的最终目的是减小海量数据的信息量,将数据中的信息客观的展示出来,并最终整理成简单的,人脑可以掌握的知识。

     

    数据可视化

    图形是直观呈现数据的直接方法。然而,将大量数据在同一个图表中画出来并不容易。早期的测绘、天气数据都需要长时间的手工绘制。随着计算机绘图功能的开发,手工绘画已经完全被自动绘图程序取代。问题的核心转移为,要以怎样的方式呈现数据,以便数据中的信息能自然的体现出来。数据可视化(data visualisation)就是研究如何利用图形,展现数据中隐含的信息,发掘数据中所包含的规律。它是一门横跨计算机、统计、心理学的综合学科,并随着数据挖掘和大数据的兴起而进一步繁荣。

     

    下面一个视频来自Hans Rosling。他是瑞典的一位医学家,同时也是统计学家。在下面的这个BBC制作的视频中,Hans Rosling用丰富的可视化手段,展示了近两百年来世界各国人口和收入的演化。我给这段视频增加了中英文字幕,以方便观看。如果有错误,请见谅。

    http://v.youku.com/v_show/id_XNTA3NDk0MTk2.html  

     

    数据的信息维度

    Hans Rosling所做的数据图值得研究。数据展示的基本信息有2个维度:

    1) x轴, 人均收入

    2) y轴, 人均寿命

    这两个轴是作者想要表达的最基本信息。图上的每个点代表一个国家,该点所在的x-y位置代表了国家的人均收入和人均寿命。人均寿命的刻度线性增长(25岁,50岁,75岁),但人均收入的刻度是指数增长(400元,4000元,40000元)。人均收入的刻度非常值得注意,否则很容易给人造成错误的印象。比如说三个国家A,B,C,人均收入分别为40, 4000, 40000元。尽管在图表中,A和B,B和C都只相差一个刻度,但C和B的收入差距实际上A和B收入差距的10倍!

     

    此外,还有两个维度的辅助信息:

    3) 圆圈大小,国家人口

    4) 圆圈颜色,国家所在区域

    平面可以自然的分为两个维度(比如上面的x和y)。为了增加其他维度的信息,我们需要考虑其他的独立表示方法。数据点可以有尺寸大小和颜色变化。正如这里所显示的,Han Rosling利用这两个图像特征来表示两个独立的维度(国家人口,国家所在区域)。

     

    通过整个视频中年份的变化,Han Rosling还有一个明显的5)时间维度。利用动画的形式来记录信息随时间的变化状况,是数据可视化中常用的手段。然而,在使用动画的时候需要谨慎。动画会留给观众相对比较少的时间进行深入思考。所以在动画过程中需要适当的暂停(或者截图)来显示一些典型状况。

     

    最后,整个数据还有一个非常隐藏的信息维度,就是Han Rosling不时的会表明某个圆圈所代表的6)国家名称。也就是说,国家名称也是一个隐含的,随时可以获知的信息。

     

     

    眼见为实?

    随着Han Rosling慷慨激昂的演讲,我们被带往一个结论:这个世界的收入和寿命差距在减小。世界作为一个整体,变得更加富有也更加健康。

    数据似乎是在说明这一点。或者不是?

     

    比如上面两个截图,被用来说明国家间的差距在减小。然而,我们上面提到,收入的刻度是10倍增长的(这样的刻度被称为对数刻度)。所以当一个国家比较富裕之后,它的财富增长比较难以在刻度上体现出来。比如同样增加3600元的收入,可以让一个原来收入400元的国家跨入中间区域,而一个原来收入40000的国家几乎原地不动。如果将x轴改为线性,那么国家间人均收入的差距将大大超越这幅图所带给人的直观感受。

    (而在不考虑通货膨胀的情况下,所谓的整体收入增长的结论也不是很可靠。)

     

    从y轴的信息看,整个世界的健康水平是提高了。即使是如此,我们依然要小心,比如下面两幅图,绘制的是相同的数据(标普500指数),唯一的差别在于y轴刻度范围。

    是否举得第二张图的波动更加剧烈?但两张图是相同的数据!可见,刻度的范围会影响人们对数据的认知。小的刻度范围会让人觉得数据变化较大(即使数据本身还是一样的数据)。

     

    因此,一个图表是由数据绘制方法两方面构成的。图表并不等同于数据,绘制方法有可能会影响人们的主观认识。一个合格数据图表应该尽量客观的反映数据。

    (当然,一个熟悉数据可视化原理的人,也可能会利用这些方法故意夸大。这在宣传海报中常常见到。)

     

    数据绘图的要素

    现在,转换位置思考。假设,我们有一批数据,那么应该怎么来着手呈现呢?这个问题并不好回答,原因有二:

    1) 数据中包含有大量的信息维度,我们只能选择其中的一些而非全部呈现。

    2) 数据的信息呈现方式多种多样

     

    我们需要先确定想要绘制的信息维度。比如上面的视频中,六个信息维度得到呈现。而在S&P 500的绘图中,我们只呈现了两个维度的信息,时间和指数。如果图像中信息维度比较少,图表会比较容易理解; 如果信息维度多,那么图表会比较复杂,但更容易体现多变量之间的关系。

     

    每个信息维度都需要一个坐标,来表现数据在该维度上的取值。在Hans Rosling的绘图中,六个坐标分别是:水平x轴,竖直y轴,圆圈颜色,圆圈大小,动画帧所对应的时间,以及文字标明的国家名。这六个维度之间相互独立,所以可以互不干扰的反映各个维度上的取值。再比如下面的条形图和饼图。它们都是在反映二维信息。条形图采取了x-y的坐标。饼图采取了文字-圆心角的坐标。

    每一个坐标都需要有刻度。读者需要根据刻度获知数据的准确取值。刻度可以是均匀线性增长的,也可以是不均匀增长(比如对数刻度)。刻度的选择要根据数据的特征。如果不同数据样本在某个维度上取值差异较大,就适用于对数取值。比如下面这幅xkcd 1162的画,就展示了不采用对数刻度的恶果。

    Log Scale (xkcd 1162)

    此外,刻度还需要有范围。正如再S&P 500的绘图中我们谈到的,过大的刻度范围会从视觉上减小波动。一个常用的刻度范围是数据在该维度上的最大和最小值。但一些情况下,最大和最小值可能是由于错误状况造成的不可靠数据,所以会采取平均值加减标准差的范围。

    在维度和刻度都选取好了之后,要再坐标轴旁标注这是什么维度,维度的单位,并在坐标轴上标注刻度值。这样,我们才完整了数据在该维度上的信息。一个有坐标轴,有刻度但没有标注的数据绘图,是失败的绘图。读者根本无法从中获知数据的真实状况。

    (在Hans Rosling的绘图中,有两个维度的信息不完整:人口总数和国家名称)

     

    在上面完成了之后,我们需要进一步说明数据来源。我们可以采用增加文字说明的方式来实现这一点(比如增加一个标题)。

     

    总结

    数据可视化非常有趣。它通过技术的手段,将枯燥的数据变得生动可爱。随着大数据时代的到来以及网络传播的发达,数据可视化会成为一项值得掌握的技能。这篇文章里,我通过一个很棒的视频说明了数据可视化的一些要点,特别是信息维度的问题。我会在以后介绍一些常用的绘图工具,将理论转化为实践。

  • 相关阅读:
    共享纸巾更换主板代码分析 共享纸巾主板更换后的对接代码
    Python Django Ajax 传递列表数据
    Python Django migrate 报错解决办法
    Python 创建字典的多种方式
    Python 两个list合并成一个字典
    Python 正则 re.sub替换
    python Django Ajax基础
    Python Django 获取表单数据的三种方式
    python Django html 模板循环条件
    Python Django ORM 字段类型、参数、外键操作
  • 原文地址:https://www.cnblogs.com/vamei/p/2877365.html
Copyright © 2011-2022 走看看