R言語でSAS ViyaのAI機能活用 第二回「アクションセットと最初のデータ読み込み」

0

概要

第一回の「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()関数を使えば中身を確認できます。

attributes(hmeq_cas)
$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のデータタイプについては、今後の記事で改めて紹介します。

out$builtins


helpアクションのほかに、tab補完機能を利用すれば、アクションセットの中身を確認することもできます。

SWATが提供したヘルプシステムに加えて、Rが提供するヘルプ機能を使用してSWATの一部の関数に関する情報にアクセスすることもできます。例えば、下記のコードのように、help()或いは?を使えば、関数の情報を表示するRドキュメントページが表示されます。

help(as.casTable)
?as.casTable

Rが提供したヘルプ関数がCASアクションおよびアクションセットでは機能しないことに注意してください。何故かというと、Rパッケージのドキュメントはコンパイルの時に生成されますが、SWATのアクションは使用時に呼び出される物なので、Rドキュメントを同時に生成することができません。詳しい情報についてはこちらのAPIドキュメントを参照ください。

以上は、CASのアクションセットやアクションに関する基本的な内容のご紹介です。様々な機能を持つアクションセットを活用することによって、R言語からSAS Viya の機能を活用することができます。次回は、アクションセットを使用したモデリングに関してご紹介します。

Share

About Author


SAS Viya Business Promotion & OSS Innovation推進室 Analytical Consultant

半導体業界でデータ分析による異常予兆検知システムを開発した経験を持つ。現在、業務課題解決ためにAIプラットフォーム上にオープンソースなどを活用したアナリティカルソリューションの構築や提案を担当している。さらに、アナリティクスハッカソンなどのイベントの企画に従事している。

Leave A Reply

Back to Top