精選文章

R語言,巨量資料分析課程心得,學習順序



前言

第一次接觸到R語言,是在2017年的暑假,那個時候我在高雄實習,因為工作上的需要,當時一部分工作就是去了解R語言的寫法,還記得當時很認真的找了個翻轉教室開始學習,並且也對找到的資料對負責人做了簡單的結論,然後就直接結束了R的研究,轉而去蒐集其他的資料。




我習慣以最基礎的方式去接觸新的程式語言,特別不喜歡使用IDE,只喜歡以命令列的方式去進行編譯執行或直譯。好不容易設置好環境後,為了學習撰寫R的方式找了許多教學網站,其中讓我最印象深刻的是一個翻轉教室,那位老師用R將上課內容直接編入程式,我之前也有在線上問過他問題,感覺是一位不錯的老師,可惜的是最後改研究別的資料,就沒有再繼續接觸R了。

但也是因為有這個機會先接觸到R語言,今年2019,我們學校的教授就開授了R語言課程,專門講解巨量資料的分析。講到這裡呢,偷偷表白我們學校的李宜軒老師,她開的每一堂課我都好喜歡,課程內容紮實且節奏適中,讓人上起課來心情愉快。

我在畢業前有機會上的這堂巨量資料分析的課程,就是老師與她的研究生一起精心準備一年的成果,老師總是戲稱我們這些修她這堂課的學生是她的小白鼠,讓她可以為接下來的學生調整課程節奏。


上課的時候,老師是建議我們使用RStudio進行R的撰寫,我本來還想要再照著我原本土法煉鋼的方式,但是這兩年的心境變化,再加上我之前就有碰過一次基礎,所以我決定使用方便的IDE,這樣的話,下載package就跟apt一樣,會直接把額外需要的package一起下載。


順帶一提,如果你的作業系統是Windows的,而且不太熟悉路徑問題的解決方式,建議一定要使用英文帳戶名,較不會出現錯誤。我知道Windows現在創帳戶,一定會先建議使用Microsoft帳號,而大家的名字在創建時往往都是中文字而非英文拼音,這就會造成某些沒有辦法配合中文的軟體出現錯誤…

所以請記得要檢查帳戶名稱是否是中文!有時間再寫另一篇實驗出中文名帳戶的改名方式。
這堂課跟它的前身Matlab課一樣,都是透過李宜軒老師自己準備的講義與練習題,在一個下午三小時的課程中,前面一個多小時由老師介紹變數、函數等的使用方式和例子,接著後面剩下的一到兩個小時,就是學生抽籤兩兩一組,將當天講課內容的習題完成,上繳至e化系統。


在課程編排中,跟其他網路上的教學方式不太一樣的地方是,老師到後期才提到R語言的迴圈以及條件式,一方面是因為學校課程安排中,本系學生一定已經有其他程式語言的基礎,另一方面是老師並不鼓勵在R語言中使用迴圈,原因是R語言的優勢是在於擁有許多函數處理巨量的資料有優秀的速度,想想一個迴圈要跑一千次、一萬次、甚至到數十數百萬次要花的時間,特別恐怖,所以如果能用plyr函數就用。

講義中,除了介紹R的變數有哪些類型,以及常用函數之外,後期也有介紹package;而習題除了針對每次課程介紹的部分讓我們練習之外,後期也有題目是要寫出較完整功能的程式。

學習順序


  1. 了解變數命名規則、賦值方式(建議用<-而不是用=)還有一些常數,例:pi
  2. 了解有哪些資料型別、介紹判別資料型別的函數
  3. 數值運算常用函數
  4. 了解每個R變數,且每個變數都用函數搭配使用了解
  5. 學習ggplot2 package
  6. 學習像C語言的scanf()、printf()、String處理、副程式、迴圈等在R中的使用方式
  7. 學習像C語言的fscanf()、fprintf()以及像Python的網頁資料擷取等在R中的使用方式
  8. 學習plyr package

如果照這樣去網路上找資料學習,不敢說到很紮實,至少是很系統式的學習,當然,如果能直接上課是最好的!

R變數

  • Vector
  • Matrix
  • Array
  • Factor
  • Data Frame
  • Lists
在講Vector、Matrix、Array時,習題都會出一些神奇的數列,限定我們要用教過的函數產生。而在講到後面一點,例如Matrix、Array、Data Frame時,則是會舉一些像是成績等實際的例子去計算、熟悉函數的使用方式。而Lists應該算是最常用也最不常用的變數,為什麼這樣說呢?原因是外面下載下來的公開資料往往都會是雜亂的Lists格式,下載回來之後需要層層剝絲,把需要的變數取下來,也就是在處理資料時,會有很多機會遇到Lists,可是在運算或者列出資料的關係時卻很少用到Lists。

常用函數

因為真的有很多好用的函數,我就舉一些我直接想就想得起來的。
  • rep()
  • round()
  • cat()
  • %>% (rvest package)
  • ggplot() (ggplot2 package)
  • seq()
  • class()
  • as.numeric()
  • cbind()
  • rbind()
  • paste()
  • adply(), aaply(), … (plyr package)
  • 更多參考:A list of useful functions in R
基本函數、rvest、ggplot2多去使用的話,其實不難理解,但個人認為最需要花心思以及門檻高的就屬plyr package了,這個package可以說是Loop的替代品,也就是在R語言中需要極力避免的for、while等的替代物。

完整程式練習題

  • 產生ABC~Z循環金字塔
  • 學生數堂課程成績排名分析
  • 擷取前百大電影資料進行分析及畫圖
  • 產生台灣合法身分證字號
  • 產生樂透並列出獎名及累積獎金
  • 1A2B:電腦出題,人猜
  • 1A2B:人出題,電腦猜 (那次分組我負責做這題,我玩得很開心,而且老師還有限定不可使用全域變數以及迴圈限用兩個)

課堂最後有一個三到四人一組的專題,題目自定且規定要使用一個課堂未教過的package進行資料分析,我們這組是做股票分析,很中規中矩,在我另一篇文章會主講這個部分,我同屆的同學則是做特別有趣的題目,內容大概是「颱風與地震的關聯分析之炎亞綸假說」,另外印象比較深的則是學弟組要做的「某款手游的加倍掉寶率是否是真的分析」。


總而言之,是一堂很棒的課程,如果能成為開放式課程的話,我想應該會對想學R語言的人很有幫助!

留言

這個網誌中的熱門文章

COCO Dataset: 介紹、下載、取得方式、標註資料格式(key points)