从零开始用Python3做数据分析

  1. 云栖社区>
  2. 博客>
  3. 正文

从零开始用Python3做数据分析

异步社区 发布时间:2018-05-19 13:36:46 浏览1312 评论0

摘要: 欢迎来到Python数据分析的世界!如今,Python已成为数据分析和数据科学事实上的标准语言和标准平台之一。我们将为读者展示一张思维导图,图1-1中将给出Python生态系统为数据分析师和数据科学家提供的各种程序库。

​点击关注 异步图书,置顶公众号

每天与你分享 IT好书 技术干货 职场知识


9ccc0ca9gy1frek2a8bl4j20u00f6jsv.jpg

参与文末话题讨论,每日赠送异步图书

——异步小编

​欢迎来到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,这里提供了寻找解决问题所需辅助信息的指南。

9ccc0ca9gy1frgkd4mkkhj20u00pwgnt.jpg

​图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平台

为了安装这些基础的程序库,可以运行以下命令。

9ccc0ca9gy1frgkdpbc4rj20n300x743.jpg

​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。 

安装上述软件后,为了安装其余的基础程序库,可以运行以下命令。

9ccc0ca9gy1frgke3a92kj20n200wdfm.jpg

​小技巧

使用这些命令安装Jupyter时,要先安装所有必需的软件包,如Notebook和IPython。

1.2 将IPython用作shell

我们知道,科学家、数据分析师和工程师经常需要进行实验,而IPython正是为实验而生的。对于IPython提供的交互式环境,明眼人一看就知道它与MATLAB、Mathematica和Maple非常接近。

下面是IPython shell的一些特性。

●Tab补全功能(Tab completion),可以帮助查找命令

●历史记录机制

●行内编辑

●利用%run调用外部Python脚本

●访问系统命令

●访问Python的调试工具和分析工具

下面给出IPython shell的使用方法。

●启动会话:要想使用IPython启动会话,需要在命令行中输入以下指令。

9ccc0ca9gy1frgkeqh62xj20n105mweu.jpg

小技巧

退出IPython shell时,可以使用quit()函数或者Ctrl+D组合键。

●保存会话:有时我们可能想要恢复之前做过的实验。对于IPython来说,这很容易,只要保存了会话,就可以供将来继续使用,具体命令如下。 

9ccc0ca9gy1frgkfftcvgj20n304laa5.jpg

​使用下列命令可以关闭记录功能。

9ccc0ca9gy1frgkfn2hs0j20n201ja9v.jpg

​●执行系统的shell命令:在默认情况下,IPython允许通过在命令前面追加“!”号来执行系统的shell命令。举例来说,我们输入下面的命令将会得到当前日期。 

9ccc0ca9gy1frgkfu7s2bj20n100t3y9.jpg

​事实上,任何前置了“!”号的命令行都将发送给系统的shell来处理。此外,可以通过如下方法来存储命令的输出结果。

9ccc0ca9gy1frgkg0fjcqj20n201edfm.jpg

​●显示历史上用过的命令:可以利用%hist命令来显示之前用过的命令,例子如下。 

9ccc0ca9gy1frgkg7m3rmj20n003za9x.jpg

​这在命令行接口(Command Line Interface,CLI)环境中是一种非常普遍的功能。此外,我们还可以用-g开关在历史命令中进行搜索,例子如下。

9ccc0ca9gy1frgkgeo4xmj20n001g742.jpg

​在上面的过程中,我们使用了一些所谓的魔力函数(magic functions),这些函数均以“%”开头。当魔力函数单独用于一行时,就可以省略前缀“%”。

1.3 学习手册页

当使用IPython导入相应的程序库后,可以通过help命令打开NumPy函数的手册页——即使不知道该函数的确切名称。我们可以先输入几个字符,然后利用Tab键就可以自动补全剩下的字符。下面以arange()函数为例,说明如何查阅与其有关的资料。

这里给出两种翻阅相关信息的方法。

调用help函数:输入help命令(并输入函数名中的前几个字符,再按Tab键。这时将出现一个函数列表(见图1-2),我们可以通过方向键从函数名列表中进行选择,然后按Enter键进行确认),最后按Enter键盘,结束help函数的调用。

通过问号进行查询:另一种方法是在函数名后面加上问号,当然,前提条件是我们已经知道函数名,好处是不必输入help命令,例子如下。

9ccc0ca9gy1frgkgze029j20fn03caaa.jpg

​图1-2​

9ccc0ca9gy1frgkhg8yrdj20n200wq2p.jpg

​Tab补全功能依赖于readline,所以务必确保先前已经安装了该软件。如果没有安装,可以使用pip完成安装,具体命令如下。

9ccc0ca9gy1frgkhnsot4j20n200xt8h.jpg

​利用问号,我们可以从文档字符串(docstrings)中获取所需信息。

1.4 Jupyter Notebook

upyter Notebook以前被称为IPython Notebooks,它提供了一种以特殊格式创建和共享具有文本、图表和Python代码的网页的工具。

很多时候,notebook都是用于演示Python软件,或者用作一款教学工具。我们可以单纯使用Python代码或者通过特殊的notebook格式来导入和导出notebook。另外,notebook既可以在本机上跑,也可以放到专用的notebook服务器上在线使用。某些云计算解决方案(如Wakari和PiCloud)还支持在云中运行notebook。云计算的主题将在第11章中加以介绍。

为了使用Jupyter Notebook启动一个会话,读者可以使用如下命令。

9ccc0ca9gy1frgki21frcj20mu00ymwx.jpg

​这时将启动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来解决向量加法问题。

9ccc0ca9gy1frgkikhne3j20n3052gln.jpg

​下面是利用NumPy解决向量加法问题的函数。

9ccc0ca9gy1frgkiqt87uj20mz030jra.jpg

​注意,numpysum()无需使用for语句。此外,我们使用了来自NumPy的arange()函数,它替我们创建了一个含有整数0~n的NumPy数组。这里的arange()函数也是从NumPy导入的,所以它加上了前缀numpy。

现在到了真正有趣的地方。我们在前面讲过,NumPy在进行数组运算时,速度是相当快的。可是到底有多快呢?下面的程序代码将为我们展示numpysum()和pythonsum()这两个函数的实耗时间,这里以μs(微秒)为单位。同时,它还会显示向量sum最后面的两个元素值。下面来看使用Python和NumPy能否得到相同的答案。

9ccc0ca9gy1frgkiz2nyvj20n30k7wg3.jpg

​对于1000个、2000个和4000个向量元素,程序的结果如下。

9ccc0ca9gy1frgkjc4jnnj20n3086755.jpg

​显而易见,NumPy的运行速度比等价的常规Python代码要快很多。有一件事情是肯定的:无论是否使用NumPy,计算结果都是相同的。但是结果的显示形式还是有所差别的,numpysum()函数给出的结果不包含逗号。为什么会这样?别忘了,我们处理的不是Python的列表,而是一个NumPy数组。有关NumPy数组的更多内容,将在第2章中详细介绍。

1.7 从何处寻求帮助和参考资料

表1-1列出了在本文中讨论过的Python数据分析库的文档网站。

9ccc0ca9gy1frgkjpf7ekj20nx0a6gmh.jpg

​表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版)》

9ccc0ca9gy1frgkkfq03vj208c0ao0td.jpg

​《Python数据分析(第2版)》

[美]阿曼多·凡丹戈(Armando Fandango) 著

点击封面购买纸书


畅销书升级版,基于Python3。

本书教新手用Python语言分析数据,发挥Python在数据可视化方面的优势,引导读者成为数据分析高手。全书从数据检索、清洗、操作、可视化、存储复杂的分析和建模等方面介绍,重点关注开源模块,如NumPy、SciPy、matplotlib、pandas、IPython、Cython、scikit-learn及NLTK。本书还包括数据可视化、信号处理、时间序列分析、数据库、预测分析和机器学习等主题。

今日互动

你对本书的看法?为什么?截止时间5月31日17时,留言+转发本活动到朋友圈,小编将抽奖选出3名读者赠送纸书1本和2张e读版80元异步社区代金券,(留言点赞最多的自动获得一张)。异步图书后台回复“5月新书”进入新书交流群,获得第一手新书信息,点击此处直接参加活动。

9ccc0ca9gy1frcdobu7f5g20hs01pt93.gif

推荐阅读

2018年5月新书书单(文末福利)

2018年4月新书书单

异步图书最全Python书单

一份程序员必备的算法书单

第一本Python神经网络编程图书

9ccc0ca9gy1fqyf4q8tctj209k09k744.jpg

​长按二维码,可以关注我们哟

每天与你分享IT好文。


在“异步图书”后台回复“关注”,即可免费获得2000门在线视频课程;推荐朋友关注根据提示获取赠书链接,免费得异步e读版图书一本。赶紧来参加哦!

点击阅读原文,购买《Python应用开发实战》

阅读原文

【云栖快讯】云栖专辑 | 阿里开发者们的第20个感悟:好的工程师为人写代码,而不仅是为编译器  详情请点击

网友评论