NumPy+SciPy+Matplotlib+iPython,Python 的这几个工具包集合到一起也可以做到集数值计算,可视化工具及交互于一身。同时,这几个工具包非常重要,特别是 NumPy 和 SciPy,也是很多 Python 文本处理 & 机器学习 & 数据挖掘工具包的基础。
1. Numpy:
Numpy 是使用 Python 进行科学计算的基础库,主要提供高性能的 N 维数组实现以及计算能力,还提供了和其它语言如 C/C++ 集成的能力,此外还实现了一些基础的数学算法,如线性代数相关、傅里叶变换及随机数生成等。NumPy 提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray 是存储单一数据类型的多维数组,而 ufunc 则是能够对数组进行处理的函数。
官方主页:http://www.numpy.org/
2. SciPy:Scientific Computing Tools for Python
“SciPy 是一个开源的 Python 算法库和数学工具包,SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。其功能与软件 MATLAB、Scilab 和 GNU Octave 类似。 Numpy 和 Scipy 常常结合着使用,Python 大多数机器学习库都依赖于这两个模块。”—- 引用自 “Python 机器学习库”
官方主页:http://www.scipy.org/
3. Matplotlib
Matplotlib 是 python 数据可视化工具包。是 python 最著名的绘图库,它提供了一整套和 matlab 相似的命令 API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入 GUI 应用程序中。Matplotlib 可以配合 ipython shell 使用,提供不亚于 Matlab 的绘图体验,总之用过了都说好。
在 IPython 控制台使用 Matplotlib,可以使用 ipython--matplotlib 命令来启动 IPython 控制台程序;如果要在 IPython notebook 里使用 Matplotlib,则在 notebook 的开始位置插入 %matplotlib inline 魔术命令即可。
IPython 为 Matplotlib 专门提供了特殊的交互模式。IPython 的 Matplotlib 模式有两个优点,一是提供了非阻塞的画图操作,二是不需要显示地调用 show()方法来显示画出来的图片。
官方主页:http://matplotlib.org/
机器学习和数据挖掘这两个概念不太好区分,这里就放到一起了。这方面的开源 Python 工具包有很多,这里先从熟悉的讲起,再补充其他来源的资料,也欢迎大家补充。
2.1 scikit-learn: Machine Learning in Python
首先是 scikit-learn,scikit-learn 是一个基于 NumPy, SciPy, Matplotlib 的开源机器学习工具包,主要涵盖分类,回归和聚类算法,例如 SVM, 逻辑回归,朴素贝叶斯,随机森林,k-means 等算法,代码和文档都非常不错,在许多 Python 项目中都有应用。例如在我们熟悉的 NLTK 中。scikit-learn 提供了一致的调用接口。它基于 Numpy 和 scipy 等 Python 数值计算库,提供了高效的算法实现。总结起来,scikit-learn 工具包有以下几个优点。
一、文档齐全:官方文档齐全,更新及时。
二、接口易用:针对所有算法提供了一致的接口调用规则,包括 KNN、K-Means 还是 PCA等。
三、算法全面:涵盖主流机器学习任务的算法,包括回归算法、分类算法、聚类分析、数据降维处理等。
缺点是 scikit-learn 不支持分布式计算,不适合用来处理超大型数据。
官方主页:http://scikit-learn.org/
2.2 Pandas: Python Data Analysis Library
Pandas 是一个强大的时间序列数据处理工具包,Pandas 是基于 Numpy 构建的,比 Numpy 的使用更简单。最初开发的目的是为了分析财经数据,现在已经广泛应用在 Python 数据分析领域中。Pandas,最基础的数据结构是 Series,用它来表达一行数据,可以理解为一维的数组。另一个关键的数据结构为 DataFrame,它表示的是二维数组
Pandas 是基于 NumPy 和 Matplotlib 开发的,主要用于数据分析和数据可视化,它的数据结构 DataFrame 和 R 语言里的 data.frame 很像,特别是对于时间序列数据有自己的一套分析机制。有一本书《Python for Data Analysis》,作者是 Pandas 的主力开发,依次介绍了 iPython, NumPy, Pandas 里的相关功能,数据可视化,数据清洗和加工,时间数据处理等,案例包括金融股票数据挖掘等,相当不错。
官方主页:http://pandas.pydata.org/
2.3 mlpy – Machine Learning Python
Mlpy 是基于 NumPy/SciPy 的 Python 机器学习模块,它是 Cython 的扩展应用。包含的机器学习算法很多,有时间单独写一篇记录
官方主页:http://mlpy.sourceforge.net/
2.4 PyBrain
“PyBrain(Python-Based Reinforcement Learning, Artificial Intelligence and Neural Network) 是 Python 的一个机器学习模块,它的目标是为机器学习任务提供灵活、易应、强大的机器学习算法。(这名字很霸气)
PyBrain 正如其名,包括神经网络、强化学习 (及二者结合)、无监督学习、进化算法。因为目前的许多问题需要处理连续态和行为空间,必须使用函数逼近(如神经网络) 以应对高维数据。PyBrain 以神经网络为核心,所有的训练方法都以神经网络为一个实例。”
官方主页:http://pybrain.org/
2.5 Theano
Theano 是一个 Python 库,用来定义、优化和模拟数学表达式计算,用于高效的解决多维数组的计算问题。Theano 的特点:紧密集成 Numpy;高效的数据密集型 GPU 计算;高效的符号微分运算;高速和稳定的优化;动态生成 c 代码;广泛的单元测试和自我验证。自 2007 年以来,Theano 已被广泛应用于科学运算。theano 使得构建深度学习模型更加容易,可以快速实现多种模型。
官方网站:http://deeplearning.net/software/theano/
2.6 Pylearn2
Pylearn2 建立在 theano 上,部分依赖 scikit-learn 上,目前 Pylearn2 正处于开发中,将可以处理向量、图像、视频等数据,提供 MLP、RBM、SDA 等深度学习模型。
官方主页:http://deeplearning.net/software/pylearn2/
一个真实的项目,一定是从获取数据开始的。无论文本处理,机器学习和数据挖掘,都需要数据,除了通过一些渠道购买或者下载的专业数据外,常常需要自己动手爬数据,这个时候,爬虫就显得格外重要了。幸好,Python 提供了一批很不错的网页爬虫工具框架,既能爬取数据,也能获取和清洗数据。
3.1 Scrapy
鼎鼎大名的 Scrapy,相信不少同学都有耳闻,课程图谱中的很多课程都是依靠 Scrapy 抓去的,这方面的介绍文章有很多,推荐大牛 pluskid 早年的一篇文章:《Scrapy 轻松定制网络爬虫》,历久弥新。
官方主页:http://scrapy.org/
Github 代码页: https://github.com/scrapy/scrapy
3.2 Beautiful Soup
客观的说,Beautifu Soup 不完全是一套爬虫工具,需要配合 urllib 使用,而是一套 HTML / XML 数据分析,清洗和获取工具。
官方主页:http://www.crummy.com/software/BeautifulSoup/
3.3 Python-Goose
Goose 最早是用 Java 写得,后来用 Scala 重写,是一个 Scala 项目。Python-Goose 用 Python 重写,依赖了 Beautiful Soup。前段时间用过,感觉很不错,给定一个文章的 URL, 获取文章的标题和内容很方便。
Github 主页:https://github.com/grangier/python-goose
获取文本数据之后,依据任务的不同,就需要进行基本的文本处理了,譬如对于英文来说,需要基本的 tokenize,对于中文,则需要常见的中文分词,进一步的话,无论英文中文,还可以词性标注,句法分析,关键词提取,文本分类,情感分析等等。这个方面,特别是面向英文领域,有很多优秀的工具包,我们一一道来。
4.1 NLTK — Natural Language Toolkit
搞自然语言处理的同学应该没有人不知道 NLTK 吧,这里也就不多说了。不过推荐两本书籍给刚刚接触 NLTK 或者需要详细了解 NLTK 的同学: 一个是官方的《Natural Language Processing with Python》,以介绍 NLTK 里的功能用法为主,同时附带一些 Python 知识,同时国内陈涛同学友情翻译了一个中文版,这里可以看到:推荐《用 Python 进行自然语言处理》中文翻译 - NLTK 配套书;另外一本是《Python Text Processing with NLTK 2.0 Cookbook》,这本书要深入一些,会涉及到 NLTK 的代码结构,同时会介绍如何定制自己的语料和模型等,相当不错。
官方主页:http://www.nltk.org/
Github 代码页:https://github.com/nltk/nltk
4.2 Pattern
Pattern 由比利时安特卫普大学 CLiPS 实验室出品,客观的说,Pattern 不仅仅是一套文本处理工具,它更是一套 web 数据挖掘工具,囊括了数据抓取模块(包括 Google, Twitter, 维基百科的 API,以及爬虫和 HTML 分析器),文本处理模块(词性标注,情感分析等),机器学习模块 (VSM, 聚类,SVM)以及可视化模块等,可以说,Pattern 的这一整套逻辑也是这篇文章的组织逻辑,不过这里我们暂且把 Pattern 放到文本处理部分。我个人主要使用的是它的英文处理模块 Pattern.en, 有很多很不错的文本处理功能,包括基础的 tokenize, 词性标注,句子切分,语法检查,拼写纠错,情感分析,句法分析等,相当不错。
官方主页:http://www.clips.ua.ac.be/pattern
4.3 TextBlob: Simplified Text Processing
TextBlob 是一个很有意思的 Python 文本处理工具包,它其实是基于上面两个 Python 工具包 NLKT 和 Pattern 做了封装(TextBlob stands on the giant shoulders of NLTK and pattern, and plays nicely with both),同时提供了很多文本处理功能的接口,包括词性标注,名词短语提取,情感分析,文本分类,拼写检查等,甚至包括翻译和语言检测,不过这个是基于 Google 的 API 的,有调用次数限制。TextBlob 相对比较年轻,有兴趣的同学可以关注。
官方主页:http://textblob.readthedocs.org/en/dev/
Github 代码页:https://github.com/sloria/textblob
4.4 MBSP for Python
MBSP 与 Pattern 同源,同出自比利时安特卫普大学 CLiPS 实验室,提供了 Word Tokenization, 句子切分,词性标注,Chunking, Lemmatization,句法分析等基本的文本处理功能,感兴趣的同学可以关注。
官方主页:http://www.clips.ua.ac.be/pages/MBSP
4.5 Gensim: Topic modeling for humans
Gensim 是一个相当专业的主题模型 Python 工具包,无论是代码还是文档,我们曾经用《如何计算两个文档的相似度》介绍过 Gensim 的安装和使用过程,这里就不多说了。
官方主页:http://radimrehurek.com/gensim/index.html
github 代码页:https://github.com/piskvorky/gensim
4.6 langid.py: Stand-alone language identification system
语言检测是一个很有意思的话题,不过相对比较成熟,这方面的解决方案很多,也有很多不错的开源工具包,不过对于 Python 来说,我使用过 langid 这个工具包,也非常愿意推荐它。langid 目前支持 97 种语言的检测,提供了很多易用的功能,包括可以启动一个建议的 server,通过 json 调用其 API,可定制训练自己的语言检测模型等,可以说是 “麻雀虽小,五脏俱全”。
Github 主页:https://github.com/saffsd/langid.py
4.7 Jieba
Jieba 做最好的 Python 中文分词组件 “Jieba” (Chinese for “to stutter”) Chinese text segmentation: built to be the best Python Chinese word segmentation module.
好了,终于可以说一个国内的 Python 文本处理工具包了:结巴分词,其功能包括支持三种分词模式(精确模式、全模式、搜索引擎模式),支持繁体分词,支持自定义词典等,是目前一个非常不错的 Python 中文分词解决方案。
Github 主页:https://github.com/fxsjy/jieba