Python大数据与机器学习实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.6 Python常用库

本节介绍大数据分析计算中常用的Python工具库,其中大部分的常用库会在后续的章节中详细说明或者在应用场景中介绍其使用方法,另外的一些库,读者可以在本节中了解其基本功能以及查找其相关资料的方法。

1.6.1 Python内置库

1.OS模块

OS是Python标准库中访问操作系统功能的模块,用于屏蔽系统平台的差异。OS提供的常用功能有查看当前操作系统、查看当前目录、对目录和文件进行增删查改、运行命令、获取环境变量等。

2.SYS模块

SYS是Python标准库中与解释器交互的模块,用于控制Python的运行环境,包括在访问调用程序时使用的参数、退出程序、查看当前加载的模块、控制标准输入输出、查看Python解释器的版本号等,其中最常用的是sys.path。当开发者自建库,或者下载的库未安装到系统默认的Python库目录时,常通过修改path的值加入新的模块路径,以便使当前程序正常加载该库。

1.6.2 Python图形图像处理

图形和图像的处理看似和大数据关系不大,但实际上也是大数据计算常用的工具之一。在我们可获取的数据集中,往往包含大量的图像及视频数据,并需要从中提取特征,以便在下一步的分析和建模中使用,而操作的第一步经常是对图像数据格式、大小的归一化处理以及各种转换。同理,数据建模和分析的输出有时也涉及一些图片的相关操作,本小节简要介绍Python中的两个图像处理库。

1.Scikit-Image图片处理

Scikit-Image也叫skimage,是Python中用于图片处理的第三方库。在安装时,根据Python版本的不同,使用其名称Scikit-Image或skimage。

其功能包括从视频或文件中读写数据,显示图像,对图片的大小、颜色、模式、图像增强、去噪等修改,计算边缘、轮廓,以及对图片中像素点的矩阵运算,可以将其看成PhotoShop图像处理的Python工具。

2.OpenCV机器视觉

相对于Scikit-Image,OpenCV能提供更丰富的功能,这在三维和动态图像处理方面尤为突出。OpenCV提供了图像的校正、分割前景背景、视频监控、运动跟踪、人脸识别、手势识别等功能,并支持机器学习算法。和很多开源工具一样,它提供基础功能。程序开发者利用对基本功能的组合,适配场景,来实现具体功能。它本身只是一个工具集,不是具体问题的解决方案。如果只在应用层面调用的话,则了解其基本的数据结构、函数接口就可以使用了。

1.6.3 Python自然语言处理

自然语言处理(Natural Language Processing,NLP)是人工智能领域中的一个重要方向。它研究人机之间通讯的方法,并涉及机器对人类知识体系的学习和应用。从分词、相似度计算、情感分析、文章摘要到学习文献、知识推理都涉及自然语言处理。下面介绍一些自然语言处理的基础库和中文语言语义分析的资源。

在大数据处理时,由于一般数据集中包括大量的文本信息,有时甚至比数值型数据携带的信息更为重要。因此,从中提取特征并将自然语言转换成为模型可识别的数据是经常遇到的问题。

1.NLTK自然语言处理

学习自然语言处理,一般都会参考NLTK(Natural Language Toolkit,自然语言处理工具包),主要是学习它的思路,从设计的角度分析其功能。自然语言处理的本质就是把语言看成字符串、字符串组、字符串集,并寻找它们之间的规律。

NLTK支持多语言处理,目前网上的例程几乎没有用NLTK处理中文的,但可以实现。比如,标注功能,因为它自身提供了带标注的中文语库(繁体语料库sinica_treebank)。

2.Jieba分词工具

中文与英文差异最大的地方在于,英文中表示意义的最小单位(词)之间以空格分割,而中文的词与词之间没有空格,与词相比单个字表达的意思往往又不完整。因此,中文需要借助工具将句子分词。Jieba是Python的一个中文分词组件。它提供了分词和词性标注功能,能在本地自由使用,并可以很好地和其他Python工具结合。实现类似功能的中文分词工具还有SnowNLP。

3.SentencePiece切分短语

SentencePiece是Google开源的自然语言处理工具包。它使用面向神经网络无监督学习方法,可从大段文本中切分出意群。

在数据挖掘时,假设有一列特征T是文本描述,我们需要将其转成枚举型,或者多个布尔型代入模型,即需要从文本中提供信息构造新特征。首先,可用标点将长句拆分成短句,以短句作为关键字。

其次,再看每个实例的特征T中是否包含该关键字,从而构造新的布尔型特征。但有时候表达同一个意思所使用的文本并不完全一致,比如“买三送一”和“买三送一啦!”是一个意思。在这种情况下,我们可以先用SnowNLP或者Jieba分词把描述拆成单个词,看T是否包括该关键字。但这样做的问题在于:可能把一个意思拆成了多个特征,比如“袖子较短,领子较大”被拆成了四个独立的特征“袖子”“较短”“领子”“较大”,失去了组合效果。

我们需要的效果是:如果“袖子较短”这个组合经常出现,就把它当成一个词处理。在Jieba中可以用自定义词典的方式加入已知的词,还有一些组合常常出现,但事先并不知道,于是希望机器自动学习经常组合出现的短语和词。SentencePiece可以解决这个问题,但它需要大量文本来训练。

SentencePiece的用途不仅仅限于自然语言处理,如大数据竞赛平台DC曾经有一个药物分子筛选的比赛,即需要获取长度不固定的氨基酸序列片断,此处就可以用SentencePiece进行切分。其原理是将重复出现次数多的片断识别为一个意群(词)。

4.WordNet

WordNet是由Princeton大学的心理学家、语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典。它不是只把单词按字母顺序排列,而是按照单词的含义组成一个“单词的网络”。

它是覆盖范围宽广的英语词汇语义网。名词、动词、形容词和副词各自被组织成一个同义词的网络,每个同义词集合都代表一个基本的语义概念,并且这些集合之间也由各种关系连接。

WordNet包含描述概念含义、一义多词、一词多义、类别归属、近义、反义等功能。目前,WordNet只针对英文,中文的中国知网也以词库的方式实现了部分类似的功能。

1.6.4 Python数据分析和处理

1.Numpy数据处理

Numpy全称为Numeric Python,是Python数据运算的第三方库,支持大规模数组和矩阵的运算,具有丰富的数学函数库,是数据分析和高性能计算的基础。它底层的大部分功能都由C语言实现,这比Python基本数据结构运算的速度快,使用也更方便,因此在科学计算领域中被广泛使用,Pandas,Sklearn也都以它为基础库。第2章将详细介绍Numpy库。

2.Pandas数据操作与分析

Pandas是数据分析处理的第三方库,基于Numpy开发,可以把Pandas数据处理看作对数据库中表的操作。它提供数据导入、导出成各种文件格式,数据表的增删查改,简单的数据清洗、统计、聚合、分组、排序等功能。第3章将详细介绍Pandas库。

3.Matplotlib绘图

Matplotlib是Python中最常用的图表绘制库,提供类似于MATLAB的绘图函数集,支持柱图、饼图、气泡图等2D类型的图表绘制,也支持一些3D类型的图表绘制。它能控制所绘图像的大小,并能按不同分辨率导出图像,可以绘制绝大多数的图表。

Matplotlib的缺点是需要手工设置参数,绘制同一图像所需的步骤较多,复杂度较高,相对来说属于比较底层的工具。一些高级的绘图工具,如Seaborn就是建构在Matplotlib基础上的。第4章将详细介绍Matplotlib库和Seaborn库的使用方法。

4.Scipy数据计算

Scipy也是构建在Numpy基础上的第三方库,用于支持各种科学计算,如各种数学常量、傅里叶变换、线性代数、微积分、N维图像、数学函数以及常用的统计函数。其中,统计函数是数据分析的基础。第7章将介绍Scipy数据计算Stats模块中统计函数的使用方法。

5.Sympy符号运算

SymPy是Python的数学符号运算第三方库,支持符号计算、高精度计算、模式匹配、绘图、解方程、微积分、组合数学、离散数学、几何学、概率与统计、物理学等方面的功能,基本可以解决日常遇到的各种计算问题。在学习算法的过程中,可以使用它实现具体的数学运算。

1.6.5 Python机器学习

1.Sklearn机器学习

Sklearn全称为Scikit-Learn,是机器学习最常用的第三方库,基于NumPy,Scipy,MatPlotLib等基础库。在数据预处理方面,它支持各种缺失值处理、数据降维、归一化、离散化、简单的特征筛选等;在建模方面,它支持无监督学习的聚类和监督学习中的各种分类和回归算法,如线性回归、决策树、随机森林、SVM等常用算法;在集成模型方面,它支持AdaBoost,GBDT等方法。Sklearn机器学习基本包括了机器学习中的大多数方法。本书第7章介绍使用Sklearn中的库实现部分算法。

2.TensorFlow深度学习

TensorFlow是一个基于数据流编程(Dataflow Programming)的符号数学系统第三方库,最初由Google大脑小组的工程师开发,现在主要用于开发深度学习系统,其主要优点是分布式计算,特别是在多GPU的环境中能高效地使用资源。

3.Keras深度学习

TensorFlow属于比较底层的库,调用方法相对比较复杂,而Keras可以视为其上层封装,它提供更具人性化的API,降低了使用难度,但同时也失去了部分灵活性。除了TensorFlow,Keras还支持深度学习的Theano作为底层库。