如何高效地學好 R?

能既有效率,進度也相對較快,能對實際問題分析較為快速上手的學習方法


首先歡迎關注我的專欄:R語言與數據挖掘 - 知乎專欄

然後結合自身經歷,我來談談如何學習R。我認為學R有如下幾個階段:

1.夯實基礎編程語句

這一部分主要是R的最基礎部分的學習,包括數據管理(向量、矩陣、數據框、字元串等的操作等)、數學計算與常見函數、數組與矩陣操作的常用函數、邏輯運算、流程式控制制語句(if, else, while, for 等)

  • 以上內容可以看這本書進行快速學習:R語言入門教程.pdf
  • 同時這裡有一個常用的函數速查:R語言:常用函數(9.29 更新版)
  • 當然,最好是買一本書放在手邊,時時勤查。比如《R語言快速入門》

2.掌握基礎統計模型與分析方法

What is R?R is a language and environment for statistical computing and graphics. 可見R是靠強大的統計分析能力(包括一系列強大的函數與包)立足的,故而我特意將這一部分抽出來單獨講。這部分我們需要學習常用統計分布函數、簡單統計量、統計檢驗、多元分析、時間序列、統計模型等。


關於這部分,除了上面第一階段的書中已經有所提及,還可以看這本書進行深入學習:
A Handbook of Statistical Analyses Using R - CRAN

3.學會運用強大的可視化工具


為什麼單獨將畫圖這一部分單獨講,就是因為我覺得R語言比之其他語言最大的優勢甚至不在於統計分析,而在於超強的可視化能力。在這裡就不得不提R中最神的一個包:

CRAN - Package ggplot2

這個包用簡明而清晰的邏輯像搭積木一樣對某些元素進行組合,從而可以優雅的畫出任何你想要的圖形:

推薦閱讀學習材料則是其官網所推薦的參考書目:

ggplot2: Elegant Graphics for Data Analysis
R Graphics Cookbook

4.學習提升效率

不得不說R語言最為人詬病的一點就是其運行速度的低下,有時候跑一個cost較大的SVM函數動輒就要幾個小時,為了應對這一問題我們必須學會使用apply族函數,而減少for循環的使用。主要是以下幾個函數:

apply(X, MARGIN, FUN,...)
lapply(X, FUN,...)
sapply(X, FUN, ..., simplify= TRUE, USE.NAMES = TRUE)
vapply(X, FUN, FUN.VALUE,..., USE.NAMES = TRUE)
tapply(X, INDEX, FUN = NULL,..., simplify = TRUE)
eapply(env, FUN, ...,all.names = FALSE, USE.NAMES = TRUE)

具體看這個博客就講的很清楚了:R語言 apply函數家族詳解

當然不得不說的還有一個叫做Rcpp的包:

Rcpp: Seamless R and C++ Integration

這個包是將R環境與C/C++聯繫起來的橋樑,看看下面兩個函數的運行速度你就知道其提升性能的能力了:

&> system.time(fib_r(30))
user system elapsed
3.080 0.000 3.083
&> system.time(fib_cpp_0(30))
user system elapsed
0.004 0.000 0.004

5.高級R進階:掌握一些牛掰的package

在以上內容全部學完之後,你只是掌握了R的基礎部分(除了ggplot2與Rcpp),然而R之所以過人的地方正在於其千變萬化,讓人意向不到的各路神級package。我在下面兩個問題里分別總結了了R語言里最常用的包與一些新奇的包:

R 語言必學的 10 大包是什麼? - 溫如的回答
有哪些很好玩而且很有用的 R 包? - 溫如的回答

關於這部分由於大家的興趣方向不同,不能一概而論。我推薦的是統計之都的一個叫做R語言之七種武器的系列教程:百度文庫搜索_R語言七種武器。這一系列教程有視頻資源,可以百度搜索或者淘寶花幾元購買。

6.進入無師自通,可以自學習成長的境界

等到你對於R語言已經有了相當的掌握水平,其是你已經可以完全進行自我學習,我一直認為R語言最好的學習辦法是Google或baidu搜索你需要的包,然後學習其相關文檔。或者直接用Rstudio進行搜索。下面舉一個例子:

比如我想學習數據分析里常用的dplyr包,就可以直接看這個包的文檔。只需在命令行輸入:

??dplyr

這時右邊就會彈出相關鏈接:

點擊第一個就可以進入dplyr的相關文檔,其中就有很多例子和講解:

當然你也可以直接搜索其中某些函數,比如filter(),只需在命令行輸入

?dplyr::filter

就能看到所需輸入的參數,返回的數值以及相關的例子。

最後,列舉一些學習資源

網站:
統計之都、煉數成金、人大經濟論壇、CSDN博客等。

書籍:
有哪些關於 R 語言的書值得推薦? - 溫如的回答

視頻:
Coursera上的約翰霍普金斯的R語言教學


記得點贊關注~


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!嚴 禁 轉 載 !!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

學R主要在於5點三階段:

第一階段有一點:基礎的文件操作(read.*, write.*)、數據結構知識,認識什麼是數據框(data.frame)、列表(list)、矩陣(matrix)、向量(vector),如何提取(包括which, []等)、置換(t, matrix等)、刪除(-, which等)、運算(+, -, *, / , %%, %/%等)、轉換(as.*)、修改(edit, fix等)數據(包括單個數、行、列、表、變數),安裝包、調用包以及session的保存。完成這一階段,你就大致能像excel里處理數據一樣了。

第二階段有三點:
1、學習統計。這是貫穿整個R學習的最重要的一部,很多時候你並不是不知道在哪裡找,怎麼使用某個函數的參數,更多的時候你是不知道某個統計方法的原理,所代表的意義甚至不知道該用什麼方法。所以學習統計學知識往往才是學習R的關鍵,之後找函數、怎麼用其實都是傻瓜式的,並不需要你從頭編寫演算法。這部分內容頁要結合每個人要做的事做
2、批量處理。由於R和matlab一樣,注重的是批量處理,而且R之中的循環往往效率極低,所以在R之中如果你發現你要使用雙層循環的時候,就要想想了,有沒有批量處理的方法。
a、首先,幾乎所有的R里的運算符和自帶的函數都是可以批量處理的。比如向量a+向量b是指每個元素按照index相加,所以就沒必要for一下了;
b、其次,R自帶有的apply族函數(因為是一系列以apply結尾的函數,所以稱為apply族),split,以及aggregate函數。這三類就是R自帶的批量處理的利器,學好這三類函數,基本就可以完成絕大部分的數據批量處理了。
c、然後就是reshape2包以及plyr包了,這是批量處理的兩個利器,reshape主要是整形,plyr包基本提供了一套整理數據的理念,學好這兩個包,批量處理將事半功倍。
d、在實際過程中,一些for還是無法避免的。這時候就要考慮用別的語言來處理這部分事情了。比較常用的方法就是用別的語言批量生成R的代碼,還有就是直接用R調用別的語言處理的結果或者用別的語言調用R的處理結果。
3、繪圖系統。總結而言,我們可以把R的繪圖系統分成四個:Graphics, lattice,ggplot2以及grid。最好學習順序也是按照這個來。
a、自帶的繪圖系統。這套系統可以完成最基本的事情,其操作也類似於matlab,可以看做是分步驟命令參數式繪圖,基本就是將一系列作圖看做一步步的命令,每一句都干一件事,然後通過參數調整其中的某個元素的大小、位置、顏色。
b、lattice。繪圖邏輯也同上。只是加了分組繪圖、facet的功能,這些都很實用,其目的就是講自帶函數中需要大量預處理以及多步繪圖的命令用一行命令代替。上手也非常簡單。
c、ggplot2.這是經典的R繪圖包,繪圖哲學是圖層式的,理解成一個一個圖層的覆蓋。這個繪圖系統能做很多事,而且其自帶主題也相當漂亮。有一定的學習難度。以下就是我用ggplot畫的圖

d、grid。grid繪圖系統算是最基元的繪圖命令,很多指令都是從畫圓、直線、矩形開始的,這算是R里最好理解但也是最複雜的繪圖系統。適合想入深坑的人士學習,如果要自由創造一些新的圖形,或者編寫繪圖包,這是必學的繪圖系統。另一個值得說的就是grid中也有專門用來整理拼圖的指令,這個對於有一些論文拼圖需求的人來說還是學學比較好。

如果你完成了以上兩個階段,你已經可以在工作學習中完成絕大部分的工作。但如果你是知識的創造者,或者是個程序員,或者是要實踐自己的演算法、理論、統計方法、繪圖方法,或者亦或是你只是腦抽了,那就要進入第三階段的學習。這部分包括,C語言掌握與精通、R語言調試、改進、編寫包、寫一個地道的幫助文檔、推銷自己的想法。這一階段完成了,你也就是一個R語言的大牛了。少年到處是你可以施展拳腳的地方。

由以上內容,可以基本上把學習路徑總結為下圖:

最後是學習資源的問題,總結如下:

1、課程類。 @uhuruqingcheng已經介紹的coursera上的課程的確很適合入門。
2、書籍類。建議入門用R語言實戰 (豆瓣),然後想要快速指南式的了解R語言的統計應用也可以看複雜數據統計方法 (豆瓣) 。統計學的內容按照自己的需要自行補充,在這裡就補推薦了,推薦了也是和R沒啥關係的。繪圖系統推薦兩本書就夠用了:ggplot2 (豆瓣) 和 R Graphics Cookbook (豆瓣)這兩本也都有中文版可以買到。如果這部分都已經學得不錯了,其實你就不需要書了,直接看R的幫助文檔吧,help()或者? XXX 都可以。在此建議用RStudio,可以幫助你很快的查看幫助,編寫script、斷點調試等等。
需要補充的是springer出了一系列叫Use R! - Springer 的書,一直有更新,也是免費獲取的,大家可以自己下載。
3、網站類
一個是博客,以上已有推薦。
二是問答類的網站。Stack Overflow 和 SegmentFault 都可以嘗試一下。
三是R的journal。題主可以自行在google里搜索 R journal 第一個就是。
四是包和函數的搜索網站Search all R packages and function manuals 。 這個網站提供R里所有包和函數的搜索系統。其貼心之處還有(1)提供分類功能;(2)提供下載的排名,每個包的下載時間線。

此外,其實R語言是一門輕編程重統計的語言,所以題主完全不需要擔心自己的編程基礎。直接做幾個小項目,你會很快上手,千萬不要從教材第一頁讀到最後一頁,那種效率極低,且容易半途而廢。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!嚴 禁 轉 載 !!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
=======================


2015.2.1更新:關於批處理的解答


有幾位同僚在回復裡面詢問批處理的問題,這裡做個簡單的解釋。

批處理類似於向量運算,但也有很大差距,簡單的說,是一個函數可以快速的套用到多維變數的每一維值中。

1. 自帶函數的批處理
譬如:

s &<- 1:5 s * 2

這就是一個最簡單的批處理的例子,結果是

2 4 6 8 10

這是一個簡單的向量標量積結果,而所謂的批處理也就是類似於這種處理方式。而在R之中,數據的最小單元其實就是向量,因此,幾乎所有R的函數,都是批處理的。(注意,與matlab不同,matlab最小單元是矩陣,因此,其基本的運算都是基於舉證運算的)。我們可以用以下方式定義批處理函數:如果一個函數F,滿足,

Fleft( left( x_{1}, x_{2}, ..., x_{n}  
ight) 
ight)  = (F(x_{1}), F(x_{2}), ..., F(x_{n}))

且函數F的實現不基於任何顯式循環(諸如for,while, until),則函數F可以稱之為批處理函數。

譬如:plot(將兩個向量的對應的數逐個地畫到圖中),paste(將字元串向量的每個字元串都做連接)等等。。。
這裡比較一下會更加清楚,譬如如果在python里實現以上功能(不實用pandas和numpy包),就得採用顯式的循環(for,while等):

a = list(range(1, 6))
a = [i * 2 for i in a]

因此,我們可以看出採用批處理最大的優點在於減少的代碼量,並且更加簡潔明了,易於維護。

2. 批處理是否更加高效

其實批處理的另一個好處就是使得運行更加高效,因為批處理函數往往經過處理(使用更好的演算法或者更底層的實現方式)得到某種程度的提速。我們在這裡測試實現將向量每個元素都自乘2這一功能,分別採用按鍵替換,按數字索引替換以及直接批量處理的方式,來測試不同方式速度是如何的。

a &<- 1:10 f1 &<- function(x) { for (i in x) { x[which(x == i)] = i * 2 } } f2 &<-function(x) { for (i in 1:10) { x[i] = x[i] * 2 } } f3 &<- function(x) { x = x * 2 } system.time(replicate(100000, f1(a))) system.time(replicate(100000, f2(a))) system.time(replicate(100000, f3(a)))

結果如下:

&> system.time(replicate(100000, f1(a)))
用戶 系統 流逝
4.47 0.01 4.72
&> system.time(replicate(100000, f2(a)))
用戶 系統 流逝
2.53 0.00 2.63
&> system.time(replicate(100000, f3(a)))
用戶 系統 流逝
0.63 0.03 0.72

明顯看出,批處理並且避免顯式循環的方式的確有助於提高速度,代碼量也少的多。因此,何樂而不為呢?
但是經過測試,並不是每個批處理函數的效果並不是都是那麼明顯,譬如:strsplit。甚至研究碼源之後,你也會發現,很多批處理常用的函數的實現其實都是for,因此,有一派觀點認為避免顯式循環(特別是指採用apply函數、plyr包的方法避免顯式循環),其實具有一定的誤導性,其是否能提高效率也是要視情況而定

3. apply族函數和aggregate函數

這是R基礎包自帶的兩類用於批量處理的函數包,在此,只做簡單地介紹:
apply函數族共有五個,分別是:apply,lapply,sapply,tapply,vapply。其總用其實就是將某個函數逐個套用到向量(矩陣)中每個元素之中,其實具體的作用,讀幫助文檔就可以了。
aggregate這個函數比較有意思,常用的帶入方式是:

aggregate(aDataFrame, by = list(vector1,vector2), FUN = aFunction)

作用就是基於by指定的變數做分組,計算FUN分別統計每個組的結果。

4. 幾個常用的批處理用的包

主要有:

  • reshape(最好用的是melt)
  • plyr(__ply族函數是最好用的,有一個很巧妙地邏輯,對於開發軟體包的人來說學習這個包很有啟發性;其次用ts比較多的人最好學一下round_any函數):此包入門有點難,有些人也吐槽效率;round_any+gglot2畫時間序列實在是太佳了。
  • data.table:這是一個網友的推薦,聽說很好用,效率也提高不少。

5. 關於如何用別的語言混編和apply族函數的效率還可以看這個博文,寫得不錯:
謝益輝: 也談提高R語言的運算效率

======================================
2015.2.1更新:關於ggplot2是什麼


參見:如何使用 ggplot2? - 黃寶臣的回答


簡單版回答:選一門和R有關的課讓作業驅使你自學。
詳細版回答:
作為一個文科來到紐約做 Visiting student,選了一門Quantitative Principals of Political Research.
距離上次學數學已經過去一年半,距離上次接觸統計學概念已經過去兩年。
於是在教授飛一般地介紹統計學概念和展示PPT上的代碼時,前一個月的課基本沒聽懂。
但是要寫作業啊,一個學期5篇paper。
第一次寫作業是第二周,教授讓我們找一篇政治學paper做review,我根本寫不下去,交上去的作業毫無邏輯,真是苦了改作業的老師和TA。
後面四篇paper要用R做cross-tab,線性回歸方程和散點圖等等,於是在掛科的壓力下,我在第五周用一晚上看完了可汗學院的統計學課程,再用一晚上把教授PPT上前一個月的代碼手動輸入R-studio跑了一遍,然後開始R 處理第二篇paper的數據。
從此以後,我發現就算不能完全聽懂教授在講什麼,至少能看懂PPT上的代碼是幹嘛的。就算不能清楚的記住那些代碼,但我知道subset data的時候要用什麼, dealing with missing data要用什麼,如何畫95%置信區間,如何畫散點圖,如何在一個坐標系表示4個變數...
然後同上一門課的研究生學姐已經把paper2寫得差不多了,還沒打代碼生成圖,我就去教她了,順便給她把前一個月的概念梳理一下。至此,前一個月的課基本是懂了。
然後另一個研究生學長也和我來討論paper的代碼,他提了幾個問題,我一一寫出代碼解決了,順便給他講清楚了 hypothesis test。
雖然現在也就是個菜鳥,但我覺得從9月9號開始上第一節課, 完全聽不懂,sample mean 和 sampling distribution of sample mean 傻傻分不清楚,不知道read.spss是幹嘛的,不知的library是什麼,到一個月以後可以給別人梳理前面的統計學概念,順利寫完paper2,並教學姐寫代碼,我覺得我還算進步得挺快了。
所以,在掛科的壓力下,效率就這樣上去了 : )
前面的答案說得很好:
1.學好統計。
我覺得一開始主要是把統計學的概念搞清楚,然後對應R裡面哪個函數是幹嘛的。
什麼sampling distribution of sample mean, 95% confidence interval, confidence level,p-value這些我都來來回回看了好多遍,因為高中後就沒學過統計,教授還飛一般的講,我英語又一般,於是-- 出門在外靠自學。
2.實踐需求推動學習進度
從基本概念:vector, data.frame, matrix, factor (我想到就隨便列幾個,不一定在同一邏輯層面,不要拍我)入手慢慢網上學比較有系統。但如果追求初學的效率和成就感可以從模仿開始:比如在dataset中找幾個變數模仿網上寫好的代碼 試試summary(lm(x~y)), 畫個散點圖啦,或者做有趣的word tags.成就感激發興趣能讓人主動學習。
3.R的使用定位
不知道問題主是把自己定位在 R user還是R programmer.
如果是前者,我覺得從模仿和做小project開始是不錯的選擇。我自己寫作業的時候會產生更多需求,比如改變散點圖的點顏色表示第三個變數,比如可視化cross-tab,然後我就去Google,然後模仿已有的代碼,弄清每一步是做什麼的,最後做出自己的圖。
如果是想做programmer,我覺得可能從基礎概念學起以後的學習會更加順暢,畢竟我自己就經常不知道為什麼報錯,為什麼出不了圖,然後一行一行的試(這樣其實很慢,以後還是要回去補概念,理解地不透徹,而且高中文科數學就沒學排列組合,矩陣什麼的,可能也有點影響)
4.我覺得被作業逼急了,什麼斜率的學習曲線短時間內都能產生,因為,我再差也不能掛科啊。

最後獻上我paper2的散點圖和昨天畫的paper3的散點圖。
第一張老師說:x,y軸的正方向已經表示兩個變數的大小了,所以漸變色和點大小是多餘的設置

第二張老師說:一個圖裝了所有變數,you are crazy,hahah(魔性的笑聲在空氣中回蕩)

所以我一直想畫圖又酷炫又簡潔有邏輯的圖啊。喜歡R主要是因為它的作圖功能好,我又特彆強迫症,喜歡調字體,調顏色調到自己順眼為止,無形之中耐心變得特別好。

PS. 因為這門課我覺得統計學和data visualization很有趣,是我這麼多年來覺得最有趣的課了,學的時候特別開心。而且網上各種免費教程,開源包,每次用R都能感覺到世界滿滿的善意啊。

於是目前從被作業驅使變成有被興趣驅使了。


不要上cousera約翰霍普金斯的課程,我每個月上兩三門,已經上完第7門我覺得並沒花多少時間就能完成課時和作業,拿分很輕鬆。課裡邊有project要幫別人改作業的,我看別人的作業在作業要求以外的部分寫得比我漂亮多了,可見別人並不是光從這門課里學R,同時在看其他資料甚至已經通過別的途徑入門了。
總之我覺得,這課的內容本身含量不高,不能指望學完它就能入門,而且戰線拉得又長,總之差評 :-(

————————————————————(原回答)
那最好看你感興趣的領域,比如時間序列、多元統計、機器學習,然後就找這些領域的書with application in R。個人感覺R上手極容易,就像玩CS一樣。(當然要想成為R專業用戶那就另當別論了)


R-studio是必須的,然後去這裡R-bloggers | R news tutorials from the web
看看並且把你的郵箱留下,它會定期給你發有什麼新的package發布,有什麼什麼人用R幹了什麼什麼分析。應該會很快找到你需要的方向怎麼用R的。


實際問題,永遠是實際問題驅動學習才是最高效率的。當你急需求解一個問題,處理一批數據,實現一個功能的時候,很多問題都會冒出來,在實踐中來學習,是效率最高,而且效果最好的。基本解決一個問題,你都會明白一大堆以前不懂的東西。當然首先得把基礎稍微掌握以下,使得可以快速展開,上手。所以你現在要做的不應該是去看一大堆資料,而是需要去找一大堆亟待解決的問題,在解決問題的過程中,會有不斷的需要學習新函數,新方法的地方。這比對著手冊,書本一個個例子來的更加實在,因為你所解決的問題不僅僅是一個練習,而是你自己的任務,有可能是科研的,有可能是工作的。而且有一個tips就是,你需要解決一個問題的時候,先試著自己寫一下,當發現自己寫得不滿意,或者覺得實現比較彆扭的時候,再去google一下,一般在stackexchange上都會得到非常高效和滿意的答案,這樣前後對比,得來的震撼和印象會使得少量的幾次學習就會理解掌握很多內容。


按照我的審題, 題主說的是如何學好R, 所以, 默認是已經學會R的人應該如何更高效的提高, 具體怎麼學會R,各種教程/書籍/視頻/路線層出不窮, 我就不再贅述了

學會是指:
1. 會用基本函數(導入/分析/包)
2. 會查幫助文檔

在學會的基礎上,就需要考慮下一個問題

如何學好R


做數據分析的時候, 有一個很重要的原則: 問題&>數據&>工具, 既然想把某個工具學好, 必然需要認清楚出發點在哪裡, 究竟學好R是為了什麼(或是說你數據挖掘的路線是什麼),比如:

1. 想做一個合格的分析師(報告/domain knowledge需求)
2. 想用R合理的建模(統計/機器學習需求)
3. 提高R編程的能力(Coding的需求)
4. 純粹的想做數據分析(實戰的需求)
## 3. 想做一個合格的可視化工程師

我們一個個的來說:

-------------------
合格的分析師
--------------------


對於分析師來說, 做報告/做slides/講故事/講報告是四個不能忽略的能力
對於這部分需求來說,我覺得最有效的方法是以下兩個:

1. 寫博客
2. 寫教程


這個方式可以有效的培養講故事的能力, 東西寫的越長越多, 就越能鍛煉自己,而且在寫教程,博客的過程中也能有效的鍛煉數據分析的能力, 比如搞個數據, 做下描述統計, 做幾個圖, 在做個分類/聚類模型, 就能出一個簡單的數據報告

-------------------
統計建模
--------------------

想學好統計/建模的人也不在少數, 對於這部分玩家, 在R中去學,最穩健的路線應該是讀源碼和演算法實現, 因為經歷這個過程以後你對演算法的理解會更深刻, (寫多了就會發現, 看代碼學演算法會比看公式學演算法要快的多&>.&<)

舉個栗子, lm函數是線性回歸的基本函數, 如果你把這個函數重寫一遍就基本能掌握lm中大部分內容,比如:
1. 參數的求解 (X"X)-1X"Y
2. 參數的檢驗(t檢驗的參數)
3. 殘差的計算/factor變數的選擇等
簡單的還可以寫下kmeans,Cox-box變換, 機器學習的演算法可以看下CART, CART的基礎上還可以寫下GBM,rf等等

-------------------
R-developer
--------------------

R的開發其實...坑不少, 如果想提高R的工程能力, package是一個合適的途徑

剛開始的時候, 可以去一些比較大的項目中去debug, 比如去看一些好玩的包的github issue裡面有沒有什麼自己可以花時間解決的問題, 為這些項目去貢獻一些代碼, 比如這個開發了好幾年卻需要跟著Echarts不斷更新的R包: recharts:
GitHub - taiyun/recharts: An interface to ECharts
等自己想(chi)法(bang)足(ying)夠(le), 就可以自己開一個新坑, 自己填代碼進去, 在填的過程中, 慢慢會發現自己的工程水平在不斷提高, package開發可以參考rstudio的cheat sheet https://www.rstudio.com/wp-content/uploads/2015/06/devtools-cheatsheet.pdf
(cheat sheet沒有中文版, 如果哪群知友有心可以和Rstudio聯繫下做下翻譯)

對了, 你說沒有想法, 試試"steal ideas from D3"

-------------------
實戰的需求
--------------------


這個需求其實最好解決, Kaggle.com, Kesci.com, 天池分分鐘滿足你的實戰...

如果你心虛的話, 也可以試試自己去用一批數據來自己玩.不過, 現實是:很多初學者很難提出一個合適的問題或者角度做下去,提問題也是一門藝術


------------
最後一點
-------------

會實戰不代表會開發
會開發不代表會建模
會建模不代表會寫報告
能力之間是獨立的,需要分別鍛煉,請選擇合適的路線


以上


用R是為了圖方便。需求複雜的話還是用別的語言好。


看看《Advanced R》這本R語言高級編程的書,會有很大的幫助,現在已經有中文版了。

R語言高級程序設計


Coursera 上面有約翰霍普金斯大學開設的專項課程數據科學,是基於R語言的,上面的course project都是些實際生活中的問題和數據,而且課程是循環開放的,可以考慮跟著課程學習。


這是我見過比較好用的R Language教程:https://www.datacamp.com


隨便看個tutorial然後做項目,缺啥補啥,別想著上來就高大全。


我覺得高效的的學好R的目的是為了完美的獲得數據分析師的技能樹問題
1、統計學基礎——《statistics for business and econmics》
2.常用模型理論——《數據挖掘》、《數據挖掘導論》
3、代碼實現R和Python——《R語言實戰》和《利用Python進行數據分析》
4、網頁分析——《Web analytics》
5、資料庫技術——開源資料庫Mysql,《Learning Mysql》
6、實戰應用——《Practical Data Science Cookbook(2014)》
簡單的描述下:

統計學是一個數據分析師的核心功底,只有學好了統計學才能談得上數據分析。R只是數據分析的一個工具軟體。但是統計學又常常是不夠用的,還需要一些高級的模型來解決實際業務中的問題,比如:銀行需要判斷是否給某個客戶發放信用卡 這就需要一個高級的二分類模型。這裡數據挖掘理論就派上用場了。
有了理論知識,我們需要用工具去實現理論並加以應用。這個年代,已經沒有人會去手工計算某個問題了,R和PYTHON就是最負盛名的數據分析工具。 關於R和PYTHON的地位,題主可以百度,谷歌,知乎等搜索一遍。 至於如何學習,請看上面答主的書單!
如果致力於在互聯網領域發展,那麼網頁分析是必看的一本書籍。這本是是大名鼎鼎的GA創始人著作,會有一個不錯的收穫。
數據分析師是跟數據打交道的,數據都是存儲在資料庫裡面的,因此掌握必備的資料庫技術是肯定要的!
做數據分析需要的是綜合素質,不要僅僅局限在一個工具軟體的掌握上,雖然掌握一個工具軟體能夠很快對工作起效,但是,上升到統計理論的掌握才是最終極學習方法。


推薦我們網站 雪晴數據網 - 在線學習數據科學技術

學習R語言,一篇文章讓你從懵圈到入門


對於R語言學習的流程,學習的資源,樓上都已經講得很清楚了。我換一個角度,內容包括以下幾點

  • 學好R語言需要的特質
    • 對技術的好奇心
    • 對R語言的時刻關注
  • 本人的R語言學習經歷。

第一,保持對技術的好奇心。
對R可以實現的有趣的功能保持好奇心,這種好奇心可以讓你有不竭的學習動力。
同時不要放過任何一個報錯或疑惑,在追尋答案的過程中,不僅搞懂了這個問題,而且能學到相關的其他知識,發現很多大牛,很多優秀的博客、書籍、網站等學習資源。
我也曾經羨慕那些分享資源的大牛們,能夠找到這麼多好資源。但是真正自己潛心學下去的時候才發現,資源遍地都是,每個人都可以像他們一樣。知識擺在那裡,非常好的學習途徑也到處都是,其實我們最缺乏的,是不斷去探索學習的心,保持好奇心,積極嘗試那些「酷」的事情,是最好的驅動力。

第二,保持對R語言的關注。
雖然R語言的學習資源非常豐富,但是我們仍會碰到一個問題,那就是信息封閉,不知道還有什麼可以學,沒有什麼能引起自己的興趣。這就需要我們對R語言保持關注。
比如天天關注R語言的公眾號或者專欄,你不一定每篇文章都要當場細看,只要擴展自己對R的認識。在關注的過程中,我們可以從別人寫的教程、實踐案例、以及R的新開發包和功能中,發出這樣的感慨:「原來R語言還可以做這些事」,「原來有這麼簡單的方法」,「原來有這樣高效的工具」,「最近Rstudio又添加了新功能,我要試一試」。
這個過程就是要不斷開闢新天地,知道將來學習的方向,提高自己的興趣,獲得不竭的動力。

以上兩點我個人是深有體會,下面大家可以從我的學習經歷中看到這兩點所起的重要作用。
我在去年六七月份的時候第一次接觸r語言,當時是從《R語言實戰》這本大家公認的入門書開始學習的,我學了前面數據處理和繪圖的幾章之後,覺得後面涉及到統計知識的可以等到真正要用的時候再學。
當時數據框處理和畫圖都是會用,但是不是很熟練,也會遇到很多莫名其妙的報錯,但是不知道怎麼改善這樣的局面。很重要的問題是,當時覺得R語言已經沒什麼可以學的了。
偶然一次,我接觸到了rmarkdown, 當時我覺得非常amazing,於是課下就上網查教程,我沒有停留在簡單 knit 出一篇文檔,而是去查看它的各種參數,終於可以靈活地製作文檔。
更重要的是,我在查找教程的過程中,發現了 rstudio 官方網站,看到那些和 rmarkdown 並列放置的R包,那一次,我真的感覺自己發現了新大陸,我按順序去了解,去學習,dplyr, tidyr, readr, ggplot2, data.table, shiny 等等。這些包讓我知道還可以 高效數據處理,畫出精美的圖片,製作互動式界面等等。這個過程,我不僅學習了這些包,而且之後感覺自己對以往數據處理的理解更加深入了,處理數據更加得心應手。
當時是老師曾經推薦我們「R語言中文社區」公眾號,我每天都會關註上面的信息,有時是大牛寫的教程、案例,有時是公布新增的R包,公布一些新開發的功能。每次看到我感興趣的內容,我都會收藏到筆記本中,有時間就會翻出來學習。
在查閱資料的過程中,我會把與當前問題無關的的其他方面學習資源存到筆記本上。通過這種不斷的積累,我的筆記本中存放著大量的資源。比如某一天我想學習文本挖掘了,我就不需要現找資料,直接看現成的就可以了。而且經常會遇到一些神奇的網站,如果不是當時積累存下來,遇到問題去找是找不到的。
用這種方式我又不斷接觸到 分詞,網路圖,交互圖等等r包。在平時的課程學習中,我還接觸到了專門用於聚類分析,主成分分析等統計有關r包。

如果說之前學習r包的過程是在往上走,那麼後來我的學習便是開始向下方延伸。通過《R語言編程藝術》和《advanced R》這兩本書,我逐漸深入地了解R的內核。了解內核並不一定是要去做開發,而是這能解決很多你以前解決不了的困惑,我們了解了內在實現的機制,就不會犯一些低級錯誤,也很容易解決代碼中的報錯。

這本更深入地講述R內核的書《advanced R》的作者Hadley,其實就是上面提到的ggplot2, dplyr 等包的作者。我說這個是為了說明,我們學習R包,了解了作者,順藤摸瓜,找到了這本優秀的書,其實還可以找到Hadley 的其他優秀R包,和另一本大作《R for data science》。所以資源之間總會有一些關聯的,當你看到非常優秀的文章,你就有理由相信這個作者會有很多非常好的文章,深挖好篇文章的源頭,你就可以不斷發現優秀的博主。最後其實你連自己發現的那些都看不完,根本不需要別人來給你推薦其他內容。

我們通過這種方式不斷發現自己感興趣的資源,一步一步地學習,肯定比直接拿到一個r包清單、博客清單、項目清單要好,因為你對列出來的東西沒有基本的了解,很有可能會一直存著,再也沒有看過。我們可以遵循自己的腳步,發現了什麼學什麼,學到的都是你需要的或者你感興趣的,你會覺得學習是一件非常享受的事情。

這段時間在寫一個關於R語言的專欄,早就聽到很多鼓勵寫博客的聲音,自己真正去做才深有體會,教是最好的學。

現在的我感覺R語言有學不完的知識,只恨沒有時間。很多我感興趣的R包,R語言更深入的內核,優秀R包的源文檔,許多有趣的R項目,甚至自己獨立開發一個R包,這些都等著我去鑽研。

我希望自己的經歷和想法可以給讀者一些啟發,日後大家更好地學習交流。

最後貼一個在另外一個問題中回答的,我自己推薦的R語言學習具體技巧,資源獲取的正確方式

該如何學習 R 語言?


一個特別萌的東西叫Swirl,用R學R。多說幾句,台清華有一群資訊系的老師們做了非常棒的互動式教材,目前只發出了入門類的章節,一些諸如機器學習等教材沒發(老師跟我說編好了但是不能給我們學生要拿去賣錢………)
哪位朋友要是搞到好的swirl教材務必私信我呀!


搞生物的多上bioconductor
我的方法是拿實際數據開始自己做,該用什麼方法問行家然後自己讀manual,慢慢就會了,不過是野路子,不成體系,實用型,完成task夠用


重點在高效的話,肯定是實戰最高效。學R的目的是為了應用,實戰中的時間緊迫性可以無限激發人的潛能,既快速學習了R,也學習了R與應用的結合。


只從個人經驗出發,給幾個建議。

1,需要有相應的統計知識。這個怎麼強調都不為過分。我個人在實踐中遇到的比較頭疼的問題,都是在統計學上。嗯,就是學藝不精啊。
2. 了解R的基礎知識,常見的數據結構是怎樣的,R是如何處理的。講真,如果這些比較糊塗的話,拿到真實數據後的清理過程會掉坑無數,終究要回去補。
3,在實踐中學。給自己定任務,開始用Rstudio做。那些大部頭的R書就用來做參考吧,不要嘗試一口氣讀完,這是很沒效率的做法。
4,最初的任務可以從simulation開始,可以自己編寫,也可以學習別人編好的小程序。這樣做的好處一方面回顧了統計學知識,一方面熟悉了各類編程語句和R的數據處理方式,算是入門。但訓練幾次後,就上真實數據吧。
5,好記性不如爛Google。利用好網路資源(可能要學會科學上網)。
6,個人認為可以提高效率的工具:清理數據reshape2、dplyr,批處理apply家族,作圖ggplot2。
先寫這麼多。個人經驗,僅供參考。


統計之都BBS


您好,我最近剛開始學習R語言。看到一個代碼寫的是
array(x1[icity,,,,],c(dim(x2)[2:5]))

請問裡面的x1[icity,,,,]和dim(x2)[2:5]是代表什麼意思呢?


實際問題或題目是最好的學習途徑,能引起你更多的思考,不用的話總會忘的


推薦閱讀:

Quant 如何運算百萬行的數據?
數據分析師的具體工作職責和工作內容有哪些?
大數據最核心的價值是什麼?

TAG:數據挖掘 | 統計學 | 數據分析 | R(編程語言) |