摘要:進行時序分析的時常用模型,其中指的是差分項,和分別代表自回歸項和移動平均項。構建模型使用最多的就是模塊,該模塊可以用來進行時間序列的差分,建模和模型的檢驗。
在當下,人工智能的浪潮席卷而來。從AlphaGo、無人駕駛技術、人臉識別、語音對話,到商城推薦系統,金融業的風控,量化運營、用戶洞察、企業征信、智能投顧等,人工智能的應用廣泛滲透到各行各業,也讓數據科學家們供不應求。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、語言簡潔上手快,不需要明確定義變量類型。比如下面簡簡單單三行代碼,就能定義一元線性回歸,是不是很酷炫:
<- 1:10
<- 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:
文本信息挖掘:
文本信息挖掘的應用非常廣泛,例如根據網購評價、社交網站的推文或者新聞進行情感極性分析等。這里我們用例子分析比較一下。
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兩種編程語言。不難看出,二者在“綜合實力”上難分伯仲,具體選擇哪一種深入學習,依然需要考慮自己實際期望解決的問題、應用的領域等等方面。最后歡迎大家就大數據編程語言相關問題與我溝通交流~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44523.html
摘要:上次翻過一篇我是如何在自學編程個月后找到工作的,是一個編程自學者的經驗之談。如果你想通過學習編程來改善你的生活,你不該總想著這些快速成功的案例。 有人問我, Reddit 是什么網站,我想了下說: 美國貼吧 。 但話說回來,關注了一陣子我發現,Reddit 上的討論真要比貼吧不知道高到哪里去了,甚至比不少知乎回答要有價值。而且感覺下面的討論氛圍也更好些。 我在上面關注了 learnpr...
摘要:我是布小禪,一枚自學萌新,跟著我每天進步一點點吧說了這么多暫時也就夠了,那么就告辭吧 文章目錄 ?? 前言 ??? 作者簡介 ??文件操作?1??、open函數...
摘要:關于的三個謊言,你一定要清楚。這是的整個知識體系圖譜,對于新手來說,沒必要學那么多。第四自動化測試一切關于自動化的東西,似乎都可以滿足,可以滿足大多數自動化工作,提升工作效率。這都是正常的,千萬別急著否定自己,懷疑自己。 ...
摘要:前言大家好,這里是平頭哥聯盟,我是首席背鍋官松鼠,今天要分享的是最給一些還沒入門的同學或需要提升的同學一些指引詳細說明自己這幾年來經歷怎么一步一步轉型給大家一個參考希望可以少走些彎路寫在最前由平頭哥聯盟測試同學整理作者首席背鍋官松鼠交流群 showImg(https://segmentfault.com/img/bVbksdn?w=1278&h=722); 前言 ? 大家好,這里是@...
閱讀 2910·2023-04-26 02:14
閱讀 3760·2019-08-30 15:55
閱讀 1847·2019-08-29 16:42
閱讀 2762·2019-08-26 11:55
閱讀 2851·2019-08-23 13:38
閱讀 489·2019-08-23 12:10
閱讀 1317·2019-08-23 11:44
閱讀 2807·2019-08-23 11:43