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


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

クラスのデータハンドラーを定義します。この時、transformersを使ってデータ型を指定できます。今回は日付(birthdate)について、CASの日付型への変換を指定します。

class MyDMH(dmh.CASDataMsgHandler):

def __init__(self):
self.data = [
('Alfred', 'M', 14, 69, 112.5, '1987-03-01'),
('Alice', 'F', 13, 56.5, 84, '1988-06-12'),
('Barbara', 'F', 13, 65.3, 98, '1988-12-13'),
('Carol', 'F', 14, 62.8, 102.5, '1987-04-17'),
('Henry', 'M', 14, 63.5, 102.5, '1987-01-30'),
]

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'),
dict(name='birthdate', label='Birth Date',
type='date', format='DATE', formattedlength=12),
]

transformers = {
'birthdate': dmh.str2cas_date,
}

super(MyDMH, self).__init__(vars, transformers=transformers)

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
Format
NFL
NFD

0
name
Name
1
varchar
7
7

0

1
sex
Sex
2
varchar
1
1

0

2
age
Age
3
int32
4
12

0

3
height
Height
4
double
8
12

0

4
weight
Weight
5
double
8
12

0

5
birthdate
Birth Date
6
date
4
12
DATE
0

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

§ Fetch

name
sex
age
height
weight
birthdate

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


まとめ

データ型を指定することで絞り込みや並び替えが正しく行えるようになります。今回のテクニックを覚えておくことで、データ分析がしやすくなるでしょう。