Python数据可视化编程实战(第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-19 14:43:09

点击下载

作者:(爱尔兰) 伊戈尔·米洛瓦诺维奇(Igor Milovanovi) (法)迪米特里·富雷斯(Dimitry Foures) (意大利)朱塞佩·韦蒂格利(Giuseppe Vettigli)

出版社:人民邮电出版社

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

Python数据可视化编程实战(第2版)

Python数据可视化编程实战(第2版)试读:

前言

最好的数据是我们能看到并理解的数据。作为开发人员和数据科学家,我们希望可以创造并构建出最全面且容易理解的可视化图形。然而这并非易事,我们需要找到数据,对它读取、清理、过滤,然后使用恰当的工具将其可视化。本书通过直接和简单(有时不那么简单)的方法解释了进行数据读取、清理以及可视化的流程。

本书涉及如何读取本地数据、远程数据、CSV、JSON以及关系型数据库中的数据。

通过matplotlib,我们能用一行简单的Python代码绘制出一些简单的图表,但是进行更高级的绘图还需要Python之外的其他知识。我们需要理解信息理论和人类的审美学来生成最吸引人的可视化效果。

本书将介绍在Python中使用matplotlib绘图的一些实战练习,以及不同图表特性的使用情况及其用法示例。本书涵盖内容

第1章,准备工作环境,包括一些安装方法,以及如何在不同平台上安装所需的Python包和库的一些建议。

第2章,了解数据,介绍通用的数据格式,以及如何进行读写,读写的格式如CSV、JSON、XSL或者关系型数据库。

第3章,绘制并定制化图表,着手绘制简单的图表并涉及一些图表定制化的内容。

第4章,学习更多图表和定制化,继续上一章内容,介绍更多的高级表格和网格定制化。

第5章,创建3D可视化图表,介绍三维数据的可视化,如3D柱状图、3D直方图,以及matplotlib动画。

第6章,用图像和地图绘制图表,涵盖图像处理、在地图上投射数据以及创建CAPTCHA测试图像。

第7章,使用正确的图表理解数据,涵盖一些更高级的绘图技术的讲解和实战练习,如频谱图和相关性图形。

第8章,更多的matplotlib知识,介绍一些图表如甘特图、箱线图,并且介绍如何在matplotlib中使用LaTeX渲染文本。

第9章,使用Plot.ly进行云端可视化,介绍如何使用Plot.ly在云端环境中创建和分享可视化图形。准备工作

学习本书时,你需要在自己的操作系统上安装Python 2.7.3或更高版本。

本书用到的另一个软件包是IPython,它是一个交互式的Python环境,功能非常强大、灵活。你可以通过基于Linux平台的包管理工具或者用于Windows和Mac OS系统的预安装文件安装它。

一般来说,如果你对Python的安装和相关软件的安装不熟悉,那么强烈推荐你使用预打包的Python科学发行包,如Anaconda、Enthought Python发行包或者Python(x,y)进行安装。

其他所需的软件主要是一些Python安装包,读者可全部通过Python安装管理器pip进行安装。pip本身通过Python的easy_install安装工具安装。本书适合的读者

本书是为那些已经了解Python编程,并想学习如何使用实用的方法对手头的数据进行可视化的开发人员和数据科学家编写的。如果你对数据可视化有所耳闻,但却不知道从何着手,本书将会从头开始指导你如何了解数据、数据格式、数据可视化,以及如何使用Python可视化数据。

你需要知道一些一般的编程概念,如果你有编程经验会非常有帮助。本书中的代码几乎是逐行讲解的。阅读本书不需要任何数学知识,书中介绍的每一个概念都有详细的讲解。此外,本书还提供了一些参考资料,以供有兴趣的人员进一步阅读。章节

在本书中,你会发现几个频繁出现的标题(准备工作、操作步骤、工作原理、补充说明、另请参阅)。

为了清楚地说明如何完成一个实战练习,我们包括以下几个小节。准备工作

本节告诉你练习要达到的目的,以及完成练习所需的软件或其他准备工作。操作步骤

本节包括练习中需要遵循的步骤。工作原理

本节通常是对上节提到的内容进行详细的讲解。补充说明

本节包括了一些练习相关的附加内容,以帮助读者对该练习有更深入的了解。另请参阅

本节提供了练习相关的更多有用的信息。体例约定

在本书中,不同的信息由一些不同体例的文本来区分。这里有一些文本体例的例子以及它们的含义解释。

书中的代码文字、数据库表名、文件夹名称、文件名、文件扩展名、路径名、模拟URL、用户输入和Twitter用户名的显示格式如下:“我们把小演示程序封装在DemoPIL类中,这样可以共享示例函数run_fixed_filters_demo的代码,并能很容易地对其进行扩展。”

代码块设置如下:def _load_image(self, imfile): self.im = mplimage.imread(imfile)

当我们想要让你关注代码块中的某一特定部分时,相关的行或元素将设置为粗体:for a in range(10): print a

所有的命令行输入或者输出的写法如下:$ sudo python setup.py install

  警告或者重要的说明出现在这样的一个文本框中。

  表示提示和技巧。读者反馈

我们欢迎读者的反馈意见。如果对本书有任何的想法,喜欢或者不喜欢哪些内容,都可以告诉我们。这些反馈意见对于帮助我们创作出对大家真正有所帮助的作品至关重要。

你可以将一般的反馈以电子邮件的形式发送到feedback@packtpub.com,并在邮件主题中包含书名。

如果你在某一方面很有造诣,并且愿意著书或参与合著,可以参考我们的作者指南。第1章 准备工作环境

本章包含以下内容。● 安装matplotlib、NumPy和SciPy库。● 安装virtualenv和virtualenvwrapper。● 在Mac OS X上安装matplotlib。● 在Windows上安装matplotlib。● 安装Python图像处理库(Python Imaging Library,PIL)。● 安装requests模块。● 通过代码设置matplotlib的参数。● 为项目设置matplotlib的参数。1.1 介绍

本章介绍一些必备的工具类库,以及如何进行安装与配置。本章是后面章节的基础,掌握这部分内容十分必要。建议那些没有使用过Python进行数据处理、图像处理以及数据可视化经验的读者不要跳过本章。如果跳过,可以在需要安装配套工具软件或需要确定工程所支持的软件版本时,再返回本章阅读相关内容。1.2 安装matplotlib、Numpy和Scipy库

本章介绍了matplotlib及其依赖的软件在Linux平台上的几种安装方法。1.2.1 准备工作

这里假设你已经安装了Linux系统并且已安装好Python(推荐使用Debian/Ubuntu或RedHat/SciLinux)。在上面这些提到的Linux系统发行版中,Python通常是已经默认安装了的。如果没有,也可以使用标准的软件安装方式非常方便地进行安装。本书假设你安装的Python版本为2.7或以上。 几乎所有的代码均可在Python 3.3及以上版本的环境下工作,但是因为大部分操作系统提供的Python版本仍然是2.7(甚至是2.6),本书代码基于Python 2.7版本。这种Python版本间的区别并不大,主要是在软件包版本和部分代码上存在差别(在Python3.3以上版本,请用range方法替换xrange方法)。

本书也假设读者知道如何使用操作系统的软件包管理工具进行软件包的安装,并且知道如何使用命令行终端。

构建matplotlib运行环境,需要满足相关软件依赖。

Matplotlib的构建过程依赖NumPy、libpng和freetype软件包。要从源代码构建matplotlib,必须先要安装好NumPy库。读者可以访问其官网了解安装NumPy库的方法(请安装1.4或以上版本,Python 3需要NumPy 1.5或以上版本)。

NumPy库提供处理大数据集的数据结构和数学方法。诸如元组、列表或字典等Python的默认数据结构同样可以很好地支持数据的插入、删除和连接。NumPy 的数据结构支持 “矢量”操作,使用简便,同时具有很高的执行效率。矢量操作在实现时充分考虑了大数据的需要,基于C语言的实现方式也保证了执行效率。 基于NumPy构建的SciPy库,是Python的标准科学计算和数学计算工具包,包含了大量的专用函数和算法。而大部分函数和算法源自著名的Netlib软件仓库(参见其官网),但实际上是使用C语言和Fortran语言实现的。

安装NumPy库的步骤如下。(1)安装Python-NumPy软件包。sudo apt-get install python-numpy(2)检查软件包版本。$ python -c 'import numpy; print numpy.__version__'(3)安装所需的库。● libpng 1.2:PNG文件处理(依赖zlib库)。● freetype 1.4+:处理True type字体。$ sudo apt-get build-dep python-matplotlib

如果你使用的操作系统是RedHat或基于RedHat的Linux发行版(Fedora、SciLinux或Centos),可以使用yum工具进行安装,方法与apt-get工具类似。$ su -c 'yum-builddep python-matplotlib'1.2.2 操作步骤

安装matplotlib及其依赖软件的方法有很多:从源代码安装、使用预编译完成的二进制文件安装、通过操作系统软件包管理工具安装,或安装内置了matplotlib的python预打包发布版本。

使用包管理工具大概是最简单的安装方式。例如在Ubuntu系统中,在命令行终端中输入以下命令:# in your terminal, type:$ sudo apt-get install python-numpy python-matplotlib python-scipy

如果读者期望使用matplotlib的最新特性,最佳选择是通过源代码进行安装。安装方式包含以下步骤:获取源代码、构建依赖库和参数配置、编译以及安装。

从代码托管站点SourceForge下载最新代码进行安装,操作步骤如下。$ cd ~/Downloads/$ wget https://downloads.sourceforge.net/project/matplotlib/matplotlib/[1]matplotlib-1.4.3/matplotlib-1.4.3.tar.gz$ tar xzf matplotlib-1.4.3.tar.gz$ cd matplotlib-1.4.3$ python setup.py build$ sudo python setup.py install 下载示例代码 如果你是在Packt官网上购买图书,你可以在网站上下载你所购所有图书的示例代码文件。如果你是在其他地方购得本书,可以访问官网进行注册,代码文件会通过电子邮件直接发送给你,你也可以在异步社区www.epubit.com上下载。1.2.3 工作原理

这里我们使用标准的Python发布工具Distutils以从源代码安装matplotlib。安装过程需要提前安装依赖的软件包。关于使用标准Linux包管理工具安装依赖软件的具体方法,可参考1.2.1节。1.2.4 补充说明

针对不同的数据可视化项目,你可能需要安装一些额外的可选软件包。

无论在什么项目上工作,我们都推荐你安装IPython。IPython是一款交互式Python命令行工具,它已经提供了matplotlib库及其相关软件包(例如NumPy和SciPy),你可以直接使用。IPython工具的安装与使用方法十分简单明了,读者可通过 IPython的官方网站查看相关细节。1.3 安装virtualenv和virtualenvwrapper

如果同时在多个项目上工作,或是需要在不同项目间频繁切换,你会发现将所有的软件都安装在操作系统层级上不是一个最佳选择。因为当需要在不同系统(产品环境)上运行软件时,这种方式会带来问题。如果此时才发现缺少特定的软件包,或是产品环境中已经安装的软件包存在版本冲突,将是非常痛苦的。为避免这种情况发生,可以选择使用virtualenv。

virtualenv是由Ian Bicking创建的开源项目。通过这个项目,开发人员可以把不同项目的工作环境隔离开,从而能够更容易地维护多种不同的软件包版本。

举例来说,有一个遗留Django网站系统是基于Django 1.1和 Python 2.3版本开发的,但与此同时,一个新项目要求必须基于Python2.6来开发。在我工作过的项目中,根据项目的需要同时使用多个版本的Python(以及相关软件包)的情况非常普遍。

virtualenv能够让我们很容易地在不同的运行环境之间切换。如果需要切换到另外的机器或者需要在产品服务器(或客户的工作站主机)上部署软件, 用virtualenv能够很容易地重新构建出相同的软件包环境。1.3.1 准备工作

安装virtualenv需要用到Python和pip。pip是Python软件包的安装和管理工具,它是easy_install的替代工具。本书中大部分的软件包都是用pip工具进行管理的。只需在终端中以root身份执行如下命令,就可以很容易地完成pip的安装:# easy_install pip

virtualenv本身已经相当不错了,然而如果配合virtualenvwrapper,一切会变得更加简单,并且组织多个虚拟环境的工作也会更加容易。virtualenvwrapper的功能特性请参考其官网。1.3.2 操作步骤

安装virtualenv和virtualenvwrapper工具的步骤如下。(1)安装virtualenv和virtualenvwrapper。$ sudo pip install virtualenv$ sudo pip install virtualenvwrapper# 创建保存虚拟环境的目录,并使用export导出为环境变量。$ export VIRTENV=~/.virtualenvs$ mkdir -p $VIRTENV# 使用source命令调用(执行)shell脚本来激活它。$ source /usr/local/bin/virtualenvwrapper.sh# 创建一个虚拟环境$ mkvirtualenv virt1(2)在创建的virt1环境中安装matplotlib。(virt1)user1:~$ pip install matplotlib(3)最好把以下代码添加到~/.bashrc中。source /usr/local/bin/virtualenvwrapper.sh

下面是一些有用的频繁使用的命令。● mkvirtualenv ENV:创建名为ENV的虚拟环境并激活。● workon ENV:激活先前创建的ENV虚拟环境。● deactivate:退出当前虚拟环境。

pip不但提供了安装软件包的方法,而且可以记录操作系统上安装的Python软件包及版本。命令pip freeze能打印出当前环境所安装的软件包和版本号。$ pip freezematplotlib==1.4.3mock==1.0.1nose==1.3.6numpy==1.9.2pyparsing==2.0.3python-dateutil==2.4.2pytz==2015.2six==1.9.0wsgiref==0.1.2

我们看到,即使我们只安装了matplotlib,仍然有许多其他软件包被安装到系统中。除去pip本身依赖的wsgiref,其他的都是matplotlib依赖的软件包,它们随着matplotlib被自动安装进来。

当把项目从一个环境(很有可能是一个虚拟环境)迁移到另一个环境中时,目标环境同样需要安装所有必须的软件包(和源环境相同版本),来保证代码能正常运行。如果两个不同的环境包含不同的软件包、甚至是相同软件包的不同版本,是非常容易出问题的。这会导致程序执行过程中的冲突或者无法预期的行为。

为了避免这个问题,pip freeze可以用来保存一份当前环境配置的复制文件。以下命令会把命令的结果保存到requirements.txt文件中:$ pip freeze > requirements.txt

这个文件可以用来在新环境上安装所有必需的库:$ pip install –r requirements.txt

运行以上命令,所有必需的软件包的指定版本会被自动安装到系统中。这样我们就确保了代码运行的环境始终是一致的。为每一个开发项目创建一个虚拟环境和一个requirements.txt文件是一个非常好的实践。因此建议读者在安装软件包前先创建一个新的虚拟环境,以避免和其他项目发生冲突。

下面是从一个机器迁移到另一个机器的全部流程。● 在机器1上:$ mkvirtualenv env1(env1)$ pip install matplotlib(env1)$ pip freeze > requirements.txt● 在机器2上:$ mkvirtualenv env2(env2)$ pip install -r requirements.txt1.4 在Mac OS X上安装matplotlib

在Mac OS X上获取matplotlib最简便的方式是使用预打包的python发布版本,例如Enthought Python Distribution(EPD)。读者可以直接访问EPD网站,下载并安装操作系统对应的最新稳定版。

倘若EPD软件不满足要求,或者因为其他一些原因(如版本问题)而无法使用,也可以用手动(麻烦点)的方式安装Python、matplotlib和其依赖软件。1.4.1 准备工作

对于Apple没有在操作系统中预装的软件,包括Python和matplotlib,Homebrew(或者MacPorts)项目可以使其安装过程变得很容易。实际上,Homebrew是基于Ruby和Git的,可以被自动下载和安装。软件安装顺序为:首先安装Homebrew,之后安装Python,随后安装诸如virtualenv的工具软件,接下来安装matplotlib的依赖(NumPy和SciPy),最后安装matplotlib。接下来就开始吧。1.4.2 操作步骤(1)在终端中输入并执行下面的命令。ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

命令执行完成后,试着运行brew update 或brew doctor命令来检查brew是否能够正常工作。(2)然后,将Homebrew目录添加到系统path环境变量中。这样,使用Homebrew安装的软件包能够获得比其他版本更高的优先级。打开~/.bash_profile文件(或者/Users/[your-user-name]/.bash_profile)并在文件末尾添加以下代码。export PATH=/usr/local/bin:$PATH(3)重新启动命令行终端使其加载新的path环境变量。之后,以下这行简单的代码就可以完成Python的安装。brew install python --framework –universal

本命令同时也将安装Python所需的其他软件。(4)更新path环境变量(添加到同一行)。export PATH=/usr/local/share/python:/usr/local/bin:$PATH(5)在命令行输入python –version,检查python是否安装成功。

正常的话,会看到Python版本信息为2.7.3。(6)pip应该也已经安装完毕。如果还没有,可使用easy_install安装pip。$ easy_install pip(7)这时,任何所需软件包的安装过程就变得非常简单了。例如,安装virtualenv和virtualenvwrapper:pip install virtualenvpip install virtualenvwrapper(8)是时候向一直以来的目标迈进了——安装matplotlib。pip install numpybrew install gfortranpip install scipy(9)检查安装是否成功,启动Python并执行以下命令。import numpyprint numpy.__version__import scipyprint scipy.__version__quit()(10)安装matplotlib。pip install matplotlib1.5 在Windows上安装matplotlib

在本节中,我们将演示如何安装Python和matplotlib。这里假设系统中没有预先安装Python。1.5.1 准备工作

在Windows上安装matplotlib有两种方式。最简单的方式是安装预打包的Python环境,如EPD、Anaconda、SageMath和Python(x,y)。这也是本书推荐的安装方式,尤其对于初学者来说。第二种方式是使用预编译的二进制文件来安装matplotlib和依赖软件包。这里需要注意安装的NumPy和SciPy的版本,因为并非所有的版本都与最新版matplotlib二进制文件相互兼容,这势必会给整个安装过程带来一些困难。这种安装方法也有自身的优势,如果想要获取最新功能,即使功能还未正式发布,仍然能够通过编译matplotlib或某软件库的某个特定版本来使用它。1.5.2 操作步骤

要安装免费或商业Python科学发布版,按照其项目网站上提供的步骤可以很容易安装成功,这也是推荐使用的安装方式。

如果单纯使用matplotlib,不期望被Python和依赖软件包版本所困扰,可以考虑使用Enthought Python Distribution(EPD)发布版。使用matplotlib所需的预打包库和所有必须的依赖软件(SciPy、NumPy、IPython以及其他)均已包含在EPD发布版中。

通常,先下载安装Windows Installer安装文件(*.exe),然后就可以使用matplotlib来做本书中的练习了。

Python(x,y)是针对Windows 32位系统的免费科学计算项目,其中包含了matplotlib需要使用的依赖文件,它是在Windows系统上安装matplotlib的一种非常简单(而且是免费的)的方式。因为Python(x,y)和Python模块安装器相互兼容,所以可以很容易地在Python (x,y)基础上扩展安装其他Python库。在安装Python(x,y)之前请确保系统没有安装Python。

下面简短地说明一下如何使用预编译的Python、NumPy、SciPy和matplotlib二进制文件进行matplotlib的安装。(1)首先,下载官方的.msi安装文件安装对应平台(x86或x86-64)的标准Python程序。(2)然后,下载并安装NumPy和SciPy的官方二进制文件。(3)在正确安装NumPy和SciPy之后,下载最新稳定版matplotlib二进制安装文件,并按照官方说明进行安装。1.5.3 补充说明

请注意,在Windows安装文件中matplotlib的示例相当有限。如果想尝试使用示例程序,可以下载并参考matplotlib源文件包中的examples子目录。1.6 安装图像处理工具:Python图像库(PIL)

Python图像库(PIL)为Python提供了图像处理能力。PIL支持的文件格式相当广泛,在图像处理领域提供了相当强大的功能。

快速数据访问、点运算(point operations)、滤波(filtering)、图像缩放、旋转、任意仿射转换(arbitrary affine transforms)是PIL中一些应用非常广泛的特性。例如,图像的统计数据即可通过histogram方法获得。

PIL 同样可以应用在其他方面,如批量处理、图像压缩、缩略图生成、图像格式转换以及图像打印。

PIL 可以读取多种图像格式,而图像写入支持的格式范围限定在图像交换和展示方面最通用的格式(有意为之)。1.6.1 操作步骤

最容易也是最值得推荐的方式,是通过操作系统平台的包管理工具进行安装。

在Debian/Ubuntu系统中安装的命令如下。$ sudo apt-get build-dep python-imaging$ sudo pip install http://effbot.org/downloads/Imaging-1.1.7.tar.gz1.6.2 安装过程说明

我们通过apt-get系统工具安装PIL所需的所有依赖软件,并通过pip安装PIL的最新稳定版本。一些老版本的Ubuntu系统通常没有提供PIL的最新发布版本。

在RedHat/SciLinux系统中,安装命令如下。# yum install python-imaging# yum install freetype-devel# pip install PIL1.6.3 补充说明

有一个专门针对PIL编写的在线手册。读者可以访问其官网进行阅读,或是下载PDF版本。

Pillow是PIL的一个分支,其主要目的是解决安装过程中的一些问题。Pillow很容易安装(在写作本书期间,Pillow是OS X系统上的唯一选择)。

在Windows平台上,可使用二进制安装文件安装PIL。下载.exe安装文件,执行该文件将安装PIL到Python的site-packages目录。

如果需要在虚拟环境下使用PIL,可手动将PIL.pth文件和位于C:\Python27\Lib\site-packages下的PIL目录复制到virtualenv的site-packages目录下。1.7 安装requests模块

我们需要的大部分数据都可以通过HTTP或类似协议获得,因此我们需要一些工具来实现数据访问。Python的requests库能让这部分工作变得轻松起来。

虽然Python提供的urllib2模块提供了访问远程资源的能力以及对HTTP协议的支持,但使用该模块完成一些基本任务的工作量还是很大的。

requests模块提供新的API,减轻了使用web服务的痛苦,使其变得更直接。requests封装了很多HTTP 1.1的内容,仅在需要实现非默认行为时才暴露相关内容。1.7.1 操作步骤

安装requests模块最好的方式是使用pip,安装命令如下。$ pip install requests

如果并不是所有项目都需要requests,或是不同的项目需要使用不同版本的requests,也可以在virtualenv虚拟环境中执行该安装命令。

为了让读者很快地熟悉requests的功能,下面给出一个使用requests的小例子。import requestsr = requests.get('http://github.com/timeline.json')print r.content1.7.2 requests使用说明

在本例中,我们向GitHub站点的URI发送HTTP GET请求,以JSON格式返回了GitHub网站的活动时间表(也可以通过访问官网得到HTML版本的活动时间表)。在成功读取HTTP响应后,对象r包含了HTTP响应内容以及其他属性信息(HTTP状态码、cookies、HTTP头元数据,甚至包括当前响应所对应的请求信息)。1.8 在代码中配置matplotlib参数

matplotlib库提供了强大的绘图功能,是本书使用最多的Python库。在其配置文件即.rc文件中,已经为大部分属性设定了默认值。本节会介绍如何通过应用程序代码修改matplotlib的相关属性值。1.8.1 准备工作

如前所述,matplotlib配置信息是从配置文件读取的。在配置文件中可以为matplotlib的几乎所有的属性指定永久有效的默认值。1.8.2 操作步骤

在代码执行过程中,有两种方式可以更改运行参数:使用参数字典(rcParams)或调用matplotlib.rc()命令。在第一种方式中,我们可以通过rcParams字典访问并修改所有已经加载的配置项;在第二种方式中,我们可以通过向matlotlib.rc()传入属性的关键字元组来修改配置项。

如果需要重置动态修改后的配置参数,可以调用matplotlib.rcdefaults()将配置重置为标准设置。

下面两段代码演示了上面介绍的方式。● 使用matplotlib.rcParams的例子。import matplotlib as mp1mpl.rcParams['lines.linewidth'] = 2mpl.rcParams['lines.color'] = 'r'● 使用matplotlib.rc()函数调用的例子。import matplotlib as mplmpl.rc('lines', linewidth=2, color='r')

上面两个例子具有相同的语义。第二个例子中,我们设定后续的所有图形使用的线条宽度为2个点。第一个例子中的最后一条语句表明,除非用本地设置覆盖它,否则该语句之后的所有线条的颜色均为红色。请看下面的例子。import matplotlib.pyplot as pltimport numpy as npt = np.arange(0.0, 1.0, 0.01)s = np.sin(2 * np.pi * t)# 设置线条颜色为红色plt.rcParams['lines.color'] = 'r'plt.plot(t,s)c = np.cos(2 * np.pi * t)# 设置线宽plt.rcParams['lines.linewidth'] = '3'plt.plot(t,c)plt.show() 1.8.3 代码解析

首先,为了绘制正弦和余弦曲线,我们导入了matplotlib.pyplot和NumPy模块。在绘制第一个图像之前,通过plt.rcParams['lines.color']= 'r'语句显式地设置线条颜色为红色。接下来,对于第二个图像(余弦曲线),通过语句plt.rcParams ['lines.linewidth'] = '3'显式地设定线宽为3个点。

调用matplotlib.rcdefaults()方法可以重置该设置。

在本节中,我们看到如何通过动态改变配置参数来改变matplotlib图表的风格。matplotlib.rcParams对象是我们修改参数的接口,对于matplotlib它是全局的对象,任何对它的改变都会影响接下来绘制的所有图表。1.9 为项目设置matplotlib参数

本节介绍matplotlib使用的各种配置文件的位置,以及这些配置文件的意义,同时还将介绍配置文件中的具体配置项。1.9.1 准备工作

如果不想在每次使用matplotlib时都在代码开始部分进行配置(像1.8节我们做的那样),就需要为不同的项目设定不同的默认配置项。本节将介绍如何做到这一点。这种配置方式使得配置项与代码分离,从而使代码更加整洁。此外,你可以很容易在同事间甚至项目间分享配置模板。1.9.2 操作步骤

如果一个项目中对于matplotlib的特性参数总会设置相同的值,就没有必要在每次编写新的绘图代码时都进行相同的配置。取而代之的,应该是在代码之外,使用一个永久的文件设定matplotlib参数默认值。

通过matplotlibrc 配置文件,matplotlib提供了对这种配置方式的支持。在matplotlibrc文件中包含了绝大部分可以变更的属性。1.9.3 配置过程说明

配置文件可能存在于3个不同的位置,而它们的位置决定了它们的应用范围。这3个位置说明分别如下。● 当前工作目录:即代码运行的目录。在当前目录下,可以为目录

所包含的当前项目代码定制matplotlib配置项。配置文件的文件

名是matplotlibrc。● 用户级.matplotlib/matplotlibrc文件:通常是在用户的$HOME目录

下(在Windows系统中,也就是Documents and Settings目录)。

可以用matplotlib.get_configdir()命令来找到当前用户的配置文件

目录。请参考随后的命令示例。● 安装级配置文件:通常在python的site-packages目录下。这是系

统级配置,不过在每次重新安装matplotlib后,配置文件会被覆

盖。因此如果希望保持持久有效的配置,最好选择在用户级配置

文件中进行设置。对于笔者来说,目前对本配置文件的最佳应用

方式是将其作为默认配置模板。如果在用户级配置文件比较混乱,

或者需要为新项目做全新配置时,可以基于该配置文件进行设

置。

在shell中运行下面的命令,即可打印出配置文件目录的位置:$ python -c 'import matplotlib as mpl; print mpl.get_configdir()'

配置文件包括以下配置项。● axes:设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的

显示。● backend:设置目标输出TkAgg和GTKAgg。● figure:控制DPI(像素/英寸)、边界颜色、图形大小和子区(subplot)设置。● font:字体集(font family)、字体大小和样式设置。● grid:设置网格颜色和线型。● legend:设置图例和其中文本的显示。● lines:设置线条(颜色、线型、宽度等)和标记。● patch:是填充2D空间的图形对象,如多边形和圆。控制线宽、

颜色和抗锯齿设置等。● savefig:可以对保存的图形进行单独设置。例如,设置渲染的文

件的背景为白色。● text:设置字体颜色、文本解析(纯文本或latex标记)等。● verbose:设置matplotlib在执行期间信息输出,如silent、

helpful、debug和debug-annoying。● xticks和yticks:为x、y轴的主刻度和次刻度设置颜色、大小、方

向,以及标签大小。1.9.4 补充说明

如果你想了解前面提到的(和我们没有提到的)每个设置的详细信息,最好的方式是访问matplotlib项目的网站,那里提供了最新的API文档。如果需要获得进一步帮助,可以在用户和开发邮件组留言。本书最后也提供了一些有用的在线资源。[1] 作者给出的是1.3.1版本下载地址,应为作者笔误。此外,版本1.4.3是作者成书时的最新版本。 ——译者注第2章 了解数据

本章包含以下内容。● 从CSV文件导入数据。● 从Microsoft Excel文件导入数据。● 从定宽数据文件导入数据。● 从制表符分隔的文件导入数据。● 从JSON数据源导入数据。● 导出数据到JSON、CSV和Excel。● 用Pandas导入和操作数据。● 从数据库导入数据。● 清理异常值。● 读取大块数据文件。● 读取流数据源。● 导入图像数据到NumPy数组。● 生成可控的随机数据集合。● 真实数据的噪声平滑处理。2.1 简介

本章涵盖了导入和导出各种格式数据的基本知识。我们首先介绍如何仅通过Python标准库导入数据,然后介绍强大的Pandas库,后者已经是在Python中进行数据操作的事实标准库。除此之外,本章还会涵盖几种清理数据的方式,比如值的归一化处理、缺失数据的添加、实时数据检查以及一些类似的技巧,来为可视化准备正确的数据。2.2 从CSV文件导入数据

在本节中,我们将处理每个人都能接触到的最常用的文件格式[1]——CSV。CSV是指逗号分隔的值(文件中还包括一个文件头,也是以逗号分隔的)。

Python中有个csv模块支持读写各种方言格式的CSV文件。熟悉方言是很重要的,因为没有一个统一的CSV标准,不同的应用实现CSV的方式略有不同。当看到文件内容的时候,往往就能很容易地辨认出文件使用的是哪种方言。2.2.1 准备工作

在本节中,我们把ch02-data.csv文件的内容用作示例数据,你可以把它下载到本地。

我们假定示例数据文件和读取数据文件的代码在相同目录下。2.2.2 操作步骤

下面的示例代码解释了如何从CSV文件导入数据,步骤如下。(1)打开ch02-data.csv文件。(2)首先读取文件头。(3)然后读取剩余行。(4)当发生错误时抛出异常。(5)读取完所有内容后,打印文件头和其余所有行。

代码如下:import csvfilename = 'ch02-data.csv'data = [] try: with open(filename) as f: reader = csv.reader(f) header = reader.next() data = [row for row in reader]except csv.Error as e: print "Error reading CSV file at line %s: %s" % (reader.line_num, e) sys.exit(-1)if header: print header print '=================='for datarow in data: print datarow2.2.3 工作原理

首先,导入csv模块以便能访问所需的方法。然后,用with语句打开数据文件并把它绑定到对象f。不必操心在操作完资源后去关闭数据文件,因为with语句的上下文管理器会帮助处理。这在操作资源型文件时非常方便,因为它能确保在代码块执行完毕后资源会被释放掉(比如关闭文件)。

然后,用csv.reader()方法返回reader对象,通过该对象遍历所读取文件的所有行。在这里,每行内容不过是一个值列表,在循环中被打印出来。

文件的第一行是文件头,用来描述文件中每列的数据,在读取时多少有些不同。文件头并不是必需的,有些CSV文件就不带文件头,但是它们确实是提供数据集合的最小元数据信息的一个不错的方式。然而,有时候会碰到用分隔的文本或者仅用作元数据的CSV文件,来描述数据格式和附加数据的情况。

此时只能打开文件来看看第一行是数据头还是数据(例如查看文件的前几行)。这在Linux系统上用bash命令如head可以很容易做到,格式如下所示。$ head some_file.csv

在遍历数据时,我们把第一行存储为文件头,把其他行添加到数据列表中。

我们也可以通过csv.has_header方法检查.csv文件是否包含文件头。

读取文件时一旦出了问题,csv.reader()方法会生成错误信息。我们可以捕获这些错误信息,然后给用户打印出有用的信息,以帮助用户发现问题。2.2.4 补充说明

如果想了解csv模块的来龙去脉,可以看一下PEP文档中的《CSV文件API》。

如果想加载大数据文件,明智的做法通常是使用一些著名的库如NumPy的loadtxt()方法,这个方法可以很好地处理CSV大数据文件。

基本用法非常简单,如下面的代码段所示。import numpydata = numpy.loadtxt('ch02-data.csv',dtype='string', delimiter=',')

值得注意的是,我们需要为NumPy定义分隔符,以便让NumPy能正确地分隔数据。numpy.loadtxt()方法比类似的numpy.genfromtxt()方法要快一些,但是后者能更好地处理缺失数据,而且在处理已加载文件的某些列时,可以使用一些方法来做些额外的事情。 目前,在Python 2.7.x版本中,csv模块不支持Unicode编码,必须把读取的数据显式地转换成可打印的UTF-8或者ASCII编码。官方的Python CSV文档提供了一些解决数据编码问题的很好的示例。Python 3.3及后续版本默认支持Unicode编码,不存在此类问题。2.3 从Microsoft Excel文件导入数据

虽然Microsoft Excel支持一些画图操作,但如果需要更加灵活和强大的可视化效果,就需要把数据从表单导出到Python中来做进一步的处理。

从Excel文件导入数据的通常做法是把数据从Excel导出到CSV格式的文件中,然后用上节中提到的方法使用Python从CSV文件导入数据。如果只有一两个文件(并且安装了Microsoft Excel或者OpenOffice.org),事情就相当简单。但是如果想自动化地对大量文件进行数据管道处理(作为数据连续处理流程的一部分),那么手动地把每个Excel文件转换成CSV文件的做法就行不通了。因此,我们需要一种方法来读取Excel文件。

通过www.python-excel.org项目提供的软件包,Python可以很好地支持Excel文件的读写操作。Python对读操作和写操作的支持是通过不同模块实现的,而且与平台无关。换言之,我们不必为了读取Excel文件而必须要在Windows平台上工作。

Microsoft Excel文件格式随着时间发生着变化,不同的Python库对其都有相应的支持。在写作本书时,XLRD最新的稳定版本是0.90,它已经支持读取.xlsx文件了。2.3.1 准备工作

首先,我们需要安装所需的模块,在这个例子中我们将使用xlrd模块。我们将用pip在虚拟环境中安装此模块。$ mkvirtualenv xlrdexample(xlrdexample)$ pip install xlrd

安装完毕后,我们将用ch02-xlsxdata.xlsx示例文件做演示。2.3.2 操作步骤

接下来的示例代码将展示如何从已知的Excel文件中读取一个样本数据集合。操作步骤如下。(1)打开文件的工作簿。(2)根据名称找到工作表。(3)根据行数(nrows)和列数(ncols)读取单元格的内容。(4)因为只是用作演示,本例仅打印出了读取的数据集合。

实现代码如下:import xlrdfile = 'ch02-xlsxdata.xlsx'

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载