Python-網頁爬蟲-&-文本處理-&-科學計算-&-機器學習-&-數據挖掘兵器譜[轉]
原文:http://www.52nlp.cn/python-網頁爬蟲-文本處理-科學計算-機器學習-數據挖掘
曾經因為NLTK的緣故開始學習Python,之後漸漸成為我工作中的第一輔助腳本語言,雖然開發語言是C/C++,但平時的很多文本數據處理任務都交給了Python。離開騰訊創業後,第一個作品課程圖譜也是選擇了Python系的Flask框架,漸漸的將自己的絕大部分工作交給了Python。這些年來,接觸和使用了很多Python工具包,特別是在文本處理,科學計算,機器學習和數據挖掘領域,有很多很多優秀的Python工具包可供使用,所以作為Pythoner,也是相當幸福的。其實如果仔細留意微博,你會發現很多這方面的分享,自己也Google了一下,發現也有同學總結了“Python機器學習庫”,不過總感覺缺少點什麼。最近流行一個詞,全棧工程師(full stack engineer),作為一個苦逼的創業者,天然的要把自己打造成一個full stack engineer,而這個過程中,這些Python工具包給自己提供了足夠的火力,所以想起了這個系列。當然,這也僅僅是拋磚引玉,希望大家能提供更多的線索,來彙總整理一套Python網頁爬蟲,文本處理,科學計算,機器學習和數據挖掘的兵器譜。
一、Python網頁爬蟲工具集
一個真實的項目,一定是從獲取數據開始的。無論文本處理,機器學習和數據挖掘,都需要數據,除了通過一些渠道購買或者下載的專業數據外,常常需要大家自己動手爬數據,這個時候,爬蟲就顯得格外重要了,幸好,Python提供了一批很不錯的網頁爬蟲工具框架,既能爬取數據,也能獲取和清洗數據,我們也就從這裡開始了:
鼎鼎大名的Scrapy,相信不少同學都有耳聞,課程圖譜中的很多課程都是依靠Scrapy抓去的,這方面的介紹文章有很多,推薦大牛pluskid早年的一篇文章:《Scrapy 輕鬆定製網絡爬蟲》,歷久彌新。
主頁:http://scrapy.org/ Github代碼頁: https://github.com/scrapy/scrapy
讀書的時候通過《集體智慧編程》這本書知道Beautiful Soup的,後來也偶爾會用用,非常棒的一套工具。客觀的說,Beautifu Soup不完全是一套爬蟲工具,需要配合urllib使用,而是一套HTML/XML數據分析,清洗和獲取工具。
主頁:http://www.crummy.com/software/BeautifulSoup/
Goose最早是用Java寫得,後來用Scala重寫,是一個Scala項目。Python-Goose用Python重寫,依賴了Beautiful Soup。前段時間用過,感覺很不錯,給定一個文章的URL, 獲取文章的標題和內容很方便。
Github主頁:https://github.com/grangier/python-goose
二、Python文本處理工具集
從網頁上獲取文本數據之後,依據任務的不同,就需要進行基本的文本處理了,譬如對於英文來說,需要基本的tokenize,對於中文,則需要常見的中文分詞,進一步的話,無論英文中文,還可以詞性標註,句法分析,關鍵詞提取,文本分類,情感分析等等。這個方面,特別是面向英文領域,有很多優秀的工具包,我們一一道來。
- 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
Pattern由比利時安特衛普大學CLiPS實驗室出品,客觀的說,Pattern不僅僅是一套文本處理工具,它更是一套web數據挖掘工具,囊括了數據抓取模塊(包括Google, Twitter, 維基百科的API,以及爬蟲和HTML分析器),文本處理模塊(詞性標註,情感分析等),機器學習模塊(VSM, 聚類,SVM)以及可視化模塊等,可以說,Pattern的這一整套邏輯也是這篇文章的組織邏輯,不過這裡我們暫且把Pattern放到文本處理部分。我個人主要使用的是它的英文處理模塊Pattern.en, 有很多很不錯的文本處理功能,包括基礎的tokenize, 詞性標註,句子切分,語法檢查,拼寫糾錯,情感分析,句法分析等,相當不錯。
主頁:http://www.clips.ua.ac.be/pattern
- 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
- MBSP for Python
MBSP與Pattern同源,同出自比利時安特衛普大學CLiPS實驗室,提供了Word Tokenization, 句子切分,詞性標註,Chunking, Lemmatization,句法分析等基本的文本處理功能,感興趣的同學可以關注。
主頁:http://www.clips.ua.ac.be/pages/MBSP
- Gensim: Topic modeling for humans
Gensim是一個相當專業的主題模型Python工具包,無論是代碼還是文檔,我們曾經用《如何計算兩個文檔的相似度》介紹過Gensim的安裝和使用過程,這裡就不多說了。
主頁:http://radimrehurek.com/gensim/index.html github代碼頁:https://github.com/piskvorky/gensim
- langid.py: Stand-alone language identification system
語言檢測是一個很有意思的話題,不過相對比較成熟,這方面的解決方案很多,也有很多不錯的開源工具包,不過對於Python來說,我使用過langid這個工具包,也非常願意推薦它。langid目前支持97種語言的檢測,提供了很多易用的功能,包括可以啟動一個建議的server,通過json調用其API,可定製訓練自己的語言檢測模型等,可以說是“麻雀雖小,五臟俱全”。
Github主頁:https://github.com/saffsd/langid.py
- Jieba: 結巴中文分詞
好了,終於可以說一個國內的Python文本處理工具包了:結巴分詞,其功能包括支持三種分詞模式(精確模式、全模式、搜索引擎模式),支持繁體分詞,支持自定義詞典等,是目前一個非常不錯的Python中文分詞解決方案。
Github主頁:https://github.com/fxsjy/jieba
感謝微博朋友 @大山坡的春 提供的線索:我們組同事之前發佈了xTAS,也是基於python的text mining工具包,歡迎使用,鏈接:http://t.cn/RPbEZOW。看起來很不錯的樣子,回頭試用一下。
Github代碼頁:https://github.com/NLeSC/xtas
三、Python科學計算工具包
說起科學計算,大家首先想起的是Matlab,集數值計算,可視化工具及交互於一身,不過可惜是一個商業產品。開源方面除了GNU Octave在嘗試做一個類似Matlab的工具包外,Python的這幾個工具包集合到一起也可以替代Matlab的相應功能:NumPy+SciPy+Matplotlib+iPython。同時,這幾個工具包,特別是NumPy和SciPy,也是很多Python文本處理 & 機器學習 & 數據挖掘工具包的基礎,非常重要。最後再推薦一個系列《用Python做科學計算》,將會涉及到NumPy, SciPy, Matplotlib,可以做參考。
NumPy幾乎是一個無法迴避的科學計算工具包,最常用的也許是它的N維數組對象,其他還包括一些成熟的函數庫,用於整合C/C++和Fortran代碼的工具包,線性代數、傅裡葉變換和隨機數生成函數等。NumPy提供了兩種基本的對象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray是存儲單一數據類型的多維數組,而ufunc則是能夠對數組進行處理的函數。
- SciPy:Scientific Computing Tools for Python
“SciPy是一個開源的Python算法庫和數學工具包,SciPy包含的模塊有最優化、線性代數、積分、插值、特殊函數、快速傅裡葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算。其功能與軟件MATLAB、Scilab和GNU Octave類似。 Numpy和Scipy常常結合著使用,Python大多數機器學習庫都依賴於這兩個模塊。”—-引用自“Python機器學習庫”
matplotlib 是python最著名的繪圖庫,它提供了一整套和matlab相似的命令API,十分適合交互式地進行製圖。而且也可以方便地將它作為繪圖控件,嵌入GUI應用程序中。Matplotlib可以配合ipython shell使用,提供不亞於Matlab的繪圖體驗,總之用過了都說好。
“iPython 是一個Python 的交互式Shell,比默認的Python Shell 好用得多,功能也更強大。 她支持語法高亮、自動完成、代碼調試、對象自省,支持 Bash Shell 命令,內置了許多很有用的功能和函式等,非常容易使用。 ” 啟動iPython的時候用這個命令“ipython –pylab”,默認開啟了matploblib的繪圖交互,用起來很方便。
四、Python 機器學習 & 數據挖掘 工具包
機器學習和數據挖掘這兩個概念不太好區分,這裡就放到一起了。這方面的開源Python工具包有很多,這裡先從熟悉的講起,再補充其他來源的資料,也歡迎大家補充。
- scikit-learn: Machine Learning in Python
首先推薦大名鼎鼎的scikit-learn,scikit-learn是一個基於NumPy, SciPy, Matplotlib的開源機器學習工具包,主要涵蓋分類,迴歸和聚類算法,例如SVM, 邏輯迴歸,樸素貝葉斯,隨機森林,k-means等算法,代碼和文檔都非常不錯,在許多Python項目中都有應用。例如在我們熟悉的NLTK中,分類器方面就有專門針對scikit-learn的接口,可以調用scikit-learn的分類算法以及訓練數據來訓練分類器模型。這裡推薦一個視頻,也是我早期遇到scikit-learn的時候推薦過的:推薦一個Python機器學習工具包Scikit-learn以及相關視頻–Tutorial: scikit-learn – Machine Learning in Python
- Pandas: Python Data Analysis Library
第一次接觸Pandas是由於Udacity上的一門數據分析課程“Introduction to Data Science” 的Project需要用Pandas庫,所以學習了一下Pandas。Pandas也是基於NumPy和Matplotlib開發的,主要用於數據分析和數據可視化,它的數據結構DataFrame和R語言裡的data.frame很像,特別是對於時間序列數據有自己的一套分析機制,非常不錯。這裡推薦一本書《Python for Data Analysis》,作者是Pandas的主力開發,依次介紹了iPython, NumPy, Pandas裡的相關功能,數據可視化,數據清洗和加工,時間數據處理等,案例包括金融股票數據挖掘等,相當不錯。
=====================================================================
分割線,以上工具包基本上都是自己用過的,以下來源於其他同學的線索,特別是《Python機器學習庫》,《23個python的機器學習包》,做了一點增刪修改,歡迎大家補充
主頁:http://mlpy.sourceforge.net/
- MDP:The Modular toolkit for Data Processing
“MDP用於數據處理的模塊化工具包,一個Python數據處理框架。 從用戶的觀點,MDP是能夠被整合到數據處理序列和更復雜的前饋網絡結構的一批監督學習和非監督學習算法和其他數據處理單元。計算依照速度和內存需求而高效的執行。從科學開發者的觀點,MDP是一個模塊框架,它能夠被容易地擴展。新算法的實現是容易且直觀的。新實現的單元然後被自動地與程序庫的其餘部件進行整合。MDP在神經科學的理論研究背景下被編寫,但是它已經被設計為在使用可訓練數據處理算法的任何情況中都是有用的。其站在用戶一邊的簡單性,各種不同的隨時可用的算法,及應用單元的可重用性,使得它也是一個有用的教學工具。”
主頁:http://mdp-toolkit.sourceforge.net/
“PyBrain(Python-Based Reinforcement Learning, Artificial Intelligence and Neural Network)是Python的一個機器學習模塊,它的目標是為機器學習任務提供靈活、易應、強大的機器學習算法。(這名字很霸氣)
PyBrain正如其名,包括神經網絡、強化學習(及二者結合)、無監督學習、進化算法。因為目前的許多問題需要處理連續態和行為空間,必須使用函數逼近(如神經網絡)以應對高維數據。PyBrain以神經網絡為核心,所有的訓練方法都以神經網絡為一個實例。”
- PyML – machine learning in Python
“PyML是一個Python機器學習工具包,為各分類和迴歸方法提供靈活的架構。它主要提供特徵選擇、模型選擇、組合分類器、分類評估等功能。”
項目主頁:http://pyml.sourceforge.net/
- Milk:Machine learning toolkit in Python.
“Milk是Python的一個機器學習工具箱,其重點是提供監督分類法與幾種有效的分類分析:SVMs(基於libsvm),K-NN,隨機森林經濟和決策樹。它還可以進行特徵選擇。這些分類可以在許多方面相結合,形成不同的分類系統。對於無監督學習,它提供K-means和affinity propagation聚類算法。”
主頁:http://luispedro.org/software/milk
http://luispedro.org/software/milk
- PyMVPA: MultiVariate Pattern Analysis (MVPA) in Python
“PyMVPA(Multivariate Pattern Analysis in Python)是為大數據集提供統計學習分析的Python工具包,它提供了一個靈活可擴展的框架。它提供的功能有分類、迴歸、特徵選擇、數據導入導出、可視化等”
- Pyrallel – Parallel Data Analytics in Python
“Pyrallel(Parallel Data Analytics in Python)基於分佈式計算模式的機器學習和半交互式的試驗項目,可在小型集群上運行”
Github代碼頁:http://github.com/pydata/pyrallel
- Monte – gradient based learning in Python
“Monte (machine learning in pure Python)是一個純Python機器學習庫。它可以迅速構建神經網絡、條件隨機場、邏輯迴歸等模型,使用inline-C優化,極易使用和擴展。”
主頁:http://montepython.sourceforge.net
“Theano 是一個 Python 庫,用來定義、優化和模擬數學表達式計算,用於高效的解決多維數組的計算問題。Theano的特點:緊密集成Numpy;高效的數據密集型GPU計算;高效的符號微分運算;高速和穩定的優化;動態生成c代碼;廣泛的單元測試和自我驗證。自2007年以來,Theano已被廣泛應用於科學運算。theano使得構建深度學習模型更加容易,可以快速實現多種模型。PS:Theano,一位希臘美女,Croton最有權勢的Milo的女兒,後來成為了畢達哥拉斯的老婆。”
“Pylearn2建立在theano上,部分依賴scikit-learn上,目前Pylearn2正處於開發中,將可以處理向量、圖像、視頻等數據,提供MLP、RBM、SDA等深度學習模型。”