共用方式為


使用 R 將 SQL Server 資料視覺化 (SQL Server 和 RevoScaleR 教學課程)

適用於: SQL Server 2016 (13.x) 和更新版本

此教學課程是 RevoScaleR 教學課程系列的第 6 個,該系列說明如何搭配 SQL Server 使用 RevoScaleR 函式 \(英文\)。

在此教學課程中,您將會使用 R 函式,依性別檢視 creditLine 資料行中的值分佈。

  • 為長條圖輸入建立 min-max 變數
  • RevoScaleR 使用 rxHistogram 將長條圖中的資料視覺化
  • 使用基礎 R 發佈中包含之 latticelevelplot,將散佈圖視覺化

如此教學課程所示範,您可以在相同的指令碼中結合開放原始碼與 Microsoft 特定的函式。

新增最大值和最小值

根據上一個教學課程計算的摘要統計資料,您發現與資料相關的一些實用資訊,可以將其插入資料來源,以供進一步計算使用。 例如,最小值和最大值可用於計算長條圖。 在此練習中,將最高值和最低值新增至 RxSqlServerData 資料來源。

  1. 一開始先設定一些暫存變數。

    sumDF <- sumOut$sDataFrame
    var <- sumDF$Name
    
  2. 使用您在上一個教學課程中建立的變數 ccColInfo,定義資料來源中的資料行。

    將新的計算資料行 (numTransnumIntlTranscreditLine) 新增至置換原始定義的資料行集合。 以下指令碼根據從 sumOut (儲存 rxSummary 的記憶體內部輸出) 獲得的最小值和最大值,來新增係數。

    ccColInfo <- list(
        gender = list(type = "factor",
          levels = c("1", "2"), 
          newLevels = c("Male", "Female")),
        cardholder = list(type = "factor",
          levels = c("1", "2"), 
          newLevels = c("Principal", "Secondary")), 
        state = list(type = "factor", 
          levels = as.character(1:51), 
          newLevels = stateAbb), 
        balance  = list(type = "numeric"),
        numTrans = list(type = "factor", 
          levels = as.character(sumDF[var == "numTrans", "Min"]:sumDF[var == "numTrans", "Max"])),
        numIntlTrans = list(type = "factor",  
            levels = as.character(sumDF[var == "numIntlTrans", "Min"]:sumDF[var =="numIntlTrans", "Max"])),
        creditLine = list(type = "numeric")
            )
    
  3. 更新資料行集合之後,套用下列陳述式,為您稍早定義的 SQL Server 資料來源建立更新版本。

    sqlFraudDS <- RxSqlServerData(
        connectionString = sqlConnString,
        table = sqlFraudTable,
        colInfo = ccColInfo,
        rowsPerRead = sqlRowsPerRead)
    

    sqlFraudDS 資料來源現在包含使用 ccColInfo 新增的新資料行。

此時,這些修改只會影響 R 中的資料來源物件,尚未將任何新資料寫入資料庫資料表。 不過,您可以使用 sumOut 變數中所擷取的資料,以建立視覺效果和摘要。

提示

如果您忘了正在使用哪個計算內容,請執行 rxGetComputeContext() 。 「RxLocalSeq Compute Context」的傳回值表示您在正在本機計算內容中執行。

使用 rxHistogram 將資料視覺化

  1. 請使用下列 R 程式碼來呼叫 rxHistogram 函數,並傳遞公式和資料來源。 您可以先在本機執行此作業,查看預期的結果及所需時間。

    rxHistogram(~creditLine|gender, data = sqlFraudDS,  histType = "Percent")
    

    就內部而言, rxHistogram 會呼叫 rxCube 函數,這包含在 RevoScaleR 套件中。 rxCube 會輸出一份清單 (或資料框架),其中,公式所指定的每個變數具有一個資料行與一個計數資料行。

  2. 現在,將計算內容設定為遠端 SQL Server 電腦,並重新執行 rxHistogram

    rxSetComputeContext(sqlCompute)
    rxHistogram(~creditLine|gender, data = sqlFraudDS,  histType = "Percent")
    
  3. 結果會完全相同,因為您使用相同的資料來源,但是,在第二個步驟中,計算是在遠端伺服器上執行。 然後,系統會將結果傳回到您的本機工作站以進行繪製。

長條圖結果

使用散佈圖進行視覺化

散佈圖通常會在資料探索期間用來比較兩個變數之間的關聯性。 您可以針對此用途使用內建的 R 套件,包含 RevoScaleR 函數提供的輸入。

  1. 呼叫 rxCube 函數來計算 numTransnumIntlTrans 每個組合的 fraudRisk 平均值:

    cube1 <- rxCube(fraudRisk~F(numTrans):F(numIntlTrans),  data = sqlFraudDS)
    

    若要指定用來計算群組平均值的群組,請使用 F() 標記法。 在此範例中,F(numTrans):F(numIntlTrans) 表示應將 numTransnumIntlTrans 變數中的整數視為類別目錄變數,而且每個整數值代表一個層級。

    rxCube 的預設傳回值為 rxCube object,其代表交叉資料表。

  2. 呼叫 rxResultsDF 函數,將結果轉換成資料框架,以輕鬆用於 R 標準繪圖函數中。

    cubePlot <- rxResultsDF(cube1)
    

    rxCube 函數包含 returnDataFrame = TRUE 選用引數,您可以用來將結果直接轉換成資料框架。 例如:

    print(rxCube(fraudRisk~F(numTrans):F(numIntlTrans), data = sqlFraudDS, returnDataFrame = TRUE))

    不過,rxResultsDF 的輸出比較簡潔,並保留來源資料行的名稱。 您可以先執行 head(cube1),然後執行 head(cubePlot),以比較輸出。

  3. 使用 levelplot 函數 (來自所有 R 發佈所包含的 lattice 套件) 來建立熱度圖。

    levelplot(fraudRisk~numTrans*numIntlTrans, data = cubePlot)
    

    結果

    散佈圖結果

透過這個快速分析,您可以看出詐騙的風險會隨著交易數目和國際交易數目增加而提高。

如需一般 rxCube 函數和交叉資料表的更多詳細資訊,請參閱使用 RevoScaleR 的資料摘要

後續步驟