Python数据可视化之美:专业图表绘制指南(全彩)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-13 19:27:16

点击下载

作者:张杰

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Python数据可视化之美:专业图表绘制指南(全彩)

Python数据可视化之美:专业图表绘制指南(全彩)试读:

前言

本书主要介绍如何使用Python中的matplotlib、Seaborn、plotnine、Basemap等包绘制专业图表。本书首先介绍 Python 语言编程基础知识,以及 NumPy 和 Pandas 的数据操作方法;再对比介绍matplotlib、Seaborn和plotnine的图形语法。本书系统性地介绍了使用matplotlib、Seaborn和plotnine绘制类别对比型、数据关系型、时间序列型、整体局部型、地理空间型等常见的二维和三维图表的方法。另外,本书也介绍了商业图表与学术图表的规范与差异,以及如何使用matplotlib绘制HTML交互页面动画。

本书定位

人生苦短,我用Python!

现在Python语言越来越流行,尤其是在机器视觉、机器学习与深度学习等领域。但是数据可视化一直是其短板,特别是相对R语言而言。R语言以ggplot2包及其拓展包人性化的绘图语法大受用户的喜爱,特别是生物信息与医学研究者。市面上有两本很经典的R ggplot2教程:ggplot2 Elegant Graphics for Data Analysis和R Graphics Cookbook,这两本书重点介绍了ggplot2包的绘图语法及常见图表的绘制方法。另外,《R语言数据可视化之美:专业图表绘制指南(增强版)》基于R中的ggplot2包及其拓展包等,系统性地介绍了几乎所有常见的二维和三维图表的绘制方法。

所以,笔者认为很有必要系统性地介绍 Python 的绘图语法系统,包括最基础也最常用的matplotlib、常用于统计分析的Seaborn、最新出现的类似R ggplot2语法的plotnine包,以及用于地理空间数据可视化的Basemap包。本书首先介绍数据可视化基础理论,然后系统性地介绍了几乎所有常见的二维和三维图表的绘制方法,包括简单的柱形图系列、条形图系列、折线图系列、地图系列等。

读者对象

本书适合想学习数据分析与可视化相关专业课程的高校学生,以及对数据分析与可视化感兴趣的职场人士阅读,尤其是 Python 用户。从软件掌握程度而言,本书同样适用于零基础学习 Python的用户。

阅读指南

全书内容共有11章,其中,前3章是后面8章的基础,第4~10章都是独立知识点,第11章是数据可视化绘图综合案例。读者可以根据实际需求有选择性地进行学习。

第1章 介绍Python编程基础,重点介绍数据结构、控制语句与函数编写。

第2章 介绍Python数据处理基础,重点介绍NumPy和Pandas的数据操作方法,包括NumPy的数值运算与Pandas的表格运算。

第3章 介绍Python数据可视化基础,重点对比介绍了matplotlib、Seaborn和plotnine的图形语法,以及数据可视化的颜色主题运用原理。

第4章 介绍类别比较型图表,包括柱形图系列、条形图系列、南丁格尔玫瑰图、径向柱图等图表。

第5章 介绍数据关系型图表,包括二维和三维散点图、气泡图、等高线图、三维曲面图、三元相图、二维和三维瀑布图、相关系数热力图等图表。

第6章 介绍数据分布型图表,包括一维、二维和三维的统计直方图和核密度估计图、抖动散点图、点阵图、箱形图、小提琴图等图表。

第7章 介绍时间序列型图表,包括折线图和面积图系列、日历图、量化波形图等图表。

第8章 介绍局部整体型图表,包括饼状图、马赛克图、华夫饼图、点状柱形图系列等图表。

第9章 介绍高维数据的可视化方法,包括分面图系列、矩阵散点图、热力图、平行坐标系图、RadViz图等图表。

第10章 介绍地理空间型图表,包括分级统计地图、点描法地图、带气泡/柱形的地图、等位地图、线型地图、三维柱形地图等不同的地图图表。

第11章 介绍数据可视化的各种应用场景,包括商业图表、学术图表、HTML网页动画等的规范与制作。

应用范围

本书的图表绘制方法都是基于Python的matplotlib、Seaborn、plotnine、Basemap等包实现的,几乎适应于所有常见的二维和三维图表。本书以虚拟的地图数据为例讲解不同的地理空间型图表,读者需将绘图方法应用到实际的地理空间型图表。

适用版本

本书所用Python版本为:3.7.1;图表绘制包matplotlib、Seaborn、plotnine、Basemap和GeoPandas的版本分别为:3.0.2、0.9.0、0.5.1、1.2.0和0.4.1;数据处理包NumPy和Pandas的版本分别为:1.15.4和0.23.4。

Python作为免费的开源软件,数据分析与可视化的包更新迭代很快,这是它的优势。但是有时候有些代码运行可能会由于Python及其包的版本的更新,而出现函数弃用(deprecated)的情况。此时,需要自己更新代码,使用新的函数替代原有的函数。

源代码

本书配有几乎所有图表的Python源文件及其CSV或TXT格式的数据源文件。但是需要注意的是,如果运行的Python版本没有安装相应的数据分析与可视化的包(package),那么请预先安装相应的包,才能成功运行代码。同时,也请注意运行Python及其包的版本是否已经更新。本书配套源代码下载的GitHub网址:https://github.com/Easy-Shu/Beautiful-Visualization-with-python。

与作者联系

因笔者知识与能力所限,书中纰漏之处在所难免,欢迎并恳请读者朋友们给予批评与指正,可以通过邮箱联系笔者。如果读者有关于学术图表或商业图表绘制的问题,可以与笔者交流。另外,更多关于图表绘制的教程请关注笔者的博客、专栏和微博平台,也可以重点关注微信公众号:EasyShu,还可以添加笔者微信:EasyCharts。笔者的数据分析与可视化的文章会优先发表在微信公众号平台。邮 箱:easycharts@qq.com博 客:https://github.com/Easy-Shu/EasyShu-WeChat知乎专栏:https://zhuanlan.zhihu.com/EasyShu(知乎账号:张杰)

致谢

自从2019年10月出版《R语言数据可视化之美:专业图表绘制指南(增强版)》,很多读者问笔者能不能出一本Python版的数据可视化教程。写书真的呕心沥血,但是在撰写过程中能系统地总结所学的知识,可以查漏补缺,也是受益匪浅。《R语言数据可视化之美:专业图表绘制指南》这本书在2017年5月断断续续写了1年半多,到2019年5月才出版。后来又花了3个多月增加了3章图表内容,增强版才出版。

所谓“大道相通”,不同软件的数据可视化原理都是相通的。《Python 数据可视化之美:专业图表绘制指南》这本书就是对照着R语言那本书“翻译”而成的。所以亲爱的读者请不必诧异于笔者现在这么快又出版Python的数据可视化图书了。

在这里,首先要感谢读者,感谢你们对笔者的支持与包容。也非常感谢笔者的大学好友金伟(现为腾讯高级研究员)引导笔者入门 Python,还要感谢香港理工大学的姚鹏鹏博士、清华大学的赵建树博士笔者在学习Python时给予的帮助。最后,笔者觉得还应该感谢的就是自己。蓦然回首,4年弹指一挥间,从大学毕业到香港做学术研究这几年,经历过很多次的失望,也差点患上抑郁症,感谢自己有一颗积极、阳光、乐观的心,终于守得云开见月明,如笔者所愿能坚持做自己喜欢的事情。

小时候,读到课本里普希金的一段话:“假如生活欺骗了你,不要悲伤,不要心急!忧郁的日子里须要镇静:相信吧,快乐的日子将会来临。”到现在才明白这确实是一条生活的“潜规则”。月有阴晴圆缺,人有悲欢离合。人不仅有趋利避害、喜甜厌苦的本能反应,还有趋欢避悲、求乐脱苦的本能调节。所以,悲伤的日子后面就是快乐的日子。

亲爱的读者,也希望你能快乐地阅读本书!作者2019年12月5日其他

读者服务

微信扫码回复:38370

● 获取书中图表的Python源文件及其CSV或TXT数据源文件

● 获取博文视点学院20元付费内容抵扣券。

● 获取免费增值资源。

● 加入读者交流群,与本书作者互动。(本书正文中链接1~链接23请见www.broadview.com.cn/38370)第1章 Python编程基础1.1 Python基础知识1.1.1 Python3.7的安装

使用Anaconda可以直接组合安装Python、Jupyter Notebook和Spyder。Anaconda是一个开源的Python发行版本,用于进行大规模的数据处理、预测分析、科学计算,致力于简化包的管理和部署。

读者可以通过搜索Anaconda,找到Anaconda官网,并下载。

需要注意的是:我们要根据电脑的系统(Windows、macOS 和 Linux)选择对应的 Python 版本。对于Windows系统,还需要根据系统的位数选择32位或64位。另外,笔者推荐使用Python 3.7版本。

Jupyter Notebook:Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。Jupyter Notebook是以网页形式打开的程序,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示。如在编程过程中需要编写说明文档,则可在同一个页面中直接编写,便于进行及时的说明和解释(见图1-1-1)。图1-1-1 Jupyter Notebook的运行界面

Spyder:Spyder是Python(x,y)的作者为它开发的一个简单的集成开发环境。和其他的Python开发环境相比,它最大的优点就是可以模仿MATLAB的“工作空间”功能,可以很方便地观察和修改数组的值。Spyder 的界面由许多窗格构成,用户可以根据自己的喜好调整它们的位置和大小。当多个窗格出现在同一个区域时,将使用标签页的形式显示。例如在图1-1-2中,可以看到Editor、Object inspector、Variable explorer、File explorer、Console、History log以及两个显示图像的窗格。在View菜单中可以设置是否显示这些窗格。图1-1-2 Spyder运行界面1.1.2 包的安装与使用

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里的代码就会越来越长,越来越不容易维护。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(module)。模块的名字就是该文件的名字(不包含后缀)。使用模块不仅可以大大提高代码的可维护性,而且编写代码也不必从零开始。

为了避免模块名冲突,Python 又引入了按目录来组织模块的方法,称为包(package)。一个包就是一个文件夹(Python 2规定该文件夹必须包含一个__init__.py文件,Python 3没有要求),包名就是文件夹名。包的安装可以直接打开Anaconda 3文件夹中的Anaconda Prompt对话框,输入conda install<;package>;或者 pip install<;package>;,就可以安装对应的包。也可以使用 conda uninstall<;package>;和pip uninstall<;package>;卸载对应的包。模块和包的导入与使用方法没有本质区别。我们在使用这些包前,需要提前将这些包导入,使用 import 语句可以导入4种不同的对象类型。

Python 借助外在的包和模块可以实现网络爬虫、数据分析与可视化、机器学习和深度学习等诸多功能(见图1-1-3)。其中,常用于数据分析处理与机器学习的包如下。

● NumPy、Pandas、DASK和Numba包可用于分析数据的可拓展性与性能;

● SciPy、StatsModel和scikit-learn可用于数据的处理与分析;

● matplotlib、Seaborn、plotnine、Bokeh、Datashader和HoloViews包可实现数据结果的可视化;

● scikit-learn、PyTorch、TensorFlow和theano包可构造并训练机器学习与深度学习模型。图1-1-3 常用的Python包1.1.3 Python基础操作

1.Python注释

注释的目的是让阅读人员能够轻松读懂每一行代码的意义,同时也为后期代码的维护提供便利。在Python中,单行注释是以#号开头的。而Python的多行注释是由两个三引号(''')包含起来的。

2.Python的行与缩进

与 R、C++等语言相比,Python 最具特色的就是使用缩进表示代码块,而不需要使用大括号。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。需要特别注意的是:不一致的代码块缩进会导致代码运行错误。

3.变量与对象

Python中的任何数值、字符串、数据结构、函数、类、模块等都是对象。每个对象都有标识符、类型(type)和值(value)。几乎所有的对象都有方法与属性,都可以通过“对象名.方法(参数1,参数2,…,参数n)”或者“对象名.属性”的方式访问该对象的内部数据结构。需要注意的是:对象之间的赋值并不是复制。

复制是指复制对象与原始对象不是同一个对象,原始对象发生任何变化都不会影响复制对象的变化,可以分为浅复制(copy)和深复制(deepcopy)。浅复制是复制了对象,但对于对象中的元素,依然使用原始的引用,即只复制指向对象的指针,并不复制对象本身。深复制是指完全地复制一个对象的所有元素及其子元素,可以理解为直接复制整个对象到另一块内存中。1.2 6种常用数据结构

Python最常用的数据结构有6种:数字、字符串、列表、元组、字典和集合。其中最为常用的是数字、字符串、列表和字典。(1)数字(number):用于储存数值。Python 3支持4种类型的数字:int(整数类型)、float(浮点类型)、bool(布尔类型)、complex(复数类型)。我们可以使用type()函数查看数据类型;(2)字符串(string):由数值、字母、下画线组成的一串字符,可以使用单引号(')、双引号(")和三引号(''')指定字符串,使用“+”号可以连接两个字符串;(3)列表(list):一维序列,变长,其内容可以进行修改,用“[]”标识;(4)元组(tuple):一维序列,定长、不可变,其内容不能修改,用“()”标识;(5)字典(dict):最重要的内置结构之一,大小可变的键值对集,其中键(key)和值(value)都是Python对象,用“{}”指定,可以使用大括号“{}”创建空字典;(6)集合(set):由唯一元素组成的无序集,可以看成是只有键没有值的字典,可以使用大括号“{}”或者set()函数创建集合。一个空集合必须使用set()函数创建。1.2.1 列表

列表(list)是任意对象的有序集合,使用“[]”标识,元素之间使用逗号隔开。列表中的元素既可以是数字或字符串,也可以是列表。每个列表中的元素都是从0开始计算的。列表方式可以通过“列表对象.列表方法(参数)”的方式调用。主要方法如下所示:1.2.2 字典

字典是一种可变的容器模型,且可以存储任意类型的对象,用“{}”标识。字典是一个无序的键(key)和值(value)对的集合。格式如下:

dc={key1:value1,key2:value2} 或者 dc=dict(key1=value1,key2=value2)

键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串、数字或元组。示例如下所示:1.2.3 元组

元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。元组的创建方式很简单,只需要在括号中添加元素,并使用逗号隔开即可。示例如下所示:1.3 控制语句与函数编写1.3.1 控制语句

Python 语句与 R、C++语言类似,其控制流语句同样包括条件、顺序和循环等。我们可以利用这些语句控制数据分析的流向。与其他语言不同的是,控制流语句是以“:”和缩进来识别与运行代码块的(见表1-3-1)。

我们最常见的就是if条件语句。条件语句可以使程序按照一定的表达式或条件,实现不同的操作或执行顺序跳转的功能。其条件最基本的检查包括等于(=)、小于(<;)、小于或等于(<;=)、大于(>;)、大于或等于(>;=)和不等于(!=)。在Python中可以将产生一个值的if…else语句写到一行或一个表达式(三元表达式)中,以下为两种不同形式的三元表达式:

for循环可以对任何有序的序列对象(如字符串、列表、元组、字典等)或迭代器做循环和迭代处理。其中,range()函数可以产生一组间隔相等的整数序列,可以指定起始值、终止值与步长,常用于for循环。

while循环可以对任何对象进行循环处理,只要条件不为false或者循环没有被终止(break),其代码块就一直不断地执行。如果while循环中有else语句,则else语句会在循环正常结束之后执行。

在for和while循环中,用户还可以使用特定的语句对循环进行中止(continue)、终止(break)等控制。常用的有如下两种。

● break:结束或终止循环;

● continue:中止当前循环,调到下一次循环的开始。表1-3-1 控制语句

推导式(comprehensions)是一种将for循环、if表达式以及复制语句放到单一语句中产生序列的方法,主要有列表推导式、集合推导式、字典推导式等。其中列表推导式只需要一条表达式就能非常简洁地构造一个新列表,其基本形式如下:

● [执行语句 for value in 集合] #使用执行语句生产列表

● [执行语句 for value in 集合 if 条件] #根据一定条件生产列表

例如:1.3.2 函数编写

函数(function)是Python中最重要,也是最主要的代码组织与重复使用的方法。Python本身内置许多函数,如 range()函数,也可以通过导入包或者模块的方法调用函数,另外也可以灵活地自定义函数。默认情况下,实参与形参是按函数声明中定义的顺序匹配的。调用函数时可以使用的正式参数类型主要有必备参数、命名参数、缺省参数、不定参数等。其中,必备参数要以正确的顺序把参数传递给函数,调用时的数量必须和声明时的一样;命名参数以参数的命名来确定传递的参数值,可以跳过不传的参数或乱序传递参数。

匿名函数(lambda)仅由单条语句组成,该语句执行的结果就是返回值。其省略了用def定义函数的标准步骤,没有名称属性。其一般形式如表1-3-2所示。

lambda函数能接收任何数量的参数,但是只能返回一个表达式的数值,不能同时包含命令或者多个表达式。调用函数时不占用栈内存,从而增加运行效率。

内置函数是Python内置的一系列常用函数,无须导入包或者模块即可直接使用(见表1-3-2)。Python有3个常用的内置函数,可以实现序列的遍历与处理,提高数据分析的效率,如filter()、map()和reduce()函数。filter()函数的功能相当于滤波器,调用一个布尔函数遍历序列中的每个元素,返回一个能够使布尔函数数值为ture的元素的序列。map()函数可以指定函数作用于给定序列的每个元素,并用一个列表来提供返回值。reduce()函数作为参数的 func函数为二元函数,将 func函数作用于序列的元素,连续将现有结果和下一个元素作用在随后的结构上,最后将简化的序列作为一个单一返回值(注意:Python 3已经移除reduce()函数,放入functools模块:from functools import reduce)。表1-3-2 Python函数的常用方法第2章 数据处理基础2.1 NumPy:数值运算

NumPy是Numerical Python的简称,是高性能计算和数据分析的基础包。ndarray是NumPy的核心功能,其含义为n-dimensional array,即多维数组。数组与列表之间的主要区别为:数组是同类的,即数组的所有元素必须具有相同的类型;相反,列表可以包含任意类型的元素。使用NumPy的函数可以快速创建数组,远比使用基本库的函数节省运算时间。NumPy在使用前需要导入,约定俗成的导入方法为:2.1.1 数组的创建

数组(ndarray)由实际数据和描述这些数据的元素组成,可以使用*.shape查看数组的形状,使用*.dim查看数组的维数。而向量(vector)即一维数组,也是最常用的数组之一。通过NumPy的函数创建一维向量与二维数组常用的方法如表2-1-1所示。数组可由列表构造,也可以通过*.tolist方法转换列表。表2-1-1 数组array的创建

NumPy支持的数据类型有:bool(布尔)、int8(-128~127的整数)、int16、int32、int64、uint8(0~255的无符号整数)、uint16、uint32、uint64、float16(5位指数10位尾数的半精度浮点数)、float32、float64等。可以使用*.astype()函数实现对数组数据类型的转换。2.1.2 数组的索引与变换

Python数组的索引与切片使用中括号“[]”选定下标来实现,同时采用“:”分割起始位置与间隔,用“,”表示不同维度,用“…”表示遍历剩下的维度(见表2-1-2)。使用reshape()函数可以构造一个3行2列的二维数组:表2-1-2 数组的索引与变换

其中,NumPy的ravel()和flatten()函数所要实现的功能是一致的,都是将多维数组降为一维数组。两者的区别在于返回拷贝(copy)还是返回视图(view),numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响原始矩阵,而numpy.ravel()返回的是视图,会影响原始矩阵。

数组的排序也尤为重要。NumPy提供了多种排序函数,比如sort(直接返回排序后的数组)、argsot (返回数组排序后的下标)、lexsort(根据键值的字典序排序)、msort(沿着第一个轴排序)、sort_complex (对复数按照先实后虚的顺序排序)等。具体如表2-1-3所示。表2-1-3 数组的排序2.1.3 数组的组合

NumPy数组的组合可以分为:水平组合(hstack)、垂直组合(vstack)、深度组合(dstack)、列组合(colume_stack)、行组合(row_stack)等(见表 2-1-4)。其中,水平组合就是把所有参加组合的数组拼接起来,各数组行数应该相等,对于二维数组,列组合和水平组合的效果相同。垂直组合就是把所有组合的数据追加在一起,各数组列数应该一样,对于二维数组,行组合和垂直组合的效果一样。表2-1-4 数组的组合续表2.1.4 数组的统计函数

有时候,我们需要对数组进行简单的统计分析,包括数组的均值、中值、方差、标准差、最大值、最小值等。图2-1-1所示为3种不同数据分布的统计直方图分析:均值(红色实线)、中值(蓝色实线)、最大值(桔色圆圈)、最小值(绿色圆圈)。NumPy的简单统计函数如表2-1-5所示。示例数据:ary=np.arange(6),则数组ary为array([0,1,2,3,4,5])。图2-1-1 不同数据分布的统计直方图分析:均值、中值、最大值、最小值表2-1-5 简单统计函数续表2.2 Pandas:表格处理

Pandas提供了3种数据类型,分别是Series、DataFrame和Panel。其中,Series用于保存一维数据,DataFrame 用于保存二维数据,Panel 用于保存三维或者可变维数据,其提供的数据结构使得Python做数据处理变得非常快速与简单。平常的数据分析最常用的数据类型为Series和DataFrame,而Panel较少用到。在Python中调用Pandas往往使用如下约定俗成的方式:2.2.1 Series数据结构

Series本质上是一个含有索引的一维数组,看起来,其包含一个左侧可以自动生成(也可以手动指定)的index和右侧的values值,分别使用 s.index s.values 进行查看。index返回一个index对象,而values则返回一个array(见表2-2-1)。

Series就是一个带有索引的列表,为什么我们不使用字典呢?一个优势是,Series更快,其内部是向量化运行的,和迭代相比,使用Series可以获得显著的性能上的优势。表2-2-1 Series的创建与属性2.2.2 数据结构:DataFrame

DataFrame(数据框)类似于Excel电子表格,也与R语言中DataFrame的数据结构类似。创建类DataFrame实例对象的方式有很多,包括如下几种(见表2-2-2)。

● 使用list或者ndarray对象创建DataFrame:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载