天天看点

Python数据可视化2.4 用数据编写有趣的故事

<b>2.4 用数据编写有趣的故事</b>

<b></b>

数据可视化通常改善用数据讲述故事的能力,而且在某些情况下,需要视觉上没有那么琐碎。不久前,新闻记者已经更倾向于将可视化结果整合到叙述中,这样通常有助于读者理解故事。在商界,很少有案例成功掌握数据与故事相关联的方法。对于观众来说,这些有意义的故事应从感性和理性角度都具有吸引力。正如rudyard kipling所写,“如果历史以故事的形式串联,那么它将不会被遗忘。”类似的想法用在数据方面。因此,我们应该会理解:如果数据展示方式正确,那么读者会更好地理解和记住这些数据。

2.4.1 为什么故事如此重要

现有很多可视化的工具和方法:条形图和饼图、表格、线图、气泡图、散点图等等,不胜枚举。然而,这些工具关注于数据探索而非故事创作。尽管可视化案例有助于讲述故事,但这种情况很少发生。这主要是因为找到一则故事比处理数据难度大很多。当然,也有以读者驱动为导向的故事和以作者驱动为导向的故事。

以作者驱动为导向的故事由作者选择数据和可视化,并展示给大众读者。另一方面,以读者驱动为导向的故事向读者提供处理数据的工具和方法,使读者有更多的灵活性和选择来进行分析和理解可视化。

2.4.2 以读者驱动为导向的故事

2010年,斯坦福大学的学者对故事产生的重要性进行研究和评论,并且提出一些叙事可视化的设计策略。根据他们的研究,一种纯粹的以作者驱动为导向的方法有一条完成可视化的严格路线,依赖信息而没有与读者的互动,而以读者驱动为导向的故事没有固定顺序的图像,不依赖信息而高度交互。以作者驱动为导向的方法有这样一个案例,其中列出的7种可视化故事包括:杂志风格、著名图表、分区海报、流程图、连环画、幻灯片和电影/视频/动画。

1. gapminder

以读者驱动为导向的故事与以数据驱动为导向的故事相结合的一个经典案例是gapminder world (http://gapminder.org/world)。该网站有超过600个国际经济、环境、健康、技术等方面的数据指标。同时也向学生提供真实世界问题的研究工具,发现模式、趋势和相关性。该网站由瑞典hans rosling基地研发的trendalyzer软件创建的,在2007年3月被google收购。

gapminder 使用的信息可视化技术是一个自带5个默认设置变量的交互式气泡图。这5个变量是:x、y、气泡大小、颜色和被滑块控制的时间变量。滑块控制和沿x、y轴的选择使该图变得可交互。但即便使用这样的工具创作一个故事也不一定容易。讲故事是一门手艺,也可以是一种有效的知识共享技术。因为它传达了背景和情感丰富的内容,比大多数其他的交流方式更有效。

大多数有吸引力的故事讲述者都能抓住理解观众的重要性。他们可能会给小孩和大人讲述相同的故事,但是故事的起承转合将有所不同。同样,一则以数据驱动或以读者驱动为导向的故事应该根据聆听和研究的对象不同而作调整。例如,对于一名管理者,统计可能是关键,但是一位商业智能管理者很可能对方法和技术感兴趣。

现在有很多可用的javascript框架用来创建互动式的可视化,最受欢迎的是d3.js。目前,用python只有少量创建互动式可视化的方法(不用flash)。一种方法是生成d3.js能用来作图的json格式的数据,第二种选择是用plotly(http://www.plot.ly)。我们将在本章深入讲解更多plotly的细节。

2. 国情咨文

在obama 总统演讲期间,twitter根据推文的位置和话题创建了可视化图像。该可视化之所以有趣,是因为它在一个位置捕捉了很多细节。演讲期间,该图的滚动播出展示出twitter的反应;它被贴在下面的网址:http://twitter.github.io/interactive/sotu2015/#p1。

3. 美国死亡率

从1968年到2010年,美国的死亡率下降17%(详细数据来自http://www.who.int/healthinfo/mortality_data/en/)。几乎所有的改善都可以归因于男性生存前景的改善。它看起来像20世纪90年代中期前的进步,但原因可能是从那以后人口寿命增加了很多。可以从bloomberg读取这种现象的一个完整描述,但我们试图展示两个可视化结果:

1968~2010年间,男性、女性和全部人口的死亡率

7个年龄组死亡率展示了一些有趣的结果

该案例的代码如下所示:

死亡率是以100 000人为单位进行衡量的。通过将人口划分为不同的年龄层,可以看出寿命一直在增加,尤其是25岁以下年龄组有最大的改善。为什么25~44岁以下年龄组的人口在下跌(用粗线显示)?bloomberg上的故事通过关联到另一个事实很好得给出了原因:在那段时间,aids导致的死亡数会影响那个年龄组。

aids杀死了40 000多个美国人,而且他们中有75%属于25~44岁的年龄组。因此,可从那段时间内看到特别结果。

csv.reader()和csv.dictreader()的不同之处在于:输入csv文件何时有字段名(或列名),dictreader()用字段名作为键,用列中的实际数值作为数据取值。在上面的案例中,我们用到reader(),这是因为用循环(y[col] = [row[col+1]])方便。而且,如果csv文件中有列名,用reader()应该会忽略第一行。

我们也可以从http://www.knapdata.com/python获得这些案例的过滤数据mortality1.csv和mortality2.csv。

对于mortdata[:4],不同的读取方法,结果会不同。换句话说,当我们用reader() 后,mortdata[:4]的结果如下:

用dictreader(),假定csv文件有字段名,四行数据会如下展示:

4. 其他的案例故事

我们有很多探索、可视化、交互和尝试的案例。一些著名的案例如下:

用255张图展示经济衰退如何重塑经济(《纽约时报》):这个故事说明大萧条结束之后的5年,经济如何重新获得900万个岗位,强调哪些行业比其他行业恢复速度快。(来源:http://tinyurl.com/nwdp3pp。)

2013年华盛顿奇才中射击明星(《华盛顿邮报》):该交互式图创建于几年前,基于2013年华盛顿奇才的表现为基础。该图尝试分析和观察paul pierce的中档射击水平如何得以有很大提高。(来源:http://www.washingtonpost.com/wp-srv/special/sports/ wizards-shooting-stars/。)

2.4.3 以作者驱动为导向的故事

《纽约时报》有一些世界上最好的数据可视化、多媒体和互动性故事。该报社的终极目标始终是达到新闻界久负盛名的标准,并真正为读者创造新体验。其中,故事文化的讲述是工作背后的能量来源之一。

例如,“the geography of chaos in yemen”就是一个以数据与作者驱动为导向的故事相结合的案例。2015年3月26日,沙特阿拉伯的喷气式飞机在也门与侯塞因团体完成驱动器方面的对抗。也门在诸如沙特阿拉伯、伊朗和美国这几个关键成员中起着重要作用。过去几年,纽约时报的作者发现houthi的影响力已有所扩大。

在阿拉伯半岛,也门是“基地”组织最有活力的一个分支。自2009年以来,美国已经在也门开展了至少100次空袭。除了基地组织的侵占,伊斯兰国也在那个区域有活动。最近,他们宣称对萨那两个什叶派清真寺135人遇难的轰炸事件负责。下图来自新闻调查局(bureau of luvestigative journalism)的美国企业研究所的重大威胁项目:

另一个不错的案例是david mccandless 对大西洋的过去进行可视化,展示了过度捕鱼前海洋的样子。难以想象过度捕鱼给海洋造成的破坏。这种效果在海洋中是不可见的、隐藏的。下图说明1900年和2000年北大西洋的普通可食用鱼的总量。普通可食用鱼包括金枪鱼、鳕鱼、黑线鳕、无须鳕、大比目鱼、鲱、鲭鱼、狭鳕、鲑、海鳟、条纹鲈、鲟鱼和大菱鲆,现在有很多处于弱势或濒危状态。

villy christensen博士和他在英属哥伦比亚大学的同事用生态系统模型、水下地形图,捕鱼记录和统计分析来呈现本世纪大西洋不同位置鱼的总量。