SPSS Modelerのレコード追加ノードをPythonで書き換える。
SPSS Modelerでデータを縦方向に追加するのが、レコード追加ノードです。
SQLでいうUNION ALLにあたる加工処理です。
これをPythonのpandasで書き換えてみます。
0.元データ
以下の2つの時系列のセンサーデータをつかって行います。
似たデータ項目ですが、列名が違っていたり、片方にしかない列が含まれています。
■データ1:Cond4n_e104.csv
M_CD: マシンコード
UP_TIIME: 稼働時間
POWER: 電力
TEMP: 温度
ERR_CD: エラーコード
■データ2:COND2n.csv
Time:稼働時間
Power:電力
Temperature:温度
Pressure:圧力
Uptime:起動時間
Status:状態コード
Outcome:エラーコード
1m.レコードの追加 Modeler版
データ1「Cond4n_e104.csv」の列に合わせて、データ2「COND2n.csv」を追加します。
まずフィルターノードを使って、データ2の列をデータ1の列名に合わせます。
次にレコード追加ノードを接続します。
M_CDに当たる列がデータ2のCOND2n.csvには存在しないのでNULLが入ります。
ちなみにレコード追加ノードでは、フィールド一致基準のデフォルトは「名前」ですが、名前が違っていても、列位置を基準に追加することもできます。
また、追加するデータ2にしか含まれていないPressureなども追加したい場合はフィールド入力元で「すべてのデータセット」を選ぶと追加ができます。
さらにどちらのデータから来たかを示すタグ列をつけたりすることも可能です。
1p.レコードの追加 pandas版
フィルターノードに当たる処理をrenameとdropを使って行います。renameでデータ1と列名をそろえ、dropで不要な列を削除します。
#データ2の列をデータ1の列名に合わせます。
df2_1=df2.rename(columns={'Time': 'UP_TIME', 'Power': 'POWER', 'Temperature': 'TEMP', 'Outcome': 'ERR_CD'})\
.drop(['Pressure','Uptime','Status'],axis=1)
df2_1
次に、レコード追加ノードにあたるレコード追加処理を行います。
方法は二つあってappendとconcatがあります。
どちらでも結果は同じです。3つ以上のデータを結合する場合はconcatの書き方の方がわかりやすくてよいと思います。
#appendを使う方法
df1.append(df2_1)
#concatを使う方法
pd.concat([df1,df2_1])
- 参考
- pandas.DataFrame, Seriesの重複した行を抽出・削除 | note.nkmk.me
- https://note.nkmk.me/python-pandas-duplicated-drop-duplicates/
- pandas.DataFrame.append — pandas 1.1.4 documentation
- https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.append.html#pandas.DataFrame.append
2. サンプル
サンプルは以下に置きました。
ストリーム
https://github.com/hkwd/200611Modeler2Python/raw/master/append/append.str
notebook
https://github.com/hkwd/200611Modeler2Python/blob/master/append/append.ipynb
データ
https://raw.githubusercontent.com/hkwd/200611Modeler2Python/master/data/Cond4n_e104.csv
https://raw.githubusercontent.com/hkwd/200611Modeler2Python/master/data/COND2n.csv
■テスト環境
Modeler 18.2.2
Windows 10 64bit
Python 3.7.9
pandas 1.0.5
4. 参考情報
Author And Source
この問題について(SPSS Modelerのレコード追加ノードをPythonで書き換える。), 我々は、より多くの情報をここで見つけました https://qiita.com/kawada2017/items/a852316c3693be9914d5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .