Python 在網頁爬蟲、數據挖掘、機器學習和自然語言處理領域的應用情況如何?


python在網頁爬蟲、數據挖掘、機器學習和自然語言處理領域的應用情況如何?

Python的快速迭代能力讓它收到青睞。按照樓主的問題一個個回答,結合我有限的經驗:

1)爬蟲Scrapy,簡單易用。用rq-queue結合的話很容易構造一個分散式的爬蟲。我曾經這樣爬下了整個豆瓣的好友關係圖。
2)數據挖掘里常用的演算法python里都有實現。肖智博提到的scikit learn可謂翹楚。不僅文檔清晰,且幾乎需要常用的演算法均有實現。我們用scikit learn做了一個evemt detection的系統。整個系統用python寫成,機器學習部分用python
3)nlp部分不是特別了解。nltk很普遍的被很多大學課程用到。

企業里:
據我所知公司里的使用情況

google:爬蟲C++,數據挖掘C++,nlp C++。python用來處理數據。
twitter:所有服務均用java和scala,python用來寫快速迭代的工具。比如說做搜索引擎的演算法的同事寫了一個python客戶端用於內部測試搜索質量,我自己用py寫好了一個搜索詞推薦系統,包括介面,演算法和界面,通過測試後改寫成java。

一點感想:
py強項在於,其他語言幾百句做的事情py可以幾十行,幫助開發者專註問題。而且綜上各種工具包齊備,沒有人會花時間寫個svm(還要保證不寫錯)。但是py有個巨大的缺點,仍然是,慢。有人會說,演算法優化才重要,常數優化沒必要。但是現實狀況是,大家都是在做常數優化,因為假設演算法優化得下來,設計階段就優化好了,這也是為什麼在twitter把py譯成java的原因。

但是總的來說,即使用py開發完畢再譯,也比直接用java來寫來測快速得多。


Python在這方面的package非常齊全:

網頁爬蟲: scrapy(不太清楚)
數據挖掘: numpy, scipy, matplotlib, pandas(頭三個是業界標準,第四個模擬R)
機器學習: scikit-learn, libsvm(極好)
自然語言處理: nltk(極好)


既然是要問應用情況的話,這個還是邀請一些業界人士回答比較好。

就自己平時看到的情況看,隨著nltk, scikitlearn這些package越來越好,在相應的領域應用情況就越來越好。而且這幾年的pycon上面,機器學習,自然語言處理相關的talk越來越多。pandas最近更新非常頻繁,然後在2012年的pycon上pandas的作者不但做了talk還做了tutorial。

目前制約python在上述領域大規模應用的瓶頸還是速度,不過隨著pypy,cython近期的迅猛發展以及分散式、並行計算相關的包越來越多,python將來是可以在上述領域大展身手的。

補充:如果是爬蟲的話,scrapy(http://scrapy.org/) ,你值得擁有


Python簡潔、開源項目多,網路處理能力強,所以適合做模型驗證、數據處理、網路處理等內容,有cython、pypy等解決方案用以加速似的模型用於實際生產。

關於提到的幾個領域,簡單說下自己的見解吧:
網頁爬蟲:scrapy始終作為爬網頁的最佳選擇,使用過Java、C#的爬蟲,較scrapy有所差距。做一個爬蟲不會是整個項目的重點,因此簡潔的架構、python簡潔的代碼、scrapy強大的工具包總是可以用最少的代價很好的完成問題。

數據挖掘/機器學習:numpy、scipy、pandans、matploit、theano、pylearn2,各種工具包應該說應有盡有了,numpy和cython的結合還可以做出速度也不遜色的model,matploit作圖能力強,最新的技術如DP都有非常perfect的開源項目。只是scikit-learn中有些工具包的速度確實有點想讓人吐槽。另外有很多工具包封上了python的介面。

自然語言處理領域:nltk確實是最佳的工具,相比有時候還需要java的stanfordnlp,其他零零碎碎還有些不錯的語料相關的工具集,有了好的語料處理工具,其實nlp和ml也沒那麼大區別了。

總之,珍愛生命使用python不只是段子吧,當然語言總是有局限性的。


爬蟲:Python原生的urllib其實已經很好用了,非同步的請找Scrapy。
數據挖掘:這個沒有所謂統一的包,因為數據挖掘這個邊界本身就很不清晰。不過我覺得numpy和scipy能涵蓋大部分數據挖掘工具包所需要的usage case。大數據方面,Pig提供可以支持Python定義的UDF,Yelp的mrjob可以使用python直接寫MapReduce。
機器學習:Scikit Learn是公認的好用,大有成為行業標準的潛力。
NLP:nltk貌似不錯。了解不多,就不多說了。


python的爬蟲還是很棒的~
這是我的新浪微博爬蟲,歡迎指教~~
畢業設計 – 偏執狂


爬蟲:我沒用過現有的python爬蟲工具,只是之前用python寫過簡單的爬蟲爬有妖氣的漫畫。無奈有妖氣的反爬機制太強大,只能作罷。但是爬蟲本身沒問題,python寫的很快,Beautiful Soup這個網頁解析工具很好用,總的代碼量很少。

數據挖掘、機器學習:這篇文章(人工智慧和機器學習領域有哪些有趣的開源項目?)里提到的10個項目4個是python的。numpy, scipy, matplotlib三個是python科學計算的基礎庫。大部分其他的python機器學習庫都建立在他們的基礎上。比如主題模型Gensim,機器學習工具包scikits.learn,自然語言處理工具包NLTK。數學表達式模擬工具theano。

不過最近在用theano,所以這個可以說多一點。theano能幫助你快速構建機器學習尤其是深度學習模型(你想直接用現有實現好的模型那就不必了)。

theano有自動求導,GPU訓練加速等功能,不過對我來說,最好用的還是自動求導。你定義好模型給定cost function,就能調用函數(grad)自動求導。因為現在嘗試構建的模型算是各種神經網路模型的變形組合,數學沒學好的孩子表示求導壓力很大%&>_&<%,而且也容易寫錯。

但是,缺點也挺明顯,最麻煩的是很不好debug,因為構建模型用的都是符號表達式(symbolic),符號表達式本身是無法運行的,根本無法debug!你需要編譯,然後在編譯的時候指定debug mode或者啟用monitor機制,但感覺也不好用啊。。。而且不用GPU速度也慢。。。

自然語言處理(NLP):NLP算是眾多CS研究方向中非常重視實踐的了,各種文本處理的雜活非常多。之前前輩都會用perl腳本,但後來基本上都被python替代了,因為python代碼可讀性強,更加規範,開發效率也高。去年實驗室有個博士師兄去NYU讀博士後,老闆要求他們實驗室全體必須都用python。

後來出現NLP工具包NLTK,python基本上就是NLPer第一腳本(甚至是開發)語言了。NLTK配合
《用Python進行自然語言處理》真的是最好的NLP入門實踐教程。

學習python是幾年前。當時在linux下做個小東西本來只打算寫寫shell腳本,但後來覺得shell語法實在是太亂了,根本不適合寫任何需要維護的東西,所以就學了python,據說google現在的腳本基本上都是python(待求證~)

我覺得python開發效率高(互動式的機制也很贊有木有~),而且和其他語言都能較好的結合。所以作為快速開發和膠水語言都是非常好的選擇~

先說這麼多,以後想到再來補充~


python這些年發現迅猛,尤其在數據這一塊,強大的軟體包,採集(scrapy、pyspider)、分詞(jieba)、搜索(whoosh)、數據分析(numpy)、自然語言處理(NLTK)、機器學習(scikit-learn)。不論是Hadoop還是spark都有python的高級介面。因此,python在數據領域的呼聲越來越高。另外python在web端也在逐步發力,豐富的web架構,使python的工程性能逐步提升。


網頁抓取:
python網頁抓取功能十分強大,眾多的標準庫,簡潔易上手,多種方法均可實現。
用Python做網頁抓取與解析入門筆記
我曾經做過urllib2+beautifulsoup、Xpath和scrapy三種的。前兩個可以藉助mongodb資料庫能很好地抓取、解析並保存。scrapy能夠輸出json文件。ps:中文編碼比較頭疼。
數據挖掘:
Python 是一門適合做數據挖掘的語言嗎?
機器學習:
推薦一本書《機器學習實戰》,非常棒。python代碼簡單優雅,易於上手,科學計算軟體包眾多。高效可復用的python是一個不錯的選擇。
自然語言處理:
NLTK目前已經發展超過十年,擁有超過十萬行的代碼。但是在中文處理上並沒有很完整的發展。推薦《python自然語言處理》。python提供了較多的工具和技術。中文研究真的很少,希望更多的人能夠將自己研究的東西放出來給予參考,不像現在搜索一下全是《python自然語言處理》書上的內容。
python的nltk中文使用和學習資料匯總幫你入門提高


自然語言處理上nltk的庫好用,當然主要還是英文文本用起來比較方便。
爬蟲的話Scrapy完全夠用了,性能上其實我覺得夠用了。
機器學習的話LibSVM支持Python。
海量數據處理的話,豆瓣的Dpark,是Spark的變種實現。
信息檢索的話Hypy和Whoosh在性能上並不遜色.
另外還用Matplotlib可以做數據可視化顯示。


google對python使用的比較多,而且python之父也在google,由此可以看出python在網頁爬蟲,數據挖掘等的地位了。python的優勢在於使用方便,可用的庫很多,當你打算做一件工作的時候,你會發現,你需要的東西都已經存在,你自己進行組裝就可以了,比如做網頁爬蟲,就可以使用scrapy來完成。


同問,目前在熟悉python的工具,準備系統學習下數據挖掘。用到的軟體包包括numpy,nltk,networkx,matplotlib


我搬一個答案,我愛自然語言處理 今天發了一個博文 Python 網頁爬蟲 文本處理 科學計算 機器學習 數據挖掘兵器譜 在這塊作了詳盡的描述。


大數據實戰課程第一季Python基礎和網路爬蟲數據分析

網盤地址————————https://pan.baidu.com/s/1jI039dk 密碼: 4cym

課程共10章,66小節

本課程面向從未接觸過Python的學員,從最基礎的語法開始講起,逐步進入到目前各種流行的應用。整個課程分為基礎和實戰兩個單元。

基礎部分包括Python語法和面向對象、函數式編程兩種編程範式,基礎部分會介紹Python語言中的各種特色數據結構,如何使用包和函數,幫助同學快速通過語法關。

在實戰部分選擇了網路爬蟲、資料庫開發、Web網站3種最基礎的應用類型,詳細介紹其思想原理,並通過案例講解Python中的實現方案,讓學員真正達到融會貫通、舉一反三的效果。並應用到自己的工作環境中。

1.Python語言開發要點詳解

一、模塊的概念.主模塊和非主模塊的區別.pycharm中定義代碼模版

二、安裝pip 多個虛擬python環境

三、語法.變數.內置類型.運算符

四、if.for.while.else

五、數據結構.列表.元組.字典.集合

六、函數.類.異常

2.Python數據類型

七、列表和列表解析

八、filter和map

九、生成器表達是

十、元組

十一、字元串

十二、字元串之中文處理

十三、字典

十四、集合

3.函數和函數式編程

十五、函數參數和變長參數列表

十六、函數返回值.變數作用域.和函數__doc__屬性

十七、函數的嵌套定義和閉包和裝飾器介紹

十八、裝飾器例子(日誌裝飾器和身份認證裝飾器)

十九、迭代器和生成器1

二十、生成器例子

4.面向對象編程

二十一、認識經典類和新式類

二十二、公有屬性和私有屬性屬性

二十三、訪問屬性.屬性裝飾器.描述符

二十四、描述符

二十五、方法.實例方法.靜態方法.類方法

二十六、特殊方法.運算符重載

二十七、繼承.多重繼承.super

5.網頁爬蟲(單線程,保存到文本文件)

二十八、爬蟲介紹

二十九、工具包介紹

三十、request使用演示

三十一、xpath介紹

三十二、xpath使用演示

三十三、新聞爬蟲

三十四、分頁欄爬蟲

三十五、豆瓣爬蟲

6.mysql資料庫

三十六、概述.sql資料庫和nosql資料庫的區別

三十七、環境準備.驅動包介紹

三十八、mysqlconnector的使用

三十九、mysqldb使用

四十、sqlalchemy介紹.ORM的優點介紹

四十一、sqlalchemy開發流程

四十二、sqlalchemy代碼演示.1

四十三、sqlalchemy代碼演示2

7.mongodb資料庫

四十四、mongodb介紹

四十五、安裝.命令行.mongovue演示

四十六、python中插入記錄

四十七、python中查詢記錄

四十八、python中更新記錄

四十九、python中刪除記錄

五十、聚合操作

8.多線程和多進程

五十一、概述

五十二、多線程編程

五十三、多進程編程

五十四、綜合案例-網路爬蟲3

9.scrapy實戰

五十五、scrapy介紹和安裝

五十六、scrapy項目框架

五十七、scrapy框架和案例需求分析

五十八、實戰

10.django實戰

五十九、django架構介紹

六十、階段1.安裝.創建項目.創建應用.初始配置

六十一、階段1.配置URL映射.視圖函數

六十二、階段2.定義ORM並註冊到後台管理模塊

六十三、階段3.模版的繼承.表單的使用.數據的展示

六十四、階段4.多應用URL配置.數據的DML操作

六十五、部署知識介紹


編寫網路數據爬蟲的技術有許多方面,探碼科技(http://www.tanmer.com/bigdata)給國外好幾家互聯網公司提供過數據爬蟲服務,我們採用的技術大致梳理一下為:

1. Ruby
Ruby作為一種提倡快樂編程的腳本語言,如Python腳本一樣,能夠提供簡單、快速、高效的數據採集業務。 至於如何比較Ruby與Python的優劣,筆者認為不在於技術本身,在於你掌握的程度。

2. Kapow
強大的付費數據採集軟體提供商,可視化,功能強大,採用獨特的開發模型,能夠很快的設計一個採集計劃,擁有強大的Design模型,Server模型。

在萬物互聯的今天,數據本身作為企業的資產,如何運用起來將是核心議題。網路數據即:採用先進的網路爬蟲技術,分散式計算能力,針對定製的目標數據源進行網路信息的採集、提取、挖掘、處理,從而為各種信息服務系統提供數據輸入。探碼數據團隊先後服務國內外多家企業,具備大數據處理能力,多線程並發、人工智慧學習、任務自動化等能力。


推薦閱讀:

什麼是機器學習?
如何評價聚類結果的好壞?
為什麼交叉熵(cross-entropy)可以用於計算代價?
ICLR 2017 有什麼值得關注的亮點?
如何用簡單易懂的例子解釋條件隨機場(CRF)模型?它和HMM有什麼區別?

TAG:Python | 數據挖掘 | 機器學習 | 自然語言處理 | 爬蟲 (計算機網路) |