正規表現で社名を名寄せするpython拡張ノードをBobに作らせる
以下の記事を題材にBobで拡張ノードにpythonを便利に書かせる方法を紹介します。
1.想定される利用目的
・顧客マスタや取引先マスタデータのクレンジング
・対象データの精査
2.サンプルストリームのダウンロード
3.サンプルストリームの説明
a.入力するデータは以下の通りです。
b.[拡張の変換]ノードを編集します。
こちらの記事の
ダウンロード可能ストリーム
220601正規表現python.str
の拡張ノードをそのまま使っています。記事作成当時のバージョンではPythonの選択肢はPython for Sparkのみでした。
[テーブル]を表示します。前株のみ株式会社を(株)に変換しています。
c.[拡張の変換]ノードを編集します。Pythonシンタックスを使っています。後株も(株)変換するように変更をしています。Bobでどのように作成したかは後述します。
[テーブル]を表示します。
Bobにpythonスクリプトを書かせる方法
Bobを起動します。
Start>Open で作業スペースフォルダを指定します。
プロンプトは次のとおりです。あらかじめ題材にしたストリームを作業フォルダに格納しておきます。
次のpythonスクリプトが生成されたらコピーして[拡張の変換]ノードにペーストします。
###Use this code to transfer data between Modeler and Python
import modelerpy
import pandas as pd
import re
if modelerpy.isComputeDataModelOnly():
# データモデルの計算のみの場合
modelerDataModel = modelerpy.getDataModel()
outputDataModel = modelerDataModel # 入力と同じデータモデルを出力
modelerpy.setOutputDataModel(outputDataModel)
else:
# 実際のデータ処理
modelerData = modelerpy.readPandasDataframe()
# 全ての文字列カラムに対して「株式会社」を「(株)」に置換
outputData = modelerData.copy()
for column in outputData.columns:
# カラムがobject型(文字列)の場合のみ処理
if outputData[column].dtype == 'object':
# 正規表現を使って「株式会社」を「(株)」に置換
# 位置に関係なく全ての出現箇所を置換
outputData[column] = outputData[column].apply(
lambda x: re.sub(r'株式会社', '(株)', str(x)) if pd.notna(x) else x
)
modelerpy.writePandasDataframe(outputData)
# Made with Bob
注意事項
正規表現の例としてシンプルな内容を選んでいますが、株式会社を(株)に変更するのみの場合は
[置換]ノードでreplace("株式会社","(株)", NAME)と関数を使って同じ処理が可能です。
4.参考情報
法人等略語マスタで組織名を名寄せする
SPSS Modeler ノードリファレンス目次
SPSS Modeler 逆引きストリーム集(データ加工)









