SAS Viyaで回帰分析モデルを試す（その3：データを絞り込んで表示する）

SAS Viyaでは様々なアクションセットが用意されており、データ分析を容易に行えるようになっています。今回はその一つ、元データの絞り込み条件を指定しながら回帰分析モデルを試す方法を紹介します。なお、この処理はSAS Viyaのデモアカウントでも行えますので、ぜひお試しください。

## データのアップロード

元のデータは以下のURLに用意してあります。ダウンロードしてください。

https://raw.githubusercontent.com/sassoftware/sas-viya-programming/master/data/cars.csv

そしてSAS ViyaのJupyter Notebookでアップロードします。

## SAS Viyaへの接続

まずSAS Viyaに接続します。認証情報はあなたのものに書き換えてください。

```python
cashost='localhost'
casport=5570
useremail='dev@sas.com'
userpassword='xxxxxxxxxxx'
casauth='~/.authinfo'
conn = CAS(cashost, casport, useremail, userpassword, caslib="casuser")
```

## データの読み込み

次に先ほどアップロードしたデータを読み込みます。

```python
cars = conn.upload('cars.csv').casTable
```

カラム情報は次のようになっています。

```python
print(cars.columninfo());
```

出力結果です。

```
[ColumnInfo]

          Column  ID     Type  RawLength  FormattedLength  NFL  NFD
 0          Make   1  varchar         13               13    0    0
 1         Model   2  varchar         39               39    0    0
 2          Type   3  varchar          6                6    0    0
 3        Origin   4  varchar          6                6    0    0
 4    DriveTrain   5  varchar          5                5    0    0
 5          MSRP   6   double          8               12    0    0
 6       Invoice   7   double          8               12    0    0
 7    EngineSize   8   double          8               12    0    0
 8     Cylinders   9   double          8               12    0    0
 9    Horsepower  10   double          8               12    0    0
 10     MPG_City  11   double          8               12    0    0
 11  MPG_Highway  12   double          8               12    0    0
 12       Weight  13   double          8               12    0    0
 13    Wheelbase  14   double          8               12    0    0
 14       Length  15   double          8               12    0    0

+ Elapsed: 0.0014s, user: 0.001s, mem: 0.7mb
```

## アクションセットを読み込む

回帰分析のアクションセットを読み込みます。

```python
conn.loadactionset('regression')
```

## モデルを作る

モデルを定義します。ターゲットと入力値を指定します。その際にデータの絞り込みも行ってみます。

```py
cars.where = 'MSRP < 100000 and MPG_City < 40'
result1 = conn.CASTable('cas.MSRPPrediction2')
result1.replace = True
```

そして回帰分析モデルを取得します。

```py
linear1 = cars.Glm()
linear1.target = 'MSRP'
linear1.inputs = ['MPG_City']
linear1.output.casout = result1
linear1.output.copyVars = 'ALL'
linear1.output.pred = 'Predicted_MSRP'
linear1.output.resid = 'Presidual_MSRP'
linear1.output.lcl = 'LCL_MSRP'
linear1.output.ucl = 'UCL_MSRP'
```

同じようにクエリを指定する方法もあります。

```py
linear1 = cars.query('MSRP < 100000 and MPG_City < 40').Glm()
out1 = result1.to_frame()
```

このデータ（out1）は以下のようになります（一部）。

```
Selected Rows from Table CAS.MSRPPREDICTION2

     Predicted_MSRP  Presidual_MSRP      LCL_MSRP      UCL_MSRP        Make  \
0      38099.925698    -1154.925698  12333.085214  63866.766182       Acura   
1      22780.447626     1039.552374  -3001.031835  48561.927088       Acura   
..              ...             ...           ...           ...         ...   
419    35911.428831     1648.571169  10152.411504  61670.446157       Volvo   
420    31534.435096     6195.564904   5781.150241  57287.719951       Volvo   

                                Model    Type  Origin DriveTrain     MSRP  \
0                                 MDX     SUV    Asia        All  36945.0   
1                      RSX Type S 2dr   Sedan    Asia      Front  23820.0   
..                                ...     ...     ...        ...      ...   
419                         S60 R 4dr   Sedan  Europe        All  37560.0   
420                       S80 2.9 4dr   Sedan  Europe      Front  37730.0   

     Invoice  EngineSize  Cylinders  Horsepower  MPG_City  MPG_Highway  \
0    33337.0         3.5        6.0       265.0      17.0         23.0   
1    21761.0         2.0        4.0       200.0      24.0         31.0   
..       ...         ...        ...         ...       ...          ...   
419  35382.0         2.5        5.0       300.0      18.0         25.0   
420  35542.0         2.9        6.0       208.0      20.0         28.0   

     Weight  Wheelbase  Length  
0    4451.0      106.0   189.0  
1    2778.0      101.0   172.0  
..      ...        ...     ...  
419  3571.0      107.0   181.0  
420  3576.0      110.0   190.0  

[421 rows x 19 columns]
```

## 可視化する

さらにこのモデルを可視化します。

```py
p = Scatter(out1, x='Predicted_MSRP', y='Presidual_MSRP', color='Origin', marker='Origin')
output_file('scatter3.html')
show(p)
```

以下のようなグラフが出力されるはずです。

![Screenshot_ 2019-03-20 15.07.04.png](https://qiita-image-store.s3.amazonaws.com/0/274479/bc58fba2-fbb9-f6e6-1ea1-406855c17680.png)

## まとめ

データの分析、可視化は大変そうに感じますがSAS Viyaを使うことでストレスなく素早く可視化まで行えます。[SAS for Developers | SAS](https://developer.sas.com/home.html)からデモアカウントを作れますので、ぜひお試しください。