R語言自學日記(2) — 常用套件介紹

Edward Tung
R 語言自學系列
6 min readJul 7, 2018

前言

Python的使用者對於packages肯定不會陌生,雖然在某種程度上靈活性不如直接打原始碼,但在資料科學的領域,的確省了開發人員很多問題,最重要的就是能讓資料科學家更專注於數據結構、分析方法的建立。以Python而言,在資料的處理上有Numpy、Pandas,繪圖有Matplotlib、Seaborn、Plotly,統計運算有Stats,抓取資料有BeautifulSoup、Selenium,以及最強大的機器學習Scikit-Learn與Tensorflow、Keras等等。因此大多數的模型建置並不困難,可以著重在調參以及模型組合的環節。

當然,R語言作為統計神器,各式各樣的套件必不可少,基本上可以直接透過install.package("名稱")去完成套件安裝,並使用library(名稱)調用,以下介紹幾個常用的套件與應用情境,順便附上Python與R的Cheat Sheet,對於有程式經驗的使用者來說,實在非常方便:

R語言:https://www.rstudio.com/resources/cheatsheets/

Python:https://medium.com/machine-learning-in-practice/cheat-sheet-of-machine-learning-and-python-and-math-cheat-sheets-a4afe4e791b6

在開始前,建議可以先將Tidyverse包下載並安裝,裡頭包含了非常多常見的函數組合,詳細可以見

繪圖 - ggplot2

ggplot可以支援非常多的圖片工具,在Python中甚至可以使用他的樣式(透過style.use('ggplot')代碼),不像Python需要透過不同Function在各種圖表之間轉換,ggplot透過參數的方式來完成不同的圖表繪製,並透過一些像是geom等參數完成複雜的疊圖等,舉例來說:

ggplot2.tidyverse.org/

上圖是官方的展示,可以看到熱度圖幾乎只需要一行程式碼就可以完成,其中geom_raster其中一個參數aes(fill = density)可以調整方格的數量,如果資料筆數不大或是原始圖看起來太像點陣圖,可以用平滑方式填滿,此外,ggplot也可以很輕鬆做出複雜的圖表,比如:

ggplot2.tidyverse.org/

上圖的展示是把四分位數直線放入散點圖(Scatter Plot)之中,這可以幫助我們聚焦偏離資料與聚集資料,整體來說,這些工具對於資料檢視(Data Scanning)非常有用,比如最常見的雙變數常態分配圖,比起下面這東西,我相信大家更樂於去看散點圖長得像不像一個橢圓的。

http://mathworld.wolfram.com;z = (x1-u)/sigma(x1)

機器學習 - rpart、e1071…

相比於Python用Scikit-Learn就可以搞定幾乎所有事情,R語言的套件就比較散亂了,舉一個最常見的機器學習方法分類器(Classifier)而言,目前常用的分類方法大概有幾種,機率的分類方法(比如Naive-Bayes)、分類樹方法(Adaboost Tree、Random Forest等,現在非常熱門)、感知器(比如LDA、SVM等等),這些東西在Scikit-Learn裏頭都可以找到,但到了R語言則需要分門別類,舉例來說在rpart上做決策樹,在e1071上建立支援向量機等等,在這裡就以e1071來實作一次支援向量機分類看看,首先載入iris資料集:

我們的問題很簡單,能不能只透過花瓣與萼片的長寬去猜測這朵花的品種是屬於setosa、versicolor、virginica哪個品種? 答案是可以的,透過e1071下的svm方法可以快速完成這件事,代碼如下:

準確率:93.33%

準確率可以達到93%以上,簡單來說,我只要知道花瓣與萼片長度,就可以有93%以上的機會猜對這朵花屬於甚麼品種,當然你也可以搭配stacking, cross-validation等方式去不斷提高精確度,但在這邊只為了展示套件使用情境,就不再贅述,有興趣的朋友可以參考:

SVM Function:https://www.rdocumentation.org/packages/e1071/versions/1.6-8/topics/svm

SVM原理:http://www.cmlab.csie.ntu.edu.tw/~cyy/learning/tutorials/SVM2.pdf

資料處理 - tidyr、dplyr

tidyr幫助我們處理表格資料,個人使用過後的感想是樂勝Excel,用起來十分順手,可以很快速連結資料或分割資料,比方說透過unite()函數,就可以很輕鬆將兩個欄位的資料合併在一起,下圖是功能介紹:

www.rstudio.com

dplyr則是將篩選、過濾的過程變得十分簡單,就像SQL在query data一樣,舉例來說我可以很輕鬆篩選出花瓣長度大於三公分的資料,只要使用一行代碼:filter( ir, Petal.Length > 3 ),怎麼樣,是不是非常簡單?

www.rstudio.com

總結

實際上現在越來越多人開始學習程式,作為非資訊背景出身的學生,我強烈建議好好審視自己該不該使用套件這回事,誠然這些packages能讓你快速上手作分析,加速個人的學習曲線(當你能夠跑出成果的時候,老實說你絕對更有動力完成)。但在這之前對於程式的基本邏輯以及數學攻抵必須夠好,這就像是學習英文,你能夠用很fancy的諺語表達語句,卻沒有基本的文法,你的句子就會聽起來非常蹩腳,同理在程式上你可能會發現自己必須高度仰賴其他人做資料清洗,或是怎麼樣都沒辦法合理的建立模型等等。當然,如果你已經有扎實的基礎,那就當我沒說,我們大家一起快樂的學習R語言吧!下一篇來學習迴圈、判斷語句跟物件導向設計,如果你喜歡我的文章,還請不吝幫我拍個手!!!

--

--

R 語言自學系列
R 語言自學系列

Published in R 語言自學系列

About a self-taught diary on R Language programming and practical Time Series Analysis, made by a python user and BBA student. Hope you like it:)

Edward Tung
Edward Tung

Written by Edward Tung

Columbia Student || 2 yrs of data scientist and 1 yr of business consultant experience