概要
第一回の「CASサーバーとSWATパッケージ」に続き、第二回としてCASのアクションセットの活用やCASサーバーへのデータ読み込みなどの基本操作の方法について紹介します。
アクションセットについて
CASサーバー上での分析作業を開始する前に、“アクションセット”という重要な概念に関して紹介します。
アクションセットは、関連する機能を実行するアクションの論理的なグループです。 SAS Viyaでは、関数のことを「アクション」、関連する関数のグループを「アクションセット」と呼んでいます。アクションでは、サーバーのセットアップに関する情報を返したり、データをロードしたり、高度な分析を実行するなど、さまざまな処理を実行できます。
アクションセットを使ってみましょう
それでは、サンプルコードを使いながら、SAS Viyaのアクションセットでデータの読み込みからプロットまでの一連の操作を説明します。
・データの読み込み
CASサーバーにデータを読み込むには二つの方法があります。一つはread.csv()でcsvファイルをRデータフレームの形で読み込んだ上で、as.casTable()を使用する方法です。この関数はデータをRのデータフレームからCASテーブルにアップロードすることができます。今回の例では金融関連のサンプルデータhmeqを使って紹介します。
library("swat")
conn <- CAS(server, port, username, password, protocol = "http")
hmeq_data <- read.csv(“hmeq.csv”)
hmeq_cas <- as.casTable(conn, hmeq) |
もう一つはcas.read.csv()を使って、ローカルからファイルを読み込んで、そのままCASサーバーにアップロードする方法です。仕組みとしては、一つ目の方法と大きくは変わりません。
hmeq_cas <- cas.read.csv(conn, hmeq) |
as.casTable()或いはcas.read.csv()からの出力はCASTableオブジェクトです。その中に、接続情報、作成されたテーブルの名前、テーブルが作成されたcaslib(CASライブラリ)、およびその他の情報が含まれます。 Rのattributes()関数を使えば中身を確認できます。
$conn
CAS(hostname=server, port=8777, username=user, session=ca2ed63c-0945-204b-b4f3-8f6e82b133c0, protocol=http)
$tname
[1] "IRIS"
$caslib
[1] "CASUSER(user)"
$where
[1] ""
$orderby
list()
$groupby
list()
$gbmode
[1] ""
$computedOnDemand
[1] FALSE
$computedVars
[1] ""
$computedVarsProgram
[1] ""
$XcomputedVarsProgram
[1] ""
$XcomputedVars
[1] ""
$names
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
$compcomp
[1] FALSE
$class
[1] "CASTable"
attr(,"package")
[1] "swat" |
・データ内容の把握
CASサーバー上にアップロードしたテーブルとその列に関する一般情報にアクセスするには、tableというアクションセット中のtableInfoとcolumnInfoのアクションを使用します。下記のコードを見れば分かると思いますが、”cas.table.tableInfo()”の中の”table”はアクションセット名、”tableInfo”はその中のアクション名です。その他のアクションについても基本的にこちらのルールで命名されています。
cas.table.tableInfo(conn) |
$TableInfo
Name Rows Columns IndexedColumns Encoding CreateTimeFormatted
1 HMEQ 5960 13 0 utf-8 2019-12-18T16:17:31+09:00
ModTimeFormatted AccessTimeFormatted JavaCharSet CreateTime
1 2019-12-18T16:17:31+09:00 2019-12-18T16:17:31+09:00 UTF8 1892272651
ModTime AccessTime Global Repeated View MultiPart SourceName SourceCaslib
1 1892272651 1892272651 0 0 0 0
Compressed Creator Modifier SourceModTimeFormatted SourceModTime
1 0 sasdemo02 2019-12-18T16:17:31+09:00 1892272651 |
cas.table.columnInfo(hmeq_cas) |
$ColumnInfo
Column Label ID Type RawLength FormattedLength Format NFL NFD
1 BAD 1 double 8 12 0 0
2 LOAN 2 double 8 12 0 0
3 MORTDUE 3 double 8 12 0 0
4 VALUE 4 double 8 12 0 0
5 REASON 5 varchar 7 7 0 0
6 JOB 6 varchar 7 7 0 0
7 YOJ 7 double 8 12 0 0
8 DEROG 8 double 8 12 0 0
9 DELINQ 9 double 8 12 0 0
10 CLAGE 10 double 8 12 0 0
11 NINQ 11 double 8 12 0 0
12 CLNO 12 double 8 12 0 0
13 DEBTINC 13 double 8 12 0 0 |
CASTableオブジェクトは、多くのRのデータフレームの操作もサポートしているため、ローカルデータのように操作できます。例えば、simpleというアクションセット中のsummaryアクションを実行してみましょう。
summ <- cas.simple.summary(iris_cas)
summ |
$Summary
Column Min Max N NMiss Mean Sum
1 BAD 0.0000000 1.0000 5960 0 1.994966e-01 1189.00
2 LOAN 1100.0000000 89900.0000 5960 0 1.860797e+04 110903500.00
3 MORTDUE 2063.0000000 399550.0000 5442 518 7.376082e+04 401406367.20
4 VALUE 8000.0000000 855909.0000 5848 112 1.017760e+05 595186333.04
5 YOJ 0.0000000 41.0000 5445 515 8.922268e+00 48581.75
6 DEROG 0.0000000 10.0000 5252 708 2.545697e-01 1337.00
7 DELINQ 0.0000000 15.0000 5380 580 4.494424e-01 2418.00
8 CLAGE 0.0000000 1168.2336 5652 308 1.797663e+02 1016038.99
9 NINQ 0.0000000 17.0000 5450 510 1.186055e+00 6464.00
10 CLNO 0.0000000 71.0000 5738 222 2.129610e+01 122197.00
11 DEBTINC 0.5244992 203.3121 4693 1267 3.377992e+01 158529.14
Std StdErr Var USS CSS CV
1 3.996555e-01 5.176815e-03 1.597245e-01 1.189000e+03 9.517985e+02 200.33195
2 1.120748e+04 1.451727e+02 1.256076e+08 2.812185e+12 7.484958e+11 60.22946
3 4.445761e+04 6.026523e+02 1.976479e+09 4.036208e+13 1.075402e+13 60.27266
4 5.738578e+04 7.504134e+02 3.293127e+09 7.983063e+13 1.925491e+13 56.38436
5 7.573982e+00 1.026421e-01 5.736521e+01 7.457556e+05 3.122962e+05 84.88853
6 8.460468e-01 1.167433e-02 7.157951e-01 4.099000e+03 3.758640e+03 332.34388
7 1.127266e+00 1.536863e-02 1.270728e+00 7.922000e+03 6.835248e+03 250.81434
8 8.581009e+01 1.141398e+00 7.363372e+03 2.242600e+08 4.161041e+07 47.73425
9 1.728675e+00 2.341613e-02 2.988317e+00 2.395000e+04 1.628334e+04 145.74998
10 1.013893e+01 1.338480e-01 1.027980e+02 3.192071e+06 5.897519e+05 47.60935
11 8.601746e+00 1.255629e-01 7.399004e+01 5.702262e+06 3.471613e+05 25.46408
TValue ProbT Skewness Kurtosis
1 38.53656 2.720203e-290 1.5043167 0.2630568
2 128.17819 0.000000e+00 2.0237807 6.9325898
3 122.39365 0.000000e+00 1.8144807 6.4818663
4 135.62664 0.000000e+00 3.0533443 24.3628049
5 86.92605 0.000000e+00 0.9884601 0.3720725
6 21.80593 5.478603e-101 5.3208703 36.8727634
7 29.24414 1.326786e-174 4.0231496 23.5654487
8 157.49651 0.000000e+00 1.3434120 7.5995493
9 50.65120 0.000000e+00 2.6219842 9.7865073
10 159.10653 0.000000e+00 0.7750518 1.1576727
11 269.02783 0.000000e+00 2.8523534 50.5040415 |
summaryアクションは、SASユーザーになじみのある形式でサマリー統計を表示します。 Rユーザーが慣れている形式を望むなら、下記のコードのようにRデータフレームオブジェクトのようにsummary()メソッドも使用できます。
summ2 <- summary(iris_cas)
summ2 |
BAD LOAN MORTDUE VALUE
Min. :0.0000 Min. : 1100 Min. : 2063 Min. : 8000
1st Qu.:0.0000 1st Qu.:11100 1st Qu.: 46268 1st Qu.: 66069
Median :0.0000 Median :16300 Median : 65019 Median : 89236
Mean :0.1995 Mean :18608 Mean : 73761 Mean :101776
3rd Qu.:0.0000 3rd Qu.:23300 3rd Qu.: 91491 3rd Qu.:119832
Max. :1.0000 Max. :89900 Max. :399550 Max. :855909
NA's : 518 NA's : 112
REASON JOB YOJ DEROG
DebtCon:3928 Other :2388 Min. : 0.000 Min. : 0.0000
HomeImp:1780 ProfExe:1276 1st Qu.: 3.000 1st Qu.: 0.0000
NA's : 252 Office : 948 Median : 7.000 Median : 0.0000
Mgr : 767 Mean : 8.922 Mean : 0.2546
Self : 193 3rd Qu.: 13.000 3rd Qu.: 0.0000
NA's : 279 Max. : 41.000 Max. : 10.0000
NA's :515.000 NA's :708.0000
DELINQ CLAGE NINQ CLNO
Min. : 0.0000 Min. : 0.0 Min. : 0.000 Min. : 0.0
1st Qu.: 0.0000 1st Qu.: 115.1 1st Qu.: 0.000 1st Qu.: 15.0
Median : 0.0000 Median : 173.5 Median : 1.000 Median : 20.0
Mean : 0.4494 Mean : 179.8 Mean : 1.186 Mean : 21.3
3rd Qu.: 0.0000 3rd Qu.: 231.6 3rd Qu.: 2.000 3rd Qu.: 26.0
Max. : 15.0000 Max. :1168.2 Max. : 17.000 Max. : 71.0
NA's :580.0000 NA's : 308.0 NA's :510.000 NA's :222.0
DEBTINC
Min. : 0.5245
1st Qu.: 29.1400
Median : 34.8183
Mean : 33.7799
3rd Qu.: 39.0031
Max. : 203.3121
NA's :1267.0000 |
CASTableオブジェクトでsummary()関数を呼び出す場合にバックグラウンドで実際にさまざまなCASアクションを呼び出して計算を行っています。複数のアクションの出力をRのsummary()関数が返すのと同じ形式でデータフレームに結合されます。 これにより、CASTableオブジェクトとRのデータフレームオブジェクトを交互に使用して、CASテーブルで作業することができます。
・データのプロット
CASサーバーから返したテーブルはRのデータフレームのサブクラスであるため、データフレームで機能するものであればどんな処理でも実行できます。plot関数を使用してアクションの結果をプロットするか、ggplot2などのより高度なパッケージへの入力として使用できます。次の例では、to.casDataFrame()関数を使用してデータセットをダウンロードし、 ggplot2を使用してプロットします。
library(ggplot2)
hmeq_cas %>%
to.casDataFrame %>%
ggplot(aes(x = LOAN, y = VALUE)) +
geom_point(color = "royalblue") |
アクションセットとアクション(関数)の調べ方
アクションセットとアクションの使い方を確認するには、CASサーバーと接続したときに作成したCASオブジェクトでbuiltins.helpアクションを呼び出します。
out <- cas.builtins.help(conn) |
NOTE: Available Action Sets and Actions:
NOTE: accessControl
NOTE: accessPersonalCaslibs - Provides administrative access to all personal caslibs (CASUSER and CASUSERHDFS)
NOTE: assumeRole - Assumes a role
NOTE: dropRole - Relinquishes a role
NOTE: showRolesIn - Shows the currently active role
NOTE: showRolesAllowed - Shows the roles that a user is a member of
... |
これにより、ロードされたすべてのアクションセットとその中のアクションのリストが出力されます。アクションセットのヘルプを表示するには、builtins.helpアクションを使い、actionsetキーワードパラメーターを使用します。 例として、次のコードでbuiltinsアクションセットのヘルプコンテンツを表示します。
out <- cas.builtins.help(conn, actionset = "builtins") |
NOTE: Information for action set 'builtins':
NOTE: builtins
NOTE: addNode - Adds a machine to the server
NOTE: removeNode - Remove one or more machines from the server
NOTE: help - Shows the parameters for an action or lists all available actions
... |
また、$マークとアクションセット名を使えば、上記の情報は表形式のcasDataFrame構造のリストとして返します。CASのデータタイプについては、今後の記事で改めて紹介します。
helpアクションのほかに、tab補完機能を利用すれば、アクションセットの中身を確認することもできます。
SWATが提供したヘルプシステムに加えて、Rが提供するヘルプ機能を使用してSWATの一部の関数に関する情報にアクセスすることもできます。例えば、下記のコードのように、help()或いは?を使えば、関数の情報を表示するRドキュメントページが表示されます。
Rが提供したヘルプ関数がCASアクションおよびアクションセットでは機能しないことに注意してください。何故かというと、Rパッケージのドキュメントはコンパイルの時に生成されますが、SWATのアクションは使用時に呼び出される物なので、Rドキュメントを同時に生成することができません。詳しい情報についてはこちらのAPIドキュメントを参照ください。
以上は、CASのアクションセットやアクションに関する基本的な内容のご紹介です。様々な機能を持つアクションセットを活用することによって、R言語からSAS Viya の機能を活用することができます。次回は、アクションセットを使用したモデリングに関してご紹介します。