CASTableオブジェクトのパラメータについて

SAS ViyaはAIプラットフォームです。PythonやJava、Rなどの言語を通して利用できます。そのSAS Viyaの中で使われているのがCASTableというテーブルオブジェクトです（CASはCloud Analytic Servicesの略です）。今回はそのCASTableオブジェクトについて紹介します。

## SAS Viyaに接続する

まずはSAS Viyaに接続します。

```python
from swat import *

cashost='localhost'
casport=5570
useremail='dev@sas.com'
userpassword='password'
casauth='~/.authinfo'
conn = CAS(cashost, casport, useremail, userpassword, caslib="casuser")
```

## データをアップロードする

CSVファイルのデータをアップロードします。今回は有名なIRISのデータです。

```python
out = conn.upload('./iris.csv')
```

このoutがCASTableオブジェクトになります。

## CASTableオブジェクトについて

まずは出力してみます。

```python
out
```

<div class="cas-results-key"><b>&#167; caslib</b></div>
<div class="cas-results-body">
<div>CASUSER(dev@sas.com)</div>
</div>
<div class="cas-results-key"><hr/><b>&#167; tableName</b></div>
<div class="cas-results-body">
<div>IRIS</div>
</div>
<div class="cas-results-key"><hr/><b>&#167; casTable</b></div>
<div class="cas-results-body">
<div>CASTable('IRIS', caslib='CASUSER(dev@sas.com)')</div>
</div>
<div class="cas-output-area"></div>
<p class="cas-results-performance"><small><span class="cas-elapsed">elapsed 0.00764s</span> &#183; <span class="cas-user">user 0.003s</span> &#183; <span class="cas-sys">sys 0.008s</span> &#183; <span class="cas-memory">mem 20.8MB</span></small></p>

## キーでアクセスする

まずはキーでアクセスします。

```python
out['tableName']
# 'IRIS'
```

```python
out['caslib']
# 'CASUSER(dev@sas.com)'
```

```python
out['casTable']
# CASTable('IRIS', caslib='CASUSER(dev@sas.com)')
```

## プロパティでアクセスする

続いてプロパティを使った例です。

```python
out.casTable
# CASTable('IRIS', caslib='CASUSER(dev@sas.com)')
```

## テーブル情報の取得

テーブル情報を表示するには下記のように行います。

```python
out.casTable.tableinfo()
```

<div class="cas-results-key"><b>&#167; TableInfo</b></div>
<div class="cas-results-body">
<div>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th title=""></th>
      <th title="Name">Name</th>
      <th title="Rows">Rows</th>
      <th title="Columns">Columns</th>
      <th title="Indexed Columns">IndexedColumns</th>
      <th title="Encoding">Encoding</th>
      <th title="Created">CreateTimeFormatted</th>
      <th title="Last Modified">ModTimeFormatted</th>
      <th title="Last Accessed">AccessTimeFormatted</th>
      <th title="Character Set">JavaCharSet</th>
      <th title="CreateTime">CreateTime</th>
      <th title="...">...</th>
      <th title="Global">Global</th>
      <th title="Repeated">Repeated</th>
      <th title="View">View</th>
      <th title="Loaded Source">SourceName</th>
      <th title="Source Caslib">SourceCaslib</th>
      <th title="Compressed">Compressed</th>
      <th title="Table Creator">Creator</th>
      <th title="Last Table Modifier">Modifier</th>
      <th title="Source Modified">SourceModTimeFormatted</th>
      <th title="SourceModTime">SourceModTime</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>IRIS</td>
      <td>150</td>
      <td>5</td>
      <td>0</td>
      <td>utf-8</td>
      <td>2019-07-02T22:17:57-04:00</td>
      <td>2019-07-02T22:17:57-04:00</td>
      <td>2019-07-02T22:17:57-04:00</td>
      <td>UTF8</td>
      <td>1.877739e+09</td>
      <td>...</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td></td>
      <td></td>
      <td>0</td>
      <td>dev@sas.com</td>
      <td></td>
      <td>2019-07-02T22:17:56-04:00</td>
      <td>1.877739e+09</td>
    </tr>
  </tbody>
</table>
<p>1 rows × 22 columns</p>
</div>
</div>
<div class="cas-output-area"></div>
<p class="cas-results-performance"><small><span class="cas-elapsed">elapsed 0.00108s</span> &#183; <span class="cas-sys">sys 0.001s</span> &#183; <span class="cas-memory">mem 0.69MB</span></small></p>

## カラム情報を表示する

`columninfo` でカラム情報が取得できます。

```python
out.casTable.columninfo()
```

<div class="cas-results-key"><b>&#167; ColumnInfo</b></div>
<div class="cas-results-body">
<div>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th title=""></th>
      <th title="Column">Column</th>
      <th title="ID">ID</th>
      <th title="Type">Type</th>
      <th title="RawLength">RawLength</th>
      <th title="FormattedLength">FormattedLength</th>
      <th title="NFL">NFL</th>
      <th title="NFD">NFD</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>SepalLength</td>
      <td>1</td>
      <td>double</td>
      <td>8</td>
      <td>12</td>
      <td>0</td>
      <td>0</td>
    </tr>
    <tr>
      <th>1</th>
      <td>SepalWidth</td>
      <td>2</td>
      <td>double</td>
      <td>8</td>
      <td>12</td>
      <td>0</td>
      <td>0</td>
    </tr>
    <tr>
      <th>2</th>
      <td>PetalLength</td>
      <td>3</td>
      <td>double</td>
      <td>8</td>
      <td>12</td>
      <td>0</td>
      <td>0</td>
    </tr>
    <tr>
      <th>3</th>
      <td>PetalWidth</td>
      <td>4</td>
      <td>double</td>
      <td>8</td>
      <td>12</td>
      <td>0</td>
      <td>0</td>
    </tr>
    <tr>
      <th>4</th>
      <td>Name</td>
      <td>5</td>
      <td>varchar</td>
      <td>15</td>
      <td>15</td>
      <td>0</td>
      <td>0</td>
    </tr>
  </tbody>
</table>
</div>
</div>
<div class="cas-output-area"></div>
<p class="cas-results-performance"><small><span class="cas-elapsed">elapsed 0.00118s</span> &#183; <span class="cas-user">user 0.000999s</span> &#183; <span class="cas-memory">mem 0.72MB</span></small></p>

## データを取得する

データはfetchメソッドで取得できます。

```python
out.casTable.fetch(to=5)
```

<div class="cas-results-key"><b>&#167; Fetch</b></div>
<div class="cas-results-body">
<div>
<table border="1" class="dataframe"><caption>Selected Rows from Table IRIS</caption>
  <thead>
    <tr style="text-align: right;">
      <th title=""></th>
      <th title="SepalLength">SepalLength</th>
      <th title="SepalWidth">SepalWidth</th>
      <th title="PetalLength">PetalLength</th>
      <th title="PetalWidth">PetalWidth</th>
      <th title="Name">Name</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>5.1</td>
      <td>3.5</td>
      <td>1.4</td>
      <td>0.2</td>
      <td>Iris-setosa</td>
    </tr>
    <tr>
      <th>1</th>
      <td>4.9</td>
      <td>3.0</td>
      <td>1.4</td>
      <td>0.2</td>
      <td>Iris-setosa</td>
    </tr>
    <tr>
      <th>2</th>
      <td>4.7</td>
      <td>3.2</td>
      <td>1.3</td>
      <td>0.2</td>
      <td>Iris-setosa</td>
    </tr>
    <tr>
      <th>3</th>
      <td>4.6</td>
      <td>3.1</td>
      <td>1.5</td>
      <td>0.2</td>
      <td>Iris-setosa</td>
    </tr>
    <tr>
      <th>4</th>
      <td>5.0</td>
      <td>3.6</td>
      <td>1.4</td>
      <td>0.2</td>
      <td>Iris-setosa</td>
    </tr>
  </tbody>
</table>
</div>
</div>
<div class="cas-output-area"></div>
<p class="cas-results-performance"><small><span class="cas-elapsed">elapsed 0.00303s</span> &#183; <span class="cas-user">user 0.003s</span> &#183; <span class="cas-memory">mem 0.865MB</span></small></p>

## データの概要を見る

データの概要は summary メソッドで確認できます。

```python
out.casTable.summary()
```

<div class="cas-results-key"><b>&#167; Summary</b></div>
<div class="cas-results-body">
<div>
<table border="1" class="dataframe"><caption>Descriptive Statistics for IRIS</caption>
  <thead>
    <tr style="text-align: right;">
      <th title=""></th>
      <th title="Analysis Variable">Column</th>
      <th title="Minimum">Min</th>
      <th title="Maximum">Max</th>
      <th title="N">N</th>
      <th title="N Miss">NMiss</th>
      <th title="Mean">Mean</th>
      <th title="Sum">Sum</th>
      <th title="Std Dev">Std</th>
      <th title="Std Error">StdErr</th>
      <th title="Variance">Var</th>
      <th title="USS">USS</th>
      <th title="Corrected SS">CSS</th>
      <th title="Coeff of Variation">CV</th>
      <th title="t Value">TValue</th>
      <th title="Pr &gt; |t|">ProbT</th>
      <th title="Skewness">Skewness</th>
      <th title="Kurtosis">Kurtosis</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>SepalLength</td>
      <td>4.3</td>
      <td>7.9</td>
      <td>150.0</td>
      <td>0.0</td>
      <td>5.843333</td>
      <td>876.5</td>
      <td>0.828066</td>
      <td>0.067611</td>
      <td>0.685694</td>
      <td>5223.85</td>
      <td>102.168333</td>
      <td>14.171126</td>
      <td>86.425375</td>
      <td>3.331256e-129</td>
      <td>0.314911</td>
      <td>-0.552064</td>
    </tr>
    <tr>
      <th>1</th>
      <td>SepalWidth</td>
      <td>2.0</td>
      <td>4.4</td>
      <td>150.0</td>
      <td>0.0</td>
      <td>3.054000</td>
      <td>458.1</td>
      <td>0.433594</td>
      <td>0.035403</td>
      <td>0.188004</td>
      <td>1427.05</td>
      <td>28.012600</td>
      <td>14.197587</td>
      <td>86.264297</td>
      <td>4.374977e-129</td>
      <td>0.334053</td>
      <td>0.290781</td>
    </tr>
    <tr>
      <th>2</th>
      <td>PetalLength</td>
      <td>1.0</td>
      <td>6.9</td>
      <td>150.0</td>
      <td>0.0</td>
      <td>3.758667</td>
      <td>563.8</td>
      <td>1.764420</td>
      <td>0.144064</td>
      <td>3.113179</td>
      <td>2583.00</td>
      <td>463.863733</td>
      <td>46.942721</td>
      <td>26.090198</td>
      <td>1.994305e-57</td>
      <td>-0.274464</td>
      <td>-1.401921</td>
    </tr>
    <tr>
      <th>3</th>
      <td>PetalWidth</td>
      <td>0.1</td>
      <td>2.5</td>
      <td>150.0</td>
      <td>0.0</td>
      <td>1.198667</td>
      <td>179.8</td>
      <td>0.763161</td>
      <td>0.062312</td>
      <td>0.582414</td>
      <td>302.30</td>
      <td>86.779733</td>
      <td>63.667470</td>
      <td>19.236588</td>
      <td>3.209704e-42</td>
      <td>-0.104997</td>
      <td>-1.339754</td>
    </tr>
  </tbody>
</table>
</div>
</div>
<div class="cas-output-area"></div>
<p class="cas-results-performance"><small><span class="cas-elapsed">elapsed 0.0035s</span> &#183; <span class="cas-user">user 0.004s</span> &#183; <span class="cas-memory">mem 1.99MB</span></small></p>

## テーブルの所有者情報

テーブルの所有者に関する情報は userinfo メソッドを使います。

```python
out.casTable.userinfo()
```


<div class="cas-results-key"><b>&#167; userInfo</b></div>
<div class="cas-results-body">
<div>{'userId': 'dev@sas.com', 'providedName': 'dev@sas.com', 'uniqueId': 'dev@sas.com', 'groups': ['sas', 'openid', '_PDC_pdcesx13078'], 'providerName': 'OAuth/External PAM', 'anonymous': False, 'hostAccount': True, 'guest': False}</div>
</div>
<div class="cas-output-area"></div>
<p class="cas-results-performance"><small><span class="cas-elapsed">elapsed 0.000348s</span> &#183; <span class="cas-user">user 0.001s</span> &#183; <span class="cas-memory">mem 0.212MB</span></small></p>

## テーブルのカラムを確認する

カラムは columns プロパティに入っています。

```python
out.casTable.columns
# Index(['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth', 'Name'], dtype='object')
```

さらにデータ型などを知りたいときには dtypes を使います。

```python
out.casTable.dtypes
# SepalLength     double
# SepalWidth      double
# PetalLength     double
# PetalWidth      double
# Name           varchar
# dtype: object
```

まとめて確認する際にはinfoを使うのが便利です。

```python
out.casTable.info()
# CASTable('IRIS', caslib='CASUSER(dev@sas.com)')
# Data columns (total 5 columns):
#                N   Miss     Type
# SepalLength  150  False   double
# SepalWidth   150  False   double
# PetalLength  150  False   double
# PetalWidth   150  False   double
# Name         150  False  varchar
# dtypes: double(4), varchar(1)
# data size: 9200
# vardata size: 2000
# memory usage: 9232
```

## まとめ

CASTableはSAS Viyaを使う上での基本的なテーブルになります。データ分析を行う際には必須になりますので、ぜひ使い方を覚えてください。

[SAS for Developers | SAS](https://developer.sas.com/home.html)