天天看點

《R的極客理想—工具篇》—— 1.1 R是最值得學習的程式設計語言

本節書摘來自華章出版社《r的極客理想—工具篇》一 書中的第1章,第1.1節,作者:張丹,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

問題

為什麼要學r語言?

《R的極客理想—工具篇》—— 1.1 R是最值得學習的程式設計語言

引言

如果要問在node、lua、python、ruby和r這5種語言中,哪個語言在2014年的應用前景會更好,我會毫不猶豫地選擇r,而且我認為r語言不僅是2014年,也是以後更長一段時間内的明星。在本書開篇,我們就談談為什麼r語言是最值得學習的程式設計語言。

本人是程式員、架構師,從程式設計入門到今天,一直深信着java是改變世界的語言,java已經做到了,而且一直很輝煌。但當java越來越強大,覆寫領域越來越多,變得無所不能的時候,它反而不夠專業,這就給了其他語言發展的機會。

我已使用java語言11年,r語言3年,node 1年,對于這個問題 “哪個語言在2014年的應用前景會更好”,我選擇r語言。

從下面的9個方面來說明我選擇r的原因。

r的基因

r的發展

r的社群和資源

r的哲學

r的使用者

r的文法

r的思維模式

r解決的問題

r的不足

1992年,紐西蘭奧克蘭大學的ross ihaka和robert gentleman 兩位統計學家,為了友善教授初等統計課程,發明了一種程式設計語言,因為他們名字的首字母都是r,于是r便成為這門語言的名稱。

從開始學習r語言,我就開始了知識的跨界思考。統計學基于機率論,機率論又基于數學,用計算機的方式程式設計,同時解決某個領域的實際問題。多種學科知識的交集,決定着我們解決問題的能力。統計的基因,讓r語言與衆不同!

r一直在小衆領域成長着,最早也隻有統計學家在用,主要用來代替sas做統計計算。然而時代在進步,随着大資料的爆發,r終于在這一波浪潮中被工業界所發現。然後,越來越多有工程背景的人加入到這個圈子,對r的計算引擎、性能以及各種程式包進行改進和更新,讓r獲得了新生。

我們現在用到的r語言軟體,已經越來越接近工業軟體的标準了。由工程師推動的r的發展,其速度遠遠地超過了由統計學家推動的發展。随着人們對資料分析需求的進一步增加,r會以更快的速度繼續發展,将成為免費的、開源的資料分析軟體的代名詞。

r的發展離不開r的各種社群支援,尤其是r的官方社群支援。在r的官方網站中,我們可以下載下傳到r語言軟體、r的第三方軟體包和r的其他支援軟體。當然,我不得不承認r的官方網站從web頁上看起來太簡陋了,稍微調整一下css樣式表,都會比現在好看很多。也許這種簡單、無修飾也是統計學家的基因吧。r語言的社群資源同其他語言一樣豐富,除了官方社群,還有開發者論壇、r-journal清單、軟體包清單、r語言圖書清單以及r使用者組等。

r是自由軟體,是以開發者可以開發自己的軟體包,封裝自己的功能,然後在cran上面釋出。截止到2014年2月,共有5236個r包在cran上面釋出。可能很多人會說隻有5236個包,數量太少了。這是因為cran是需要送出申請的,每個包都必須經過r語言小組稽核、檢查後才會釋出出來,而且稽核非常嚴格。高品質是釋出一個新的r包的基本要求。由于cran過于嚴格的審查,讓很多開發者選擇在rforge上釋出r包,還有些r包是基于github釋出的,我也在github上面釋出了自己的r包 。

每種語言都有自己的設計理念和哲學,而我體會的r的哲學就是“靜下心做事情”。r不需要很長的代碼,也不需要設計模式。一個函數調用,傳幾個參數,就能實作一個複雜的統計模型。我們需要思考的是用什麼模型、傳什麼參數,而不是怎麼進行程式設計。我們可能會用r實作“從一個數學公式,變成一個統計模型”的過程,我們也可能會考慮“如何讓一個分類器結果更準确”,但我們不必思考一個算法的“時間複雜度是多少,空間複雜度是多少”。

r的哲學,可以讓你把數學和統計學的知識,變成計算模型,這也是r的基因所決定的。

r語言早期主要是學術界統計學家在用,後來逐漸被其他很多領域的學者所用。r語言有各種不同的應用領域,包括統計分析、應用數學、計量經濟、金融分析、财經分析、人文科學、資料挖掘、人工智能、生物資訊學、生物制藥、全球地理科學、資料可視化等。

近幾年,由網際網路引發的大資料革命讓工業界的人開始認識r,加入r。當越來越多的有工程背景的人加入到r語言使用者的隊伍後,r才開始向着全領域發展,逐漸實作工業化的要求。現在,r已不僅僅是學術界的語言,它還是工業界必備的語言。

下面列出一些推動r語言在工業界發展的r包。

revolutionanalytics公司的rhadoop産品,讓r可以直接調用hadoop叢集資源。

rstudio公司的rstudio産品,給了我們對編輯軟體新的認識。

rmysql、roracle、rjdbc打通了r和資料庫之間的通路通道。

rmongodb、rredis、rhive、rhbase、rcassandra打通了r和nosql資料庫之間的通路通道。

rmpi、snow打通了單機多核并行計算的通道。

rserve、rwebsocket 打通了r語言的跨平台通信的通道。

r是面向對象語言,文法如同python。但r的文法很自由,很多函數的名字看起來都是那麼随意,這也是r的哲學的一部分吧!例如,看到如下這樣的指派文法,有其他語言基礎的程式員,肯定會崩潰的。

随機取正态分布n(0,1)的10個數,又是這麼的簡單。

用r畫鸢尾花的資料集的散點圖,有非常好的可視化效果。

輸出結果見圖1-1。

《R的極客理想—工具篇》—— 1.1 R是最值得學習的程式設計語言

正是因為r自由的哲學,讓r的文法獨特而簡潔,我已經喜歡上這種哲學了。

r語言讓我跳出了原有的思維定式。使用r語言,我們應該像統計學家那樣思考問題,而不是拘泥于程式員的思維模式。統計學家的思維模式,是先考慮為什麼,再考慮做什麼。而程式員的思維模式,是直接考慮怎麼做,等有了結果再考慮為什麼。

r語言是直接面向資料的語言。在我們的日常生活中,無論做什麼事情都會産生資料,上網有浏覽資料,買東西有消費資料,就算什麼都不幹,也會受大氣pm2.5的影響,有空氣污染指數資料。利用r語言,我可以直接分析這些資料。面向什麼業務,就分析什麼資料,不需要從産品經理向程式員的角色轉換,不需要考慮有什麼功能,更不需要考慮程式設計的事。跳出程式員的思維模式,我們所能認知的東西會更多,于是也能找到更适合自己的定位。

當資料成為生産資料的時候,r就是為人們能運用生産資料創造價值的生産工具,r語言主要解決的是資料的問題。整個人類文明所獲得的全部資料中,有90%以上是自網際網路誕生以來産生的;當hadoop幫助人們解決了大資料存儲的問題後,如何發現資料的價值,則成為目前最火的話題。r語言具有強大的統計分析能力,這就讓它成為資料分析最好的工具。是以,r要解決的問題,就是如何挖掘資料價值的問題。

盡管前面說了r的各種優點,但我們依然不能說r就是完美無缺的,因為r也有很多不足。具體來說,r的缺點有下面5個。

r軟體是統計學家編寫的,并不如軟體工程師編寫的軟體那麼健壯。

r軟體的性能,存在一些問題。

r語言很自由,文法命名不太規範,需要花時間熟悉。

r語言的核心程式設計,要比普通的r包使用,難度大得多。

r語言結合了很多數學、機率、統計的基礎知識,學起來有一定門檻。

r的這些不足,都是可以克服的。當有更多有工程背景的人加入的時候,r語言會比現在更強大,會幫助使用者創造更多的價值。

r可以做所有sas能做的事情。sas系統全稱為statistics analysis system,是國際上最知名的商業分析軟體工具之一。sas用于決策支援的大型內建資訊系統,其重要組成部分和核心功能是統計分析功能。在資料處理和統計分析領域,sas系統被譽為國際上的标準軟體系統,堪稱統計軟體界的巨無霸。

r和sas處于完全的競争的關系中,r的免費和開放,讓r有着更廣闊的應用前景。下面給出當今r應用最熱門的領域。

統計分析:統計分布、假設檢驗、統計模組化。

金融分析:量化政策、投資組合、風險控制、時間序列、波動率。

資料挖掘:資料挖掘算法、資料模組化、機器學習。

網際網路:推薦系統、消費預測、社交網絡。

生物資訊學:dna分析、物種分析。

生物制藥:生存分析、制藥過程管理。

全球地理科學:天氣、氣候、遙感資料。

資料可視化:靜态圖、可互動的動态圖、社交圖、地圖、熱圖、與各種javascript庫的內建。

本書會介紹r語言在統計分析、金融分析、資料挖掘、推薦系統、社交網絡等領域的應用。r有着非常廣闊的應用前景,而且r也将成為新一代的最有能力創造價值的工具。

r語言是在大資料時代被工業界了解和認識的語言,r語言被時代賦予了挖掘資料價值、發現資料規律以及創造資料财富的任務。r語言也是幫助人們發揮智慧和創造力的最好的生産工具,是以我們不僅要學好r語言,還要用好r語言,為社會注入更多的創新的生産力。

總而言之,在這5種語言中,r是最特殊的,r被賦予了與其他語言不同的使命。r的基因決定了r将成為2014年,也可能是以後更長一段時間的明星。是以我認為“r是最值得學習的程式設計語言”。不論你正在讀書,還是已經工作,掌握r語言這個工具并找最适合自己的位置将會前途無量。