LoginSignup
0
0

More than 3 years have passed since last update.

SAS Viyaに取り込む際のデータ形式を指定する

Posted at

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

まとめ

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0