Posted at

SAS Viyaでコードからデータソースを追加する

SAS ViyaはAIプラットフォームです。その元になるデータソースとして、CSVやExcel、HTMLなどを指定できますが、さらに独自のクラス(Pythonのコード)から取り込むこともできます。今回はその手順を紹介します。


Viyaに接続する

まず SAS Viyaへ接続します。

from swat import *

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

さらにデータハンドリングを行うライブラリを読み込みます。

from swat.cas import datamsghandlers as dmh


クラス(データハンドラー)を用意する

class MyDMH(dmh.CASDataMsgHandler):

def __init__(self):
self.data = [
('Alfred', 'M', 14, 69, 112.5),
('Alice', 'F', 13, 56.5, 84),
('Barbara', 'F', 13, 65.3, 98),
('Carol', 'F', 14, 62.8, 102.5),
('Henry', 'M', 14, 63.5, 102.5),
]

vars = [
dict(name='name', label='Name', type='varchar'),
dict(name='sex', label='Sex', type='varchar'),
dict(name='age', label='Age', type='int32'),
dict(name='height', label='Height', type='double'),
dict(name='weight', label='Weight', type='double'),
]

super(MyDMH, self).__init__(vars)

def getrow(self, row):
try:
return self.data[row]
except IndexError:
return


クラスのインスタンスを作成する

作成したクラスのインスタンスを作成します。

mydmh = MyDMH()


インスタンスを取り込む

作成したインスタンスをSAS Viyaに取り込みます。

conn.addtable(table='myclass', caslib='casuser', replace=True, **mydmh.args.addtable)


データを確認する

取り込んだデータを確認します。

conn.columninfo(table=dict(name='myclass', caslib='casuser'))

§ ColumnInfo





Column
Label
ID
Type
RawLength
FormattedLength
NFL
NFD




0
name
Name
1
varchar
7
7
0
0


1
sex
Sex
2
varchar
1
1
0
0


2
age
Age
3
int32
4
12
0
0


3
height
Height
4
double
8
12
0
0


4
weight
Weight
5
double
8
12
0
0






elapsed 0.000619s · mem 0.702MB

conn.fetch(table=dict(name='myclass', caslib='casuser'), sastypes=False)

§ Fetch



Selected Rows from Table MYCLASS



name
sex
age
height
weight




0
Alfred
M
14
69.0
112.5


1
Alice
F
13
56.5
84.0


2
Barbara
F
13
65.3
98.0


3
Carol
F
14
62.8
102.5


4
Henry
M
14
63.5
102.5






elapsed 0.00131s · sys 0.001s · mem 0.848MB


まとめ

この方法を使うと、任意のデータをインスタンスに追加し、SAS Viyaに取り込めます。スクレイピング、社内データ、CSVなどではない不定形データを取り扱う際に使ってみてください。