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

简介:

2.4 用数据编写有趣的故事


数据可视化通常改善用数据讲述故事的能力,而且在某些情况下,需要视觉上没有那么琐碎。不久前,新闻记者已经更倾向于将可视化结果整合到叙述中,这样通常有助于读者理解故事。在商界,很少有案例成功掌握数据与故事相关联的方法。对于观众来说,这些有意义的故事应从感性和理性角度都具有吸引力。正如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博士和他在英属哥伦比亚大学的同事用生态系统模型、水下地形图,捕鱼记录和统计分析来呈现本世纪大西洋不同位置鱼的总量。

相关文章
|
18天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
16天前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
17天前
|
数据可视化 Python
使用Python进行数据可视化的初学者指南
在数据的海洋里,我们如何能够不迷失方向?通过数据可视化的力量,我们可以将复杂的数据集转化为易于理解的图形和图表。本文旨在为初学者提供一份简明的入门手册,介绍如何使用Python中的Matplotlib库来揭示数据背后的故事。我们将从基础的图表开始,逐步深入到更高级的可视化技术,确保每个步骤都清晰易懂,让初学者也能轻松上手。让我们开始绘制属于你自己的数据图谱吧!
|
28天前
|
机器学习/深度学习 人工智能 数据可视化
使用Python进行数据可视化:探索与实践
在数字时代的浪潮中,数据可视化成为了沟通复杂信息和洞察数据背后故事的重要工具。本文将引导读者通过Python这一强大的编程语言,利用其丰富的库函数,轻松入门并掌握数据可视化的基础技能。我们将从简单的图表创建开始,逐步深入到交互式图表的制作,最终实现复杂数据的动态呈现。无论你是数据分析新手,还是希望提升报告吸引力的专业人士,这篇文章都将是你的理想指南。
39 9
|
24天前
|
数据可视化 数据处理 Python
Python编程中的数据可视化技术
在Python编程中,数据可视化是一项强大的工具,它能够将复杂的数据集转化为易于理解的图形。本文将介绍如何使用matplotlib和pandas这两个流行的Python库来实现数据可视化,并展示一些实用的代码示例。通过这些示例,读者将学会如何创建各种图表,包括折线图、柱状图和散点图等,以便更好地理解和呈现数据。
|
1月前
|
数据可视化 数据挖掘 定位技术
Python和Geopandas进行地理数据可视化
【10月更文挑战第22天】本文介绍了如何使用Python和Geopandas进行地理数据可视化和分析,涵盖从准备工作、加载数据、数据探索与处理、地理数据可视化、空间分析与查询到交互式地理数据可视化等内容。通过丰富的代码示例和案例演示,帮助读者掌握地理数据分析的基本方法,为实际应用提供支持。
96 19
|
29天前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
45 3
|
1月前
|
移动开发 数据可视化 数据挖掘
利用Python实现数据可视化:以Matplotlib和Seaborn为例
【10月更文挑战第37天】本文旨在引导读者理解并掌握使用Python进行数据可视化的基本方法。通过深入浅出的介绍,我们将探索如何使用两个流行的库——Matplotlib和Seaborn,来创建引人入胜的图表。文章将通过具体示例展示如何从简单的图表开始,逐步过渡到更复杂的可视化技术,帮助初学者构建起强大的数据呈现能力。
|
1月前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
28 1
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
下一篇
DataWorks