casTableを操作する方法

SAS ViyaはAIプラットフォームになります。Webブラウザ上で機械学習の設計、実行ができるStudioという環境も用意されていますが、開発者はプログラミングコードで開発することも可能です。プログラミング言語はJava/Python/R/SASが選べます。

機械学習を用いる際に専用のテーブル（casTable）を用いますが、今回はそのテーブルオブジェクト（Python版）でテーブルを検索する方法を紹介します。

## テーブルの作り方

テーブルはCSV、HTML、他のデータベースなどから作れます。

```py
out = sess.upload('Jupyter_Saved_Work/Data/iris.csv')
```

ファイルをアップロードした後、casTableとして取得します。

```
tbl = out.casTable
```

## ソートする

テーブルをソートする方法です。sort_valuesを使って別なオブジェクトを作ります。

```py
sorttbl = tbl.sort_values(['SepalLength', 'SepalWidth'])
```

データを確認します。ソートされているのが分かります。

```py
sorttbl.head(5)
```

| SepalLength | SepalWidth | PetalLength | PetalWidth | Name
|-----|-----|-----|-----|-----|-----|
| 0 | 4.3 | 3.0 | 1.1 | 0.1 | Iris-setosa
| 1 | 4.4 | 2.9 | 1.4 | 0.2 | Iris-setosa
| 2 | 4.4 | 3.0 | 1.3 | 0.2 | Iris-setosa
| 3 | 4.4 | 3.2 | 1.3 | 0.2 | Iris-setosa
| 4 | 4.5 | 2.3 | 1.3 | 0.3 | Iris-setosa

## 最後のデータを確認する

headは頭からのデータを出しますが、tailは逆に最後のデータを出力します。

```python
sorttbl.tail(5)
```

| SepalLength | SepalWidth | PetalLength | PetalWidth | Name
|-----|-----|-----|-----|-----|-----|
| 145 | 7.7 | 2.6 | 6.9 | 2.3 | Iris-virginica
| 146 | 7.7 | 2.8 | 6.7 | 2.0 | Iris-virginica
| 147 | 7.7 | 3.0 | 6.1 | 2.3 | Iris-virginica
| 148 | 7.7 | 3.8 | 6.7 | 2.2 | Iris-virginica
| 149 | 7.9 | 3.8 | 6.4 | 2.0 | Iris-virginica

## 一部のカラムのデータだけを見る

カラムを取り出して、そのカラムのデータだけを閲覧できます。

```py
col = sorttbl['SepalWidth']
col.head(3)
```

1カラムのデータだけ見られます。

```
0    3.8
1    2.6
2    2.8
Name: SepalWidth, dtype: float64
```

複数のカラムを指定することもできます。

```py
cols = sorttbl[['SepalWidth', 'PetalWidth', 'Name']]
cols.head(3)
```

これで3つのカラムが取れます。

| | SepalWidth | PetalWidth | Name
|---|---|---|---|
| 0 | 3.8 | 2.0 | Iris-virginica
| 1 | 2.6 | 2.3 | Iris-virginica
| 2 | 2.8 | 2.0 | Iris-virginica

locメソッドを使うと、あるカラムからあるカラムまでのデータを取得できます。

```
sorttbl.loc[:, 'SepalLength':'PetalLength'].head()
```

この実行結果は以下のようになります。

| | SepalLength | SepalWidth | PetalLength
|---|---|---|---|
| 0 | 7.9 | 3.8 | 6.4
| 1 | 7.7 | 2.6 | 6.9
| 2 | 7.7 | 2.8 | 6.7
| 3 | 7.7 | 3.0 | 6.1
| 4 | 7.7 | 3.8 | 6.7

icocはカラム名ではなくインデックスで指定します。0番目のカラムから3つのカラムといった指定をします。

```py
sorttbl.iloc[:, 0:3].head()
```

| | SepalLength | SepalWidth | PetalLength
|---|---|---|---|
| 0 | 7.9 | 3.8 | 6.4
| 1 | 7.7 | 2.6 | 6.9
| 2 | 7.7 | 2.8 | 6.7
| 3 | 7.7 | 3.0 | 6.1
| 4 | 7.7 | 3.8 | 6.7


ixでは名前とカラム数を組み合わせます。

```py
sorttbl.ix[:, 0:'PetalLength'].head()
```

| | SepalLength | SepalWidth | PetalLength
|---|---|---|---|
| 0 | 7.9 | 3.8 | 6.4
| 1 | 7.7 | 2.6 | 6.9
| 2 | 7.7 | 2.8 | 6.7
| 3 | 7.7 | 3.0 | 6.1
| 4 | 7.7 | 3.8 | 6.7

## 検索条件を指定する

whereに相当するデータの取得方法です。検索条件をPythonのコードとして表現します。

```py
expr = sorttbl.PetalLength > 6.5
newtbl = sorttbl[expr]
newtbl.head()
```

これで検索条件にマッチするデータだけを取り出せます。

| | SepalLength | SepalWidth | PetalLength | PetalWidth | Name
|---|---|---|---|---|---|
| 0 | 7.7 | 2.6 | 6.9 | 2.3 | Iris-virginica
| 1 | 7.7 | 2.8 | 6.7 | 2.0 | Iris-virginica
| 2 | 7.7 | 3.8 | 6.7 | 2.2 | Iris-virginica
| 3 | 7.6 | 3.0 | 6.6 | 2.1 | Iris-virginica

同じ条件は以下のようにも書けます。

```py
newtbl = sorttbl[sorttbl.PetalLength > 6.5]
```

### 検索条件の組み合わせ

AND条件の書き方です。

```py
newtbl = sorttbl[(sorttbl.PetalLength > 6.5) & (sorttbl.PetalWidth > 2.0)]
```

これで二つの条件による絞り込みができます。

| | SepalLength | SepalWidth | PetalLength | PetalWidth | Name
|---|---|---|---|---|---|
| 0 | 7.7 | 2.6 | 6.9 | 2.3 | Iris-virginica
| 2 | 7.7 | 3.8 | 6.7 | 2.2 | Iris-virginica
| 3 | 7.6 | 3.0 | 6.6 | 2.1 | Iris-virginica

----

ViyaのPythonライブラリはデータベースをラッピングし、柔軟にデータの絞り込みや並び替え、検索条件を指定できます。14日間のトライアルも提供していますので、ぜひお試しください。

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