从零开始用Python3做数据分析
欢迎来到Python数据分析的世界!如今,Python已成为数据分析和数据科学事实上的标准语言和标准平台之一。我们将为读者展示一张思维导图,图1-1中将给出Python生态系统为数据分析师和数据科学家提供的各种程序库。NumPy、SciPy、Pandas和Matplotlib库共同构成了Python数据分析的基础,当前它们已经成为SciPy Stack 1.0的组成部分。在本文中,我们不仅会学习如何安装SciPy Stack 1.0和Jupyter Notebook,还将编写一些简单的数据分析代码,为后面的学习做好热身。
下面是Python生态系统为数据分析师和数据科学家提供的常用程序库。
●NumPy:这是一个通用程序库,不仅支持常用的数值数组,同时提供了用于高效处理这些数组的函数。
●SciPy:这是Python的科学计算库,对NumPy的功能进行了大量扩充,同时也有部分功能是重合的。Numpy和SciPy曾经共享基础代码,后来分道扬镳了。
●Pandas:这是一个用于数据处理的程序库,不仅提供了丰富的数据结构,同时为处理数据表和时间序列提供了相应的函数。
●Matplotlib:这是一个2D绘图库,在绘制图形和图像方面提供了良好的支持。当前,Matplotlib已经并入SciPy中并支持NumPy。
●IPython:这个库为Python提供了强大的交互式Shell,也为Jupyter提供了内核,同时还支持交互式数据可视化功能。我们将在本文稍后介绍IPython shell。
●Jupyter Notebook:它提供了一个基于Web的交互式shell,可以创建和共享支持可实时代码和可视化的文档。Jupyter Notebook通过IPython提供的内核支持多个版本的Python。本文稍后将会为读者进一步介绍Jupyter Notebook。
对于本文而言,当需要安装软件时,我们会在恰当的时机给出相应的安装说明。在安装软件的过程中遇到困难或者不能断定最佳方案时,读者可以参考图1-1,这里提供了寻找解决问题所需辅助信息的指南。
图1-1
本文将涉及以下主题。
●安装Python 3
●将IPython用作shell
●阅读手册页
●Jupyter Notebook
●NumPy数组
●一个简单的应用
●何处寻找帮助和参考资料
●列出Python库中的模块
●利用matplotlib可视化数据
1.1 安装Python 3
本文所用软件都是基于Python 3的,所以必须首先安装Python 3。不过,对于某些操作系统而言,Python 3是默认安装的。Python具有多种实现,其中包括具有商业版权的实现和发行版。在本文中,我们只关注标准Python实现,因为它与NumPy完全兼容。
提示:
读者可以从https://www.python.org/download/页面下载Python 3.5.x。在这个网站上,我们可以找到为Windows和Mac OS X系统开发的安装程序,以及为Linux、UNIX和Mac OS X系统提供的源码包。我们可以从https://docs.python.org/3/using/index.html上找到在各种操作系统上安装和使用Python的相关说明。
本文需要安装的软件,在Windows、各种Linux发行版本和Mac OS X系统上都有相应的二进制安装程序。当然,如果读者愿意,也可以使用相应的源代码发行包。对于Python,要求其版本为3.5.x或更高。Python 2.7版本的支持与维护工作已经从2015年延续至2020年,之后,我们不得不迁移到Python 3。
1.1.1 安装数据分析程序库
下面开始介绍如何在Windows、Linux和Mac OS X上安装和设置NumPy、SciPy、Pandas、Matplotlib、IPython和Jupyter Notebook。下面来详细了解一下这个过程。在本文中,我们将使用pip3来安装这些库。因为从3.4版本起,pip3已经默认包含在Python的安装程序中了。
1.1.2 Linux平台或Mac OS X平台
为了安装这些基础的程序库,可以运行以下命令。
1.1.3 Windows平台
在撰写本文时,我们在Windows 10虚拟机上安装了以下软件,作为安装这些程序库的先决条件。
●Python 3.6。
●Microsoft Visual C++ Build Tools 2015。
下载并安装适用于Windows平台的、预编译好的NumPy和SciPy二进制文件。
●我们下载了numpy-1.12.0 + mkl-cp36-cp36m-win_amd64.whl和scipy-0.18.1-cp36- cp36m-win_amd64.whl。
●下载完成后,执行命令pip3 install Downloads umpy-1.12.0 + mkl-cp36-cp36m-win_amd64.whl和pip3 install Downloads\scipy-0.18.1-cp36-cp36m-win_amd64.whl。
安装上述软件后,为了安装其余的基础程序库,可以运行以下命令。
小技巧
使用这些命令安装Jupyter时,要先安装所有必需的软件包,如Notebook和IPython。
1.2 将IPython用作shell
我们知道,科学家、数据分析师和工程师经常需要进行实验,而IPython正是为实验而生的。对于IPython提供的交互式环境,明眼人一看就知道它与MATLAB、Mathematica和Maple非常接近。
下面是IPython shell的一些特性。
●Tab补全功能(Tab completion),可以帮助查找命令
●历史记录机制
●行内编辑
●利用%run调用外部Python脚本
●访问系统命令
●访问Python的调试工具和分析工具
下面给出IPython shell的使用方法。
●启动会话:要想使用IPython启动会话,需要在命令行中输入以下指令。
小技巧
退出IPython shell时,可以使用quit()函数或者Ctrl+D组合键。
●保存会话:有时我们可能想要恢复之前做过的实验。对于IPython来说,这很容易,只要保存了会话,就可以供将来继续使用,具体命令如下。
使用下列命令可以关闭记录功能。
●执行系统的shell命令:在默认情况下,IPython允许通过在命令前面追加“!”号来执行系统的shell命令。举例来说,我们输入下面的命令将会得到当前日期。
事实上,任何前置了“!”号的命令行都将发送给系统的shell来处理。此外,可以通过如下方法来存储命令的输出结果。
●显示历史上用过的命令:可以利用%hist命令来显示之前用过的命令,例子如下。
这在命令行接口(Command Line Interface,CLI)环境中是一种非常普遍的功能。此外,我们还可以用-g开关在历史命令中进行搜索,例子如下。
在上面的过程中,我们使用了一些所谓的魔力函数(magic functions),这些函数均以“%”开头。当魔力函数单独用于一行时,就可以省略前缀“%”。
1.3 学习手册页
当使用IPython导入相应的程序库后,可以通过help命令打开NumPy函数的手册页——即使不知道该函数的确切名称。我们可以先输入几个字符,然后利用Tab键就可以自动补全剩下的字符。下面以arange()函数为例,说明如何查阅与其有关的资料。
这里给出两种翻阅相关信息的方法。
调用help函数:输入help命令(并输入函数名中的前几个字符,再按Tab键。这时将出现一个函数列表(见图1-2),我们可以通过方向键从函数名列表中进行选择,然后按Enter键进行确认),最后按Enter键盘,结束help函数的调用。
通过问号进行查询:另一种方法是在函数名后面加上问号,当然,前提条件是我们已经知道函数名,好处是不必输入help命令,例子如下。
图1-2
Tab补全功能依赖于readline,所以务必确保先前已经安装了该软件。如果没有安装,可以使用pip完成安装,具体命令如下。
利用问号,我们可以从文档字符串(docstrings)中获取所需信息。
1.4 Jupyter Notebook
upyter Notebook以前被称为IPython Notebooks,它提供了一种以特殊格式创建和共享具有文本、图表和Python代码的网页的工具。
很多时候,notebook都是用于演示Python软件,或者用作一款教学工具。我们可以单纯使用Python代码或者通过特殊的notebook格式来导入和导出notebook。另外,notebook既可以在本机上跑,也可以放到专用的notebook服务器上在线使用。某些云计算解决方案(如Wakari和PiCloud)还支持在云中运行notebook。云计算的主题将在第11章中加以介绍。
为了使用Jupyter Notebook启动一个会话,读者可以使用如下命令。
这时将启动notebook服务器并打开一个网页,显示该命令所在文件夹的内容。然后,你可以在Python 3中选择New | Python 3菜单项来启动一个新的notebook。
你也可以打开本文的代码包中提供的ch-01.ipynb。ch-01是一个notebook文件,其中存放了本文中简单应用程序的代码。
1.5 NumPy数组
安装好NumPy后,就可以来看NumPy数组了。与Python中的列表相比,进行数值运算时NumPy数组的效率要高得多。事实上,NumPy数组是针对某些对象进行了大量的优化工作。
完成相同的运算时,与Python代码相比,NumPy代码用到的显式循环语句明显要少,因为NumPy是基于向量化的运算。还记得高等数学中标量和向量的概念吗?例如,数字2是一个标量,计算2+2时,进行的是标量加法运算。通过一组标量,我们可以构建出一个向量。用Python编程的术语来说,我们得到了一个一维数组。当然,这个概念可以扩展至更高的维度。实际上,针对两个数组的诸如加法之类的运算,可以将其转化为一组标量运算。使用纯Python时,为了完成该操作,可以使用循环语句遍历第一个数组中的每个元素,并与第二个数组中对应的元素相加。然而,在数学家眼里,这种方法过于繁琐。数学上,可以将这两个向量的加法视为单一操作。实际上,NumPy数组也可以这么做,而且它用低级C例程针对某些操作进行了优化处理,使得这些基本运算效率大为提高。关于NumPy数组将在第2章中详细介绍。
1.6 一个简单的应用
假设要对向量a和b进行求和。注意,这里“向量”的含义是数学意义上的,即一个一维数组。在第4章中,将遇到一种表示矩阵的特殊NumPy数组。向量a存放的是整数0~n−1的2次幂。如果n等于3,那么a保存的是0、1或4。向量b存放的是整数0~n的3次幂,所以如果n等于3,那么向量b等于0、1或者8。如果使用普通的Python代码,该怎么做呢?
在我们想出了一个解决方案后,可以拿来与等价的NumPy方案进行比较。
下面的函数没有借助NumPy,而是使用纯Python来解决向量加法问题。
下面是利用NumPy解决向量加法问题的函数。
注意,numpysum()无需使用for语句。此外,我们使用了来自NumPy的arange()函数,它替我们创建了一个含有整数0~n的NumPy数组。这里的arange()函数也是从NumPy导入的,所以它加上了前缀numpy。
现在到了真正有趣的地方。我们在前面讲过,NumPy在进行数组运算时,速度是相当快的。可是到底有多快呢?下面的程序代码将为我们展示numpysum()和pythonsum()这两个函数的实耗时间,这里以μs(微秒)为单位。同时,它还会显示向量sum最后面的两个元素值。下面来看使用Python和NumPy能否得到相同的答案。
对于1000个、2000个和4000个向量元素,程序的结果如下。
显而易见,NumPy的运行速度比等价的常规Python代码要快很多。有一件事情是肯定的:无论是否使用NumPy,计算结果都是相同的。但是结果的显示形式还是有所差别的,numpysum()函数给出的结果不包含逗号。为什么会这样?别忘了,我们处理的不是Python的列表,而是一个NumPy数组。有关NumPy数组的更多内容,将在第2章中详细介绍。
1.7 从何处寻求帮助和参考资料
表1-1列出了在本文中讨论过的Python数据分析库的文档网站。
表1-1
流行的软件开发论坛Stack Overflow上也有数以百计的NumPy、SciPy、Pandas、Matplotlib、IPython和Jupyter Notebook方面的讨论。如果读者对这些内容感兴趣,建议进一步学习。
如果你遇到了比较棘手的问题,或者想要持续关注这些程序库的开发进展,可以订阅相应的讨论邮寄列表。订阅后,每天收到的数量不一的邮件,开发者会积极报告这些库的开发进展并热心回答其中的问题。
对于IRC用户,可以在irc://irc.freenode.net找到一个相关的频道,虽然该频道的名字是#scipy,但是这并不妨碍我们提问NumPy方面的问题,因为SciPy用户一般比较熟悉NumPy,毕竟SciPy是以NumPy为基础的。在这个SciPy频道中,通常有50多位成员保持在线。
1.8 查看Python库中包含的模块
ch-01.ipynb文件包含用于查看NumPy、SciPy、Pandas和Matplotlib库中的模块的代码。现在,读者不用担心这些代码的含义,只要尝试运行一下它们就行了。您可以修改其中的代码以查看其他库中的模块。
本文摘自《Python数据分析(第2版)》
[美]阿曼多·凡丹戈(Armando Fandango) 著
点击封面购买纸书
畅销书升级版,基于Python3。
本书教新手用Python语言分析数据,发挥Python在数据可视化方面的优势,引导读者成为数据分析高手。全书从数据检索、清洗、操作、可视化、存储复杂的分析和建模等方面介绍,重点关注开源模块,如NumPy、SciPy、matplotlib、pandas、IPython、Cython、scikit-learn及NLTK。本书还包括数据可视化、信号处理、时间序列分析、数据库、预测分析和机器学习等主题。
本文转载自异步社区
原文链接:https://www.epubit.com/articleDetails?id=N33589103-1aeb-4af8-9c24-a3623c580c7e
- 点赞
- 收藏
- 关注作者
评论(0)