從主觀的角度來看,已有數十篇文章比較了Python與R。大數據分析Python和R語言的優(yōu)缺點旨在更客觀地研究語言。我們將在Python和R中并排分析數據集,并顯示兩種語言需要哪些代碼才能獲得相同的結果。這將使我們無需猜測即可了解每種語言的優(yōu)點和缺點。在AAA教育,我們教授兩種語言,并且認為這兩種語言在數據科學工具包中都占有一席之地。
我們將分析NBA球員及其在2013-2014賽季的表現數據。對于分析的每個步驟,我們將顯示Python和R代碼,以及對不同方法的一些解釋和討論。事不宜遲,讓我們開始這場Python vs R對決!
導入CSV
[R
Python
上面的代碼會將CSV文件nba_2013.csv(包含2013-2014賽季NBA球員的數據)加載到nba兩種語言的變量中。唯一的實際區(qū)別是在Python中,我們需要導入pandas庫才能訪問數據框。在R中,雖然我們可以使用基本R函數導入數據read.csv(),但使用readr庫函數read_csv()的優(yōu)點是速度更快,并且數據類型的解釋一致。數據框在R和Python中均可用,并且是二維數組(矩陣),其中每一列可以具有不同的數據類型。在此步驟結束時,兩種語言均已將CSV文件加載到數據框中。
查找行數
[R
Python
這將打印出播放器的數量和每個播放器中的列數。我們有481行或播放器,以及31包含播放器數據的列。
查看數據的第一行
[R
Python
這幾乎是相同的。兩者都打印出數據的第一行,并且語法非常相似。Python在這里更面向對象,并且head是數據框對象的方法,而R具有單獨的head功能。當我們開始使用這些語言進行分析時,這是一個常見的主題。Python更面向對象,R更實用。
查找每個統(tǒng)計的平均值
讓我們找到每個統(tǒng)計的平均值。如我們所見,這些列的名稱如fg(制定了目標)和ast(輔助)。這些是球員的賽季統(tǒng)計數據。(如果您想對所有統(tǒng)計信息進行更全面的說明,請查看此處。)
[R
Python
此處,Python和R的方法存在一些主要差異。在這兩種方法中,我們都在數據框列上應用了一個函數。在Python中,默認情況下,數據框上的mean方法將查找每列的平均值。
在R中,我們可以使用兩個常用軟件包中的函數來選擇要平均的列,然后將mean函數應用于它們。%>%稱為“管道” 的操作員將一項功能的輸出作為下一項功能的輸入。取字符串值的平均值只會導致NA-不可用。我們可以使用來僅取數字列的平均值select_if。
但是,我們NA在取平均值時確實需要忽略值(要求我們傳遞na.rm=TRUE給mean函數)。如果不這樣做,則最終NA得到像列的均值x3p.。此列是三點百分比。一些球員沒有三分球命中率,所以他們的百分比失了。如果我們嘗試使用meanR中的函數,則會得到NA響應,除非我們指定na.rm=TRUE,否則NA在取平均值時會忽略值。.mean()默認情況下,Python中的方法已經忽略了這些值。
進行成對散點圖
探索數據集的一種常用方法是查看不同的列如何相互關聯。我們會比較ast,fg和trb列。
[R
Python
最后,我們得到了非常相似的圖,但這表明R數據科學生態(tài)系統(tǒng)如何具有許多較小的程序包(GGally是ggplot2的幫助程序包,即ggplot2,是最常用的R繪圖程序包),并且通常還有更多可視化程序包。在Python中,matplotlib是主要的繪圖程序包,而seaborn是matplotlib上廣泛使用的層。使用Python進行可視化,通常有一種主要的方法來完成某項工作,而在R中,有許多支持不同的做事方法的程序包(例如,至少有六個程序包可以制作成對圖)。
聚集玩家
探索此類數據的一種好方法是生成聚類圖。這些將顯示哪些球員最相似。
[R
Python
為了正確集群,我們刪除任何非數字列或列缺少值(NA,Nan,等)。在R中,我們通過在每列上應用一個函數來完成此操作,如果該函數缺少任何值或不是數字,則將其刪除。然后,我們使用集群程序包執(zhí)行k均值并5在我們的數據中找到集群。我們設置一個隨機種子set.seed用于能夠再現我們的結果。
在Python中,我們使用主要的Python機器學習包scikit-learn來擬合k-均值聚類模型并獲得我們的聚類標簽。我們使用非常相似的方法來準備我們在R中使用的數據,只是我們使用get_numeric_data和dropna方法來刪除非數字列和缺少值的列。
按集群繪制玩家
現在,我們可以按組繪制玩家以發(fā)現模式。一種方法是首先使用PCA使數據二維化,然后繪制數據,并根據聚類關聯對每個點進行著色。
[R
Python
繪制了我們的數據散點圖,并根據聚類對數據的圖標進行了陰影處理或更改。在R中,使用的clusplot功能是群集庫的一部分。我們通過pccompR中內置的功能執(zhí)行了PCA 。
使用Python,我們在scikit-learn庫中使用了PCA類。我們使用matplotlib來創(chuàng)建繪圖。
分為訓練和測試集
如果我們想進行監(jiān)督式機器學習,將數據分為訓練集和測試集是個好主意,這樣就不會過擬合。
[R
Python
Python中對R進行比較,我們可以看到,R有更多的數據分析側重建宏,喜歡floor,sample和set.seed,而這些是通過包稱為在Python( ,math.floor,)。random.sample random.seed在Python中,最新版本的pandas帶有一種sample方法,該方法返回從源數據幀中隨機采樣的一定比例的行-這使代碼更加簡潔。在R中,有一些程序包使采樣更簡單,但沒有比使用內置sample函數簡單得多。在這兩種情況下,我們都設置一個隨機種子以使結果可重復。
單變量線性回歸
假設我們要根據每個球員的射門得分來預測每個球員的助攻數。
[R
Python
Scikit-learn具有線性回歸模型,我們可以擬合并從中生成預測。[R依賴于內置lm和predict功能。predict根據傳入的擬合模型的類型,其行為將有所不同-它可以與各種擬合模型一起使用。
計算模型的摘要統(tǒng)計信息
[R
Python
如果要獲取有關擬合的摘要統(tǒng)計信息(如r平方值),則在Python中要比在R中做更多的事情。使用R,我們可以使用內置summary函數來獲取有關模型的信息。對于Python,我們需要使用statsmodels包,該包允許在Python中使用許多統(tǒng)計方法。我們得到相似的結果,盡管通常在Python中進行統(tǒng)計分析會比較困難,并且R中存在的某些統(tǒng)計方法在Python中不存在。
擬合隨機森林模型
我們的線性回歸在單變量情況下效果很好,但是我們懷疑數據中可能存在非線性。因此,我們想擬合一個隨機森林模型。
[R
Python
這里的主要區(qū)別是我們需要使用R中的randomForest庫來使用該算法,而它是內置于scikit-learn中的Python。scikit-learn具有一個統(tǒng)一的接口,可與Python中的許多不同的機器學習算法一起使用,并且Python中每種算法通常只有一個主要實現。使用R,有許多較小的程序包,其中包含各個算法,通常使用不一致的方法來訪問它們。這導致算法的多樣性更大(很多都有幾種實現方式,許多是剛從研究實驗室中脫穎而出的),但是卻對可用性造成了影響。
計算誤差
現在我們已經擬合了兩個模型,讓我們計算誤差。我們將使用MSE。
[R
Python
在Python中,scikit-learn庫具有我們可以使用的各種錯誤度量。在R中,可能會有一些較小的庫來計算MSE,但是手動使用兩種語言都非常容易。幾乎可以肯定,由于參數調整而導致的錯誤之間存在很小的差異,這并不重要。
下載網頁
現在我們掌握了2013-2014年NBA球員的數據,下面我們來補充一些數據。我們只看到一個框得分從NBA總決賽在這里,以節(jié)省時間。
[R
Python
在Python中,請求包使所有網站都可以使用一致的API輕松下載網頁。在R中,RCurl提供了類似的簡單請求方法。兩者都將網頁下載為字符數據類型。注意:此步驟對于R中的下一步驟是不必要的,但出于比較目的而顯示。
提取玩家框得分
現在我們有了網頁,我們需要對其進行解析以提取玩家的分數。
[R
Python
這將創(chuàng)建一個包含兩個列表的列表,第一個列表的框得分為CLE,第二個列表框得分為GSW。兩者都包含標題,以及每個玩家及其游戲中的統(tǒng)計信息。我們現在不會將其轉換為更多的訓練數據,但是可以輕松地將其轉換為可以添加到我們的nba數據框中的格式。
R代碼比Python代碼更復雜,因為沒有使用正則表達式選擇項目的便捷方法,因此我們必須進行其他解析才能從HTML中獲取團隊名稱。R還不鼓勵使用for循環(huán),而是希望沿向量應用函數。我們lapply經常這樣做,但是由于我們需要根據是否是標題而對每一行進行不同的處理,因此我們將所需項的索引以及整個rows列表傳遞給函數。
我們使用rvest廣泛使用的R Web抓包來提取所需的數據。請注意,我們可以將url直接傳遞到rvest中,因此R中不需要最后一步。
在Python中,我們使用BeautifulSoup,這是最常用的Web抓包。它使我們能夠遍歷標簽并以簡單的方式構造列表列表。
結論中的Python vs R
我們已經看過如何使用R和Python分析數據集。我們沒有涉及許多任務,例如,保留分析結果,與他人共享結果,進行測試并使產品準備就緒并進行更多可視化。關于此主題還有很多要討論的內容,但是基于上面所做的事情,我們可以得出一些有意義的結論:
R的功能更多,Python的更面向對象。
正如我們從,和其他函數中看到的那樣lm,predictR讓函數完成了大部分工作。將此與LinearRegressionPython中的類以及sample數據框上的方法進行對比。
R具有更多內置的數據分析功能,Python依賴于軟件包。
在查看摘要統(tǒng)計信息時,我們可以使用summaryR中的內置函數,但必須statsmodels在Python中導入該包。數據框是R中的內置構造,??但必須通過pandasPython中的包導入。
Python具有用于數據分析任務的“主要”軟件包,R具有較大的小型軟件包生態(tài)系統(tǒng)。
使用Python,我們可以使用scikit-learn軟件包進行線性回歸,隨機森林等等。它提供一致的API,并且維護良好。在R中,我們有更多的軟件包多樣性,但也有更大的碎片化和更少的一致性(線性回歸是內置的lm,randomForest是單獨的軟件包,等等)。
R通常具有更多的統(tǒng)計支持。
R被構建為一種統(tǒng)計語言,它可以顯示。statsmodelsPython和其他軟件包中的XML提供了不錯的統(tǒng)計方法覆蓋范圍,但是R生態(tài)系統(tǒng)要大得多。
在Python中執(zhí)行非統(tǒng)計性任務通常更為直接。
使用BeautifulSoup和請求等維護良好的庫,Python中的Web抓取要比R中的要容易得多。這適用于我們沒有仔細研究的其他任務,例如保存到數據庫,部署Web服務器或運行復雜的工作流程。
兩者中的數據分析工作流之間有很多相似之處。
R和Python之間都有明顯的靈感點(pandas數據框受R數據框啟發(fā),rvest軟件包受BeautifulSoup啟發(fā)),并且兩個生態(tài)系統(tǒng)都在不斷壯大。令人驚訝的是,兩種語言中許多常見任務的語法和方法多么相似。
Python vs R的最終結論
在AAA教育,我們以Python課程而聞名,但是我們完全按照R路徑重新設計和發(fā)布了Data Analyst,因為我們認為R是數據科學的另一種至關重要的語言。我們認為兩種語言是互補的,每種語言都有其優(yōu)點和缺點。正如本演練所證明的,任何一種語言都可以用作您唯一的數據分析工具。兩種語言在語法和方法上都有很多相似之處,并且您都不會錯。
最終,您可能最終想要學習Python 和 R,以便可以利用兩種語言的優(yōu)勢,根據需要在每個項目中選擇一種或另一種。當然,如果您要在數據科學領域中尋找一席之地,那么同時了解兩者也會使您成為更靈活的求職者。
填寫下面表單即可預約申請免費試聽!怕錢不夠?可先就業(yè)掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業(yè)?一地學習,可推薦就業(yè)!
?2007-2022/ mwtacok.cn 北京漫動者數字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc