0
0

More than 1 year has passed since last update.

SPSS ModelerのヒストグラムノードをPythonで書き換える

Last updated at Posted at 2021-11-18

SPSS ModelerのヒストグラムノードをPythonのmatplotlibやpandasのplotで書き換えてみます。

0.データ

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

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

image.png

1m.③ヒストグラム。Modeler版

POWERでヒストグラムを作り、ERR_CDで色分けしてみます。
ヒストグラムノードでフィールドにPOWER、オーバーレイの色にERR_CDを設定し、実行します。
image.png
ERR_CDで色分けされたヒストグラムができました。
image.png

1p.③ヒストグラム。matplotlib版

matplotlibで、ERR_CDでグループ化したヒストグラムを書くには1回のプロットで行えるのですが、あらかじめ各ERR_CDごとにデータを分割しておく必要があります。

powersという配列に各ERR_CDごとにSeriesデータをいれるので初期化しておきます。
また、errsにエラーコードのリストを入れておきます。sort_values (ascending=False)は、Modelerのヒストグラムと同じように、上からERR_CDが0,101,202,303の順に積み上げるためです。デフォルトでは下から積みあがるのでERR_CD=0が一番下になります。Modelerと同じ順序にこだわらなければ、sort_values(ascending=False) は不要です。

powers=[]
errs=df['ERR_CD'].cat.categories.sort_values (ascending=False)

ERR_CDの0,101,202,303でループさせ、df.queryをつかって各ERR_CDで絞りこんだSeriesオブジェクトをpowers配列に追加していきます。

for i,err_cd in enumerate(errs):
    powers.append(df.query('ERR_CD=={0}'.format(err_cd))['POWER'])

plt.histでERR_CDの0,101,202,303のSeriesオブジェクトの配列であるpowersをあたえ、stacked=Trueを指定します。bins=25でModelerのデフォルトと同じビン数にしています。
labelは文字列型しか受け付けないので.astype('str')で変換しています。

plt.hist(powers,bins=25, stacked=True,label=errs.astype('str'))
plt.legend()

image.png

pandasのplotメソッドをつかって同じことをやろうとしたのですが、うまく積み上げる方法を思いつけませんでした。

  • 参考: matplotlib でヒストグラムを描く – Python でデータサイエンス

2. サンプル

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

ストリーム
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

3. 参考情報

ヒストグラムの「作図」タブ - IBM Documentation

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0