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