Python数据可视化1.5 可视化图像

1.5 可视化图像


我们实现可视化是想证实我们对数据的认识。然而,如果数据不容易理解,你可能不会设计出正确的问题。

创建可视化的第一步是弄清楚需要回答的问题。换言之,该可视化的作用如何?另一个挑战是学习正确的绘图方法。下面列出一些可视化方法:

条形图和饼图

箱线图

气泡图

直方图

核密度估计(Kernel Density Estimation,KDE)图

线面图

网络图

散点图

树状图

小提琴图

在识别可视化应该传达信息的过程中,关注下面的问题才有意义:

要处理多少变量?我们试图画出什么样的图像?

x轴和y轴指代什么?(三维图中还有z轴)

数据大小被标准化了吗?数据点的大小意味着做?

我们的选色正确吗?

对于时间序列数据,我们是否试图识别趋势或相关性?

如果变量太多,可以在同一个图上画多个不同组数据实例。这个技术叫作点阵或网格绘图。它允许观众快速提取复杂数据的大量信息。

考虑一组学生数据,这是(gender、sleep、tv、exercise、computer、gpa)和(height、momheight、dadheight)信息的不寻常混合。computer、tv、sleep和exercise的单位是小时,身高以英寸为单位,gpa的测度标尺为4.0。

 

上述数据是变量个数多于平常的案例。因此,用网格绘图进行可视化,来展示这些变量间的关系会更有意义。

我们进行可视化的一个原因是为了验证数据的知识。然而,如果没有很好地理解数据,就不可能提炼出正确的问题。

数据中包含两种性别,因此作为第一个变量集有10组变量,它们可能是:(sleep, tv)、(sleep, exercise)、(sleep, computer)、(sleep, gpa)、(tv, exercise)、(tv, computer)、(tv, gpa)、(exercise, computer)、(exercise, gpa)以及(computer, gpa);另外两个(height,momheight)和(height,dadheight)作为第二个变量集。下面是除 (sleep, tv)、(tv, exercise)以外的所有组合。

 

 

我们的目标是发现哪些变量组合能用来理解数据,或者这些变量中是否有一些存在有意义的影响。因为是关于学生的数据,gpa可能是影响其他变量的关键所在。前面的图像刻画了这样一幅散点图:有很多女生的gpa比男生高,在同一个gpa范围内,有很多男生花在计算机上的时间更多。尽管这里给出所有散点图,不过我们的目的是:发现更有用的数据,以及从该数据中得出有用的结论。

很多蓝色点处于较高的位置(y轴上的gpa)说明更多女生gpa更高(该数据由UCSD收集而来)。

数据可从http://www.knapdata.com/python/ucdavis.csv下载。

你可以用seaborn软件包编写很少的代码绘制散点图,下面的例子说明与学生花费在计算机上的时间相比,沿x轴的gpa的散点图:

 

 

 

这些图用matplotlib、pandas和seaborn库软件包生成。seaborn是一种基于matplotlib的统计数据可视化库,由斯坦福大学的Michael Waskom创建。这些库的细节将在后面几章讨论。

seaborn库有很多有用的类。尤其是当我们需要对数据子集中一个变量的分布或者多个变量间关系进行可视化时,FacetGrid类就派上用场了。FacetGrid可以刻画三个维度:行、列和色调。这些库软件包和它们的功能将在后面章节中进行描述。

当创建可视化时,第一步是清楚需要回答的问题。换句话说,可视化起什么作用?另一个挑战是选择正确的绘图方法。

1.5.1 条形图和饼图

我们何时选择条形图和饼图?它们是最古老的可视化方法,而且饼图最适用于一个整体中不同部分的比较。此外,条形图能够比较不同组的差异来展示模式。

条形图、直方图和饼图有助于我们比较不同数据样本,进行分类,并确定样本中数据取值的分布。条形图有一些不同的风格形式,比如单个、多个和堆叠。

1. 条形图

当数值型数据被很好地划分为不同类别时,条形图尤其有效。因此,你可以快速地从数据中看到趋势。

当比较不同类别的数据时,条形图很有用。下面是一些著名的案例:

不同尺寸的牛仔裤数量

过去20年世界人口的变化

部门支出的百分比

除此之外,考虑以下几点:

增加条形的颜色,获得更多效果:用条形显示利润表现是有信息量的,但添加颜色揭示了利润增加了视觉观点。然而,如果有很多条形,很多颜色可能使得图看起来笨拙。

包括仪表盘上的多个条形图:这有助于观众快速比较相关信息,而不是通过一堆表格或幻灯片来回答问题。

在轴的两侧加条形:沿连续数轴画正反两面的数据是一种发现趋势的有效方法。

用层叠或并排的条形:在彼此上部或旁边展示相关数据,给出你的深入分析,马上处理多个问题。

这些图通过不到12行的Python代码来实现,后面几章将讨论更多的案例。

条形图中,每一列代表由特定分类定义的一个组;直方图中,每一列代表由定量变量定义的一组。在条形图中,x轴没有最小值和最大值,这是因为x轴上的标签是分类的,而不是定量的。另一方面,在直方图中有一个区间的取值。下面的条形图展示了2002~2009年美国奥斯卡金像奖得主和提名人的统计特征:

下面的Python代码用matplotlib展示了电影小数据样本的条形图(这可能不一定是一个真实的案例,但却给出了绘图板和比较的想法):

 

 

2. 饼图

说到饼图,需要考虑的问题是:“这几部分能组成一个有意义的整体吗?”以及“你是否有充足的内容用圆形代表?”。使用饼图一直备受争议,主要是因为当类别种类过多时,使用饼图很难比较不同类别的比例来得出结论(来源:https://www.quora.com/How-and-why-are-pie-charts-considered-evil-by-data-visualization-experts)。

饼图适用于在一个空间或图上展示比例。一些著名的案例如下:

调查中的响应分类

一种特定技术的前五家公司的市场份额(这种情况下,我们可以很快知道哪家公司占据主要的市场份额)

除此之外,还需考虑以下几点:

限制饼图的扇形数不超过8个:如果有8个以上比例需要展示,请考虑条形图。出于对内容的限制,饼图很难有意义地展示和阐释过多的部分。

在图上叠加饼图:在同一幅图中,饼图更容易拓展,凸显地域发展趋势。(此处扇形个数仍有限制。)

考虑下面的代码,绘制一个简单的饼图,比较不同学科的录取情况分布:

 

 

下面的饼图展示了大学里一些热门专业的录取情况:

 

1.5.2 箱线图

箱线图也叫作箱须图。这是一种基于最小值、上四分位数、中位数、下四分位数和最大值5个数值特征展示数据分布的标准方式。下图完成了对箱线图的解读:

 

箱线图是一种从图形上检查一组或多组数据的快捷方式。它们占用了较少的空间,在同一时间定义五种特征。关于箱线图的用途,我们能想到的一个例子是:如果两个以上班级参加同一次考试,则箱线图能够告诉我们哪个班的大多数同学比其他班做得好。另一个例子是:如果有更多的人吃汉堡,那么中位数的位置会上移或表示最大值处的上晶须比表示最小值处的下晶须更长。在这样的情况下,我们给出了数据分布的一个好的可视化工具。

在理解箱线图适用范围之前,我们首先给出一个定义。离群点是一组数据值中与其他值有异常距离的观测值。

箱线图适用于展示一组数据的分布。一些著名的案例如下:

识别数据中的离群点

确定数据是左偏还是右偏

除此之外,还有以下问题需要考虑:

箱子里隐藏了一些点:关注离群点

跨分布比较:箱线图适用于快速比较不同数据集的分布

1.5.3 散点图和气泡图

散点图是一种用来展示两个变量之间二维关系的可视化方法。这种交叉数对的模式能从图像上展示不同变量间的关系。散点图是同一组研究对象的两个变量间关系的可视化。另一方面,气泡图展示了数据的三个维度。每个数据点有三重维度(a, b, c)。其中,xy轴的坐标表示两个维度变量,气泡的大小表示第三个维度的定量测度结果。

1. 散点图

数据通常是一组点的集合,并且常常用来绘制各种相关性。比如,正相关表示:当一组数据递增时,另一组数据也会增加。前面给出的学生记录数据通过各种散点图展示出它们间的相关性。

在下面的例子中,我们用学生妈妈的身高与学生的身高进行比较,来确定是否他们之间存在正相关关系。数据下载网址为:http://www.knapdata.com/python/ucdavis.csv。

 

我们用seaborn软件包处理这个案例,但也可以通过下节所示的matplotlib完成。上述代码绘制的散点图如下所示:

 

 

散点图最适用于研究不同变量间的关系。一些著名的案例如下:

男性与女性人群中不同年龄阶段得皮肤病的可能性

IQ测试得分和GPA之间的相关性

除此之外,还有以下问题需要考虑:

增加一条趋势线或最佳拟合线(如果关系是线性的):增加一条趋势线可以展示数据之间的相关性。

使用信息标记类型:信息标记类型适用于通过形状和颜色提高视觉效果来解读数据的情况。

2. 气泡图

下面的例子展示了如何用颜色作为第三个维度,揭示销量或任何其他驱动收益的指标:

 

 

下面的散点图是案例中使用颜色映射的结果:

 

在用三维数值空间比较数据之间的关系时,气泡图大有帮助,它包括:x轴数据、y轴数据,并用气泡大小表示数据。气泡图有些像XY散点图,但是散点图上每个点都追加了一个额外的数据取值信息,用以XY点为中心的圆圈或气泡的大小表示。气泡图的另一个例子如下所示(没有Python代码,只是用来说明一种可视化风格):

 

在上面的研究中,气泡图展示了不同大洲的平均寿命和人均国内生产总值。

气泡图最适用于展示沿两个坐标轴的数据信息,以及第三个显著测度的数据元素。一些著名的案例如下:

电影的制作成本和毛利润,以及沿递增标尺的显著性测度

除此之外,还有下面问题需要考虑:

增加颜色和形状的显著性:通过比较大小和颜色,数据点可以转换为问题答案的可视化结果

变为交互式:如果数据点过多,则气泡图会变得很复杂,因此需要在时间轴或类别上,对这些数据进行分组,完成交互式的可视化

1.5.4 核密度估计图

核密度估计(Kernel Density Estimation,KDE)是一种用来估计概率密度函数的非参数方法。可以通过对观测到的数据点取平均实现平滑逼近。核密度函数与直方图密切相关,但有时能够通过核概念用平滑性或连续性赋予实际含义。

概率密度函数(Probability Density Function,PDF)的核是PDF的形式。这种形式不考虑非变量函数因素。本书仅关注概率密度函数的可视化,如果想了解更多理论,可以参考统计学方面的书。

Python包含能够用来在各种深度和层次完成一个KDE图的库,包括matplotlib、Scipy、scikit-learn和seaborn。下面是KDE绘图的两个例子。后面几章会有更多的例子展示KDE图的各种其他方式。

在下面的案例中,我们通过少量代码用一个样本量为250的随机数据集和seaborn软件包展示分布图:

 

通过numpy.random生成一个随机样本,可以用seaborn展示数据图的简单分布:

 

在第二个例子中,我们用SciPy和NumPy表明概率密度函数。首先我们用SciPy中的norm()创建正态分布样本,而后用NumPy中的hstack()进行水平方向上的堆叠,并应用SciPy中的gaussian_kde()。

 

上图是用SciPy和NumPy绘制的KDE图,具体代码如下所示:

 

其他可视化方法,比如线面图、网络图、树状图、热力图、雷达图或蜘蛛图,以及小提琴图,将在后续章节进行讨论。

时间: 2024-08-07 00:07:48

Python数据可视化1.5 可视化图像的相关文章

Python数据可视化1.4 可视化如何帮助决策

1.4 可视化如何帮助决策 数据有多种视觉展示的方式.然而,其中仅有少数方式能够用人们视觉上看得懂且观察到的新模式来刻画数据.数据可视化并不像看起来那么简单:它是一门艺术,且需要很多实践经验.(就像画一幅画,一个人不可能一天之内成为绘画大师,它需要很多实践经验.) 人类感知在数据可视化领域扮演着重要角色.健康人的眼睛具有水平方向大约200度的视野范围(两只眼睛共享大约120度的视野).大概人类大脑的四分之一涉及可视化处理,这比其他任何感官都要多.在听觉.视觉和嗅觉中,人的视觉占据最多(约为60%

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

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

《Python数据可视化编程实战》—— 1.6 安装图像处理工具:Python图像库(PIL)

1.6 安装图像处理工具:Python图像库(PIL) Python数据可视化编程实战Python图像库(PIL)为Python提供了图像处理能力.PIL支持的文件格式相当广泛,在图像处理领域提供了相当强大的功能. 快速数据访问.点运算(point operations).滤波(filtering).图像缩放.旋转.任意仿射转换(arbitrary affine transforms)是PIL中一些应用非常广泛的特性.例如,图像的统计数据即可通过histogram方法获得. PIL同样可以应用在

《Python数据可视化编程实战》—— 1.8 在代码中配置matplotlib参数

1.8 在代码中配置matplotlib参数 Python数据可视化编程实战matplotlib库提供了强大的绘图功能,是本书用的最多的Python库.在其配置文件即.rc文件中,已经为大部分属性设定了默认值.本节会介绍如何通过应用程序代码修改matplotlib的相关属性值. 1.8.1 准备工作 如前所述,matplotlib配置信息是从配置文件读取的.在配置文件中可以为matplotlib的几乎所有的属性指定永久有效的默认值. 1.8.2 操作步骤 在代码执行过程中,有两种方式更改运行参数

《Python数据可视化编程实战》——5.5 用OpenGL制作动画

5.5 用OpenGL制作动画 使用OpenGL的动机来源于CPU处理能力的限制,限制体现在当我们面临一项要可视化成千上万个数据点的工作,并且要求其快速执行(有时甚至是实时的)的时候. 现代计算机拥有强大的GPU用于加速与可视化相关的计算(比如游戏).它们没有理由不能用于科学相关的可视化. 实际上,编写硬件加速的软件至少有一个缺点.就硬件的依赖而言,现代图形卡要求有专有的驱动,有时候驱动在目标平台/机器(例如用户的笔记本)上是无法使用的:即使是可用的,有时候你也不想呆在那花大把的时间去安装驱动所

《Python数据可视化编程实战》—— 导读

前言 Python数据可视化编程实战最好的数据是我们能看到并理解的数据.作为一个开发人员,我们想创造并构建出最全面且容易理解的可视化图形.然而这并非总是很简单,我们需要找出数据,读取它.清理它.揣摩它,然后使用恰当的工具将其可视化.本书通过简单(和不那么简单)直接的方法解释了如何读取.清理和可视化数据的流程. 本书对怎样读取本地数据.远程数据.CSV.JSON以及关系型数据库中的数据,都进行了讲解. 通过matplotlib,我们能用一行简单的Python代码绘制出一些简单的图表,但是进行更高级

《Python数据可视化编程实战》—— 1.2 安装matplotlib、Numpy和Scipy库

1.2 安装matplotlib.Numpy和Scipy库 Python数据可视化编程实战 本章介绍了matplotlib及其依赖的软件在Linux平台上的几种安装方法. 1.2.1 准备工作 这里假设你已经安装了Linux系统且安装好了Python(推荐使用Debian/Ubuntu或RedHat/SciLinux).在前面提到的Linux系统发行版中,Python通常是默认安装的.如果没有,使用标准的软件安装方式安装Python也是非常简便的.本书假设你安装的Python版本为2.7或以上.

《Python数据可视化编程实战》——5.2 创建3D柱状图

5.2 创建3D柱状图 Python数据可视化编程实战 虽然matplotlib主要专注于绘图,并且主要是二维的图形,但是它也有一些不同的扩展,能让我们在地理图上绘图,让我们把Excel和3D图表结合起来.在matplotlib的世界里,这些扩展叫做工具包(toolkits).工具包是一些关注在某个话题(如3D绘图)的特定函数的集合. 比较流行的工具包有Basemap.GTK 工具.Excel工具.Natgrid.AxesGrid和mplot3d. 本节将探索关于mplot3d的更多功能.mpl

《Python数据可视化编程实战》—— 1.5 在Windows上安装matplotlib

1.5 在Windows上安装matplotlib Python数据可视化编程实战在本节中,我们将演示如何安装Python和matplotlib.假设系统中没有预先安装Python. 1.5.1 准备工作 在Windows上安装matplotlib有两种方式.较简单的方式是安装预打包的Python环境,如EPD.Anaconda和Python(x,y).这是本书推荐的安装方式,尤其对于初学者来说更是如此. 第二种方式,是使用预编译的二进制文件来安装matplotlib和依赖软件包.需要注意安装的

《Python数据可视化编程实战》—— 1.9 为项目设置matplotlib参数

1.9 为项目设置matplotlib参数 Python数据可视化编程实战本节介绍matplotlib使用的各种配置文件的位置,以及使用这些配置文件的意义.同时还将介绍配置文件中的具体配置项. 1.9.1 准备工作 如果不想在每次使用matplotlib时都在代码开始部分进行配置(像前一节我们做的那样),就需要为不同的项目设定不同的默认配置项.本节将介绍如何做到这一点.这种配置方式使得配置项与代码分离,从而使代码更加整洁.此外,你可以很容易在同事间甚至项目间分享配置模板. 1.9.2 配置方法