SPSS ModelerのヒストグラムノードをPythonのmatplotlibやpandasのplotで書き換えてみます。
#0.データ
サンプルで利用するデータは以下です
M_CD: マシンコード
UP_TIIME: 起動時間
POWER: 電力
TEMP: 温度
PRESSURE:圧力フラグ
ERR_CD: エラーコード
各マシンコードごとに起動時間にそって電力や温度の変化、圧力スイッチ、そしてエラーがあればそれが時系列に記録されています。
#1m.③ヒストグラム。Modeler版
POWERでヒストグラムを作り、ERR_CDで色分けしてみます。
ヒストグラムノードでフィールドにPOWER、オーバーレイの色にERR_CDを設定し、実行します。
ERR_CDで色分けされたヒストグラムができました。
#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()
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