Bobとpython拡張ノードでネガティブコメントフラグを作る
以下の記事を題材に、Bobを使って拡張ノードのPythonコードを効率よく作成する方法をご紹介します。
1.想定される利用目的
・文章に含まれるポジティブ/ネガティブの要素をフラグにして集計可能にする。
2.ストリームとデータのダウンロード
ストリーム
データ
3.サンプルストリームの説明
a.入力するデータは以下の通りです。
b.[拡張の変換]ノードを編集します。pythonスクリプトをどのようにBobに書かせたかは後述します。
[テーブル]を表示します。
Bobによるスクリプトの作成手順
1.Bobを起動して、作業フォルダを指定します。
2.SPSS Modeler[拡張のエクスポート]ノードからサンプル構文をコピーします。
3.プロンプトを作成します。サンプル構文をペーストします。
プロンプト
comment列から文章がネガティブかどうかを判定すし新たなフラグ変数を作成する、
SPSS Modelerの拡張の変換ノードのネイティブPython APIスクリプトを書いてください。
読み込むデータのサンプルは次の通りでcomment列のみを対象にしてください。
ID,DATE,TERM,利用機種,OPEREATER,comment,クレーム,機器,機能・サービス,請求,購入
962,2024-02-10,"2月第2週","B919","CT","新しい料金プランについて知りたい。すぐに解約の可能性大。無料通話分を増やしたい。",0,0,0,1,0
868,2024-02-10,"2月第2週","B919","CT","ローミング料金が異常に高い。契約時にサービスエリアをちゃんと説明されていなかった。また、ほかの地域を旅行時に、受信状況があまりよくない。",0,0,0,1,0
910,2024-02-10,"2月第2週","V501","CT","メールの使い方を知りたい。HPを参照するように伝える。",0,0,1,0,0
- 拡張の変換ノードのスクリプトの解説として
@https://www.ibm.com/docs/ja/spss-modeler/18.6.0?topic=spark-native-python-apis を参考にしてください。
- シバンは不要です。
シンタックスは以下のサンプルを参考にしてください
###Use this code to transfer data between Modeler and Python
#import modelerpy
#if modelerpy.isComputeDataModelOnly():
# modelerDataModel = modelerpy.getDataModel()
# outputDataModel = None
### compute your output data model
# modelerpy.setOutputDataModel(outputDataModel)
#else:
# modelerData = modelerpy.readPandasDataframe()
# outputData = None
### compute your output data
# modelerpy.writePandasDataframe(outputData)
4.プロンプトを実行します。
5.Bobの以下の出力を[拡張の変換]にそのまま利用します。
Pythonスクリプト
import modelerpy
if modelerpy.isComputeDataModelOnly():
# --- データモデル計算モード ---
# 入力データモデルを取得し、新しいフラグフィールドを追加して出力モデルを設定する
modelerDataModel = modelerpy.getDataModel()
outputDataModel = modelerDataModel
# ネガティブ判定フラグ列を整数型(flag計測)で追加
outputDataModel.addField(modelerpy.Field('is_negative', 'integer', 'flag'))
modelerpy.setOutputDataModel(outputDataModel)
else:
# --- データ変換モード ---
# Pandas DataFrame としてデータを取得
df = modelerpy.readPandasDataframe()
# ネガティブ感情を示すキーワードリスト
negative_keywords = [
'解約', '高い', '遅い', '悪い', '不満', 'できない', 'されていない',
'おかしい', '異常', '問題', 'クレーム', '困る', '使えない',
'わからない', 'よくない', 'されなかった', '説明されていなかった',
]
def is_negative(text):
"""commentテキストにネガティブキーワードが含まれるか判定する"""
if not isinstance(text, str):
return 0
return int(any(kw in text for kw in negative_keywords))
df['is_negative'] = df['comment'].apply(is_negative)
modelerpy.writePandasDataframe(df)
注意事項
フリーコメント内にネガティブな要素とポジティブな要素が含まれていても判定するような設計になっています。用途によっては、SPSS Modeler PremiumのText Analyticsオプションを利用してください。
4.参考情報
ポジティブ/ネガティブフラグを作成する
SPSS Modeler ノードリファレンス目次
SPSS Modeler 逆引きストリーム集(データ加工)







