带你读《Python机器学习》之二:Python与数据科学

点击查看第一章
点击查看第三章

第2章

Python与数据科学

2.1 Python概述

2017年12月5日,第四届世界互联网大会在浙江省乌镇圆满闭幕。大会吸引了各界的目光,而人工智能几乎成为整个大会的焦点,各行各业的“大佬”都在谈论着AI的未来。不难发现,人工智能将是未来发展的趋势,作为人工智能的首选语言,Python也随之火了起来。根据 IEEE Spectrum 发布的研究报告,在2016 年排名第三的 Python,在2017年已经成为世界上最受欢迎的语言,C 和 Java 分别位居第二和第三位,而在2018年Python依旧保持其强劲的热度位居榜首。IEEE Spectrum依据记者 Nick Diakopoulos 提供的数据,结合 10 个线上数据源的 12 个标准,对 48 种语言进行了排行,如图2-1所示。

带你读《Python机器学习》之二:Python与数据科学

Python是一款面向对象、直译式的计算机编程语言。它包含一整套功能完善的标准库,能够轻松完成很多常见的编程任务。
Python由Guide Van Rossum于1989年圣诞节期间设计,他力图使Python简单直观、开源、容易理解且适合快速开发,这一设计理念可以概括为“优雅”“明确”“简单”。而Python正是在这种设计思想下逐渐成为一款流行的编程语言。
Python为网站搭建、科学计算、图形用户界面(GUI)等各个方面的开发都提供了完善的开发框架。国内网站中,豆瓣网、知乎、果壳网等都使用了Python的Web框架,Google也有很多Python的重要应用。此外,在科学计算方面,Python的NumPy、SciPy、Pandas、Matplotlib、Scikit-learn等框架也非常成熟,这也使得Python成为一款非常适用于数据科学的工具。

2.2 Python与数据科学的关系

数据科学是一个跨学科的课题,综合了三个领域的能力:统计学家的能力——能够建立模型的聚合数据(数据量正在不断增加);计算机科学家的能力——能够设计并使用算法对数据进行高效存储、分析和可视化;领域专家的能力——在细分领域经过专业训练,既可以提出问题,又可以做出专业的解答。
而Python之所以能在数据科学领域广泛应用,主要是因为它的第三方程序包拥有庞大而活跃的生态系统:NumPy可以处理同类型(homogeneous)数组型数据,Pandas可以处理多种类型(heterogenous)带标签的数据,SciPy可以解决常见的科学计算问题,Matplotlib可以绘制用于印刷的可视化图形,IPython可以实现交互式编程和快速分享代码,Scikit-learn可以进行机器学习。

2.3 Python中常用的第三方库

本节详细介绍在数据科学这门学科中,我们经常需要使用的第三方库。

2.3.1 NumPy

NumPy(Numerical Python的简称)是Python科学计算的基础包。本书大部分内容都基于NumPy以及在其基础上所构建的库。它提供了以下功能(不限于此):

  • 快速高效的多维数组对象ndarray。
  • 用于对数组执行元素级计算以及直接对数组执行数学运算的函数。
  • 用于读写硬盘上基于数组的数据集的工具。
  • 线性代数运算、傅里叶变换,以及随机数生成。
  • 用于将C、C++、Fortran代码集成到Python的工具。

除了为Python提供快速的数组处理能力之外,NumPy在数据科学方面还有另一个主要作用,即作为算法之间传递数据的容器。对于数值型数据,NumPy数组在存储和处理数据时要比内置的Python数据结构高效得多。此外,由低级语言(比如C和Fortran)编写的库可以直接操作NumPy数组中的数据,无须进行任何数据复制工作。

2.3.2 SciPy

SciPy包含致力于科学计算中常见问题的各个工具箱。它的不同子模块对应于不同的应用,如插值、积分、优化、图像处理、统计、特殊函数等。
SciPy可以与其他标准科学计算程序库进行比较,比如GSL(GNU C或C++科学计算库)或者Matlab工具箱。SciPy是Python中科学计算程序的核心包,用于有效地计算NumPy矩阵,以便让NumPy和SciPy协同工作。表2-1列出了SciPy中经常用到的部分子功能。

2.3.3 Pandas

Pandas这个名字源于panel data(面板数据,这是计量经济学中关于多维结构化数据集的一个术语),也是Python data analysis(Python数据分析)的简写。
Pandas处理以下三种数据结构:

  • 系列(Series)。
  • 数据帧(DataFrame)。
  • 面板(Panel)。

这些数据结构都构建在NumPy数组之上。其中,Series为一维数组,与NumPy中的一维array类似,二者与Python基本的数据结构List也很相近。Series如今能保存不同的数据类型,包括字符串、布尔值、数字等;DataFrame是二维的表格型数据结构,其很多功能与R语言中的data.frame类似,可以将DataFrame理解为Series的容器;Panel是三维的数组,可以理解为DataFrame的容器。
Pandas提供了使我们能够快速、便捷地处理结构化数据的大量数据结构和函数,是数据科学中重要的Python库。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。它用来操作数据和分析数据,很适合不同类型的数据,如表格、有序时间序列、无序时间序列、矩阵等。
此外,Pandas兼具NumPy高性能的数组计算功能以及电子表格和关系型数据库(如SQL)灵活的数据处理功能。它提供了复杂而精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。

2.3.4 Matplotlib

Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成具有出版品质的图形。Matplotlib可用于Python脚本、Python和IPython shell、Jupyter Note、Web应用程序服务器和4个图形用户界面工具包。
Matplotlib试图让简单的事情变得更简单,让无法实现的事情变得可能实现。只需几行代码即可生成绘图、直方图、功率谱、条形图、错误图、散点图等。
Matplotlib子模块Pyplot提供了类似于MATLAB的界面,经常与IPython结合使用。对于高级用户,可以通过面向对象的界面或MATLAB用户熟悉的一组函数完全控制线条样式、字体属性、轴属性等。

2.3.5 Scikit-learn

基于SciPy,目前开发者针对不同的应用领域已经发展出为数众多的分支版本,它们被统一称为Scikits,即SciPy工具包的意思。而在这些分支版本中,最有名也是专门面向机器学习的一个就是Scikit-learn。
Scikit-learn项目最早由数据科学家 David Cournapeau 在 2007 年发起,需要NumPy和SciPy等其他包的支持,它是Python语言中专门针对机器学习应用而发展起来的一款开源框架。
和其他众多的开源项目一样,Scikit-learn目前主要由社区成员自发进行维护。可能是由于维护成本的限制,Scikit-learn相比其他项目要显得更为保守。这主要体现在两个方面:一是Scikit-learn从来不做除机器学习领域之外的其他扩展,二是Scikit-learn从来不采用未经广泛验证的算法。
Scikit-learn的基本功能主要被分为六大部分:分类、回归、聚类、数据降维、模型选择和数据预处理。

2.4 编译环境

Python的集成开发环境(IDE)软件,除了标准二进制发布包所附的IDLE之外,还有许多其他的选择。这些IDE能够提供语法着色、语法检查、运行调试、自动补全、智能感知等便利功能。为Python专门设计的IDE有Anaconda、Pycharm、PyScripter、Eric等,这些IDE各具特点。

2.4.1 Anaconda

1.简介
在众多IDE中,Anaconda Python是一款适合数据分析者的集成开发环境,它包含常用科学计算、数据分析、自然语言处理、绘图等包,所有的模块几乎都是最新的,容量适中。Anaconda使用了conda和pip包管理工具,安装第三方包非常方便,避免了管理各个库之间依赖性的麻烦。Anaconda继承了Python、IPython、Spyder和众多的框架与环境,且支持Python 2和Python 3,包括免费版、协作版、企业版等。
Anaconda集成的Jupyter Notebook由于支持Latex等功能,被国外数据科学工作者和大学讲师广泛使用,成为Python数据科学领域的标准IDE工具。
2.安装
Anaconda官方网址为:https://www.anaconda.com/download/
(1)进入官网下载Anaconda,该网站可以检测出当前电脑的操作系统,这里以Windows系统为例,故网站提供Windows系统版本安装包。Anaconda官网提供了3.7和2.7两个版本,读者可以根据需要自行选择下载。这里以3.7版本为例。其下载界面如图2-2所示。

带你读《Python机器学习》之二:Python与数据科学

(2)下载完成后,双击exe文件进行安装。其安装界面如图2-3所示。

带你读《Python机器学习》之二:Python与数据科学

(3)选择安装路径,如图2-4所示。

带你读《Python机器学习》之二:Python与数据科学

(4)单击Install按钮,等待进度条读取完毕即可完成安装。注意:安装时有两个高级选项,第一个是把Anaconda加入PATH(系统环境变量),第二个是将Anaconda作为默认的Python 3.6,如图2-5所示。
(5)打开Anaconda Navigator(导航),在Environments(管理版本和包)可以看到NumPy、SciPy、Scikit-learn、Matplotlib等常用数据科学库都已安装完毕,如图2-6所示。

带你读《Python机器学习》之二:Python与数据科学

带你读《Python机器学习》之二:Python与数据科学

2.4.2 Jupyter Notebook

Anaconda的安装为后续机器学习算法的编写提供了必要的环境。Anaconda安装完成后,我们使用集成在其上的Jupyter Notebook作为后续实现机器学习算法的IDE。
1.简介
Jupyter Notebook(此前被称为IPython Notebook)是一个交互式笔记本,支持运行 40 多种编程语言,它是 Donald Knuth在1984年提出的文字表达化编程的一种形式。在文字表达化编程中,可以直接在代码旁写出叙述性文档,而不是另外编写单独的文档。用 Donald Knuth 的话来说:“让我们集中精力向人们解释我们希望计算机做什么,而不是指示计算机做什么。”
归根到底,代码是写给人而不是计算机看的。Notebook 提供了这种能力,编程人员能够直接在代码旁写出叙述性文档。这不仅对阅读Notebook 的人很有用,而且对编程人员将来回头分析代码也有很大用处。
Jupyter Notebook 的本质是一个Web应用程序,便于创建和共享文学化程序文档,支持实时代码、数学方程、可视化和Markdown,其用途包括数据清理和转换、数值模拟、统计建模、机器学习等。
2.编程示例
下面我们以一个小程序为例,为读者演示Jupyter Notebook的简单使用。该程序实现了矩阵之间的乘法。
(1)打开Jupyter,单击New,在下拉菜单中选择Python 3,新建Python文件,如图2-7所示。


带你读《Python机器学习》之二:Python与数据科学

(2)在新打开的Python文件界面中,单击上方的Untitled,可实现对新建文件的重命名功能,这里将其重命名为test,如图2-8所示。

带你读《Python机器学习》之二:Python与数据科学

(3)输入代码,按Shift+Enter组合键运行代码。以下代码实现了一个2×3矩阵与一个3×2矩阵相乘的功能:

import numpy as np
#创建一个2行3列的矩阵
two_dim_matrix_one = np.array([[1, 2, 3], [4, 5, 6]])
# 创建一个3行2列的矩阵
two_dim_matrix_two = np.array([[1, 2], [3, 4], [5, 6]])
# 使用NumPy包中的方法进行相乘
two_multi_res = np.dot(two_dim_matrix_one, two_dim_matrix_two)
print('two_multi_res: %s' %(two_multi_res))

其运行结果如图2-9所示。

带你读《Python机器学习》之二:Python与数据科学

2.5 本章小结

Python适用于机器学习的最直接原因是有NumPy和SciPy库支持Scikit-learn这样的项目,因为它目前几乎是所有机器学习任务的标准工具。除此之外,Python也是非常容易理解的,这有助于保持最新的机器学习和AI的现状,例如,用Python实现最新算法时会节省很多时间。尝试人工智能和机器学习的新思路往往需要实现相对复杂的算法,语言越简单,调试就越容易。机器学习是一个集成度很高的学科,因为任何机器学习系统都需要从现实世界中提取大量数据作为训练数据或系统输入数据,因此Python的框架库生态系统意味着它通常可以很好地访问和转换数据。
总而言之,Python是一种伟大的语言,它可以让研究人员和从业者专注于机器学习。

2.6 本章习题

1. 选择题
(1)K最近邻方法在什么情况下分类效果较好?(  )
A.样本较多但典型性不好
B.样本较少但典型性好
C.样本呈团状分布
D.样本呈链状分布

(2)下列哪一项不属于Python的集成开发环境?(  )
A. Pycharm
B. Anaconda
C. Eric
D. Eclipse

(3)下列哪一项是Python科学计算的基础包?(  )
A. NumPy
B. Pandas
C. Matplotlib
D. SciPy

2. 填空题
(1)Python科学计算的基础包是   

(2)Python中常用的第三方库有            

(3)Python是一款      的计算机编程语言。

(4)   是一个Python 2D绘图库,它可以在各种平台上使用。

3. 判断题
给定n个数据点,如果其中一半用于训练,一半用于测试,则测试误差和训练误差之间的差别会随着n的增加而减少。(  )

上一篇:apache网站访问慢的实践处理过程


下一篇:带你读《Python机器学习》之一:机器学习基础