【Google Data Analytics Certificate】筆記:R 語言入門

Google Data Analytics Certificate 來到第七集,在這篇文章中,我會摘要第七單元的兩個重點,並在文末附上課程心得與準備上的建議。

第七單元的課程核心是程式語言 R 的入門教學,除了最基礎的語法以外,也教我們如何使用 RStudio cloud 去進行操作。在這篇文章中,我會分成兩個部份來做分享,分別是「R 語言基礎」「實用功能包 tidyverse」,最後在附上我的上課心得!

R 語言基礎語法

這部分我會簡單介紹一下 R 的基礎觀念和用途。簡單來說,R 是做統計和數據分析時很常用到的程式語言,我們可以使用 R 去做大筆資料的處理、統整與視覺化,是一個在大數據上非常好用且多功能的程式語言。現在數據分析領域最常使用的就是 R 和 Python,我還蠻建議大家兩種都可以接觸看看,會讓你對處理數據這部分有更明確的想像,日後有機會我也會分別撰寫這兩種程式語言的文章和大家分享!這篇文章會先以 R 語言最基礎的概念做說明:

前置作業:登入 RStudio Cloud

雖說教案也有提供直譯器 R 的下載教學,但我個人認為以初學者來說,用線上的 R 編輯器去了解語法就很夠了,所以這裡推薦大家可以先到 RStudio Cloud 設立帳戶,這是一個可以讓使用者在線上操作 R 的平台,登入之後會到下面的畫面。

有看到這裡有一個 Practice-01 的檔案,這個是我先前建立的,如果你要開啟一個新檔案,可以點右上方的 New Project,再選取下方的 New RStudio Project,進入到 RStudio Cloud 的操作頁面。

在 RStudio 的頁面中,一共可分為四個部分,我們先點選 File ▶ New File ▶ R Script,這個步驟是開啟一個可以讓我們寫 R 語法的地方,後續我們會在這個區塊進行操作。

變數命名

在程式語言中,首先要提的就是變數。在 R 的變數賦值上,會以 “<-”表示,和多數程式語言的 “=” 不太一樣,但概念上是相當雷同的。

大家可以試著在 R Script 的框框中寫入下方的程式碼,以測試變數賦值的功能:

greeting <- "Hello R!"
greeting

如果操作無誤的話,照理說會出現下方的樣式,在 Console 這裡回傳結果,這就證明了我們在成功將 “Hello R!” 賦值到 greeting 這個變數上,日後可以直接用 greeting 來做語法的撰寫。

變數命名原則

和眾多的程式語言一樣,為了讓程式碼更好被理解,我們需要遵守一些 Coding 的原則,R 也是如此。在命名變數時,務必留意以下三點:

  1. 全部都使用英文小寫,如果字串較長,請用 ”_” 隔開。例如:avg_weight
  2. 請用英文名詞來賦予數值和資料,至於 Function 請用英文動詞命名。
  3. 避免使用內建函數作為變數的命名

以上這些原則都是方便工程師熟悉自己程式碼,並且操作上較不容易出錯的重要依據,在程式碼龐大的時候,遵守這些原則會幫你省下不少功夫。

註解符號:#

接著要提的是註解用的符號:#。

在我們寫程式碼的時候,為了怕三天後的自己、其他的工作夥伴不了解你這段程式碼的邏輯,我們會在旁邊以「註解」的方式簡單敘述程式碼的資訊。而使用 ”#” 則可以在不影響程式運作的情況下,讓這些資訊保留在 R Script 中,方便我們做記錄。

大家可以試著寫入以下程式碼到 R Script 中:

# My first program in R Programming
greeting <- "Hello, World!"
print(greeting)

在跑出來的結果中,我們可以看到在 # 之後的內容並不會被影響我們要的功能,這也是切分不同段落的程式碼時很重要的依據。

其他關於 R 的基本概念講解,我認為「認識 R 的美好」這個網站有很詳細的資訊,如果你想更進一步學習 R 語言的話,這裡有不少寶藏!(我自己也從這裡得到很多幫助,推薦給大家)

【補充】免費資料庫匯入

最後稍微補充一下,因為不是每個人的手上都有大筆資料可作 R 語言的練習,因此教案這裡是建議我們使用 penguins 這個免費的資料庫,讓我們可以嘗試大筆資料的處理。我這裡附上程式碼讓大家可以直接 copy 到 RStudio 中下載:

install.packages("palmerpenguins")
library(palmerpenguins)
data(penguins)
View(penguins)

之後會出現資料庫的預覽,我們可以先把它放到一邊,進到下方的內容。

實用的 R package:tidyverse

接著要和大家分享關於 R 語言操作上一個還蠻實用的 package:tidyverse。package 是指將一部份事先寫好的 function 包在一起,若想使用其中的功能,只要將 package 下載即可。而由於 R 是一個 open-source 的語言,會有很多大神研究出新的功能後,寫成 package 分享給大家,讓其他人可以一起優化與使用,這也是 R 之所以這麼有名的原因。

說回重點,我們這階段要做的,就是將名為 tidyverse 的 package 下載到我們的 RStudio 中,再進行下一步的操作。大家可以使用下方的程式碼進行安裝:

install.packages("tidyverse")
library(tidyverse)

輸入完程式碼並按下 run 後,他會安裝一段時間,最後出現像下方一樣的結果:

我們可以看到,tidyverse 一共有 8 個套件,分別是:ggplot2、tibble、tidyr、readr、purrr、dplyr、stringr、forcats,基本上這些功能搭配原先 R 的內建函數,就已經可以做到很多事了,我會在接下來的文章中簡單和大家介紹它們。

製圖小能手:ggplot2

ggplot2 算是數據分析很常用到的視覺化套件,詳細的歷史背景和功能的由來,大家有興趣的話可以參考這篇文章,但因為實在太長,應該也沒多少人對其感興趣,我在這個段落會以功能的介紹與實作為主。

使用 ggplot 作圖有幾件事情要注意:

  1. 設定你的 Aesthetic attributes(x軸與y軸)
  2. 設定 Geometric objects,指定你要產出的圖表類型(常用的包括geom_point()、geom_line()、geom_histogram()、geom_polygon()、geom_errorbar())

這裡直接示範給大家看:我們剛剛有先載入了 penguins 的資料庫,我們在確認資料庫叫出來後,寫下以下的程式碼來作繪圖:

ggplot(data = penguins) + geom_point(mapping = aes(x = flipper_length_mm, y = body_mass_g))

看!右下方就出現了圖表!是散布圖,可以看到兩者之間的相關性。這裡也簡單和大家說明一下 ggplot 的撰寫邏輯:

首先在最開始,我們會用 ggplot(data = 要使用的資料庫) 來匯入資料,接著在後面用 “+ gem_圖表形式” 來決定圖表類型。像這行程式碼中我們寫的是 “point” ,所以出現散布圖,若將其改成 bar、line 的話,就會有不同的形態出現,大家也可以試試看!

寫完前兩部分後,接著我們要在圖表形式的括號裏頭決定 x 軸與 y 軸的項目,讓 RStudio 知道該如何跑資料。寫法的話則是用 aes(x = 欄位名稱, y = 欄位名稱),全部寫好後再執行就大功告成。

當然,ggplot 還有很多更進一步的功能,但這裡就僅會簡單和大家提入門觀念,有興趣深入研究的朋友我會建議去上一些專業課程來進修,會更有效率。

資料處理工具:tibble

接著要介紹的是資料處理時會用到的工具:tibble。就我對 tibble 的理解,他可以算是類似於 data frame 資料架構的工具,在我們使用 tibble 之後,可以對該筆資料的架構作修改或全面性的總覽,說實話,對初學者來說沒有太多感覺,但我還是分享寫法與程式碼給大家:

as_tibble(penguins)

如果想了解更多 tibble 的內容,可以參考這篇文章

進階資料處理技法:tidyr

簡單來說,tidyr 的功能是讓我們可以將資料變得更整潔,解決欄位過長、雜亂不堪的問題。主要功能有下列 5 種:

  • pivot_longer() 和 pivot_wider() 寬轉長以及長轉寬
  • unnest_longer() 和 unnest_wider(),hoist() 將列表嵌套轉化為整潔數據
  • nest() 數據嵌套
  • separate(),extract()拆分列,提取新列
  • replace_na() 缺失值處理

不過因為在這門課的教案中,tidyr 並沒有過多解釋,因此我找了網路上其他人提供的調整長寬的語法來向大家作分享:

#建立數據
dt <- tibble::tribble(
  ~分公司, ~商品A, ~商品B, ~商品C, ~商品D, ~商品E, ~商品F, ~商品G, ~商品H, ~商品I,
  "北京",   1L,   2L,   3L,   4L,   5L,   6L,   7L,   8L,   9L,
  "深圳",   1L,   2L,   3L,   4L,   5L,   6L,   7L,   8L,   9L,
  "上海",   1L,   2L,   3L,   4L,   5L,   6L,   7L,   8L,   9L,
  "广州",   1L,   2L,   3L,   4L,   5L,   6L,   7L,   8L,   9L,
  "成都",   1L,   2L,   3L,   4L,   5L,   6L,   7L,   8L,   9L,
  "重庆",   1L,   2L,   3L,   4L,   5L,   6L,   7L,   8L,   9L,
  "长沙",   1L,   2L,   3L,   4L,   5L,   6L,   7L,   8L,   9L
  )
#將數據由10行轉成3行
dt %>% 
  pivot_longer(cols = 商品A:商品I,names_to = '商品名称',values_to = '销量') %>% 
  head()

建議可以把這兩部分程式碼分開執行,可以明確比較出前後的差異~完整版的敘述可參考這篇文章

資料匯入:readr

readr 的主要功能就是幫助我們將資料匯入,經常使用的像 read_csv ,可以幫我們匯入 .csv 格式的檔案,這裡我也簡單分享幾行程式碼上大家去練習:

read_csv("a,b,c
1,2,3
4,5,6")

這部分因為若要匯入檔案的話,要先將電腦中的檔案上傳到 RStudio Cloud,操作上會有些因人而異,因此我這邊給的案例是自行建立一個 csv 格式的資料讓 readr 去讀取。

資料處理文法:dplyr

dplyr 也算是 tidyverse package 中數一數二常用的套件,主要有六大資料處理功能,包含:filter、select、mutata、arrange、summarise 和 group by。以下為 filter 的示範:

#篩選出2007年的資料
penguins %>% 
  filter(year == 2007)

我個人覺得和 SQL 很像,許多概念也都相通,詳細的教學我很推薦這一篇 Medium 文章,對 dplyr 做了非常完整的解釋和示範,我這裡就不獻醜了~

因子處理:forcats

說實話,在這 8 個套件之中,這個 forcats 是我最無法理解的…教案也沒有太多著墨,所以我這邊很難具體的像大家分享,只能從網路上的資料了解說他是用來作統計因子的處理工具。

我這裡一樣推薦一篇我認為「稍微好懂一點」的文章給大家,這部分我也需要多多學習…

【文章推薦】https://bookdown.org/zhongyufei/Data-Handling-in-R/forcats-introduction.html

字串處理:stringr

stringr 這個套件和它的名稱有關,是個處理數據中字串相關的工具。不過因為它並不是特別重要的功能,因此我這邊就僅分享一篇我認為還算詳細的文章給大家作參考。

【文章連結】https://www.cnblogs.com/nxld/p/6062950.html

功能化函數:purrr

這部分因為教案沒有提及,加上網路上的資料也不夠完整,我這篇提供一篇相對完善的文章給大家,希望能能更容易理解。

【文章連結】https://jaspershen.github.io/r_cookbook/tidyverse-purrr.html

小結

總結來說,雖然 tidyverse 是很常被使用的 package,但其實真正會經常用到的,大概就是 ggplot2、tidyr 和 dplyr,因此大家在練習的時候,可以多把重心放在這三項的變化和更深一層的操作,有很多東西值得挖掘,哪怕我已經上完這門課,也都不敢說有初步熟悉這些套件。

個人建議,如果真的對 R 語言有興趣的話,真的要買一本專門的教材或去上專業課程,不然僅停留在表面實在有些可惜。我也有考慮繼續學習,如果日後有實用的課程也會和大家分享,一起學習吧!

個人修課心得

這是整個 Google Data Analytic Professional Certificate 的倒數第二個課程,嚴格上來說是最後一個,因為之後是 Case Study,對於耐力來說真的是很大的考驗。

在已經有點學習疲勞的情況下,學習從沒接觸過的 R 語言。哪怕我已經有至少兩種程式語言的基底,也仍學得十分辛苦,原先的一週一單元模式也在此破功,我花了將近兩週才將這週的課程完成。除了難度上升之外,這單元的實作部分也偏多,所以大家在上課的時候可以多給自己一點時間,就算進度落後也不要因此洩氣。

課程中也會有很多教案提供的操作指南,我會建議除了用看的以外,也可以自己在 RStudio 建立新專案來練習,程式語言真的是要多寫,把語法當成肌肉記憶刻在你的腦海中,才算是正式入門。我現在其實也還遠沒有到這個程度,寫這篇文章某方面也是幫我自己複習~

最後,也希望大家能夠透過這系列的文章更了解 Google 的這門課程,如果對於準備和時間安排有任何疑問的話,也都歡迎和我聊聊,我會以我個人的經驗分享我的建議!繼續加油吧!

收到更多巫師札記的內容

總算在今年做出新嘗試啦!目前還是試營運版本的電子報!每個月我至少會寄出一篇關於我當月文章的摘要與重點整理,你可以針對有興趣的主題來閱讀!除此之外,我也會不定期的寫信分享近期的學習點和心得,也希望透過電子報來和大家有更緊密的互動!

只要訂閱巫師札記電子報,我就會免費寄出一份關於「如何提升閱讀效率」的電子書,幫助大家更有系統的吸收與學習書上的知識。日後也會持續分享有意義的內容,請大家多多支持!