Python
SAS
機械学習
AI

グルーピングしたデータごとにヒストグラムを確認する

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


データをグルーピングする

まずデータをグルーピングします。

organics.casTable.groupby = ['GENDER', 'AGEGRP1']

そしてヒストグラムを取り出します。

result = organics.casTable.histogram(

reqpacks=[{'nicebinning': False, 'nbins': 20}],
inputs=['AFFL']
)

そうするとGENDERとAGEGRP1ごとにデータが分かれます。結果が分かれているのに気づくでしょう。

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']

情報を確認します。

result['ByGroupInfo']

結果は以下のようになっています(一部)。

ByGroupInfo



GENDER
GENDER_f
AGEGRP1
AGEGRP1_f
_key_




0
F
F
<20
<20
F<20


1
F
F
20-40
20-40
F20-40


2
F
F
40-60
40-60
F40-60


可視化する

ではこのヒストグラムを可視化します。条件に応じて4パターン取り出します。

all_df = {

'GENDER=Female, AGEGRP1=<20': result['ByGroup1.BinDetails'],
'GENDER=Female, AGEGRP1=20-40': result['ByGroup2.BinDetails'],
'GENDER=Female, AGEGRP1=40-60': result['ByGroup3.BinDetails'],
'GENDER=Female, AGEGRP1=60-80': result['ByGroup4.BinDetails'],
}

可視化するためにpandasなどを読み込みます。

import pandas as pd

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

データをグラフに追加します。

all_pic = []

for this_title in all_df:
this_pic = Bar(all_df[this_title], 'MidPoint', values='Percent',
color='#1f77b4', agg='mean', title=this_title, legend=None,
xlabel='AFFL', ylabel='Percent'
)
all_pic.append(this_pic)
p = gridplot([all_pic[0], all_pic[1]], [all_pic[2], all_pic[3]])
output_file('grid.html')
show(p)

こうするとグラフが4つ描かれたHTMLファイルが出力されます。

Screenshot_ 2019-02-08 16.22.31.png


まとめ

ByGroupInfoを見ることでデータ構造が分かります。そして各グルーピングされたデータごとに傾向を見ることで、大筋でのデータ把握ができるようになります。本格的な分析を行う前に行うのがお勧めです。