適用対象: SQL Server 2016 (13.x) 以降のバージョン
これは、SQL Server で RevoScaleR 関数を使用する方法についての RevoScaleR チュートリアル シリーズのチュートリアル 6 です。
このチュートリアルでは、R 関数を使用して、creditLine 列の値の分布を男女別に表示します。
- ヒストグラム入力用の最小最大変数を作成します
- RevoScaleR から rxHistogram を使用して、ヒストグラムのデータを視覚化します
- 基本 R ディストリビューションに含まれている lattice から levelplot を使用して、散布図で視覚化します
このチュートリアルでは、オープンソースと Microsoft 固有の関数を同じスクリプトで組み合わせることができます。
最小値と最大値を追加する
前のチュートリアルで計算された概要統計情報に基づき、後続の計算のためにデータ ソースに挿入できるデータに関する有益な情報がいくつか得られました。 たとえば、最小値と最大値を使用して、ヒストグラムを計算できます。 この演習では、RxSqlServerData データ ソースに大きい値と小さい値を追加します。
まず、仮の変数をいくつか設定します。
sumDF <- sumOut$sDataFrame var <- sumDF$Name
前のチュートリアルで作成した変数 ccColInfo を利用し、データ ソースに列を定義します。
また、元の定義をオーバーライドする列コレクションに新しく計算された列をいくつか追加します (numTrans、numIntlTrans、creditLine)。 次のスクリプトは、rxSummary からのインメモリ出力を格納している sumOut から取得した最小値と最大値に基づいて要素を追加します。
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") )
列コレクションを更新しているので、次のステートメントを適用し、先に定義した SQL Server データ ソースの更新版を作成します。
sqlFraudDS <- RxSqlServerData( connectionString = sqlConnString, table = sqlFraudTable, colInfo = ccColInfo, rowsPerRead = sqlRowsPerRead)
これで、sqlFraudDS データ ソースに、ccColInfo を使用して追加された新しい列が含まれます。
この時点で、変更は R のデータ ソース オブジェクトにのみ影響を与えます。新しいデータはデータベース テーブルにまだ書き込まれていません。 ただし、sumOut 変数でキャプチャされたデータを使用し、視覚化とサマリーを作成できます。
ヒント
使用しているコンピューティング コンテキストがわからなくなった場合は、rxGetComputeContext() を実行してください。 "RxLocalSeq Compute Context" という戻り値は、ローカルのコンピューティング コンテキストで実行されていることを示します。
rxHistogram を使用してデータを視覚化する
次の R コードを使用して rxHistogram 関数を呼び出し、式とデータ ソースを渡します。 ローカルで最初にこの操作を実行することで、予想される結果と、所要時間を確認できます。
rxHistogram(~creditLine|gender, data = sqlFraudDS, histType = "Percent")
内部的には、 rxHistogram は、 RevoScaleR パッケージに含まれる rxCube 関数を呼び出します。 rxCube は、式で指定された各変数の 1 つの列を含む 1 つのリスト (またはデータ フレーム) とカウント列を出力します。
ここで、リモート SQL Server コンピューターにコンピューティング コンテキストを設定し、rxHistogram を再度実行します。
rxSetComputeContext(sqlCompute) rxHistogram(~creditLine|gender, data = sqlFraudDS, histType = "Percent")
同じデータ ソースを使用しているため、結果はまったく同じです。ただし、2 番目の手順では、計算はリモート サーバーで実行されます。 結果は、表示のためにローカル ワークステーションに返されます。
散布図で視覚化する
散布図は、データ探索時に 2 つの変数間の関係を比較するためによく使用されます。 この目的には、組み込みの R パッケージと RevoScaleR 関数によって提供される入力を使用できます。
rxCube 関数を呼び出して、numTrans と numIntlTrans のすべての組み合わせに対する fraudRisk の平均を計算します。
cube1 <- rxCube(fraudRisk~F(numTrans):F(numIntlTrans), data = sqlFraudDS)
グループの平均の計算に使用するグループを指定するには、
F()
表記を使用します。 この例では、F(numTrans):F(numIntlTrans)
は、変数numTrans
とnumIntlTrans
の整数を各整数値をレベルとするカテゴリ変数として処理する必要があることを示します。rxCube の既定の戻り値は、クロス集計を表す rxCube object です。
rxResultsDF 関数を呼び出して、R の標準プロット関数のいずれかで簡単に使用できるデータ フレームに、結果を変換できます。
cubePlot <- rxResultsDF(cube1)
rxCube 関数にはオプションの引数 returnDataFrame = TRUE が含まれています。これを使うと、結果をデータ フレームに直接変換できます。 次に例を示します。
print(rxCube(fraudRisk~F(numTrans):F(numIntlTrans), data = sqlFraudDS, returnDataFrame = TRUE))
ただし、rxResultsDF の出力の方が簡潔であり、ソース列の名前が保持されます。
head(cube1)
を実行し、その後head(cubePlot)
を実行して出力を比較することができます。すべての R ディストリビューションに含まれる lattice パッケージの levelplot 関数を使用して、ヒート マップを作成します。
levelplot(fraudRisk~numTrans*numIntlTrans, data = cubePlot)
結果
この簡単な分析から、トランザクションの数および国際的トランザクションの数の両方に伴って不正行為のリスクが高くなることがわかります。
一般的な rxCube 関数およびクロス集計表の詳細については、「RevoScaleR を使用したデータのサマリー」を参照してください。