casTableのサマリーをグラフ化する

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

機械学習を用いる際に専用のテーブル（casTable）を用いますが、今回はそのテーブルのサマリーを表示した際の各値の意味を解説します。

今回はステップバイステップでデータをグラフ化する流れを紹介します。

## データを取り込む

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

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

データを確認します。

```py
organics.casTable.summary()
```

| | Column | Min | Max | N | NMiss | Mean | Sum | Std | StdErr | Var | USS | CSS | CV | TValue | ProbT | Skewness | Kurtosis
|---|--------|-----|-----|---|-------|------|-----|-----|--------|-----|-----|-----|----|--------|-------|----------|----------|
| 0 | DOB | -15266.00 | 7190.00 | 22223.0 | 0.0 | -5877.324574 | -1.306118e+08 | 4825.522949 | 32.370026 | 2.328567e+07 | 1.285102e+12 | 5.174542e+11 | -82.104075 | -181.566881 | 0.0 | 0.077679 | -0.849240
| 1 | EDATE | 13933.00 | 13933.00 | 22223.0 | 0.0 | 13933.000000 | 3.096331e+08 | 0.000000 | 0.000000 | 0.000000e+00 | 4.314117e+12 | 0.000000e+00 | 0.000000 | NaN | NaN | NaN | NaN
| 2 | AGE | 18.00 | 79.00 | 20715.0 | 1508.0 | 53.797152 | 1.114408e+06 | 13.206048 | 0.091755 | 1.743997e+02 | 6.356449e+07 | 3.612516e+06 | 24.547858 | 586.312118 | 0.0 | -0.079830 | -0.843893
| 3 | LCDATE | -21914.00 | 13846.00 | 21942.0 | 281.0 | 11644.613937 | 2.555061e+08 | 2317.765457 | 15.647011 | 5.372037e+06 | 3.093138e+12 | 1.178679e+11 | 19.904185 | 744.206937 | 0.0 | -7.631565 | 98.238337
| 4 | ORGANICS | 0.00 | 3.00 | 22223.0 | 0.0 | 0.294740 | 6.550000e+03 | 0.562831 | 0.003776 | 3.167786e-01 | 8.970000e+03 | 7.039455e+03 | 190.958650 | 78.066014 | 0.0 | 2.021011 | 4.245531
| 5 | BILL | 0.01 | 296313.85 | 22223.0 | 0.0 | 4420.590041 | 9.823877e+07 | 7559.047522 | 50.706745 | 5.713920e+07 | 1.704021e+12 | 1.269747e+12 | 170.996348 | 87.179527 | 0.0 | 8.037186 | 184.871517
| 6 | ORGYN | 0.00 | 1.00 | 22223.0 | 0.0 | 0.247716 | 5.505000e+03 | 0.431696 | 0.002896 | 1.863613e-01 | 5.505000e+03 | 4.141322e+03 | 174.270256 | 85.541739 | 0.0 | 1.168908 | -0.633711
| 7 | AFFL | 0.00 | 34.00 | 21138.0 | 1085.0 | 8.711893 | 1.841520e+05 | 3.421125 | 0.023531 | 1.170409e+01 | 1.851702e+06 | 2.473894e+05 | 39.269588 | 370.233401 | 0.0 | 0.891684 | 2.096860
| 8 | LTIME | 0.00 | 39.00 | 21942.0 | 281.0 | 6.564670 | 1.440420e+05 | 4.657113 | 0.031440 | 2.168870e+01 | 1.421460e+06 | 4.758717e+05 | 70.942063 | 208.801826 | 0.0 | 2.282790 | 8.077622

## 一部のデータを取り出し

表示に利用するデータだけに絞り込みます。

```py
varlist = ['Age', 'BILL', 'ORGYN']
result = organics.casTable.summary(input=varlist)
```

各データのサマリーを取り出します。

```py
df = result['Summary']
```

そしてサマリーの中でも必要なデータだけを指定します。今回はMin、MeanそしてMaxの3つです。

```py
df.index = df['Column']
stackedDf = df[['Min', 'Mean', 'Max']].stack()
```

出力すると次のようになります。

```
print(stackedDf)
```

各カラムにおけるMin、Mean、Max値だけが抽出されます。

```
Column      
AGE     Min         18.000000
        Mean        53.797152
        Max         79.000000
BILL    Min          0.010000
        Mean      4420.590041
        Max     296313.850000
ORGYN   Min          0.000000
        Mean         0.247716
        Max          1.000000
dtype: float64
```

## ビジュアル化する

このデータをグラフ化するのに使えるのが `bokeh.charts` になります。

```py
from bokeh.charts import Bar, output_file, show
```

棒グラフの準備をします。

```py
p = Bar(df, 'Column', 
  values='Mean',
  color='#1f77b4',
  agg='mean',
  title='',
  xlabel='',
  ylabel='Frequency'
)
```

そしてファイルを用意して出力します。

```py
output_file('visual1.html')
show(p)
```

これでグラフが確認できるはずです。

<img width="1115" alt="graph1.png" src="https://qiita-image-store.s3.amazonaws.com/0/274479/9e03bf87-bcea-d1f9-61fa-209f08abf371.png">

----

サマリーをグラフ化する際には上記の手順でできるはずです。大量のデータをすべて閲覧するのは大変ですが、トレンドを掴むのであればサマリーを使うのが良いでしょう。