標籤:
轉載:http://bbs.pinggu.org/thread-3078817-1-1.html
有人說Python和R的區別是顯而易見的,因為R是針對統計的,python是給程式員設計的,其實這話對Python多多少少有些不公平。2012年的時候我們說R是學術界的主流,但是現在Python正在慢慢取代R在學術界的地位。不知道是不是因為大資料時代的到來。
Python與R相比速度要快。Python可以直接處理上G的資料;R不行,R分析資料時需要先通過資料庫把大資料轉化為小資料(通過groupby)才能交給R做分析,因此R不可能直接分析行為詳單,只能分析統計結果。所以有人說:Python=R+SQL/Hive,並不是沒有道理的。
Python的一個最明顯的優勢在於其膠水語言的特性,很多書裡也都會提到這一點,一些底層用C寫的演算法封裝在Python包裡後效能非常高效(Python的資料採礦包Orange canve 中的決策樹分析50萬使用者10秒出結果,用R幾個小時也出不來,8G記憶體全部佔滿)。但是,凡事都不絕對,如果R向量化編程做得好的話(有點小難度),會使R的速度和程式的長度都有顯著性提升。
R的優勢在於有包羅永珍的統計函數可以調用,特別是在時間序列分析方面,無論是經典還是前沿的方法都有相應的包直接使用。
相比之下,Python之前在這方面貧乏不少。但是,現在Python有了pandas。pandas提供了一組標準的時間序列處理工具和資料演算法。因此,你可以高效處理非常大的時間序列,輕鬆地進行切片/切塊、彙總、對定期/不週期性時間序列進行重採樣等。可能你已經猜到了,這些工具中大部分都對金融和經濟資料尤為有用,但你當然也可以用它們來分析伺服器日誌資料。於是,近年來,由於Python有不斷改良的庫(主要是pandas),使其成為資料處理任務的一大替代方案。
做過幾個實驗:
1. 用python實現了一個統計方法,其中用到了ctypes,multiprocess。
之後一個項目要做方法比較,又用回R,發現一些bioconductor上的包已經預設用parallel了。(但那個包還是很慢,一下子把所有線程都用掉了,導致整個電腦使用不能,看網頁非常卡~)
2. 用python pandas做了一些資料整理工作,類似資料庫,兩三個表來回查、匹配。感覺還是很方便的。雖然這些工作R也能做,但估計會慢點,畢竟幾十萬行的條目了。
3. 用python matplotlib畫圖。pyplot作圖的方式和R差異很大,R是一條命令畫點東西,pylot是準備好了以後一起出來。pyplot的顏色選擇有點尷尬,預設顏色比較少,之後可用html的顏色,但是名字太長了~。pyplot 的legend比R 好用多了,算是半自動化了。pyplot畫出來後可以自由拉升縮放,然後再儲存為圖片,這點比R好用。
總的來說Python是一套比較平衡的語言,各方面都可以,無論是對其他語言的調用,和資料來源的串連、讀取,對系統的操作,還是正則表達和文文書處理,Python都有著明顯優勢。 而R是在統計方面比較突出。但是資料分析其實不僅僅是統計,前期的資料收集,資料處理,資料抽樣,資料聚類,以及比較複雜的資料採礦演算法,資料建模等等這些任務,只要是100M以上的資料,R都很難勝任,但是Python卻基本勝任。
結合其在通用編程方面的強大實力,我們完全可以只使用Python這一種語言去構建以資料為中心的應用程式。
但世上本沒有最好的軟體或程式,也鮮有人能把單一語言挖掘運用到極致。尤其是很多人早先學了R,現在完全不用又捨不得,所以對於想要學以致用的人來說,如果能把R和Python相結合,就更好不過了,很早看過一篇文章——讓R與Python共舞,咱們罈子裡有原帖,就不多說了,看完會有更多啟發。
BTW: 如果之前沒有學過R,可以先學Python然後決定是不是學R,如果學了R,學Python的時候會更快上手。
Python與R的區別和聯絡