本篇推文就不介紹為什麼需要學R了,你能打開這篇文章,說明你有學習 R 的想法或者正在學習 R 的路上。
今天簡單介紹下R語言的學習路線以及R學習資源匯總。
1. R基礎入門學習R語言的最好方法就是在實踐中學習,多多動手,多碼代碼,這個最重要。
紙上得來終覺淺,絕知此事要躬行。
剛開始學習R語言,可以看一些免費入門視頻,可以在B站上面搜,B站有很多免費的R語言入門視頻,比如《尚學堂尹鴻的R語言速成實戰》[1],這個視頻是免費的,視頻講義素材來源於《R語言實戰》的第一章到第六章,這幾章可以邊看書邊跟著視頻學習,用來簡單入門基本夠了。
另外也可以試試一個離線的交互式學習R包——swirl[2]包,可以在R軟體中安裝這個包,然後看看這個R包的幫助文檔[3]學習下怎麼用。
看看這個包的幫助文檔[5]學習怎麼用。
也可以在datacamp[4]網站中選擇它的在線版本進行學習。
如果不想看視頻,可以先閱讀一些R語言入門的小手冊,比如說CRAN[5]上的R介紹小手冊,對R語言有一個初步了解。
或者閱讀幾本不錯的R語言入門書籍,比如說《R語言實戰》[6]、《R數據科學》[7]等。對於初學者,建議看中文版即可。另外李東風老師的《R語言教程》、王敏傑老師的《數據科學中的R語言》以及張敬信老師的《R語言編程:基於tidyverse》也很不錯,極力推薦,並且這三本書也開源。
英語不錯的可以直接看英文原版,比如說《R for Data Science》[8],英文原版有時候更容易理解,有的中文版直譯後沒有那種味道了,並且英文版知識更新速度更快。
可以從R官網[9]中下載和安裝R軟體,安裝不複雜,要是實在不會,就網上百度一下,有很多教程。
安裝好R後,可以選擇一個R集成開發環境(IDE),這裡強烈推薦安裝RStudio[10],RStudio是目前最受歡迎的R集成開發環境,體驗效果極佳。
並且RStudio上也提供了很多R學習資源,可以點擊菜單欄查看免費獲取。
3. 安裝R包R包是R函數、數據、預編譯代碼以一種定義完善的格式組成的集合。
在安裝R軟體時,R會自動安裝一些基礎R包[11],這些基礎包提供了種類繁多的默認函數和數據集,其他大多數R包都需要自己手動安裝,比如說ggplot2[12]包、tidyverse[13]包。
安裝R包主要有三條途徑。
3.1 CRAN大多數R包都可以從CRAN上安裝,只需要在命令行中直接輸入代碼install.packages("R包名")即可自動安裝,建議在Rstudio中將鏡像地址改為離你最近的地址。
在CRAN上,R官方專門維護了41個Task Views[14],專門將一些功能相近、同一領域的包羅列在一起,比如說Survival[15]系列,從這裡你可以快速找到你需要的一組R包。
3.2 bioconductor除了CRAN,還可以從bioconductor[16]上安裝R包,這個資料庫專門存儲一些生物信息學領域的R包。
Bioconductor上的R包安裝可以參考官方網站的安裝方法[17],與CRAN類似。
install.packages("BiocManager")
BiocManager::install(c("GenomicFeatures", "AnnotationDbi"))
3.3 github另外還可以從github[18]上安裝R包,有的R包作者沒有將自己的代碼上傳到以上平臺,選擇存儲在github上,我們可以使用devtools[19]包從github上安裝R包。
對於github上的R包,可以在github上面檢索這個R包,找到這個包的官方地址,一般R包作者會在裡面說明安裝方式,比如說ggExtra[20]包。
install.packages("devtools")
devtools::install_github("daattali/ggExtra")
3.4 本地安裝如果存在一些怪裡怪氣的R包,你上面三種方式都安裝不了,可以考慮使用本地離線安裝,先下載到這個R包的壓縮包,再在RStudio中安裝,R包的壓縮包可以在上面三個平臺找。
如果這些方式都安裝不了,那大概率說明這個包存在問題。
3.5 查找需要R包R包目前有1萬多個,想要快速查找一個自己需要的包有時比較麻煩,我們可以使用Rdocumentation[21]、inside-R[22]等網站從CRAN、github和bioconductor上快速查找需要的R包。
4. R與數據導入R支持各種數據格式的導入,如下圖,R可從鍵盤、文本、Excel和Access、統計軟體、特殊格式文件、資料庫管理系統、專業資料庫、網站和在線服務中導入數據。
來自《R語言實戰》不同的數據格式,需要不同的R包來導入。
4.1 文本文件文本格式文件可以使用utils包的read.table()[23]函數和read.csv()[24]函數導入,還有readr[25]包和data.table包的fread()[26]函數也可以快速導入數據。
4.2 Excel文件如果是Excel格式文件,可以使用readxl[27]包導入,另外gdata[28]包和XLConnect[29]包也可以導入Excel數據。更多Excel文件導入到R中可以參考《Reading and Importing Excel Files into R》[30]這篇文章。
4.3 SAS、STATA和SPSS文件SAS、STATA和SPSS軟體生成的三類數據格式文件可以使用Hadley的haven[31]包導入,也可以使用foreign[32]包導入,foreign包不但可以導入這三個數據格式文件,還可以導入其他格式文件,比如Systat和Weka格式,同時也可以再次將數據以各種格式從R中導出。
4.4 資料庫文件如果需要導入資料庫中的數據文件,不同的資料庫所要求的包不同,比如說MySQL資料庫,可以使用MySQL[33]包讀取,RpostgreSQL[34]包和ROracle[35]包也可以。
另外也可以使用DBI[36]包中的函數去指定獲取不同的資料庫數據。
4.5 網絡數據如果是想使用R來獲取網絡上的數據,可以使用API或者rvest[37]包來抓取數據。網絡數據獲取入門可以查看Rolf Fredheim的博客[38],這裡有很多資源可以獲取。
5. R與數據處理大多數直接導入R中的數據是不能直接用來統計分析和繪圖的,需要進行一定的數據處理。
將"髒"數據清洗成"乾淨"數據對於後續的統計分析和數據可視化非常重要。
R語言內置了很多基礎函數來處理數據,但是這些函數數據處理效率一般般,並且也不是那麼好用,這裡推薦一些不錯的數據處理R包和函數。
5.1 tidyr包tidyr[39]包可以用來整理數據,一個好的數據集應該是一行代表一個觀測對象,一列代表一個變量,這樣的數據集才方便我們使用。要了解有關tidyr包的更多信息,可以查看tidyr包的幫助文件[40]。
5.2 stringr包如果數據集中需要進行字符串操作,可以使用stringr[41]包,可以學習這個stringr包的幫助文件[42],這裡面包含許多有用的示例幫助快速入門。
5.3 dplyr包dplyr包是專門用於數據分析的一個R包,也是tidyverse數據科學系列包中的核心R包,在進行常用的數據分析操作時,比如說行篩選、行排列、選擇列、創建列等操作,可以優先使用dplyr包,簡單、方便、效率高。要了解有關dplyr包的更多信息,可以學習RStudio上的這個小手冊[43]。
5.4 data.table包當數據集數據量非常大時,可以使用data.table[44]包。要了解更多data.table包的信息,可以學習包的幫助文件[45],也可以閱讀黃天元的《R語言數據高效處理指南》[46],這本書專門介紹了R語言中的數據處理,作者也公開了書籍中的原始碼[47]。
5.5 lubridate包如果需要處理日期時間類型數據,可以使用lubridate[48]包。要了解有關lubridate包的更多信息,可以學習包的幫助文件[49]
5.6 zoo、xts和quantmod包基礎包處理時間序列數據的能力有限,可以使用zoo[50]、xts[51]和quantmod[52]包來處理,也可以學習Springer出版的《Time Series Analysis and Its Applications》[53]。
如果想全面學習R的高效數據處理,可以閱讀《R數據科學》、《Data Manipulation with R》[54]或《Data Wrangling with R》[55]這幾本書,也可以學習RStudio出的《Data Wrangling with R》[56]視頻。如果您在處理數據時遇到問題,可以查看這15種解決方案[57],也許就能幫到你。
6. 數據可視化R語言最出色的功能之一就是數據可視化啦。
6.1 ggplot2包ggplot2包是目前最受歡迎的可視化R包,你可以在ggplot2官網[58]學習怎麼使用ggplot2包,也可以查看RStudio出品的cheatsheet手冊[59]或者閱讀這本即將出版的《ggplot2: Elegant Graphics for Data Analysis》[60],當然《R數據可視化手冊》[61]也是一本絕佳的可視化學習書籍。
6.2 交互式繪圖包除了ggplot2包外,學習一些交互式R包也是很有必要的,比如ggvis[62]、googleVis[63]、Plotly[64]。
另外可以在這個task view[65]上查看其他的數據可視化R包。
如果繪圖時存在問題,可以查看這篇博客文章[66],也許可以幫到你。
6.3 空間地理圖形在R的task view中,有專門的主題用來處理空間數據[67],教你繪製漂亮的地理圖形。
首先可以學習下ggmap[68]包中的示例,這個包可以讓你在靜態地圖上顯示來自Google地圖和開放式街道地圖等來源的空間數據和模型。另外還可以學習下maptools[69]包、choroplethr[70]包和tmap[71]包。
如果你需要一些更詳細的教程,可以查看這篇幫助文檔[72]以及一些R可視化的博客,如FlowingData[73]。
6.4 可視化小工具目前R中最新的可視化小工具是HTML widgets[74],HTML widgets的工作方式與R相同,但它創建了交互式Web可視化效果,如動態地圖 (leaflet[75])、時間序列數據圖表(dygraphs[76])和交互式表(DataTables[77])。有一些非常不錯的HTML widgets示例[78],以及如何創建自己的HTML widgets的文檔[79],有興趣的可以查看閱讀。
6.5 配色方案R語言繪製出來的圖形色彩優美,除了R本身的功勞外,也得益於一些出色的配色R包,比如說RColorBrewer[80]包和ggsci[81]包,還有一些主題包也不錯,比如說ggthemr[82]包、tvthemes[83]。
6.6 圖形排版圖形排版是可視化好圖形後遺留的一個小問題了,R中可以進行排版的包有好幾個。
patchwork[84]包應該是最贊的一個排版包了,這個包排版自定義程度很高,能滿足各種排版需要。還有一些包排版也不錯,比如說cowplot[85]、Rmisc[86]、ggpubr[87]。
7. 機器學習機器學習一些常用的包有caret[88]、rpart[89]和randomForest[90],這些包也有一些不錯的學習資源。如果只是入門學習,可以看看這本指導手冊[91],也許會有幫助。
另外,也可以讀讀《Mastering Machine Learning with R》[92]和《Machine Learning with R》[93]、《Practical Data Science With R》[94]、《A Survival Guide to Data Science with R》[95]這幾本書。
如果你需要一些手把手的教程,可以看看Kaggle機器學習課程[96]和Wiekvoet的博客[97]。
8. RMarkdown與ShinyR Markdown為數據科學提供了一種統一的寫作框架,可以集成代碼、輸出結果和文本注釋。R Markdown文檔是完全可重用的,並支持多種輸出形式,包括PDF、Word、幻燈片等。
R Markdown常見的學習資料包括R Markdown速查表、R Markdown用戶指南,在RStudio中可以找到。
除了R markdown,還可以學習下Shiny[98]。Shiny讓R構建交互式Web應用程式變得很簡單,我們可以將分析變成交互式Web應用程式,而不需要了解HTML、CSS或Javascript等。
RStudio是一個很棒的R學習網站,上面有很多很棒的的Shiny學習資源[99],可幫助快速入門Shiny,包括一些視頻教程合集[100]以及一些高級主題和大量示例[101]。
翻譯自一篇博客,具體連結點擊閱讀原文。
參考資料[1]R語言速成實戰: https://www.bilibili.com/video/BV1tW411x7rW?p=1
[2]swirl: https://swirlstats.com/
[3]swirl文檔: https://swirlstats.com/students.html
[4]datacamp: https://www.datacamp.com/courses/r-programming-with-swirl
[5]CRAN: https://cran.r-project.org/
[6]R語言實戰: https://book.douban.com/subject/26785199/
[7]R數據科學: https://book.douban.com/subject/30277904/
[8]R for Data Science: https://r4ds.had.co.nz/index.html
[9]R: https://cran.r-project.org/index.html
[10]RStudio: https://rstudio.com/
[11]Base Package: https://www.rdocumentation.org/packages/base/versions/3.6.2
[12]ggplot2: https://github.com/tidyverse/ggplot2/
[13]tidyverse: https://www.tidyverse.org/
[14]Task Views: https://cran.r-project.org/
[15]Survival topic: https://cran.r-project.org/web/views/Survival.html
[16]bioconductor: https://bioconductor.org/
[17]Install Bioconductor Packages: https://bioconductor.org/install/#install-bioconductor-packages
[18]github: https://github.com/
[19]devtools: https://cran.r-project.org/web/packages/devtools/index.html
[20]ggExtra: https://github.com/daattali/ggExtra
[21]Rdocumentation: https://www.rdocumentation.org/
[22]MRAN: https://mran.microsoft.com/
[23]read.table: https://www.rdocumentation.org/packages/utils/versions/3.6.2/topics/read.table
[24]read.csv: https://www.rdocumentation.org/packages/utils/versions/3.6.2/topics/read.table
[25]readr: https://github.com/tidyverse/readr
[26]fread: https://www.rdocumentation.org/packages/data.table/versions/1.13.6/topics/fread
[27]readxl: https://github.com/tidyverse/readxl
[28]gdata: https://cran.r-project.org/web/packages/gdata/
[29]XLConnect: https://cran.r-project.org/web/packages/XLConnect/
[30]Reading and Importing Excel Files into R: https://www.datacamp.com/community/tutorials/r-tutorial-read-excel-into-r
[31]haven: https://github.com/tidyverse/haven
[32]foreign: https://cran.r-project.org/web/packages/foreign/index.html
[33]MySQL: https://cran.r-project.org/web/packages/RMySQL/
[34]RpostgreSQL: https://cran.r-project.org/web/packages/RPostgreSQL
[35]ROracle: https://cran.r-project.org/web/packages/ROracle/index.html
[36]DBI: https://cran.r-project.org/web/packages/DBI
[37]rvest: https://cran.r-project.org/web/packages/rvest/
[38]Rolf Fredheim: http://blog.rolffredheim.com/2014/02/web-scraping-basics.html
[39]tidyr: https://cran.r-project.org/web/packages/tidyr/
[40]tidy-data: https://cran.r-project.org/web/packages/tidyr/vignettes/tidy-data.html
[41]stringr: https://cran.r-project.org/web/packages/stringr
[42]stringr vignette: https://cran.r-project.org/web/packages/stringr/stringr.pdf
[43]dplyr cheatsheet: https://rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf
[44]data.table: https://cran.r-project.org/web/packages/data.table/
[45]data.table 介紹: https://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.html
[46]R語言數據高效處理指南: https://zhuanlan.zhihu.com/p/82480894
[47]書籍原始碼: 後臺回復20210112即可獲取
[48]lubridate: https://cran.r-project.org/web/packages/lubridate/
[49]lubridate vignettes: https://cran.r-project.org/web/packages/lubridate/vignettes/lubridate.html
[50]zoo: https://cran.r-project.org/web/packages/zoo
[51]xts: https://cran.r-project.org/web/packages/xts
[52]quantmod: https://cran.r-project.org/web/packages/quantmod
[53]時間序列分析及應用: https://www.springer.com/gp/book/9783319524511
[54]Data Manipulation with R: https://www.springer.com/gp/book/9780387747309
[55]Data Wrangling with R: https://www.springer.com/gp/book/9783319455983
[56]Data Wrangling with R: https://rstudio.com/resources/webinars/data-wrangling-with-r-and-rstudio/
[57]15 solutions: https://www.datacamp.com/community/tutorials/15-easy-solutions-data-frame-problems-r
[58]ggplot2官網: http://ggplot2.org/
[59]ggplot2 cheatsheet: https://rstudio.com/resources/cheatsheets/
[60]ggplot2-book: https://ggplot2-book.org/
[61]R Graphics Cookbook: https://book.douban.com/subject/25873705/
[62]ggvis: https://ggvis.rstudio.com/
[63]googleVis: https://github.com/mages/googleVis
[64]Plotly: https://plotly.com/r/
[65]Graphics view: https://cran.r-project.org/web/views/Graphics.html
[66]R繪圖的15個常見問題: https://www.datacamp.com/community/tutorials/15-questions-about-r-plots
[67]空間數據: https://cran.r-project.org/web/views/Spatial.html
[68]ggmap: https://cran.r-project.org/web/packages/ggmap/index.html
[69]maptools: http://maptools.r-forge.r-project.org/
[70]choroplethr: https://cran.r-project.org/web/packages/choroplethr/index.html
[71]tmap: https://github.com/mtennekes/tmap
[72]空間數據可視化文檔: 後臺回復20210112即可獲取
[73]FlowingData: https://flowingdata.com/
[74]HTML widgets: http://www.htmlwidgets.org/
[75]leaflet: https://rstudio.github.io/leaflet/
[76]dygraphs: https://rstudio.github.io/dygraphs/
[77]DataTables: https://rstudio.github.io/DT/
[78]showcase: http://www.htmlwidgets.org/showcase_leaflet.html
[79]documentation: http://www.htmlwidgets.org/develop_intro.html
[80]RColorBrewer: https://cran.r-project.org/web/packages/RColorBrewer/
[81]ggsci: https://github.com/nanxstats/ggsci
[82]ggthemr: https://github.com/Mikata-Project/ggthemr
[83]tvthemes: https://github.com/Ryo-N7/tvthemes
[84]patchwork: https://patchwork.data-imaginist.com/index.html
[85]cowplot: https://github.com/wilkelab/cowplot
[86]Rmisc: https://cran.r-project.org/package=Rmisc
[87]ggpubr: https://github.com/kassambara/ggpubr
[88]caret: https://cran.r-project.org/web/packages/caret/
[89]rpart: https://cran.r-project.org/web/packages/rpart/
[90]randomForest: https://cran.r-project.org/web/packages/randomForest/
[91]機器學習指導手冊: https://machinelearningmastery.com/
[92]Mastering Machine Learning with R: https://www.oreilly.com/library/view/mastering-machine-learning/9781789618006/
[93]Machine Learning with R: https://www.oreilly.com/library/view/machine-learning-with/9781617296574/
[94]Practical Data Science with R: https://www.manning.com/books/practical-data-science-with-r
[95]A Survival Guide to Data Science with R: https://togaware.com/onepager/
[96]Kaggle Machine Learning course: https://www.datacamp.com/courses/kaggle-tutorial-on-machine-learing-the-sinking-of-the-titanic?tap_a=5644-dce66f&tap_s=10907-287229
[97]Wiekvoet博客: https://wiekvoet.blogspot.be/
[98]Shiny: https://shiny.rstudio.com/
[99]Shiny資源: https://shiny.rstudio.com/tutorial/
[100]Shiny視頻: https://shiny.rstudio.com/articles/
[101]Shiny示例: https://shiny.rstudio.com/gallery/