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


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ファイルが出力されます。

まとめ

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