R語言:優雅、卓越的統計分析及繪圖環境
歷史
R 語言由新西蘭奧克蘭大學的 Ross Ihaka 和 Robert Gentleman 兩人共同發明,其詞法和語法分別源自 Scheme 和S語言,一般認為R語言是S語言【注:John Chambers,貝爾實驗室,1972】的一種方言。
R 是“GNU S”,一個能夠自由有效地用于統計計算和繪圖的語言和環境,它提供了廣泛的統計分析和繪圖技術,包括線性和非線性模型、統計檢驗、時間序列、分類、聚類等方法。我們更傾向于認為R是一個環境,在R環境里實現了很多經典的、現代的統計技術。
1992年,Ross Ihaka(圖左)和 Robert Gentleman(圖右)在奧克蘭大學成為同事。后來為了方便教授初等統計課程,二人開發了一種語言;而他們名字的首字母都是R,于是R便成為這門語言的名稱。
作為R語言的前身——S語言的代碼幾乎不需要進行任何修改即可在R語言環境下運行,從這個角度講兩種語言幾乎等價。S語言誕生于 20 世紀 70 年代由 John M. Chambers 領導的貝爾實驗室統計研究部。它的誕生過程幾乎就是現代統計分析方式的演化歷程的寫照【注:謝益輝,鄭冰(2008). R 語言的歷史背景、發展歷程和現狀. 1st China R Conference.】。
- 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 M. Chambers 老爺子一直不遺余力地致力于R語言的發展,至今仍然是活躍的R語言開發者。在 2009 年第一期《R Journal》上,John M. 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(模塊化,由標準化塊構建);
- collaborative,aworld-wide,open-source effort(協作性,全球范圍的開源力量)。
當然,R語言的這些特點很難在一篇短文里細致地體現出來。下面我將簡要描述一下R語言的現狀和未來。
現狀及應用
R 語言在國際和國內的發展差異非常大,國際上R語言已然是專業數據分析領域的標準,但在國內依舊任重而道遠,這固然有數據學科地位不高的原因,國人版權概念薄弱以及學術領域相對閉塞的原因也不容忽視。R語言之所以能夠被廣大的數據分析工作者接受,這其中有諸多原因。
優勢及特點
從R語言的發展歷史上看,R主要是統計學家為解決數據分析領域的問題而開發的語言,因此R具有一些獨特的優勢。
- 統計學家和前沿算法(3400+ 擴展包)。
- 開放的源代碼(自由且免費),可以部署在任何操作系統,例如 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、R add-on for Teradata、Sybase RAP 等。
榮譽
R 語言擁有這么多優勢,很大部分原因在于它同樣繼承了S語言的優秀血統。S語言在 1998 年被美國計算機協會(ACM)授予了軟件系統獎,這是迄今為止眾多統計軟件中“唯一”被 ACM 授獎的統計系統。
當時 ACM 是這樣評價S語言的:
- 永久地改變了人們分析、可視化、處理數據的方式;
- 是一個優雅的、被廣泛接受的、不朽的軟件系統。
我們也可以查詢到歷年 ACM 授予軟件系統獎的列表,這些優秀的軟件系統與我們的生活息息相關:
1983年,Unix
1986年,TeX
1989年,PostScript
1991年,TCP/IP
1995年,World-Wid-Web
1997年,Tcl/Tk
1998年,S
1999年,The Apache Group
2002年,Java
2009年,《紐約時報》發表了題為 “Data Analysts Captivated by R’s Power”的社評,集中討論了R語言在數據分析領域的發展,并引發了 SAS 和R用戶廣泛而激烈的爭論。期間,輝瑞公司(Pfizer)非臨床數據部的副總監 Max Kuhn 提到:
- R已成為人們走出學校后必修的第二門外語,并且在R中有太多令人驚奇的代碼;
- 可以看看 SAS 的討論列表,討論量下降了很多。接下來的 2010 年,美國統計協會(American Statistical Association)將第一屆 “統計計算及圖形獎” 授予R語言,用于表彰其在統計應用和統計研究廣泛的影響。
社團及活動
正如前文 John M. Chambers 所說,R也是一個社區,其線下活動非常活躍。在國際上,歐洲和美國每年會輪值舉辦一次“useR!”會議,屆時來自世界各地的R用戶齊聚一堂,討論R語言的應用與科研方面的成果。
出于對統計計算的特殊考慮,每兩年還會舉辦一次 DSC 會議(Directions in Statistical Computing),專門討論R在統計計算方面的應用及理論研究。各大城市也會有相應的 RGroup,方便本地的R用戶聚會及交流。
在國內,每年會以統計之都【注:Capital of Statistics,是一個致力于傳播統計學知識并將其應用于實際領域的網站,成立于 2006 年,宗旨是中國統計學門戶網站、免費統計學服務平臺】牽頭,在北京和上海舉辦兩次中國R語言會議,至 2011 年已在中國人民大學、華東師范大學等高校舉辦了四屆R語言會議,歷年的演講主題涉及醫藥、金融、地理信息、統計圖形、數據挖掘、制藥、高性能計算、社會學、生物信息學、互聯網等多個領域。從 2012 年起,臺北將成為第三個舉辦中國R語言會議的城市——2012年 6 月的中華R語言會議臺北場已經在籌劃當中。
業界的認可
KDnuggets 網站每年都會做一些數據分析、數據挖掘方面的專題問卷調查,在 2011 年 8 月的數據挖掘領域語言流行度的調查中,R語言位居數據挖掘領域所有語言之首(如下圖所示),而緊隨其后的 SQL、Python、Java 則在某一領域具有各自獨到的優勢。在數據挖掘范疇下,R語言同這些語言相互補足、相得益彰。
根據互聯網搜索結果計算的 TIOBE 編程社區指數(Programming Community Index)可能更能代表編程語言的流行度。在 2011 年 12 月份排名中,R語言依舊是統計領域中最為流行的語言,位列第 24(Ratings 0.522%),而時常被放在一起比較的 SAS 則排名第 31(0.417%)。
雖然 KDnuggets 網站的調查存在樣本有偏的嫌疑,但畢竟代表了某一類人群的偏好,并且排名前五位的語言在各自的領域確有代表性。(數據來源)
挑戰和未來
雖然R語言有諸多優勢,但它并不是萬能的——它畢竟是統計編程類語言。受到其算法架構的通用性以及速度性能方面的影響,因此其初始設計完全基于單線程和純粹的內存計算。雖然一般情況下無關R的使用,但在當今大數據條件下,這兩個設計思路的劣勢逐漸變得愈加刺眼。好在R的一些優秀的擴展性包解決了上述問題,例如:
- snow 支持 MPI、PVM、nws、Socket 通信,解決單線程和內存限制;
- multicore 適合大規模計算環境,主要解決單線程問題;
- parallel R 2.14.0 版本增加的標準包,整合了 snow 和 multicore 功能;
- R + Hadoop 在 Hadoop 集群上運行R代碼;
- RHIPE 提供了更友好的R代碼運行環境,解決單線程和內存限制;
- Segue 利用 Amazon’s Web Services(EC2)。
這里需要著重提一下 parallel 包,該包是R核心團隊為了解決大數據計算問題而在標準安裝程序下新增的功能包
一些誤區
很多人認為R語言是 GNU 開源項目軟件,因此軟件的使用是“沒有任何保證”的。但在美國,R的計算結果被 FDA(Food and Drug Administration) 所承認;并且有報告指出與其他商業軟件相比,R的 Bug 數量非常少【注:UCLA (2006). R relative to statistical packages. Technical report, UCLA.】。
R 開發的核心團隊對于R的新功能持異常謹慎的態度,比如 cairographics 從 2007 年開始醞釀,直到上一個大版本(2011年)才引入到R標準安裝程序;byte-compile 功能更是經歷了從 1999-2011年近 12 年的孵化【注:Ripley,B. (2011). The r development process. Technical report,Department of Statistics,University of Oxford.】。從這個角度講,R語言的代碼質量以及運算結果的可信性是完全可以保證的。
當然,這里所說的是R的標準安裝程序包,并不代表所有擴展包的質量。畢竟 3400+ 的擴展包質量良莠不齊,雖然不乏一些優秀的包(如 Rcpp、RODBC、VGAM、rattle),但必然存在一些擴展包質量不佳的情況。
應用的思考
R 語言并不是人人都能接觸到的語言,相對要小眾很多,有些人即便接觸到沒準也搞不清楚R到底有什么用途。對于走上這條路的人,經常會有一些應用困難,比如從個人學習角度而言。
- 雖然R語言的設計之初就是避免通過大量編程實現統計算法,但最基本的編程能力還是需要的,因此對于一般非計算機專業的工作者來說無疑提高了難度。
- 還有很多人提到,R語言的學習曲線非常陡峭。但從我多年的使用經驗上看,陡峭的學習曲線并不是因為R語言本身,而是隱藏在后面的統計知識很難在短時間內掌握的緣故。
從公司商業應用的角度而言,也存在一些不可回避的問題。
- 首先是人力資源成本如何核算。
- 軟件成本問題,由于R是自由軟件,可以隨時隨地下載,因此對于企業來說如何度量成本是一個問題。
- R的技能核定并沒有官方或機構標準,簡歷上“熟練使用R語言”可能沒有任何意義。
- 實際上,即便沒有上述兩個問題,企業想招到R相關的人才也不那么簡單。
- 對于大量工作已由其他軟件實現(比如用 SAS)的公司來講,轉化成本很高。
- 技術支持獲取的問題。
結語
R 語言雖然誕生于統計社區,服務于數據,但現在隨著數據滲透到各行各業,R語言已經遠遠超過統計范疇,相信不久的將來會有更多的朋友加入到R語言社區。