標籤:des style http io os 使用 ar java for
作者按:本文根據去年11月份CSDN舉辦的“大資料技術大會”演講材料整理,最初發表於2012年2月期《程式員》雜誌。1. 曆史
R(R Development Core Team, 2011)語言由新西蘭奧克蘭大學的 Ross Ihaka 和 Robert Gentleman 兩人共同發明,其詞法和文法分別源自 Scheme 和 S 語言,R 語言一般認為是 S 語言(John Chambers, Bell Labs, 1972)的一種方言。R 是“GNU S”, 一個自由的、有效、用於統計計算和繪圖的語言和環境,它提供了廣泛的統計分析和繪圖技術:包括線性和非線性模型、統計檢驗、時間序列、分類、聚類等方 法。我們更傾向於認為 R 是一個環境,在 R 環境裡實現了很多經典的、現代的統計技術。
圖1: 1992 年,Ross Ihaka 和Robert Gentleman 在奧克蘭大學成為同事。後來為了方便教授初等統計課程,二人開發了一種語言;而他們名字的首字母都是R,於是R 便成為了這門語言的名稱。
作為 R 語言的前身——S 語言的代碼幾乎不需要進行任何修改即可在R 語言環境下運行,從這個角度講兩種語言幾乎等價。S 語言誕生於上個世紀 70 年代的由 John M. Chambers 領導的貝爾實驗室統計部,它的誕生過程幾乎就是現代統計分析方式的演化曆程的寫照(謝益輝,鄭冰, 2008):
- 1975-1976 年,貝爾實驗室統計研究部使用一套文檔齊全的 Fortran 庫做統計研究,簡稱為 SCS ( Statistical Computing Subroutines );
- 當時的商業統計軟體採用的是批處理的方式,一次性輸出問題的所有相關的資訊,在那個時代,這個過程需要幾個小時,並且商業軟體不能對程式做任何修改。而貝爾實驗室的統計學家們需要靈活的互動式資料分析方式,因此 SCS 在貝爾實驗室非常受歡迎;
- 但統計學家們發現使用 SCS 做統計分析時需要大量的 Fortran 編程,花在編程上的時間同取得的分析效果相比有些得不償失。慢慢地,大家達成了一個共識:統計分析不應該需要編寫 Fortran 程式!
- 於是,為了同 SCS 進行互動,一套完整的進階語言系統 S 誕生了;
- S 語言的理念,用它的發明者John Chambers 的話說就是“to turn ideas into software, quickly and faithfully.”
1993 年,S 語言的許可證被 MathSoft 公司買斷,S-PLUS 成為了其公司的主打資料分析產品,這時候,由於 S-PLUS 繼承了S 語言的優秀血統,所以廣泛被世界各國的統計學家所使用。但好景不長,1997 年 R 語言正式成為了 GNU 項目,大量的優秀統計學家加入到了 R 語言開發的行列。隨著 R 語言的功能愈發強大,漸漸地 S-PLUS 的使用者轉到了同承一脈的R 語言。S 語言的發明人之一,John M. Chambers 最終也成為了 R 語言的核心團隊成員。S-PLUS 這款優秀的軟體也幾經易手,最後花落 TIBCO 公司,這是後話。
John Chambers 老爺子一直不遺餘力的致力於R 語言的發展,至今仍然是活躍的 R 語言開發人員。在 2009 年第一期 R Journal 上 John Chambers 是這樣對 R 語言是定義的:
- An interface to computational procedures of many kinds;
- Interactive, hands-on in real time;
- Functional in its model of programming;
- Object-oriented, “everything is an object”;
- Modular, built from standardized pieces; and,
- Collaborative, a world-wide, open-source effort.
當然,R 語言的這些特點很難在一篇短文裡細緻的體現出來,那下面我將簡要的描述一下 R 語言的現狀和未來。
2. 現狀及應用
R 語言在國際和國內的發展差異非常大,國際上 R 語言已然是專業資料分析領域的標準,但在國內依舊任重而道遠,這固然有資料學科地位的原因,國人著作權概念薄弱以及學術領域相對閉塞也是原因。那為什麼 R 語言能夠被廣大的資料分析工作者做接受?這其中原因是很多的:
2.1 優勢及特點
從 R 語言的發展曆史上看,R 主要是統計學家為解決資料分析領域問題而開發的語言,因此 R 具有一些獨特的優勢:
- 統計學家和幾乎覆蓋整個統計領域的前沿演算法(3700+ 擴充包)
- 開放的原始碼(free, in both senses),可以部署在任何作業系統,比如 Windows, Linux, Mac OS X, BSD, Unix強大的社區支援
- 高品質、廣泛的統計分析、資料採礦平台
- 重複性的分析工作(Sweave = R + LATEX),藉助 R 語言的強大的分析能力 + LaTeX 完美的排版能力,可以自動產生分析報告
- 方便的擴充性
- 可通過相應介面串連資料庫,如 Oracle、DB2、MySQL
- 同 Python、Java、C、C++ 等語言進行互調
- 提供 API 介面均可以調用,比如 Google、Twitter、Weibo
- 其他統計軟體大部分均可調用 R,比如 SAS、SPSS、Statistica等
- 甚至一些比較直接的商業應用,比如 Oracle R Enterprise, IBM Netezza, R add-on for Teradata, SAP HANA, Sybase RAP(劉思喆,2012)
2.2 榮譽
R 語言擁有這麼多優勢,很大部分原因是由於它同樣繼承了 S 語言的優秀血統。S 語言在1998 年被美國電腦協會(ACM)授予了軟體系統獎,這是迄今為止眾多統計軟體中“唯一”被 ACM 授予的統計系統。
當時 ACM 是這樣評價S 語言的:
- 永久的改變了人們分析、可視化、處理資料的方式;
- 是一個優雅的,被廣泛接受的,不朽的軟體系統。
我們也可以查詢到曆年 ACM 授予軟體系統獎的列表,這些優秀的軟體系統同我們的生活息息相關:
- 1983 Unix
- 1986 TeX
- 1989 PostScript
- 1991 TCP/IP
- 1995 World-Wide-Web
- 1997 Tcl/Tk
- 1998 S
- 1999 The Apache Group
- 2002 Java
2009 年紐約時報發表了題為 “Data Analysts Captivated by R’s Power” 的社評,集中的討論了 R 語言在資料分析領域的發展,並引發了 SAS 和 R 使用者廣泛而激烈的爭論。接下來的 2010 年,美國統計協會(American Statistical Association)又將第一屆“統計計算及圖形獎” 授予了 R 語言,用於表彰其在統計應用和統計研究廣泛的影響。
2.3 社團及活動
正如前文 John Chambers 所說,R 也是一個社區,其線下的活動也是非常活躍。在國際上,歐洲和美國每年會輪值舉辦一次 useR! 會議,屆時來自於世界各地的 R 使用者齊聚一堂,討論 R 語言的應用與科研方面的成果。出於對統計計算的特殊考慮,每兩年還會舉辦一次 DSC 會議(Directions in Statistical Computing),專門討論 R 在統計計算方面的應用及理論研究。各大城市也會有相應的 R Group,方便本地的R 使用者聚會及交流。
在國內,每年會以統計之都牽頭在北京和上海舉辦兩次中國 R 語言會議,至今年已經在中國人民大學、華東師範大學等高校舉辦了四屆 R 語言會議,曆年的演講主題涉及醫藥、金融、地理資訊、統計圖形、資料採礦、製藥、高效能運算、社會學、生物資訊學、互連網等多個領域,從明年起,台北將成 為第三個舉辦中國 R 語言會議的城市,2012 年6月的中華 R 語言會議台北場已經在籌劃當中。
2.4 業界的認可
KDnuggets 網站每年都會做一些資料分析、資料採礦方面的專題問卷調查,在 2011 年 8月份的資料採礦領域語言流行度的調查中,R 語言位於資料採礦領域居於所有語言之首(圖2),而緊隨其後的SQL、Python、Java 則是在某一領域具有各自的獨到優勢。在資料採礦範疇下,R 語言同這些語言相互補足、相得益彰。
根據互連網搜尋結果計算的TIOBE 編程社區指數(Programming Community Index)(TIOBE, 2011)可能更能代表程式設計語言的流行度。在 2011 年 12 月份排名中,R 語言依舊是在統計領域中最為流行的語言,位列第 24(Ratings 0.522%),而時常被放在一起比較的SAS 則排名第 31(0.417%)。
圖2: 雖然KDnuggets 網站的調查存在樣本有偏的嫌疑,但畢竟代表了某一類人群的偏好。並 且排名前五位的語言在各自的領域確有代表性。資料來源http://www.kdnuggets.com/2011/08/poll- languages-for-data-mining-analytics.html3. 挑戰和未來
雖然 R 語言有諸多的優勢,但 R 語言不是萬能的,它畢竟是統計編程類語言。受到其演算法架構的通用性以及速度效能方面的影響,因此其初始設計完全基於單線程和純粹的記憶體計算。雖然一般情況 下無關 R 的使用,在當今大資料條件下,這兩個設計思路的劣勢逐漸層得愈加刺眼,好在 R 的一些優秀的擴充性包解決了上述問題,比如:
- snow 支援MPI、PVM、nws、sockets 通訊,解決單線程和記憶體限制;
- multicore 適合大規模計算環境,主要解決單線程問題;
- parallel R 2.14.0 版本增加的標準包,整合了snow 和multicore 功能;
- R + Hadoop 在Hadoop 叢集上運行R 代碼,亦或操作Hive 倉庫;
- RHIPE 更友好的R 代碼運行環境,解決單線程和記憶體限制;
- Segue 利用Amazon’s Web Services(EC2)。
這裡需要著重提一下 parallel 包,這個包是 R 核心團隊為瞭解決大資料計算問題而在標準安裝程式下新增的功能包。
3.1 一些誤區
很多人認為 R 語言是 GNU 開源項目軟體,因此軟體的使用是“沒有任何保證” 的。但在美國,R 的計算結果被 FDA(Food and Drug Administration)所承認;並且有報告指出R 相比其他商業軟體,bug 數量非常少(UCLA, 2006)!
R 開發的核心團隊對於 R 的新功能持異常謹慎的態度,比如cairographics 從2007 開始醞釀,直到上一個大版本(2011 年)才引入到 R 標準安裝程式;byte-compile 功能更是經曆了1999-2011 近12年的孵化(Ripley, 2011)。從這個角度講,R 語言的代碼品質以及運算結果的可信性是完全可以保證的。
當然,這裡所說的是 R 的標準安裝程式包,並不代表所有的擴充包的品質。畢竟3700+的擴充包良莠不齊,雖然不乏一些優秀的包(如Rcpp, RODBC, VGAM, rattle),但必然存在一些擴充包品質不佳的情況。
3.2 應用的思考
R 語言並不是人人都會接觸到的語言,相對要小眾很多,有些人即便接觸到沒準也搞不清楚 R 到底是做什麼用途。對於走上這條路的人,經常會有一些應用困難,比如對個人學習角度而言:
- 雖然 R 語言的設計之初就是避免通過大量編程實現統計演算法,但最基本的編程能力還是需要的,因此對於一般非電腦專業的工作者來說無疑提高了難度;
- 還有很多人提到,R 語言的學習曲線非常陡峭。但從個人這麼多年的使用經驗上看,陡峭的學習曲線並不是R 語言本身的,而是隱藏在後面的統計知識很難在短時間內掌握的緣故。
從公司商業應用的角度而言,也存在一些不可迴避的問題:
- 首先是人力資源成本如何核算;
- 軟體成本問題,由於 R 是自由軟體,可以隨時隨地下載,因此對於企業來說如何度量成本是一個問題;
- R 的技能核定並沒有官方或機構標準,簡曆上“熟練使用R 語言” 可能沒有任何意義;
- 實際上,即便沒有上述兩個問題,那企業想找到 R 相關的人才不那麼簡單;
- 對於大量工作已經由其他軟體實現(比如用SAS)的公司來講,轉化成本很高;
- 支援人員擷取的問題。
4. 結語
R 語言雖然誕生於統計社區,服務於資料,但現在隨著資料滲透到各行各業,R 語言已經遠遠超過統計範疇,相信不久的將來會有更多的朋友加入到 R 語言社區。
參考目錄
- 謝益輝,鄭冰(2008). R 語言的曆史背景、發展曆程和現狀. 1st China R Conference.
- 劉思喆(2012). 商務資料庫對 r 語言的支援. http://www.bjt.name/2012/04/r-language-enterprise/.
- R Development Core Team (2011). R: A Language and Environment for Statistical Computing.R Foundation for Statistical Computing, Vienna, Austria. ISBN 3-900051-07-0.
- Ripley, B. (2011). The r development process. Technical report, Department of Statistics,
- University of Oxford.
- TIOBE (2011). http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html.
- UCLA (2006). R relative to statistical packages. Technical report, UCLA.
關於劉思喆
專註於 R 語言在統計分析、資料採礦、資料視覺效果的應用。個人首頁:http://bjt.name查看所有由劉思喆發表的文章 →
R You Ready?——大資料時代下優雅、卓越的統計分析及繪圖環境