CASTableのカラム一覧&データ一覧を取得する

[SAS Viya](https://www.sas.com/ja_jp/software/viya.html)はAIプラットフォームです。PythonやJava、Rなどの言語を通して利用できます。そのSAS Viyaの中で使われているのがCASTableというテーブルオブジェクトです（CASはCloud Analytic Servicesの略です）。今回はCASTableのカラム情報を様々な方法で取得してみます。

## データベースからテーブルを取得する

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

```py
import swat
conn = swat.CAS('server-name.mycompany.com', 5570, 'username', 'password')
```

次にCASTableを取得します。今回はIRISデータのCSVを利用します。

```py
tbl = conn.loadtable('data/iris.csv', caslib='casuser').casTable
```

## カラム名だけを取得する

カラム名だけを取得するのは `for in` でOKです。

```py
for col in tbl:
    print(col)
```

以下のように出力されます。

```
sepal_length
sepal_width
petal_length
petal_width
species
```

## カラム名とインデックスを取得する

カラム名に加えてインデックスも取得する場合は `enumerate` 関数を使います。

```
for i, col in enumerate(tbl):
    print(i, col)
```

以下のように出力されます。

```
0 sepal_length
1 sepal_width
2 petal_length
3 petal_width
4 species
```

## カラム名とカラムの型を取得する

カラム名に加えて型も取得する場合は `zip` 関数を使います。

```py
for col, dtype in zip(tbl, tbl.dtypes):
    print(col, dtype)
```

以下のように出力されます。

```
sepal_length double
sepal_width double
petal_length double
petal_width double
species varchar
```

## CASColumnとして取得する

より細かい情報が取得できる `CASColumn` として取得する場合には `iteritems` メソッドを使います。

```py
for col, obj in tbl.iteritems():
    print(col, obj)
    print('')
```

以下のように出力されます。

```
sepal_length CASColumn('DATA.IRIS', caslib='CASUSER(username)')['sepal_length'].sort_values(['sepal_length', 'sepal_width'], ascending=[False, True])

sepal_width CASColumn('DATA.IRIS', caslib='CASUSER(username)')['sepal_width'].sort_values(['sepal_length', 'sepal_width'], ascending=[False, True])

petal_length CASColumn('DATA.IRIS', caslib='CASUSER(username)')['petal_length'].sort_values(['sepal_length', 'sepal_width'], ascending=[False, True])

petal_width CASColumn('DATA.IRIS', caslib='CASUSER(username)')['petal_width'].sort_values(['sepal_length', 'sepal_width'], ascending=[False, True])

species CASColumn('DATA.IRIS', caslib='CASUSER(username)')['species'].sort_values(['sepal_length', 'sepal_width'], ascending=[False, True])
```

## データを詳細に取得する

次にデータを行ごとに取得する方法です。まずは `iterrows` メソッドを使った場合です。

```py
for row in tbl.iterrows():
    print(row)
```

以下のように出力されます。全部で150行あります。

```
(0, sepal_length          7.9
sepal_width           3.8
petal_length          6.4
petal_width             2
species         virginica
Name: 0, dtype: object)
(1, sepal_length          7.7
sepal_width           2.6
petal_length          6.9
petal_width           2.3
species         virginica
  :
Name: 148, dtype: object)
(149, sepal_length       4.3
sepal_width          3
petal_length       1.1
petal_width        0.1
species         setosa
Name: 149, dtype: object)
```

次に `itertuples` メソッドを使った場合です。

```py
for row in tbl.itertuples():
    print(row)
```

結果は以下のようになり、値だけが返ってきます。

```
(0, 7.9000000000000004, 3.7999999999999998, 6.4000000000000004, 2.0, 'virginica')
(1, 7.7000000000000002, 2.6000000000000001, 6.9000000000000004, 2.2999999999999998, 'virginica')
  :
(148, 4.4000000000000004, 3.2000000000000002, 1.3, 0.20000000000000001, 'setosa')
(149, 4.2999999999999998, 3.0, 1.1000000000000001, 0.10000000000000001, 'setosa')
```

## まとめ

カラム情報を取得するにも様々な方法が用意されています。必要に応じて使い分けてください。

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