Posted at

casTableのヒストグラムをグラフ化する

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

機械学習を用いる際に専用のテーブル(casTable)を用いますが、今回はグループ化したデータのヒストグラム(分布)を確認する方法を解説します。


データを取り込む

今回使うのは organics.sas7bdat です。年齢、性別ごとに健康状態などが入ったデータです。まずこのデータを読み込みます。

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


グループ化するカラムを指定する

今回は複数カラムをグルーピングに指定します。

organics.casTable.groupby = ['NGroup', 'Gender']

result = organics.casTable.summary(inputs='Age')
result3 = result.concat_bygroups()
result3['Summary'][['N', 'Min', 'Mean', 'Max', 'Std']]

そうするとデータは以下のように表示されます。

Descriptive Statistics for ORGANICS




N
Min
Mean
Max
Std


NGROUP
GENDER











57.0
29.0
54.298246
78.0
12.562650


F
365.0
24.0
50.682192
79.0
13.316223


M
155.0
23.0
53.858065
78.0
13.177331


U
43.0
18.0
52.627907
78.0
15.104435


A

228.0
27.0
58.070175
79.0
10.859308


F
892.0
19.0
56.383408
79.0
13.528325


M
452.0
24.0
57.488938
79.0
11.934127


U
153.0
21.0
59.150327
79.0
11.843148


B

451.0
20.0
56.416851
79.0
12.255215


F
2079.0
19.0
56.823954
79.0
12.702405


M
1026.0
18.0
57.592593
79.0
12.522748


U
307.0
28.0
57.749186
79.0
11.662981


U

5.0
27.0
56.800000
76.0
18.212633


F
32.0
27.0
47.500000
77.0
16.372676


M
12.0
26.0
46.250000
57.0
10.172378


U
1.0
54.0
54.000000
54.0
NaN


ヒストグラムを取り出す

ヒストグラムは histogram メソッドを使います。

result = organics.casTable.histogram(reqpacks=[{'nicebinning':False, 'nbins':10}], inputs=['BILL'])

key関数を使うとデータが分かれているのが分かります。

list(result.keys())

実行結果です。

['ByGroupInfo',

'ByGroup1.BinDetails',
'ByGroup2.BinDetails',
'ByGroup3.BinDetails',
'ByGroup4.BinDetails',
'ByGroup5.BinDetails',
'ByGroup6.BinDetails',
'ByGroup7.BinDetails',
'ByGroup8.BinDetails',
'ByGroup9.BinDetails',
'ByGroup10.BinDetails',
'ByGroup11.BinDetails',
'ByGroup12.BinDetails',
'ByGroup13.BinDetails',
'ByGroup14.BinDetails',
'ByGroup15.BinDetails',
'ByGroup16.BinDetails',
'ByGroup17.BinDetails',
'ByGroup18.BinDetails',
'ByGroup19.BinDetails',
'ByGroup20.BinDetails',
'ByGroup21.BinDetails']

例えば result['ByGroup1.BinDetails'] を見ると以下のようになっています。

Bin Details for ORGANICS




Variable
BinSetId
BinId
BinLowerBnd
BinUpperBnd
BinWidth
NInBin
Mean
Std
Min
Max
MidPoint
Percent


NGROUP
GENDER

















A
F
BILL
1
1
0.010
7000.009
6999.999
734
2608.377643
2396.778681
0.01
7000.00
3500.0095
77.100840


F
BILL
1
2
7000.009
14000.008
6999.999
124
10506.032016
1712.541126
7100.00
14000.00
10500.0085
13.025210


F
BILL
1
3
14000.008
21000.007
6999.999
54
18051.901481
2189.119118
14105.32
20681.55
17500.0075
5.672269


F
BILL
1
4
21000.007
28000.006
6999.999
19
24540.320526
2133.572237
21008.63
27497.04
24500.0065
1.995798


F
BILL
1
5
28000.006
35000.005
6999.999
11
31520.056364
2326.827210
28113.08
35000.00
31500.0055
1.155462


F
BILL
1
6
35000.005
42000.004
6999.999
4
36440.122500
1095.197998
35465.20
38000.00
38500.0045
0.420168


F
BILL
1
7
42000.004
49000.003
6999.999
4
45857.757500
2592.275555
42160.04
48069.40
45500.0035
0.420168


F
BILL
1
8
49000.003
56000.002
6999.999
1
50000.000000
NaN
50000.00
50000.00
52500.0025
0.105042


F
BILL
1
9
56000.002
63000.001
6999.999
0
NaN
NaN
NaN
NaN
59500.0015
0.000000


F
BILL
1
10
63000.001
70000.000
6999.999
1
70000.000000
NaN
70000.00
70000.00
66500.0005
0.105042

そしてこれを棒グラフにしてみます。利用するのはbokeh.chartsです。

from bokeh.charts import Bar, Scatter, output_file, show, Area

棒グラフを定義します。

p = Bar(result['ByGroup1.BinDetails'], 'MidPoint', values='Percent', color='#1f77b4', agg='mean', title='', legend=None, xlabel='Bill', ylabel='Percent')

後はHTMLに出力するだけです。

output_file('visual2.html')

show(p)

これでグラフが描画されます。

Screenshot_ 2019-01-23 16.22.03.png


データの偏りなどを調べる際にヒストグラムは便利です。ぜひお試しください。