對於想學習數據科學的初學者來說,選擇Python還是R語言是個難題。本文對兩種語言進行了對比,希望能幫助妳做出選擇。
我是德勤的數據科學家主管。本人使用Python和R語言多年,與Python社區密切合作15年。這篇文章是我個人對這兩種語言的看法。
第三種選擇
為了解決這個問題,Studio的首席數據科學家Htley Wickham認為,更好的選擇是讓兩種語言合作,而不是選擇其中壹種。所以,這也是我提到的第三種選擇,我會在正文的最後壹部分討論。
如何比較r和Python
對於這兩種語言,以下幾點值得比較:
歷史:
R和Python的發展歷史明顯不同,同時存在重疊的部分。
用戶組:
它包含了許多復雜的社會學和人類學因素。
性能:
詳細對比以及為什麽很難對比。
第三方支持:
模塊、代碼庫、可視化、存儲庫、組織和開發環境。
使用案例:
根據具體任務和工種有不同的選擇。
是否可以同時使用:
Python裏用r,r裏用Python。
預測:
內部測試。
公司和個人偏好:
揭曉最終答案。
歷史
簡史:
ABC語言->;Python問世(吉多·範·羅蘇姆於1989年創立)-> Python 2(2000年)->;Python 3(2008)
福坦語->;s語言(貝爾實驗室)->;r語言問世(1991年羅斯伊哈卡和羅伯特紳士創立)->;R 1.0.0(2000年)-> R 3.0.2(2013)
用戶組
在比較Python和R的用戶時,我們應該註意:
只有50%的Python用戶同時使用R。
假設使用R語言的程序員使用R進行相關的“科學與數字”研究。不管程序員水平如何,妳都可以確定這個統計分布是真的。
再回到第二個問題,有哪些用戶群體。整個科學和數字社區包含幾個子群,其中壹些子群相互重疊。
使用Python或R語言的子組:
深度學習
機器學習
高級分析
預測分析
統計數字
勘探和數據分析
學術研究
大量的計算研究領域
雖然幾乎每個領域都服務於特定群體,但R語言在統計和探索領域更為常見。前不久在探索數據的時候,R語言比Python花的時間少,安裝Python也要花時間。
這壹切都被叫做Jupyter筆記本和Anaconda的顛覆性技術改變了。
Jupyter筆記本:增加了在瀏覽器中編寫Python和R代碼的能力;
Anaconda: Python和R很容易安裝和管理。
現在,您可以在友好的環境中啟動和運行Python或R,提供開箱即用的報告和分析。這兩項技術消除了完成任務和選擇自己喜歡的語言之間的障礙。Python現在可以以獨立於平臺的方式打包,並更快地提供快速簡單的分析。
另壹個影響社區語言選擇的因素是“開源”。不僅僅是開源庫,還有協作社區對開源的影響。諷刺的是,Tensorflow、GNU Scientific Library等開源軟件(分別是Apache和GPL)都綁定了Python和R,雖然使用R語言的用戶很多,但使用Python的用戶中也不乏純Python支持者。另壹方面,更多的企業使用R語言,尤其是有統計背景的企業。
最後,關於社區和協作,Github更支持Python。如果妳看到最近比較流行的Python包,妳會發現Tensorflow等項目有超過35000個用戶集合。但是看到R的熱門軟件包,Shiny和Stan的收藏都不到2000。
表演
這方面不好比較。
原因是要考的指標和情況太多了。很難在任何特定的硬件上進行測試。有些操作在壹種語言中進行了優化,而在另壹種語言中則沒有。
傳播
在此之前,我們先思考壹下Python和R如何比較,妳真的想用R語言寫很多循環嗎?畢竟這兩種語言的設計意圖不太壹樣。
{
"細胞":[
{
" cell_type": "code ",
" execution_count": 1,
"元數據":{},
"輸出":[],
"來源":[
"將numpy作為npn導入",
" %load_ext rpy2.ipython "
]
},
{
" cell_type": "code ",
“execution _ count”:2,
"元數據":{},
"輸出":[],
"來源":[
" def do_loop(u1):n ",
“n”,
" # Initialize `usq`n ",
" usq = {}n ",
“n”,
"對於範圍內的I(100):n ",
“‘u 1’的第I個元素的平方到‘usq’n的第‘I’個位置”,
" usq[I]= u 1[I]* u 1[I]n "
]
},
{
" cell_type": "code ",
“execution _ count”:3,
"元數據":{},
"輸出":[],
"來源":[
“%%Rn”,
" do _ loop & lt- function(u1) {n ",
“n”,
" # Initialize `usq`n ",
" usq & lt- 0n”,
“n”,
" for(i in 1:100) {n ",
“‘u 1’的第I個元素的平方到‘usq’n的第‘I’個位置”,
" usq[I]& lt;- u1[i]*u1[i]n ",
" }n ",
“n”,
"}"
]
},
{
" cell_type": "code ",
“execution _ count”:4,
"元數據":{},
"輸出":[
{
" name": "stdout ",
"輸出類型":"流",
"文本":[
“1.58 ms 42.8?每循環s(平均標準偏差。戴夫。7次運行,每次1000個循環)n "
]
}
],
"來源":[
" %timeit -n 1000n ",
“%%Rn”,
" u 1 & lt;- rnorm(100)n”,
" do_loop(u1)"
]
},
{
" cell_type": "code ",
“execution _ count”:5,
"元數據":{},
"輸出":[
{
" name": "stdout ",
"輸出類型":"流",
"文本":[
"36.9 ?s 5.99?每循環s(平均標準偏差。戴夫。7次運行,每次1000個循環)n "
]
}
],
"來源":[
" %timeit -n 1000n ",
" u 1 = NP . random . randn(100)n ",
" do_loop(u1)"
]
}
],
"元數據":{
" kernelspec": {
" display_name": "Python 3 ",
《語言》:“python”,
【名稱】:“python3”
},
"語言信息":{
" codemirror_mode": {
"名稱":" ipython ",
【版本】:3
},
"文件擴展名":"。py”,
“mime type”:“text/x-python”,
【名稱】:“python”,
" nbconvert_exporter": "python ",
" pygments_lexer": "ipython3 ",
“版本”:“3.6.3”
}
},
【nb format】:4、
" nbformat_minor": 2
}
Python是0.000037秒,r是0.00158秒。
包括加載時間和命令行運行:R為0.238秒,Python為0.147秒。強調壹下,這不是壹個科學嚴謹的測試。
測試證明Python的運行速度明顯加快。通常不會有太大影響。
除了運行速度,對於數據科學家來說,哪個性能更重要?兩種語言很受歡迎,因為它們可以用作命令語言。比如在使用Python的時候,我們大部分時間都非常依賴熊貓。這涉及到每種語言的模塊和庫,以及它們是如何執行的。
第三方支持
Python有PyPI,R語言有CRAN,兩者都有Anaconda。
CRAN使用內置的install.packages命令。目前CRAN上大約有12000個包。數據科學中可以使用1/2以上的包。
PyPi中的包數是前者的10倍,大約有145438+00000個包。有3700個致力於科學工程。有些也可以用在科學上,只是沒有貼標簽。
兩者都有重復之處。在搜索“隨機森林”時,可以在PyPi中得到170個物品,但這些包並不相同。
雖然Python的包數是R的10倍,但數據科學相關的包數大致相同。
運行速度
拿數據框和熊貓比較更有意義。
我們進行了壹個實驗來比較復雜探索任務的執行時間,結果如下:
Python在大多數任務中運行速度更快。
http://nb viewer . jupyter . org/gist/Brian ray/4ce 15234 E6 AC 2975 b 335 c 8d 90 a 4 b 6882
如您所見,Python+Pandas比原生R語言數據幀更快。註意,這並不意味著Python運行得更快。Pandas是基於Numpy用C語言編寫的。
形象化
這裏將ggplot2與matplotlib進行對比。
Matplotlib是由John D. Hunter編寫的。他是我在Python社區最尊敬的人之壹,也是教我如何使用Python的人。
Matplotlib不好學,但是可以定制和擴展。Ggplot很難定制,有人覺得更難學。
如果妳喜歡漂亮的圖表,又不需要自定義,那麽R是個不錯的選擇。如果妳想做更多的事情,那麽Matplotlib甚至交互鏡頭都不錯。同樣,r的ShinnyR可以增加互動性。
可以同時使用嗎?
妳可能會問,為什麽不能同時使用Python和R語言呢?
在下列情況下,您可以同時使用兩種語言:
公司或組織許可;
兩者都可以在您的編程環境中輕松設置和維護;
妳的代碼不需要進入另壹個系統;
不會給合作的人帶來麻煩和困擾。
兩種語言並用的方法是:
Python向R提供的包:如rpy2、pyRserve、Rpython等。
r也有相對包:rPython,PythonInR,rethink,rJython,SnakeCharmR,XRPython。
用Jupyter,兩個同時用。例子如下:
之後可以傳輸熊貓的數據幀,然後通過rpy2自動轉換成R的數據幀,用“-i df”轉換:
http://nb viewer . jupyter . org/gist/Brian ray/734 BD 54 f 468d 9 a6 db 9171 B2 CFC 98405 a
預測
Kaggle上有人用R或者Python為開發者寫了壹個內核。他根據數據發現了以下有趣的結果:
如果妳打算明年轉Linux,妳更有可能是Python用戶;
如果妳是學統計學的,妳用r的可能性更大;如果妳學的是計算機科學,妳用Python的可能性更大;。
如果妳還年輕(18-24歲),妳更有可能是Python用戶;
如果妳參加壹個編程比賽,妳更有可能是Python用戶;
如果妳明年想用Android,妳更有可能是Python用戶;
如果明年想學SQL,妳更有可能是R用戶;
如果妳用的是MS office,妳更有可能是r用戶;
如果明年想用Rasperry Pi,妳更有可能是Python用戶;
如果妳是全日制學生,妳更有可能是Python用戶;
如果妳使用敏捷方法論,妳更有可能是壹個Python用戶;
如果妳對人工智能的擔憂多於興奮,那麽妳更有可能是壹個R用戶。
公司和個人偏好
我和Google以及Stack Overflow大神Alex Martelli交流的時候,他給我解釋了為什麽Google壹開始只官方支持少數幾種語言。即使在谷歌這種相對發達的環境下,也有壹些限制和偏好,其他企業也是如此。
除了企業偏好,企業中第壹個使用語言的人也會起到決定性的作用。德勤第壹個用R的人,現在還在公司工作,目前是首席數據科學家。我的建議是,選擇自己喜歡的語言,熱愛自己選擇的語言,發揮帶頭作用,熱愛自己的職業。
當妳在研究重要的東西時,錯誤是不可避免的。然而,每壹個設計良好的數據科學項目都會給數據科學家留下壹些實驗和學習的空間。保持開放的心態,擁抱多樣性是很重要的。
最後,個人主要用Python,然後期待能多了解r。