R

R 大數據處理 (1)

基本介紹

教學目標

R 語言的大數據處理之應用。

重點概念

首先 R 語言是一套強大的開源碼統計程式語言,讓我們免費使用,不僅廣泛應用於資料分析,更能建立獨一無二的資料視覺化。然而 R 語言如同 Hadoop 開源專案一樣也有提供企業版本,其中 Revolution Analytics 所推出的 Revolution R Enterprise 工具最廣為人知,並且在 2015 年被微軟收購,如今已經成為了 SQL Server R Services 和 Microsoft R Server。那究竟開源版本的 R 語言和企業版本的 R 語言主要的差別是什麼呢?

其實最主要的差別在於大數據處理,我們可以從記憶體和中央處理器進行探討,一般來說開源版本的 R 語言皆會將資料讀入至記憶體才能夠進行統計運算。但是當面臨大數據處理時真的有這麼多的記憶體空間提供使用,同時還需要留有運算使用的記憶體空間,此時 Revolution R Enterprise 工具就有提供 XDF 檔案格式能夠讓使用者在不載入資料至記憶體的情況下直接進行高效能的數學運算,避免大數據資料無法載入記憶體中進行分析的問題。此外在不做任何設定的情況下就能夠進行多核心處理,以利解決進行大數據資料處理時效能不佳的問題。然而微軟推出免費版本的 R 語言工具為 Microsoft R Open 工具,只需要下載 Math Kernel Library (MKL) 函式庫進行安裝,就能夠支援多核心處理,至於 XDF 檔案格式目前僅支援企業版本。

開源版本的 R 語言 企業版本的 R 語言
分析處理 記憶體為主 記憶體和硬碟混合為主
分析速度 預設為單核心 預設為多核心
分析套件 最新演算法相關套件 支援大數據相關套件

談到大數據處理,最具代表性的就是 Hadoop 平台,其中 MapReduce 是一個能夠有效率處理儲存在 Hadoop 分散式檔案系統中的大量資料之強大程式語言框架,那麼開源版本的 R 語言是否能夠藉由 MapReduce 的處理方式進行大數據處理呢?可以,早在 2011 年 Revolution Analytics 的開發團隊就建立了 RHadoop 的開源碼專案,讓 R 語言能夠分析 Hadoop 上的資料,並且以 rmr2 套件進行 MapReduce 的大數據處理,同時可以再搭配 plyrmr 套件針對 Hadoop 平台上的檔案進行 R 語言資料處理等相關操作。那麼 R 語言在金融產業有相關的使用案例嗎?有,主要有四大領域,分別為銷售和行銷、財務和風險、客戶和通路以及人力和營運,例如:銷售和行銷領域可以進行客戶獲取、財務和風險領域可以進行防偽冒偵測、客戶和通路領域可以進行客戶生命週期的價值計算、人力和營運領域可以進行客戶服務中心的優化、…等相關應用。

然而上述與金融產業相關應用的資料數量將會越來越大,更進一步匯整為大數據,此時我們就真的需要企業版本的 R 語言進行大數據處理,此時 Microsoft R Server 會是個不錯的選擇,主要原因在於將 R 語言直接與 Hadoop 進行整合,其中包括 Hortonworks 、 Cloudera 和 MapR,以及與資料庫進行整合,其中包括 SQL Server 和 Teradata ,或者直接安裝至 Linux 伺服器上直接使用,將能夠進行更進階的大數據處理與分析,先從準備資料,重點在於可以搭配 SparkR 從 R Server 中進行資料清理和聯結,接著建立模型,重點在於直接透過 R Server 可擴展的函式庫以統計和機器學習演算法建立分類器和預測,最後操作應用,重點在於應用預測分析和資料視覺化支援商業應用。

相關資源

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 語言針對金融資料分析擁有許多完善的工具,因此許多銀行皆以 R 作為資料分析與開發的平台,以利進行策略分析。首先介紹 Quantmod 工具主要是根據交易模型進行資料分析的工具。此外有許多平台免費提供金融交易的歷史資料,此時我們就需要 Quantmod 工具協助取得資料,並且產生相關 K 線圖,搭配不同技術指標以利進行分析。

安裝套件

1
> install.packages("quantmod")

載入套件

1
> library(quantmod)

取得資料

1
> cathaybk <- getSymbols("2882.TW",src="yahoo",auto.assign=FALSE)

(註: 根據需求修改股票代碼。)

檢視資料

1
> cathaybk

產生 K 線圖

1
> chartSeries(cathaybk["2015-04-07/2016-04-07"],theme='white')

(註: 根據需求修改開始日期與結束日期。)

加入技術指標

1
2
3
> addADX() 
> addATR()
> addRSI()

(註: 工具所支援技術指標請參考官方文件。)

最後我們可以搭配第三方相關資料進行整合性資料分析。

相關資源

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

相關資源

資料分析 Data Science & Machine Learning (1)

基本介紹

教學目標

初步了解如何透過 edX 網站學習資料科學和機器學習。

重點概念

資料科學簡介

資料科學是有關使用資料進行決策進而採取行動。

處理過程主要包括五個步驟:

  1. 尋找資料 (資料選擇)
  2. 獲取資料 (前置處理)
  3. 清理和轉換資料 (資料轉換)
  4. 了解資料關係 (資料探勘)
  5. 透過資料傳遞價值 (解釋與評估)

資料科學理論

相關理論主要有五個應用:

  1. 機器學習 (Machine Learning)
  2. 迴歸 (Regression)
  3. 分類 (Classification)
  4. 分群 (Clustering)
  5. 推薦 (Recommendation)

實際操作應用

首先學習如何透過 Azure ML 進行資料處理,其中會搭配使用 R 、 Python 和 SQL ,包括資料獲取、資料取樣、資料量化,資料清理和資料轉換。

接著學習如何進行資料探勘和視覺化呈現,更重要透過 Azure ML 進行建模與評估,以及迴歸、分類和分群等實作操作。

最後則是完成推薦應用,以及如何透過建立好的模型進行預測分析,主要有兩種方式提供預測分析的網路服務:

  • Request-Response Service
    為了單一或多個資料列進行同步預測分析。
  • Batch Execution Service
    為了巨量整批資料進行非同步預測分析。

課程總共五堂課,每堂課有五題測驗 (單複選題,有兩次機會) 佔 50% ,以及期末考有二十題測驗 (單複選題,只有一次機會) 佔 50% ,合計總分達 70% ,題目中等不會太難基本上有看影片和重點整理就能夠通過,接著付 49 美元等待身份驗證之後,即可取得證書

相關資源