[SQL Server][R Language]In-Database R(二)安裝R Package(R包)

R套件(Package)的資源非常豐富,截自2016-06-18已經有8,195個R包可以下載,安裝完R Service(In-DataBase R)之後,

會有基本內建的R包,但許多常用的R包則需要額外下載及安裝,這篇來筆記R包的安裝。

 

截自2016-06-18 R包的套件數:

在R Console、R Studio、R Tool For Visual Studio,安裝R包只要一條指令install.packages("R包名稱"),工具就會自動下載及安裝,

撰寫R Script就可以載入library("R包名稱"),那麼R Service?

 

1.我們來試試2013-01~05 月R包兵器下載排行榜第一名plyr

 

2.首先在R Script製作出一個Data frame,假設資料行有國家名、人口數及FIFA世界足協男子組分數。

 測試資料取歐洲五大聯賽所在的國家抽樣(西甲、英超、法甲、德甲、義甲),假設過去1年,每個國家都增加了100萬人

execute sp_execute_external_script
  @language = N'R'
, @script = N'
country <- c("France","Germany","Spain","England","Italy","France","Germany","Spain","England","Italy");
year <- c(2016,2016,2016,2016,2016,2015,2015,2015,2015,2015);
population <- c(6500,8221,4666,6111,5933,6400,8121,4566,6011,5833);
FIFAScore <- c(925,1310,1267,1069,982,907,1277,1309,1016,959);
OutputDataSet <- data.frame(country,population,year,FIFAScore)'
, @input_data_1 = N''
WITH RESULT SETS (([country] varchar(20) NOT NULL,[population] int,[year] int,[FIFAScore] int));

輸出執行結果:

利用data frame把4組資料合併起來。
 

3.我們想利用plyr裡頭的ddply分組統計計算人口增長與足球成績相關係數(Correlation coefficient)

execute sp_execute_external_script
  @language = N'R'
, @script = N'
library("plyr")
country <- c("France","Germany","Spain","England","Italy","France","Germany","Spain","England","Italy");
year <- c(2016,2016,2016,2016,2016,2015,2015,2015,2015,2015);
population <- c(6500,8221,4666,6111,5933,6400,8121,4566,6011,5833);
FIFAScore <- c(925,1310,1267,1069,982,907,1277,1309,1016,959);
d <- data.frame(country,population,year,FIFAScore)
OutputDataSet <- ddply(d, c("country"), function(df) cor(df$FIFAScore,df$population));
'
, @input_data_1 = N''
WITH RESULT SETS (([Country] nvarchar(20) NOT NULL,[Cor] numeric(6,3)));

結果出現了以下訊息:

訊息 39004,層級 16,狀態 20,行 0
執行 'sp_execute_external_script' 時發生 'R' 指令碼錯誤,HRESULT 為 0x80004004。
訊息 39019,層級 16,狀態 1,行 0
發生外部指令碼錯誤: 
Error in library("plyr") : there is no package called 'plyr'
Calls: source -> withVisible -> eval -> eval -> library

 

4.如何在R Service 安裝R包? 查MSDN

Install Additional R Packages on SQL Server

這邊我們選用R command-line utilities的方式

 a.在安裝SQL Server  R SERVICE的目錄中找到Rgui執行程式,按下右鍵以系統管理員身份執行。

C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\R_SERVICES\bin\x64

(SQL2016是Instance的名稱)

b.輸入以下R script

將library目錄丟進lib.SQL變數,然後安裝R包時指定安裝到此目錄。

這個目錄必須要R Service所在的目錄喔!!

lib.SQL <- "C:\\Program Files\\Microsoft SQL Server\\MSSQL13.SQL2016\\R_SERVICES\\library"
install.packages("plyr",lib=lib.SQL)

Console上的訊息顯示已經下載並安裝成功

c.查詢R package Library目錄

4.重新執行以下剛剛相關係數的語法

可以正確載入plyr library並且執行了!!!

由於西班牙在2016的成績相較2015是退步的,但各國的人口都增加了100萬,可以發現除了西班牙,其他國家都是正相關。

 

小結:

  • 最佳資料的來源: 透過T-SQL語法將資料表的資料讀出輸入到@input_data_1

   例如像是 @input_data_1 = N'SELECT * FROM Sales.Customer',下一篇筆記。

  • FIFA成績和人口增長應該沒有必然的關係啦。
  • 冰島人口30萬人,FIFA排名34。

 

歐國盃小組賽,西班牙早上3:0 擊敗土耳其!!

掛上國旗來慶祝!!

ESP

 

參考:

Top 100 R packages for 2013 (Jan-May)!

歐洲國家人口數量列表

FIFA Rank

Install Additional R Packages on SQL Server