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 也是如此。在命名變數時,務必留意以下三點:
- 全部都使用英文小寫,如果字串較長,請用 ”_” 隔開。例如:avg_weight
- 請用英文名詞來賦予數值和資料,至於 Function 請用英文動詞命名。
- 避免使用內建函數作為變數的命名
以上這些原則都是方便工程師熟悉自己程式碼,並且操作上較不容易出錯的重要依據,在程式碼龐大的時候,遵守這些原則會幫你省下不少功夫。
註解符號:#
接著要提的是註解用的符號:#。
在我們寫程式碼的時候,為了怕三天後的自己、其他的工作夥伴不了解你這段程式碼的邏輯,我們會在旁邊以「註解」的方式簡單敘述程式碼的資訊。而使用 ”#” 則可以在不影響程式運作的情況下,讓這些資訊保留在 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 作圖有幾件事情要注意:
- 設定你的 Aesthetic attributes(x軸與y軸)
- 設定 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 的這門課程,如果對於準備和時間安排有任何疑問的話,也都歡迎和我聊聊,我會以我個人的經驗分享我的建議!繼續加油吧!