Python與R的爭鋒:大資料初學者該怎樣選?

來源:互聯網
上載者:User

標籤:R   Python   

個推大資料工程師李樹桓
在當下,人工智慧的浪潮席捲而來。從AlphaGo、無人駕駛技術、Face Service、語音對話,到商城推薦系統,金融業的風控,量化運營、使用者洞察、企業徵信、智能投顧等,人工智慧的應用廣泛滲透到各行各業,也讓資料科學家們供不應求。Python和R作為機器學習的主流語言,受到了越來越多的關注。資料學習領域的新兵們經常不清楚如何在二者之間做出抉擇,本文就語言特性與使用情境為大家對比剖析。

一.Python和R的概念與特性

Python是一種物件導向、解釋型免費開源進階語言。它功能強大,有活躍的社區支援和各式各樣的類庫,同時具備簡潔、易讀以及可擴充等優點,在近幾年成為高人氣的程式設計語言。

Python的優勢:

1、Python的使用情境非常多,不僅和R一樣可以用於統計分析,更廣泛應用於系統編程、圖形處理、文本處理、資料庫編程、網路編程、Web編程、網路爬蟲等,非常適合那些想深入鑽研資料分析或者應用統計技術的程式員。

2、目前主流的大資料和機器學習架構對Python都提供了很好的支援,比如Hadoop、Spark、Tensorflow;同時,Python也有著強大的社區支援,特別是近年來隨著人工智慧的興起,越來越多的開發人員活躍在Python的社區中。

3、Python作為一種膠水語言,能夠和其他語言連結在一起,比如你的統計分析部分可以用R語言寫,然後封裝為Python可以調用的擴充類庫。

R語言是一種用來進行資料探索、統計分析和作圖的解釋型語言,但更像一種數學計算的環境。它模組豐富,為數學計算提供了極為方便的編程方式,特別是針對矩陣的計算。

R語言的優勢:

1、R語言擁有許多優雅直觀的圖表,常見的資料視覺效果的工具包有:

· 互動式圖表rCharts、Plotly,互動時序圖dygraphs,互動樹狀圖TreeMap

· ggplot2-一個基於圖形文法的繪圖系統

· lattice-R語言格子圖形

· rbokeh-針對Bokeh的R語言介面

· RGL-使用了OpenGL的3D可視化

· Shiny-用於建立互動式應用和可視化的架構

· visNetwork-互動式網路可視化


散佈圖

時序圖

詞雲圖

2、擁有大量專門面向統計人員的實用功能和豐富的數學工具包。內建base一R的基礎模組、mle一極大似然估計模組、ts一時間序列分析模組、mva一多元統計分析模組、survival一生存分析模組等,同時使用者可以靈活使用數組和矩陣的操作運算子,及一系列連貫而又完整的資料分析中間工具。

3、語言簡潔上手快,不需要明確定義變數類型。比如下面簡簡單單三行代碼,就能定義一元線性迴歸,是不是很酷炫:

x <- 1:10
y <- x+rnorm(10, 0, 1)
fit <- lm(y ~ x)

同時,R語言對向量化的支援程度高,通過向量化運算,資料在計算過程中前後不依賴,是一種高度並行計算的實現,也避免了許多迴圈結構的使用。

當然了,相比於Python它也存在著一些劣勢。比如記憶體管理問題,在大樣本的迴歸中,如使用不當就會出現記憶體不足的情況,但目前spark也提供了對R的支援,開發人員可以使用sparkR進行大資料的計算處理。

二.Python和R在文本資訊挖掘和時序分析方面的區別

Python和R都有非常強大的程式碼程式庫,Python有PyPi,R有CRAN。但兩者方向不同,Python使用的範圍更加廣泛,涉及到方方面面;R更專註統計方面,但在資料量大時運行速度很慢。下面我針對資料分析中的兩種使用情境來比較Python和R:

1. 文本資訊挖掘:

文本資訊挖掘的應用非常廣泛,例如根據網購評價、社交網站的推文或者新聞進行情感極性分析等。這裡我們用例子分析比較一下。

Python有良好的程式包協助我們進行分析。比如NLTK,以及專門針對中文的SnowNLP,包含了中文分詞、詞性標註、情感分析,文本分類、TextRank、TF-IDF等模組。

在用Python做情感極性分析時,首先需要將句子分解為單詞,這裡我們可以使用Python中jieba分詞,使用起來也非常簡單:

word=jieba.cut(m,cut_all=False)

然後操作特徵提取,可以利用NLTK中的stopwords先去除停用詞。如果有需要,可以對文本進行向量化處理,這裡我們可以採用Bag of Words,選擇TF-IDF進行基於權重的向量轉化,也可以使用Word2Vec進行基於相似性的轉化。接下來,使用sklearn包中的pca進行降維:

pca=PCA(n_components=1)

newData=pca.fit_transform(data)

除了pca,還可以選擇使用互資訊或者資訊熵等其他方法。

之後,我們進行分類演算法模型訓練和模型評估,可以使用樸素貝葉斯(NaiveBayes),決策樹(Decision Tree)等NLTK 內建的機器學習方法。

使用R進行情感極性分析

首先需要對資料進行預先處理,安裝Rwordseg/rJava(其中有不少坑)兩個包;

進行資料清理清除掉沒用的符號後,進行分詞:Rwordseg中的segmentCN方法可以對中文進行分詞。當然,也可以使用jiebaR;

接下來構建單詞-文檔-標籤資料集,去除停用詞;

建立文檔-詞項矩陣,可以選擇TermDocumentMatrix,使用weightTfIdf方法得到tf-idf矩陣;

最後用e1071包中的貝葉斯方法進行文本分類,或者可以用RTextTools包中的其他機器學習演算法來完成分類,其中包含九種演算法:BAGGING(ipred:bagging):bagging整合分類

BOOSTING (caTools:LogitBoost):Logit Boosting 整合分類

GLMNET(glmnet:glmnet):基於最大似然的廣義線性迴歸

MAXENT(maxent:maxent):最大熵模型

NNET(nnet:nnet) :神經網路

RF(randomForest:randomForest):隨機森林

SLDA(ipred:slda):scaled 線性判別分析

SVM(e1071:svm) :支援向量機

TREE (tree:tree):遞迴分類樹

2.時序分析:

時間序列分析是根據系統觀察得到的時間序列資料,通過曲線擬合和參數估計來建立數學模型的理論和方法,通常用於金融領域、氣象預測、市場分析領域等。R語言擁有許多程式包可用於處理規則和不規則時間序列,因而更有優勢。

Python進行時序分析的時常用ARIMA(p,d,q)模型,其中d指的是差分項,p和q分別代表自迴歸項和移動平均項。構建ARIMA模型使用最多的就是statsmodels模組,該模組可以用來進行時間序列的差分,建模和模型的檢驗。這裡例舉一個周期性預測的例子:

下面是一組資料,代表美國某公交公司發布的五十年中每年的乘客相關資料(比如1950-2000):

data = [9930, 9318, 9595, 9972, 6706, 5756, 8092, 9551, 8722, 9913, 10151, 7186, 5422, 5337, 10649, 10652, 9310, 11043, 6937, 5476, 8662, 8570, 8981, 8331, 8449, 5773, 5304, 8355, 9477, 9148, 9395, 10261, 7713, 6299, 9424,9795, 10069, 10602, 10427, 8095, 6707, 9767, 11136, 11812, 11006, 11528, 9329, 6818, 10719, 10683]

1).首先,使用pandas進行處理和儲存資料:

data=pd.Series(data)

2).然後需要對資料進行平穩性檢驗,一般利用單位根檢驗,常用的方法有ADF、DFGLS、PP等等:

Python中直接用ADF(data), DFGLS(data)就可以得出pvalue的結果

3).序列平穩性是進行時間序列分析的前提條件,如果上一個步驟顯示結果不平穩,就需要對時間序列做平穩性處理,一般用差分法最多:

diff1 = data.diff(2)

其中diff(object)表示差分的階數,這裡我們使用2階,當然你也可以用1階、3階、4階等等

4).進行白色雜訊檢驗:

value=acorr_ljungbox(data,lags=1)

5).現在,我們的ARIMA(p,d,q)中的d=2,接下來我們進行模型選擇。第一步是計算出p和q,首先檢查平穩時間序列的自相關圖和偏自相關圖,通過sm.graphics.tsa.plot_acf (data)和sm.graphics.tsa.plot_pacf(data),然後通過係數情況進行模型選擇,可供選擇的有AR,MA,ARMA,ARIMA。

6).模型訓練:model=sm.tsa.ARMA(data,(p,d,q)).fit(),此處用ARMA模型計算出p和q,從而訓練出模型。

用R來構建時間序列模型

R針對時間序列有各式各樣的工具包,比如:

library(xts),library(timeSeires),library(zoo)—時間基礎包

library(urca)--進行單位根檢驗

library(tseries)--arma模型

library(fUnitRoots)--進行單位根檢驗

library(FinTS)--調用其中的自迴歸檢驗函數

library(fGarch)--GARCH模型

library(nlme)--調用其中的gls函數

library(fArma)--進行擬合和檢驗

library(forecast)—arima建模

下面我介紹一下R語言中forecast工具包裡面兩個很強大的工具:ets和auto.arima。使用者什麼都不需要做,這兩個函數會自動挑選一個最恰當的演算法去分析資料。比如用ets來處理:

fit<-ets(train)

accuracy(predict(fit,12),test)

或者用auto.arima處理:

fit<-auto.arima(train)

accuracy(forecast(fit,h=12),test)

除此之外,forecast包中有針對增長或者降低趨勢並且存在季節性波動的時間序列演算法Holt-Winters。Holt-Winters的思想是把資料分解成三個成分:平均水平(level),趨勢(trend),周期性(seasonality)。R裡面一個簡單的函數stl就可以把未經處理資料進行分解。

本文主要從各自優勢及具體例子中分析了Python與R兩種程式設計語言。不難看出,二者在“綜合實力”上難分伯仲,具體選擇哪一種深入學習,依然需要考慮自己實際期望解決的問題、應用的領域等等方面。最後歡迎大家就大資料程式設計語言相關問題與我溝通交流~

Python與R的爭鋒:大資料初學者該怎樣選?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.