R Studio

R 資料探勘 (1)

基本介紹

教學目標

R 語言的資料探勘之應用。

重點概念

R 主要相較於其它統計軟體最大的不同在於要很清楚的了解輸入的資料,並且有許多實用的資料探勘的開源碼套件可以免費使用,此外軟體除了有單機版本 RStudio,更有伺服器版本 RStudio Server ,目前僅能安裝至 Linux 作業系統中。一般使用者主要會透過網頁以帳號和密碼登入至 RStudio Server,每個帳號同時只能有一個人進行登入,並且所有處理狀態和步驟皆會與帳號同步,可是缺點是一般使用者無法隨意安裝任何資料探勘的開源碼套件,我們可以透過 $ .libPaths() 指令查看函式庫目錄,主要會有三個不同類型的目錄,分別為個人目錄 “/home/dva45901/R/x86_64-redhat-linux-gnu-library/3.2” 、系統目錄 “/usr/lib64/R/library”、”/usr/share/R/library”,其中系統目錄一般使用者沒有權限進行處理,也因此無法隨意安裝資料探勘的開源碼套件。

R 主要資料探勘的應用有分群、分類、預測、推薦和文字探勘,從龎大數量的資料中發現有趣的知識,資料探勘處理流程可以拆解為六個階段,分別為:

  1. 業務了解
  2. 資料探索
  3. 資料準備
  4. 建立模型
  5. 評估
  6. 部署

在上述六個階段中業務了解和資料探索非常重要,在進行任何分析之前一定要先有目的,而非以演算法為主,必須從數據驅動和業務驅動開始進行資料分析,並且要找出最關鍵可能影響的因素。最常被應用於建立模型的機器學習演算法主要可以分為監督式和非監督式,主要差別在於是否已經知道資料所對應的標籤。監督式主要會從訓練資料集中學習標記,嘗試透過分類演算法識別和預測目標,非監督式主要是輸出沒有任何知識,必須透過了解資料和決定模式,也就是不同客群的定義。此外依照資料的類型又可以分為連續型和類別型的資料,因此我們可以根據監督式、非監督式、連續型資料和類別型的資料進行機器學習演算法的分類。

最基本的機器學習演算法函式有,其中僅有 hclust 和 kmeans 是進行分群,其它則為分類:

  • Hierarchical cluster analysis: hclust (stats)
  • Kmeans clustering: kmeans (stats)
  • Logistic Regression: glm (stats)
  • Recursive partitioning and regression trees rprat (rpart)
  • Support vector machine: ksvm (kernlab)
  • Rule based classification: apriori (arules)
  • Stochastic boosting: ada (ada)
  • Random forests classification and regression: randomForest (randomForest)

接著在業界中最常使用的分群方式為 Kmeans clustering ,其做法主要為計算距離找出中心點進行分群,接著會重覆計算每群的中心點用平均描述特色。會在重新檢視所有點沒有進行變化後完成。在是面臨最大的問題主要有兩個,首先要如何知道分幾群比較好,一般會根據業務經驗和階層式方式找出最適合的分群數,接著要先從哪兩個點開始,因為從不同兩點開始分群結果可能會不同。此外 Kmeans clustering 的限制在於數值,可以計算平均,儘量避免異常值,並且在針對多維資料最好先進行降維,可透過 plot(numdata[1:5],col=kmeas(x=numdata,centers=10)$cluster) 觀察影響分群結果的最關鍵維度,接著再以相對距離進行推論,也就是說 k-means 主要是針對數值資料進行分群,接著根據不同群體了解其資料,再進行客群定義為標籤分類。

再來在業界中最常使用的分類方式為 Recursive partitioning and regression trees ,首先會將資料進行切割之後產生訓練資料和測試資料,接著透過相關演算法進行分類,接著再進行迴歸分析,更進一步進行離散化細分,主要常見有 Entropy 和 Gini 兩種方式。然而當產生結果之後,我們會透過 Confusion Matrix 進行評估,最常比較 recall 值,也就是已知分類結果中有多少比例分類正確。

最後在業界中最常使用的關聯分析方式為推薦,主要有兩個步驟,第一步先找出最相似的項目,主要可以透過關聯規則,最早由 Walmart 進行購物籃分析應用,也就是會買尿布也會買碑酒,第二步為透過權重進行加總進行計算,主要可以透過協同過濾,最早由 Amazon 進推薦應用,當我們透過 Rule Based Classification 進行規則分類產生結果之後,一般會考量支持度值和信賴度值,分別了解一次交易中包含 A 與 B 的聯合機率和包含 A 的交易中也包含 B 的條件機率,再來透增益值了解一條規則在預測結果時能比隨機發生的機率好多少,當值大於 1 時,則代表預期結果比隨機發生更好。當關聯規則完成之後會再透過協同過濾的方式進行推薦應用,一般來說以物為基礎會比以人為基礎的方式推薦結果更佳。至於 R 初學者是否有圖形介面可以學習資料探勘呢?此時就可以透過 Rattle 工具協助我們更有效率的學習 R 語言的資料探勘。

相關資源

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 又有更深一層的了解,其實教的很不錯。

相關資源