2013年8月10日 星期六

RODBC 與 SQL Server 資料匯入與寫入

Problem:
如何將 R 資料寫入至 SQL Server 資料庫

Analysis:
針對 SQL Server 資料庫可採用 RODBC 套件, 其中 sqlQuery 指令可執行資料匯入至R與將R物件寫入SQL資料庫.

步驟 1


先在 ODBC 管理員中新增 SQL Server ODBC 資料來源, 考慮連結名稱是R_SQL2008」.
步驟 2
考慮某 Northwind 資料庫, 其中包括 Orders 資料表, 如下圖所示.

步驟 3
先執行 library(RODBC), 再利用 odbcConnect 連結至SQL Server ODBC 資料來源, 最後配合 sqlQuery SQL 指令將資料匯入至R. class 結果可知為資料框架物件(data.frame). 利用 table 指令可計算各運送國家的個數. 平均數 mean 亦可加以使用.

步驟 4
考慮 Shippers 資料表有3筆記錄.

步驟 5
利用 names 指令可了解資料表欄位名稱

步驟 6
在 sqlQuery 中配合 INSERT INTO  指令可將R資料寫入SQL 資料庫, 其中第一個欄位(ShipperID)為自動編號主索引鍵, 因此該欄位不用加在 INSERT INTO 指令中, 最後再次讀取資料已新增為4筆.

步驟 7
新增資料 INSERT 語法如下: 

完整R code:

# end
謝謝 R user- Chang 提供此問題. 

Data mining with Rattle – ROC curve (SVM and NN)

# 範例說明 R圖形化使用者介面 rattle 套件 執行 ROC curve 比較


步驟 1
安裝並執行 rattle 套件-資料探勘使用者介面
install.packages(“rattle”)
library(rattle)
rattle()

步驟 2
匯入kernlab套件的資料集spam, 一般採用 spam {kernlab} 表示, 步驟如下:

Data \ Source: 選取 Library \ Data Name: 選取 spam:kernlab:Spam E-mail Database \ 執行.

匯入 spam 資料結果, 此為垃圾郵件資料集, 其中第58個變數是目標變數且為類別型資料, R中屬於因子(factor)資料物件, 在最下列訊息區顯示全部有 4601筆觀測值, 58個輸入變數, 可使用分類模型.

步驟 3
Rattle Support Vector Machines 方法, 採用 kernlab 套件的ksvm方法, R console 視窗中輸入以下指令可查詢其使用說明.
library(kernlab)
?ksvm

Model \ Type 選取 SVM \ Kernel 採用預設值 Radial Basis (rbfdot) \ 執行.

步驟 4
使用 Neural Network 方法, Rattle 採用 nnet 套件的nnet 方法, 該方法採用Feed-forward neural networks 且為一個隱藏層 (hidden layer), 預設節點數是十個.
Model \ Type 選取 Neural Net \ 執行.

步驟 5
模式比較主要採用 ROC curve 方法.

Rattle 會針對之前已完成的模型進行效益評估.

Evaluate \ Type: 選取 ROC \ Model: SVM , Neural Net 打勾 \ 按 執行.

步驟 6
考慮實際結果有二種情形(Yes, No), ROC curve視窗中x軸表示 False Positive (FP) rate (實際為N, 但預模型分類為Y, 此時FP愈小愈好), y軸表示 TP rate (實際為Y, 且預模型分類為Y, 此時FP愈大愈好), 因此, ROC曲線愈偏向左上角愈好,即曲線以下面積較大者較佳. 由圖形可知 ksvm 較偏向於左上角位置, 因此採用 svm 較佳。

下載說明: r-rattle-ROCcurve.pdf
# end

2013年8月9日 星期五

boxplot 繪圖-x 軸字型大小設定

Problem:
採用 boxplot 繪圖時,  x軸群組個數太多有可能會導致x軸群組文字無法顯示.

Analysis:
採用 cex.axis 指令即可放大(>1)或縮小(<1)其大小, 參考以下R指令:




比較下列圖形, 左圖預設值結果無法完整呈現群組文字, 右圖採用 cex.axis 參數設定, x軸群組文字較小且10個x軸群組文字皆可顯示.


感謝 R user- James 提供此問題.