Posted at

casTableに条件を付けてデータを取り出す

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

機械学習を用いる際に専用のテーブル(casTable)を用いますが、今回はそのテーブルオブジェクト(Python版)で条件を指定してデータを取得する方法を解説します。


テーブルの作り方

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

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

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

iris = out.casTable


条件付けはwhereを使う

SQLと同じようにcasTableでもwhereが使えます。ただし、これはPythonなので、O/Rマッパー風に使います。そこで set_params を使います。

iris.set_params('where', 'SepalLength > 6.8')

またはparamsパラメータに直接設定します。

iris.params.where = 'Name = "Iris-versicolor"'

なお、where を新しく設定すると上書きになってしまうので注意してください。以下の場合、下の条件が有効になります。

iris.set_params('where', 'SepalLength > 6.8')

iris.set_params('where', 'Name = "Iris-versicolor"')

そのため、複数条件を指定する場合には and を使います。

iris.set_params('where', 'SepalLength > 6.8 and Name = "Iris-versicolor"')


計算式を入れる

あるカラム同士を計算した結果を結果に出したい場合には computedvars という定義をします。

iris.set_params('computedvars', ['length_factor'])

そして computedvarsprogram を定義して、カラムの値を指定します。

iris.set_params('computedvarsprogram', 'length_factor = SepalLength * PetalLength')

そうすると結果にlength_factorが追加されます。

iris.fetch(to=3)

SepalLength
SepalWidth
PetalLength
PetalWidth
Name
length_factor

0
7.0
3.2
4.7
1.4
Iris-versicolor

1
6.4
3.2
4.5
1.5
Iris-versicolor

2
6.9
3.1
4.9
1.5
Iris-versicolor


条件式を確認する

条件式が設定されているかどうかは has_param で確認できます。

iris.has_params('where')

=> True

その内容は get_param で確認できます。

iris.get_param('where')

=> 'Name = "Iris-versicolor"'


条件式を削除する

whereを削除する場合には del を使います。

del iris.params.where

これでwhere条件が消えます。

iris.has_params('where')

=> False


機械学習を実行する前のデータクレンジングなどの時点において、データを細かく確認したい時があるかと思います。whereの他、group byやcomputedvarsなども用意してありますので、これらをぜひ使いこなしてください。