SAS Viyaでデータの分布を確認する

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

機械学習を用いる際に専用のテーブル（casTable）を用いますが、今回はデータの分布を調べる方法を紹介します。

## データを確認する

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

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

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

```python
organics.casTable.head()
```

<table border="1" class="dataframe"><caption>Selected Rows from Table ORGANICS</caption>
  <thead>
    <tr style="text-align: right;">
      <th title=""></th>
      <th title="Customer Id">CUSTID</th>
      <th title="GENDER">GENDER</th>
      <th title="Date of Birth">DOB</th>
      <th title="Date data taken from data base">EDATE</th>
      <th title="Age">AGE</th>
      <th title="Age Group 1">AGEGRP1</th>
      <th title="Age Group 2">AGEGRP2</th>
      <th title="TV Region">TV_REG</th>
      <th title="Neighborhood Group">NGROUP</th>
      <th title="Type of Residential Neighborhood">NEIGHBORHOOD</th>
      <th title="Loyalty card application date">LCDATE</th>
      <th title="Number of Organic Products Purchased">ORGANICS</th>
      <th title="Total Amount Spent">BILL</th>
      <th title="Geographic Region">REGION</th>
      <th title="Customer Loyalty Status">CLASS</th>
      <th title="Organics Purchased?">ORGYN</th>
      <th title="Affluence grade">AFFL</th>
      <th title="Years as Loyalty Card Member">LTIME</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>0000000140</td>
      <td>U</td>
      <td>1921-09-16</td>
      <td>1998-02-23</td>
      <td>76.0</td>
      <td>60-80</td>
      <td>70-80</td>
      <td>Wales &amp; West</td>
      <td>C</td>
      <td>16</td>
      <td>1994-11-07</td>
      <td>0.0</td>
      <td>16000.00</td>
      <td>Midlands</td>
      <td>Gold</td>
      <td>0.0</td>
      <td>10.0</td>
      <td>4.0</td>
    </tr>
    <tr>
      <th>1</th>
      <td>0000000620</td>
      <td>U</td>
      <td>1949-02-12</td>
      <td>1998-02-23</td>
      <td>49.0</td>
      <td>40-60</td>
      <td>40-50</td>
      <td>Wales &amp; West</td>
      <td>D</td>
      <td>35</td>
      <td>1993-06-04</td>
      <td>0.0</td>
      <td>6000.00</td>
      <td>Midlands</td>
      <td>Gold</td>
      <td>0.0</td>
      <td>4.0</td>
      <td>5.0</td>
    </tr>
  </tbody>
</table>

## 表示するデータを指定する

今回は年齢ごとにデータを確認します。

```py
organics.casTable.percentile(inputs='AGE')
```

データが出力されます。

<div class="cas-results-key"><b>&#167; Percentile</b></div>
<div class="cas-results-body">
  <div>
    <table border="1" class="dataframe"><caption>Percentiles for ORGANICS</caption>
      <thead>
        <tr style="text-align: right;">
          <th title=""></th>
          <th title="Analysis Variable">Variable</th>
          <th title="Percentile">Pctl</th>
          <th title="Value">Value</th>
          <th title="Converged">Converged</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th>0</th>
          <td>AGE</td>
          <td>25.0</td>
          <td>44.0</td>
          <td>1.0</td>
        </tr>
        <tr>
          <th>1</th>
          <td>AGE</td>
          <td>50.0</td>
          <td>54.0</td>
          <td>1.0</td>
        </tr>
        <tr>
          <th>2</th>
          <td>AGE</td>
          <td>75.0</td>
          <td>64.0</td>
          <td>1.0</td>
        </tr>
      </tbody>
    </table>
  </div>
</div>

さらにデータをその分布に応じて分割します。

```py
organics.casTable.percentile(inputs='AGE', values=list(range(5,95,5)))
```

そうするとデータが5%刻みで分割されたのが分かるでしょう。

<div class="cas-results-key"><b>&#167; Percentile</b></div>
<div class="cas-results-body">
  <div>
    <table border="1" class="dataframe"><caption>Percentiles for ORGANICS</caption>
      <thead>
        <tr style="text-align: right;">
          <th title=""></th>
          <th title="Analysis Variable">Variable</th>
          <th title="Percentile">Pctl</th>
          <th title="Value">Value</th>
          <th title="Converged">Converged</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th>0</th>
          <td>AGE</td>
          <td>5.0</td>
          <td>32.0</td>
          <td>1.0</td>
        </tr>
        <tr>
          <th>1</th>
          <td>AGE</td>
          <td>10.0</td>
          <td>36.0</td>
          <td>1.0</td>
        </tr>
        <tr>
          <th>17</th>
          <td>AGE</td>
          <td>90.0</td>
          <td>72.0</td>
          <td>1.0</td>
        </tr>
      </tbody>
    </table>
  </div>
</div>

さらにデータを性別でグルーピングします。元々の表では両性別が混在しています。

```py
organics.casTable.groupby = ['GENDER']
result = organics.casTable.percentile(inputs='AGE', values=list(range(5,95,5)))
```

そしてそのデータをグラフ出力します。

```py
df = result.concat_bygroups()['Percentile']
df.reset_index(level=0, inplace=True)
p = Scatter(df, x='Pctl', y='Value', legend='top_center', marker='GENDER')
output_file('scatter.html')
show(p)
```

そうすると性別ごと（UはUnknown）も含めてデータの分布が可視化されます。

![Screenshot_ 2019-02-08 16.32.33.png](https://qiita-image-store.s3.amazonaws.com/0/274479/4b7b932c-b514-0054-f13a-96ba75f3855c.png)


----

Pythonを使うことでデータの傾向が可視化され、分析を行う前に全体像が把握できるようになります。ぜひPythonライブラリを使ってSAS Viyaの分析に役立ててください。