SPSS Modelerのグラフボードノードの円グラフとヒートマップをPythonで書き換える

SPSS Modelerのグラフボードノードの円グラフとヒートマップをPythonのmatplotlibやpandasのplotで書き換えてみます。

#0．データ
サンプルで利用するデータは以下です
M_CD: マシンコード
UP_TIIME: 起動時間
POWER: 電力
TEMP: 温度
PRESSURE：圧力フラグ
ERR_CD: エラーコード

各マシンコードごとに起動時間にそって電力や温度の変化、圧力スイッチ、そしてエラーがあればそれが時系列に記録されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/1e739d26-7c0f-3f6d-7c91-9934e64ba6c3.png)

#1m．円グラフ。Modeler版
各ERR_CDの割合を円グラフで表示します。
基本タブでERR_CDを選択し、「ビン度数の円」のグラフを選びます。集計は「度数」のままにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/4cd77c5f-fd21-9525-70ac-704907221182.png)

各ERR_CDの度数の割合が円グラフで表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/231495bb-8471-a2d5-a1a0-e260fc01e66e.png)




#1p．円グラフ。matplotlib,pandas版
まずERR_CDごとの件数をdf.groupby('ERR_CD').size()で集計します。

```python
dfErrcdGrp=df.groupby('ERR_CD').size()
dfErrcdGrp
```
ERR_CD
0      4589
101     531
202     549
303     133
dtype: int64

plt.pieのxにvalue、labelsにindexを設定します。counterclock=False, startangle=90はExcelのように0時の位置から時計回りに描く設定です。


```python
plt.pie(dfErrcdGrp, labels=dfErrcdGrp.index.astype('str'), counterclock=False, startangle=90)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/089eade8-0f82-8fa3-3c58-94a75e0a6443.png)

* 参考：Matplotlib 円グラフ作成方法｜Excel風グラフ、ドーナツグラフも解説 - YutaKaのPython教室

https://www.yutaka-note.com/entry/matplotlib_pie

pandasのplotメソッドを使って同じことをします。
ただ、plot.pieで実行するだけです。

```python
dfErrcdGrp.plot.pie(counterclock=False, startangle=90)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/cc8e2471-c810-0362-8f1c-73d920ab9269.png)

#2m．ヒートマップ。modeler版
ERR_CDとPRESSUREの度数のヒートマップを作ります。
まず、レコード集計ノードでキーフィールドでPRESSUREとERR_CDを設定し、「フィールドにレコード度数を含める」を指定します。

プレビューすると以下のような集計になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e8fc6f0f-a4f8-1a81-0f89-3bc8c3e3877e.png)

グラフボードノードの「詳細」タブで、視覚タイプに「ヒートマップ」を選び、列：PRESSURE、行:ERR_CD、色:Record＿Countを設定し実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/8b341621-e89f-462c-b557-1fe9f45b9ae7.png)
以下のようなヒートマップが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/750315ba-1820-d8d1-4890-28c64267ef5a.png)

#2p．ヒートマップ。Seaborn版
ヒートマップはSeabornを使うと簡単に書けます。

まず、crosstabでERR_CDとPRESSUREのクロス集計表を作ります。

```python
dfcross=pd.crosstab(df['ERR_CD'],df['PRESSURE'])
dfcross
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/3d45634e-72c2-8cdc-43f7-6fba415b9b7e.png)

あとは、sns.heatmapの引数に設定するだけです。

```python
import seaborn as sns
sns.heatmap(dfcross)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/abe89b08-2201-de04-16f6-e11f2c703cd6.png)

* 参考:Python, pandas, seabornでヒートマップを作成 | note.nkmk.me

https://note.nkmk.me/python-seaborn-heatmap/

#3. サンプル
サンプルは以下に置きました。

ストリーム
https://github.com/hkwd/200611Modeler2Python/blob/mastergraph/graph.str?raw=true
notebook
https://github.com/hkwd/200611Modeler2Python/blob/master/graph/graph.ipynb
データ
https://raw.githubusercontent.com/hkwd/200611Modeler2Python/master/data/Cond5n_e.csv

■テスト環境
Modeler 18.3
Windows 10 64bit
Python 3.8.5
pandas 1.0.5

#4. 参考情報
グラフボード [詳細」タブ - IBM Documentation

https://www.ibm.com/docs/ja/spss-modeler/18.3.0?topic=node-graphboard-detailed-tab