Python极简讲义:一本书入门数据分析与机器学习
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 Python概要

Python是一种被广泛使用的解释型、通用型、高级编程语言。在本节中,我们将首先介绍为什么要学习Python,然后介绍Python中常用的第三方库。

1.1.1 为什么要学习Python

早在1991年2月,Python之父吉多·范罗苏姆(Guido Van Rossum)就发布了Python的第一个版本,如今Python已近“三十而立”。

事实上,Python不只是“立起来”那么简单,而是在很多领域都口碑颇佳。不论是在初创企业,还是在诸如Google、Facebook这样的大型公司,Python都有众多的拥护者。Python之所以这么流行,原因并不复杂,就是因为它不仅功能强大,而且易学易用,实为“出工干活、居家编程”之首选。

Python不仅拥有高级数据类型(如列表、元组、字典、集合等),而且能高效实现面向对象编程。此外,它还支持动态输入,再加上它解释型语言(Interpreted Language)的本质——能即时显示代码结果,因此非常便于调试,特别适合快速开发应用程序。

简单来说,Python的设计哲学就是:简单、明确、优雅。布鲁斯·埃克尔(Bruce Eckel)著名科技作家,著有《Java编程思想》《C++编程思想》等,是C++标准委员会中拥有表决权的成员之一。曾说过,没有一种语言比得上Python使他的工作效率如此之高。为此,他还为Python创造了一句经典广告语“Life is short, you need Python.”国内有人将其翻译为“人生苦短,我用Python。”倒是十分贴切。

1.1.2 Python中常用的库

Python社区的生态已然非常完备,为我们提供了很多高质量的类库。这时,我们没有必要重复造轮子。对于一些优秀的类库而言,“他山之石,可以攻玉”,采用“拿来主义”,为我所用,不失为上策。下面就介绍一下与机器学习相关的Python常用类库。

1.1.2.1 数值计算NumPy

NumPy是“Numeric”(数值)和“Python”的混合简写国外取名也是有讲究的,其中Py的发音为[paɪ],类似于pie(馅饼),寓意NumPy既好用又“好吃”(功能强大)。。顾名思义,它是处理数值计算的Python库。为了提高性能,NumPy参考了CPython(用C语言实现的Python及其解释器)的设计,其本身也是用C语言开发的,也就是说,Numpy的数据处理速度和C语言是同级别的。

NumPy除了提供一些数学运算函数,还提供与MATLAB(由美国MathWorks公司出品的著名商业数学软件)相似的功能与操作方式,可让用户高效地直接操作向量或矩阵。

但NumPy被定位为数学基础库,属于比较底层的Python库。如果想快速开发出可用的程序,可采用更为高阶的库—SciPy和Pandas,下面分别对它们进行简单介绍。

1.1.2.2 科学计算SciPy

SciPy发音为“Sigh Pie”,它的取义类似于NumPy,是“Science”(科学)和“Python”的组合,即面向科学计算的Python库。SciPy构建于NumPy之上,功能更为强大,在常微分方程求解、线性代数、信号处理、图像处理及稀疏矩阵操作等方面,均能提供强有力的支持。

相比于NumPy是一个纯数学层面的计算模块,SciPy是一个更为高阶的科学计算库。比如说,如果要对矩阵进行操作,只用到纯数学的基础模块,可在NumPy库中找到对应的模块。但如果想要实现特定功能,如稀疏矩阵操作,那相应模块可能就需要在SciPy库中找了。SciPy库需要NumPy库的支持。出于这种依赖关系,NumPy库的安装要先于SciPy库的安装。

1.1.2.3 数据分析Pandas

Pandas在这里并不是“熊猫”之意,它的英文全称是“Python Data Analysis Library”。见名知意,Pandas是一款面向Python的数据分析库,它同样基于NumPy库构建而成。

Pandas库提供了操作大型数据集所需的高效工具,支持带有坐标轴的数据结构,这能防止由于数据没有对齐、采用不同索引而产生的某些处理错误。在数据预处理或数据清洗上,Pandas提供了处理缺失值、转换、合并及其他类SQL的功能。这些功能大大减轻了一线机器学习研发人员的负担。在某种程度上,Pandas是实施数据清洗/整理(Data Wrangling)最好用的工具之一。

1.1.2.4 图形绘制Matplotlib与Seaborn

众所周知,MATLAB、R及gnuplot等都具有非常出色的绘图功能。事实上,Python也提供了绘图功能非常强大的类库Matplotlib。使用它可以很方便地绘制散点图、折线图、条形图、直方图、饼图等专业图形。

类似于NumPy是Pandas的基础库一样,Matplotlib也可以作为其他更高阶绘图工具的基础库。Seaborn就是这样的高级库,它对Matplotlib做了二次封装。Matplotlib功能虽然很强大,但想用好却有较高的门槛。比如,通过Matplotlib绘制的图形,如果还想更加精致,就需要做大量的微调工作。因此,在某些场合,可用Seaborn替代Matplotlib进行绘图。

1.1.2.5 scikit-learn

机器学习是当下的研究热点,Python社区更是在此领域引领了潮流,scikit-learn便是其中的佼佼者。scikit-learn构建于NumPy和SciPy之上,提供了一系列经典的机器学习算法,如聚类、分类和回归等,也提供了一些数据集供初学者学习、使用,如鸢尾花分类数据集、波士顿房价预测数据集、手写数字识别数据集等,还提供了统一的接口供用户调用。十多年来,先后有超过40位机器学习专家参与scikit-learn代码的维护和更新工作,它已成为当前相对成熟的机器学习开源项目。

事实上,除了前面提及的几个常用类库,Python还提供一些其他实用库。比如,用于网站数据抓取的Scrapy,用于网络挖掘的Pattern,用于自然语言处理的NLTK和用于深度学习的TensorFlow等。