R 語言自學資源分享:從入門到資料科學實戰

by 好豪
Published: Last Updated on

在筆者的觀察,大約從 2019 年之後,每當大家提起資料科學、機器學習、統計分析等等與「大數據」相關的熱門話題,Python 的討論聲量已經超過 R 語言。然而,我在學術界與業界工作、以及 參加機器學習競賽的經歷 中,R 語言一直是幫助我提高分析產能不可或缺的工具

為什麼我愛用 R 語言?我的理由包括:

  • 超強 ggplot2 視覺化 + 方便的 RStudio IDE = 探索資料超流暢!
  • 為數據分析而生、美麗而簡潔的 Tidyverse + Tidymodels 語法及分析框架
  • 開源套件的發展,在資料科學領域依然全能,統計分析建模、機器學習、網頁爬蟲等等無所不包

就我所知,在資料科學領域,R 語言主要是在 MLOps 相關開源套件、以及深度學習套件 API 支援的發展比 Python 慢了一點。撇除模型產品化及複雜的深度學習模型,如果你的目標是成為在數據分析專案的各個階段都能發揮價值的資料科學家,R 語言是非常實用的武器

在學習 R 語言的過程中,筆者好豪看過數不清的教材,這篇筆記整理出我讀過後覺得特別有收穫的、並且適合自學的內容,我將依照不同難度分類,讓不同階段的 R 語言使用者都能在這篇筆記找到能幫助你進步的學習資源。



入門:初學 R 程式設計

學習目標:Excel 能做到的數據操作,要用 R 做到更快、更有效率

R 資料科學(R for Data Science)

r4ds

如果讀完這整篇文章你只打算讀一本書,那就該要讀 R for Data Science (R4DS)

在筆者的心目中,R4DS 是入門 R 語言資料科學的聖經。作者 Hadley Wickham 是 RStudio 的首席科學家,他領導開發了 tidyverse 套件,將多個資料科學常用套件整合,統一了資料結構並簡潔化程式語法,讓原本眼花撩亂的各種套件彙整成同一個好用的工具箱。

R4DS 這本書就是以 tidyverse 為核心教學,包括資料探索、轉換、建模、以及視覺化溝通等多個章節,每個章節介紹的都是數據分析的核心步驟、學會的每一行程式碼都超級實用!我認為,光是精熟這本書的分析方法及 R 語法,就足以勝任業界數據分析師七成以上的工作內容。這本書雖然被我歸類在入門,用了好幾年 R 語言的我,到現在還是會時常拿出來複習。不管是誰問我怎麼開始學 R 語言,我一定推薦這本書,因為它不需要任何程式設計背景、可以立刻上手。

R4DS 除了上方的中文版翻譯書,網路上還開源了 原文版 可以閱讀。每章節的習題,也有熱心網友們協力編纂出 參考解答,讓你學習不卡關。

R 語言小抄

初學一個新程式語言的時候,最常遇到的困擾就是連基礎語法都會忘東忘西,這時候,有幾張小抄在手就是能讓你學習效率提升的小技巧。

這個 由 RStudio 官方維護的網頁 搜集了許多 R 語言的小抄(Cheatsheet)。根據使用場景分門別類、製圖十分精美的 PDF 檔案,值得你放在書籤或者桌面的角落,隨時參考使用。

筆者在這裡不得不多建議一句,除了 R 程式語言本身,RStudio 這個 IDE 本身也是讓 R 更強大的理由之一,不管你是新手或老手,請務必看一眼網頁中提供的 RStudio IDE 小抄,光是多學會兩、三個快捷鍵,也可能讓你的生產力倍增!

R 錦囊妙計(R Cookbook)

r-cookbook

R 錦囊妙計 以「問答」的方式撰寫,先問某件事怎麼做,然後提出詳盡的解答,閱讀這本書的好處是:了解 R 資料分析常見問題、並且學著解決問題、更學會尋找答案的流程

此書涵蓋的內容範圍超級廣,我在大學時一直把它放在書桌上,像字典一樣需要時就拿起來參考。書中有一半章節跟機率與統計有關,因此筆者好豪認為,此書尤其適合工作或研究中常用到統計分析的從業者、或者正在研讀機率統計的學生,但是,書中的機率統計著重介紹 R 語言應用,如果想深入學習數學模型背後的原理,請進一步參閱此筆記下半段的 進階書單。順帶一提,此書提供 原文版 可在網路上閱讀。


中級:數據操作與視覺化

學習目標:能夠流暢地探索數據、並且熟悉 ggplot2 製圖

Udacity: Facebook 的 R 語言資料分析課程

Data Analysis with R 是 Facebook 在 Udacity 學習平台上開設的 R 語言資料分析課程,這門課的主題集中在如何 探索資料(EDA),用實作的方式,一步步帶你操作 R 語言,走過一遍清理資料、尋找有意義的變數化為數據洞見、依據洞見預測未來等 EDA 流程。在實踐資料科學工作的過程,比起又酷又炫的機器學習建模,資料處理 + EDA 才是會佔用你 50% 以上工作量的任務,因此,我認為這門教學 EDA 的課程以及滿滿的 R 視覺化練習作業非常值得好好學習。

還不熟悉學會 EDA 有什麼價值的讀者,歡迎閱讀好豪寫過的資料分析案例:透過 EDA 了解顧客上線習慣並設計推播功能

官方將課程定位為適合 R 初學者,之所以被筆者歸類成中級,單純是因為筆者大學剛開始學 R 的時候,基本功還不足,這門課的作業沒辦法完整的寫出來。我相信,比我認真的讀者,說不定用心上課看影片之後,會認為作業並不難。

精通大數據!R 語言資料分析與應用(R for Everyone)

r-for-everyone

R for Everyone 的作者同時有企管顧問資歷與統計學術背景,本書著重在用統計建模的方式來探索與呈現資料,例如用線性/非線性模型、或者時間序列模型來達成未來趨勢的預測,也有不少篇幅在介紹模型診斷與配適度分析。筆者特別喜歡這本書介紹的 caret 套件,它是統計與機器學習建模過程相當好用的輔助工具。本書適合常用描述性統計來分析資料、並且想學會如何檢驗並修正模型的讀者。

ggplot2: elegant graphics for data analysis

ggplot2

ggplot2 是一個熱門的視覺化套件,它也是筆者好豪持續愛用 R 語言的理由之一。ggplot2 是以製圖美觀著名的,只要程式寫得好,我認為用 R 語言 ggplot2 畫的統計圖表精美程度絕對不輸 Tableau 或 PowerBI 等數據繪圖工具。

然而,雖然在剛剛提及的 R 資料科學R 錦囊妙計 等入門書籍都有提及 ggplot2 的章節,如果想要提升圖表精緻程度、以及讓繪圖效率追上 Tableau 這種用滑鼠就能畫圖的軟體,你就會需要精通 ggplot2 的「文法」。

ggplot2: elegant graphics for data analysis 這本書是 ggplot2 套件的官方教材,不像前幾本書會教你用繪圖來分析資料,此書專注講解 ggplot2 繪圖的原理、也就是繪圖的文法(grammar),學會繪圖文法,才能做出更精細的圖表操作(例如,自動找出曲線的每個反曲點位置並加上文字標示),並且提升修改視覺化程式碼的效率。這本書推薦給已經熟悉前幾本入門書的 ggplot2 中高階使用者閱讀。

如果你想學的是讓自己放在報告上的圖表更清晰有條理的方法,推薦你閱讀《Google 必修的圖表簡報術》這本書,有好的繪圖美感、辛苦學會的 ggplot2 才能發揮威力。有興趣的讀者,歡迎參考好豪讀這本書的 心得筆記


進階:統計分析與機器學習

學習目標:結合 R 語言與機器學習建模解決問題

An Introduction to Statistical Learning(ISLR)

intro-to-stat-learning

ISLR 是非常著名的統計學與機器學習課本,筆者認為這本書輕鬆好讀,大多以實際案例介紹演算法,而數學公式與證明都限縮在點到為止的篇幅,很適合當入門機器學習的第一本書。最重要的是,介紹的每個機器學習演算法都有相對應的完整 R 語言程式碼、連資料集都幫你整理好,你可以在這本書詳盡地學會如何操作 R 語言特殊的統計公式資料結構、並且學會如何解讀 R 輸出的數據分析結果。R 錦囊妙計 裡的機率統計章節大多教你分析怎麼做,使用 ISLR 這本書你可以進一步了解為什麼

這本書的兩位作者都是史丹佛大學的教授,讀者只要到 Edx 線上學習平台 或者 dataschool 網站,能找到兩位教授以 ISLR 課本授課的影片以及簡報,邊看作者講解影片邊讀課本。另外,這本書的範例程式,有開發者將他們改成 tidymodels 的新潮寫法,可以到 他們的網站 學習不同的建模程式風格。

如果你翻了幾頁覺得 ISLR 內容太簡單,相同作者還有更進階、更多數學理論的機器學習課本 The Elements of Statistical Learning(ESL) 讓你挑戰閱讀。

Deep Learning with Python

deep-learning-for-python

Deep Learning with Python 的作者就是知名的 Keras 深度學習套件開發者—François Chollet,筆者好豪在初學深度學習的時候就是用這本書,覺得內容十分好上手,即使沒有機器學習基礎、也能透過這本書快速探索深度學習的巧妙之處。書中提到的模型都是最經典必學的,主題包括電腦視覺、文字分析、連自動生成圖片的模型都有介紹!

這篇筆記明明是 R 語言學習資源分享,為什麼提這本 Deep Learning with “Python” 呢?首先,對於適合推薦給深度學習新手的書籍,我沒有讀過比這本更好懂的、更別說要找有 R 語言示範的書;其次,Keras 套件的建模程式碼相當簡單,要從書中的 Python 語法轉換成 R 語言並不難,只要讀過 RStudio 提供的 R Keras 基本教學 就足以學會把書中的範例程式碼都轉換成 R 語言。Github 上也有開發者把此書的程式碼全部轉譯成 R 語言讓你參考,因此,用這本書學習 R 語言的深度學習也完全沒問題。

補充:社群網友分享,此書作者也出版了 Deep Learning with R,只是還沒有中文版。

Hands-On Machine Learning with R (HOML)

book-name

HOML 這本書,筆者推薦給對 Kaggle 類型的機器學習競賽有熱忱的讀者,書中介紹的 xgboost、h2o、ranger 等套件,提供了在資料科學比賽超有競爭力的演算法。

(延伸閱讀:我在資料科學競賽獲得了什麼

此書重視機器學習建模的實踐,主題包括如何把資料轉換成模型可用的型態、如何選擇模型與調整參數、以及如何公平地評估預測成效等等,適合已經懂基礎的機器學習理論、想快速學會進行預測任務的讀者。

筆者好豪尤其喜歡此書在模型解釋性的著墨。作者在介紹完每個模型後,幾乎都有 “Feature Interpretation” 的小節,講解該模型各變數的影響力怎麼解讀、並且選擇好的視覺化方式呈現因變數與重要變數的正負相關性。HOML 更為機器學習可解釋性撰寫了獨立的章節,帶讀者認識「用來解釋模型的模型」,我認為,資料科學家想要提升用數據產生洞察的層次,可解釋性絕對值得投資時間學習。

HOML 主要教學為已知任務建立最佳模型,然而,在 Kaggle 機器學習競賽中,特徵工程與模型最佳化同等重要。對競賽常用特徵工程有興趣的讀者,筆者建議可以接著閱讀《Kaggle 競賽攻頂秘笈 – 揭開 Grandmaster 的特徵工程心法》,學會對資料恰當地動手腳、幫助模型表現更強。

更「潮」的建模方式:Tidymodels

就如前面所述,我很喜歡 tidyverse 追求多功能套件整合的設計風格,讓資料科學複雜的工作流更有規律,原本錯綜的程式碼與資料結構也更有一致性。而在機器學習與統計建模的任務上,也逐漸建立以整合為目標的生態系,就是 tidymodels

事實上,筆者也還在慢慢鑽研如何用 tidymodels 提高建模效率。這裡我先列舉兩個學習資源供讀者參考,我個人(主觀地)相信,未來 Tidyverse + Tidymodels 的 R 語言工作流會越來越火紅。



邁向頂尖:更多資源

使用 R 語言的技術要邁向頂尖,需要花一輩子去學習!筆者好豪每天都會花時間涉獵 R 的新知,以下是我長期追蹤的學習資源:

  • R-blogger:主題五花八門、並且時常更新的 R 語言與數據分析資訊站
  • RStudio Webinar:R 語言與資料科學線上演講,有手把手教學也有新技術展示,每隔一段時間上來看都可以學到新東西
  • YouTube: Why R? Foundation:定期邀請學界與業界的 R 語言愛好者,分享主題不限的運用案例,是個拓展視野的好頻道
  • 吳漢銘老師的個人網站:老師佛心分享了他的資料科學課程簡報 PDF 與 R 程式碼範例,內容囊括爬蟲、視覺化、巨量資料分析等等,各種主題幾乎都有
  • Kaggle:應該不用多介紹的機器學習競賽網站。在每個競賽的 Code 頁面,用 Filter 功能可以只篩選 R 語言,看高手們怎麼玩 R 語言是進步的捷徑
  • Advanced R:進階的 R 程式設計課本
  • RStudio 官方支援套件:既然都列在官方網站了,就是常態性維護更新、必然值得學習使用的套件

結語:給 R 初學者的建議—萬劍歸宗

這篇筆記提了好多本書,認真學習 R 的讀者想必會發現其中一個困難是:同一件事有好多種做法,不知道該仿效哪種作法、或者試著每個都學最終卻通通忘記!

例如,簡單的讀表格檔案動作,可以用 read.csv()、有些書又說可以用 read_csv();又例如,PCA 降維度方法,可以用 prcomp()、用 step_pca() 也行得通。

好豪在此給新手的建議是:「萬劍歸宗」,選一個你喜歡的做法,然後用筆記記下來,在你學會比較哪個方法更好之前,先堅持用同一個函式、同一種作法,別讓自己腦容量爆炸。

至於該選擇哪一個方法,好豪私心且主觀地建議:先習慣使用 tidyverse 與 tidymodels 的函式。在上述的例子,就是選用 read_csv()step_pca()。原因和我在這篇筆記一再提的一樣,我認為 tidyverse + tidymodels 是好上手、語法也漂亮的工具箱,值得新手學習。至於什麼叫堅持使用 tidyverse?這裡額外再推薦閱讀 ModernDive into R and Tidyverse 這本書,作者示範給你看怎麼用 tidyverse 的 R 程式設計風格達成線性模型與假設檢定等等統計推論。

最後,筆者是愛用 R 分析的資料科學家,但是我並不認為 R 與熱門的 Python 之間有優劣或高下之分,兩個都是我持續在磨練的技能。我希望透過這篇筆記分享,讓更多人知道 R 語言厲害之處,並且讓分析的精準度與效率能隨著熟悉 R 語言而提升。


補充:資深的資料科學前輩—大鼻,在 HaHow 好學校有開設 R 語言和商業分析 課程,內容包括基礎程式設計、ggplot2 視覺化、還有各種商業分析常用的機器學習與統計模型。修習這門課的好處,除了可以用中文線上課程上課、並且講師為你規劃好明確學習路徑以外,筆者特別推薦這門課給想馬上學會把 R 語言運用在資料科學實戰的同學,這門課的講者有多年從業經驗,課程會教學程式、也教學模型的商業應用,讓你學習 R 語言不只是當工具、而是解決問題的武器。有興趣的同學,快到 HaHow 上課吧


如果你喜歡這篇筆記整理的 R 學習資源,歡迎點擊下方按鈕加入書籤、或者分享給其他朋友們。也歡迎你追蹤 好豪的 Facebook 粉絲專頁,我會持續與你分享資料科學的新資訊!

推薦閱讀