Python
機械学習
AI

SAS Viyaでデータをカウントする

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

機械学習を用いる際に専用のテーブル(casTable)を用いますが、今回はデータのカウントについて紹介します。


データを確認する

今回は organics.sas7bdat を用います。

organics = sess.upload('organics.sas7bdat')

データは以下のようになっています。

organics.casTable.head()

Selected Rows from Table ORGANICS



CUSTID
GENDER
DOB
EDATE
AGE
AGEGRP1
AGEGRP2
TV_REG
NGROUP
NEIGHBORHOOD
LCDATE
ORGANICS
BILL
REGION
CLASS
ORGYN
AFFL
LTIME




0
0000000140
U
1921-09-16
1998-02-23
76.0
60-80
70-80
Wales & West
C
16
1994-11-07
0.0
16000.00
Midlands
Gold
0.0
10.0
4.0


1
0000000620
U
1949-02-12
1998-02-23
49.0
40-60
40-50
Wales & West
D
35
1993-06-04
0.0
6000.00
Midlands
Gold
0.0
4.0
5.0


カウントを取る

カウントは district メソッドを使います。

organics.distinct()

結果は例えば以下のように返ってきます。

§ Distinct



Distinct Counts for ORGANICS



Column
NDistinct
NMiss
Trunc




0
CUSTID
22223.0
0.0
0.0


1
GENDER
4.0
2512.0
0.0


2
DOB
12868.0
0.0
0.0


3
EDATE
1.0
0.0
0.0


4
AGE
63.0
1508.0
0.0


5
AGEGRP1
5.0
1508.0
0.0


6
AGEGRP2
8.0
1508.0
0.0


7
TV_REG
14.0
465.0
0.0


8
NGROUP
8.0
674.0
0.0


9
NEIGHBORHOOD
56.0
674.0
0.0


10
LCDATE
3535.0
281.0
0.0


11
ORGANICS
4.0
0.0
0.0


12
BILL
2606.0
0.0
0.0


13
REGION
6.0
465.0
0.0


14
CLASS
4.0
0.0
0.0


15
ORGYN
2.0
0.0
0.0


16
AFFL
34.0
1085.0
0.0


17
LTIME
40.0
281.0
0.0






elapsed 0.0482s · user 0.104s · sys 0.005s · mem 11.4MB

データ数によって絞り込みも行えます。

organics.distinct(maxnvals=500)

§ Distinct



Distinct Counts for ORGANICS



Column
NDistinct
NMiss
Trunc




0
CUSTID
500.0
0.0
1.0


1
GENDER
4.0
2512.0
0.0


2
DOB
500.0
0.0
1.0


3
EDATE
1.0
0.0
0.0


4
AGE
63.0
1508.0
0.0


5
AGEGRP1
5.0
1508.0
0.0


6
AGEGRP2
8.0
1508.0
0.0


7
TV_REG
14.0
465.0
0.0


8
NGROUP
8.0
674.0
0.0


9
NEIGHBORHOOD
56.0
674.0
0.0


10
LCDATE
500.0
281.0
1.0


11
ORGANICS
4.0
0.0
0.0


12
BILL
500.0
0.0
1.0


13
REGION
6.0
465.0
0.0


14
CLASS
4.0
0.0
0.0


15
ORGYN
2.0
0.0
0.0


16
AFFL
34.0
1085.0
0.0


17
LTIME
40.0
281.0
0.0






elapsed 0.0299s · user 0.075s · sys 0.003s · mem 5.96MB


結果を別テーブルにする

以下のように書くと結果を別テーブルに出力できます。

result = sess.CASTable('distinctOutput', replace=True)

organics.distinct(maxnvals=500, casout=result)
result.head()

結果は以下のようになります。


Selected Rows from Table DISTINCTOUTPUT



_Column_
_NDis_
_NMiss_
_Truncated_




0
CUSTID
0.0
0.0
1.0


1
GENDER
4.0
2512.0
0.0


2
DOB
0.0
0.0
1.0


3
EDATE
1.0
0.0
0.0


4
AGE
63.0
1508.0
0.0

さらにこの結果テーブルをカウントごとに分類してみます。

out1 = organics.columninfo()['ColumnInfo']

out2 = organics.distinct(maxnvals=1000)['Distinct']
out3 = pd.merge(out1, out2, left_on='Column', right_on='Column', how='left')
varlist = {'cats': [], 'conts': [], 'others': []}
for index, row in out3.iterrows():
varname = row['Column'].lower()
vartype = row['Type'].lower()
if vartype == 'char' and row['NDistinct'] <= 128:
varlist['cats'].append(varname)
elif vartype == 'double' and row['NDistinct'] <= 16:
varlist['cats'].append(varname)
elif vartype == 'double' and row['NDistinct'] > 16:
varlist['conts'].append(varname)
else:
varlist['others'].append(varname)
print(varlist)

{

'cats': ['gender', 'edate', 'agegrp1', 'agegrp2', 'tv_reg', 'ngroup', 'neighborhood', 'organics', 'region', 'class', 'orgyn'],
'conts': ['dob', 'age', 'lcdate', 'bill', 'affl', 'ltime'],
'others': ['custid']
}


まとめ

Pythonと組み合わせることで分析とデータの傾向を確認するのが簡単になります。ぜひご利用ください。