R 快速入門 (1)

基本介紹

教學目標

R 語言的快速入門和如何取得第三方資料。

重點概念

最近參與公司指派的 R 語言二天專業課程,主要是由 Teradata 資深顧問來授課,老師非常有經驗,過程中教了許多重點概念,一開始先教如何安裝 R 軟體和 RStudio 軟體,並且建議安裝版本為 3.1.1。接著針對 R 語言的資料型態進行基本介紹,R 語言有許多不同種類的資料型態,主要有純量、向量、矩陣、資料框、清單和因數,首先我們主要透過 <- 指定資料內容,透過 [] 取得資料內容和透過 is. 判斷資料型態和 as. 轉換資料型態。

指定資料內容

1
2
3
4
5
6
7
8
a <- 1
a <- a + 1
n <- c(1,2,3,4,5)
s <- c("one","two","three","four","five")
l <- c(TRUE,FALSE,TRUE,FALSE,FALSE)
m <- matrix(1:30, nrow=5,ncol=6)
d <- data.frame(n,s,l)
l <- list(name="Leo", company="Cathaybk", skill=c("Teradata","IBM","SAS"))

(註: 其中純量、向量、矩陣中的內容必為相同型態,僅有資料框和清單能為不同型態)

取得資料內容

1
2
3
4
n_v <- n[n>3]
s_v <- s[c(4,5)]
m_v <- m[1,3]
l_v <- l$skill

(註: 一般來說判斷式會比索引值處理較快)

轉換資料型態

1
2
3
4
5
6
7
8
9
is.vector(n)
is.matrix(m)
is.data.frame(d)
is.list(l)

m_v <- as.vector(m)
n_v <- as.matrix(n)
l_v <- as.data.frame(l)
d_v <- as.list(d)

(註: 此時輸入 as.list(d)$s 會發現有 Levels 的資訊,這主要就是自動轉換後的因數 (Factor) ,在未來若發生將資料呈現圖表發生錯誤時,可先確認資料是否已經向動轉換成因數。)

接著 R 語言有許多不同資料處理的方式,首先當沒有資料進行分析時,我們可以先透過函數產生隨機變數和產生客製圖表,接著透過函數讀取檔案內容,以及針對多個有規則的檔名搭配 seq 、 format 和 paste 函數進行處理,會將資料處理的過程匯整成使用者自訂函數重複應用。

產生隨機圖表

1
2
3
4
# set.seed(1234)
x <- rnorm(15,sd=5,mean=20)
y <- 3.5 * x - 2.0 + rnorm(5,sd=9,mean=0)
plot(x,y,xlab="X 軸",ylab="Y 軸",main="隨機變數")

(註: 若要每次隨機執行結果皆一樣可以透過 set.seed() 指令,若要客製不同種類的混合圖表,則可以疊圖方式進行處理。)

選取特定檔案

1
data <- read.table("c:/資料夾/記錄201501.csv", header = TRUE, sep = ",")

(註: 若要以選取檔案的方式進行讀取,則可以透過 choose.file() 取代檔名實作。)

讀取多個檔案

1
2
3
4
5
6
7
link <- "c:/資料夾/"
seq_date <- format(seq(as.Date("2015-01-01"), as.Date("2015-12-31"), by="month"), "%Y%m")
data_source <- paste(link, "記錄", seq_date, ".csv", sep="")
for (i in seq(length(data_source))) {
data <- read.table(data_source[i], header = TRUE, sep = ",")
# 資料處理
}

使用者自訂函數

1
2
3
4
5
myfunc <- function (arg1 = "參數1" ,arg2 = "參數2") {
data <- c()
# 資料處理
return (data)
}

當然 R 語言更能夠針對網站內容進行文字探勘應用,首先我們會先從開始觀察網址的變化開始,接著透過檢視原始碼確保網址是否有特別規則和特別參數,待確認之後就能開始透過 RCurl 套件中的函數讀取網站內容。針對不同網站的原始碼內容,接著再透過 paste、cat、substr、substring、grep、regexpr、gsub、sub、strsplit、… 等字串處理和正規表示式函數等應用。當然我們最好分析如何進行拆解成許多不同區塊的處理函數,以避免當網站內容修改時,在最短的時間內找出問題進行修改,更能搭配 RSelenium 等自動化套件模擬使用者行為動態存取網站資料,並且將匯整至 R 語言中進行資料處理與分析應用,例如: 透過政府公開資料匯整天氣資訊圖表、透過新聞網站進行關鍵字資料探勘、透過一卡通網站獲取生活商圈的特店資料、…等相關應用。

取得網頁內容

1
2
3
4
library(RCurl)
# curl <- getCurlHandle()
# curlSetOpt(.opts = list(proxy = '代理伺服器網址:80'), curl = curl)
html <- getURL("http://www.google.com.tw")

(註: 透過 getURL 可以存取 HTTPS 的網站,以及可以透過 getCurlHandle 設定代理伺服器。)

最後針對初學者,特別強調解決問題流程,下述範例以如何使用 R 透過 ODBC 連接至 Teradata 資料倉儲連線執行 SQL 指令,並將結果回傳,以利進行後續資料處理,進行示範。

解決問題流程

  1. 透過 Google 搜尋關鍵字。

    1
    > R ODBC TERADATA SQL
  2. 安裝相關套件。

    1
    > install.packages("RODBC")
  3. 載入相關套件。

    1
    > library("RODBC")
  4. 查詢套件使用方法。

    1
    > ?RODBC
  5. 開始使用套件。

    1
    2
    3
    > channel <- odbcConnect("Teradata", uid="使用者名稱", pwd="密碼")
    > odbcGetInfo(channel)
    > dataframe <- sqlQuery(channel, "SELECT * FROM TABLENAME SAMPLE 100;")

此外 Teradata 資源顧問和我們分享 R 語言實作的相關經驗,並且提到 R 語言比較適用於概念性的驗證,但是實際部署應用則必須針對現有環境選擇最適當的解決方案。總結雖然碩士論文和新創公司工作時有應用 R 語言解決問題的經驗分別為分群演算法和推薦分析應用,但上完二門課之後對 R 又有更深一層的了解,其實教的很不錯。

相關資源