你愛 “Python”的身體,還是“R”的靈魂?
數(shù)據(jù)科學(xué)界有三大寶: Python、SAS和R,不過像SAS這種高端物種,不是我們這些平民能供養(yǎng)得起的啊。
根據(jù) IEEE Spectrum的***排名,R和Python仍然是最熱門的數(shù)據(jù)科學(xué)編程語言。本文將從數(shù)據(jù)可視化、建模庫、易學(xué)性和社區(qū)支持等四方面入手,比較R和Python的語言性能。
一、數(shù)據(jù)可視化
數(shù)據(jù)科學(xué)的一個重要部分是交流。分析成果需要以一種有效、易懂的方式展示出來。因此,任何用于數(shù)據(jù)科學(xué)的語言或軟件包都應(yīng)該具有良好的數(shù)據(jù)可視化工具。良好的數(shù)據(jù)可視化具有清晰性。無論模型有多復(fù)雜,都會用一種簡單明了的方法來說明結(jié)果,即使是外行人也能理解。
Python
Python以其大量的庫而聞名。有很多庫可以用于繪圖和可視化。最熱門的庫是matplotlib和seaborn。matplotlib庫改編自MATLAB,具有相似的特性和風(fēng)格。matplotlib庫是一個非常強大的可視化工具,內(nèi)置了各種功能,特別是在與其他Python數(shù)據(jù)科學(xué)庫pandas和numpy很好地協(xié)作時,它可以非常容易地用于繪制簡單的plot函數(shù)。
雖然matplotlib可以生成大量的圖形和圖表,但它缺乏簡單性。最麻煩的方面是調(diào)整plot函數(shù)的大小:如果存在很多變量,那么你可能會花費很多功夫來試圖把它們整齊地放在一個plot函數(shù)中。另一個大問題是創(chuàng)建subplot函數(shù),同樣,將它們都調(diào)整到一個圖中可能會變得很復(fù)雜。
現(xiàn)在,基于matplotlib的seaborn包含了更多的美學(xué)圖形和plot函數(shù)。這個庫無疑是對matplotlib陳舊風(fēng)格的改進,但它仍然存在同樣的基本問題:創(chuàng)建圖形可能非常復(fù)雜。這也是Python未來的改進方向。
R
有許多庫可以用于R的數(shù)據(jù)可視化,其中g(shù)gplot2在使用和廣泛度方面***。該庫使用圖形哲學(xué)語法,使用圖層在繪圖上繪制對象。層之間通常是相互連接的,并且可以共享許多共同的特性。這些層讓你可以用很少的代碼創(chuàng)建非常復(fù)雜的圖。該庫允許繪制摘要函數(shù)。綜上,ggplot2比matplotlib更加靈活簡潔,因此在這個領(lǐng)域R優(yōu)勢更為明顯。
但是,值得注意的是,Python包含了一個與R中原始ggplot2功能類似的ggplot庫。
二、建模庫
數(shù)據(jù)科學(xué)需要使用許多算法。這些復(fù)雜的數(shù)學(xué)方法需要穩(wěn)健的計算。重新編寫算法代碼對數(shù)據(jù)科學(xué)家而言相當(dāng)費時,他們需要具有內(nèi)置建模支持的語言。Python和R剛好滿足這一點。
Python
Python擁有大量的機器學(xué)習(xí)庫,包括scikit-learn、XGboost、TensorFlow、Keras和PyTorch等。Python也有pandas,它可以兼容表格形式的數(shù)據(jù)。pandas庫使處理csv或基于excel的數(shù)據(jù)變得非常容易。除此之外,Python還有很優(yōu)秀的科學(xué)軟件包,比如numpy。numpy可以幫助你瞬間完成復(fù)雜的數(shù)學(xué)計算,比如矩陣運算。所有這些包組合在一起,使Python成為一個適用于硬核建模的強大工具。
R
和Python一樣,R也有大量的庫——大約10000個。其中應(yīng)用最廣泛的是mice,rpart, party和caret。這些包將從預(yù)建模階段到后模型/優(yōu)化階段給予你幫助。
這些庫幾乎可以解決所有的數(shù)據(jù)問題。但相比之下,Python缺乏統(tǒng)計非線性回歸(除了簡單的曲線擬合)和混合效應(yīng)模型。另一方面,R缺乏Python所提供的速度,尤其是在處理大量數(shù)據(jù)的時候。
三、易學(xué)性
市場對數(shù)據(jù)分析和處理人員的渴求度相當(dāng)高。許多人都希望加入數(shù)據(jù)科學(xué)的大潮,其中很多人幾乎沒有編程經(jīng)驗。因此,在比較兩種語言時,需要考慮其是否簡單好學(xué)易上手。
Python
Python設(shè)計于1989年,其理念是強調(diào)代碼的可讀性和使編程變得簡單或簡潔,Python的設(shè)計者顯然做到了,因為這種語言非常容易學(xué)習(xí)。雖然Python的語法靈感來自于C,但與C不同的是,它并不復(fù)雜。因此,Python作為初學(xué)者的語言學(xué)習(xí)***,任何人都可以在相對較短的時間內(nèi)學(xué)會它。
R
R語言也并不難學(xué)。它比c++或JavaScript等許多語言都要簡單。與Python一樣,R的大部分語法都是基于C的,但與Python不同的是,R最初是專門為統(tǒng)計學(xué)家和科學(xué)家設(shè)計的,因此門檻較高。
四、社區(qū)支持
作為一名數(shù)據(jù)科學(xué)家,需要經(jīng)常解決一些數(shù)據(jù)難題。在難以找到相關(guān)的庫或包解決問題的情況下,可以在語言的官方文檔或在線社區(qū)論壇中搜索,從而獲得良好的社區(qū)支持。
這兩種語言都有活躍的Stackoverflow成員,并且都有一個活躍的郵件列表(在這個列表中,你可以輕松地向?qū)<以儐柦鉀Q方案)。R有在線的R文檔,可以在其中找到關(guān)于某些函數(shù)和函數(shù)輸入的信息。大多數(shù)Python庫,比如pandas和scikit-learn,都有自己的官方在線文檔來解釋每個庫。
這兩種語言都有大量的用戶基礎(chǔ),二者都有非常活躍的支持社區(qū)。不難看出,兩者在這方面似乎是平等的。
結(jié)論
R還是Python?無疑,這兩種都是很優(yōu)秀的語言。如果追求簡單上手,可以選擇Python,如果想輕松創(chuàng)建視覺效果,那么R語言是***。