SPSS Modeler ヒモトク
Modelerデータ加工Tips#23-GUIループとPython書き出しでデータを分割保存する
2021年12月10日
カテゴリー Data Science and AI | SPSS Modeler ヒモトク | アナリティクス | データサイエンス
記事をシェアする:
皆さん、はじめまして本田技研工業株式会社の小川 努です。
この連載もいよいよ最終回。映えあるアンカーを指名いただきました。
私がSPSS Modelerと出会ったのは、約10年前。世の中で「BigData」と言葉が飛び交い始めた頃でした。「データは資源」価値を高める為には、と随分肩に力が入っていたと思い出します。その後「機械学習」「AI」の言葉に流されること無く、いかにビジネスに活かせるか、おそらく読者の皆さんの多くと同じように苦労いたしました。その点で同志である皆さんに、この記事を読んでいただけるのは感慨深く感じます。
近頃「ビジネスの成功には、データ主導型のDXの推進が必要」という主張が広い領域へ拡大しています。また「データ活用の市民化」の流れもそれに合わせて加速しています。しかし、幾つものプロジェクトを支援する中で、課題も見え始めました。
「データの活用の目的は明確に設定されているのか?」「分析自体が目的になっていないのか?」と自問し、あるべき進め方を日々模索しています。そんな時に、SPSS Modelerの基本を学ぶ際に、「CRISP-DM」から始まったことを思い起こしました。当時は、自分も「早く分析教えてよ、早く本題に入ろうよ!!」との姿勢だったと、、、
今更ながら「ビジネスの課題を理解する」 「データを理解する」、これこそ重要なフェーズであったとに気付かされた次第です。
いろいろな道具を使い分け課題を解くことになりますが、SPSS Modelerを必要とするプロセスでは、「謎を解く」過程で、、「データ」を「情報」に「知識」「知恵」に昇華させることが実感できる心地よい時間となっています。
一人で「チェス」を楽しむ様に、、、(ここは詰将棋と書かないといけない局面でしたね)
SPSS Modelerのスクリプトの種類とそれが必要な局面
SPSS Modelerは自動処理アシストのために独自スクリプトを有しています。ですが、独自スクリプト言語では汎用性に難があるとして2013年12月にVer 16以降はPyothonを採用。現在は従来のレガシースクリプトとPythonを選択できるようになっていますが、IBMさんは今後の製品ロードマップを考慮して基本的にはPythonを勧めています。
スクリプトはどのような場合に役に立つでしょうか?「47都道府県別にモデルを作り分ける」などを思いつくのですが、これはTips#18でリバーフィールドの磯部さんが紹介されている通り、今やスクリプト不要です。なんとデータ型ノードのデータ分割指定で実現します。モデルの出しわけが不要だとすると、バッチ内の条件に応じた複雑なデータの前処理や、IBM牧野さんがQiitaで紹介しているグラフ出しわけが代表的な利用シーンでしょうか。この時、繰り返す数にもよりますが、多くの場合、GUIループが圧倒的に便利です。GUIループもVer 16で登場したマウス操作でループを定義する方法です。IBMさんの宣伝不足か残念ながらあまりこの機能が知られておらず、いちからスクリプトを書いている人も多いと思います。GUIループを覚えていただくと、「ちょい足しPython」という裏技もあって活用の幅が広がりますので、以降具体的な手順とともに紹介させていただきます。
例題:「機種ごとにループでファイルを分割する」
出題は以下の通りでした。
ループ処理を用いて、フィールド「Machine Type」の機種ごとにファイルを分割しCSV形式で保存してください。これまでの詰将棋で例えると、千日手とも言えるループ処理をできるだけマウス(GUI)で操作して、スクリプト記述は最低限にしてみてください。
例題データ
利用するデータは、以下です。
https://raw.githubusercontent.com/yoichiro0903n/blue/main/room_data.csv
(リンクを右クリックして「リンク先を保存」またはブラウザで開いてからページを保存します)
解説の前に動画をご覧いただくとわかりやすいと思います。
まず可変長ファイルノードにデータを読み込ませてテーブルで確認します。
データを読み込む際に後続の処理のために必ずデータ型タブで「値の読み込み」ボタンを押して値を確定しておいてください。これを忘れるとループ処理がうまく動きません。
続いてパラーメータの設定です。メニュー>ツール>ストリームのプロパティ>パラメータを選択します。
ここでは名前を「MA」、ストレージは「文字列」を選択しプロンプトのチェックを外して適用ボタン、OKボタンを押します。
次は条件抽出ノードをバインドします。
条件抽出ノードの設定は以下の通りです。式ビルダーの右にあるドロップダウンリストからパラーメータを選ぶと、先に設定したものが選択できるようになっていますので、MachineType = ‘$P-MA’ と条件を指定してください。
途中で警告のポップアップが出ても無視して下さい。
いよいよループの設定です。条件抽出ノード上で右クリックして「ループ/条件付き実行」から「反復キーの定義(フィールド)」を選択します。
あとは以下のように上から順番に選択してください。
この時点でループは成立します。定義したパラメータ(MA)に以下の5つの機種を反復させる準備が整いました。
本編からそれますが条件抽出ノードの左肩にGUIループのアイコンを確認したら赤枠の再生ボタンを押してみてください。テーブルが5種類次々と表示されるはずです。
それではファイル分割の手続きに入ります。出力タブからフラットファイルノードを選びテーブルノードと差し替えます。その上で右クリック>ループ条件付きの実行>反復変数の定義を選択します。
次のように反復変数の追加を行います。語幹にはファイルの出力パスを記述してください。
確定すると次のようになっているはずです。
このまま再生ボタンを押すと、拡張子のないテキストファイルが5種類ループによって生成されます。事実上カンマ区切りで作成しているのでこれでもOKなのですが、CSVとわかるようにしてみます。
その前にフラットファイルノードの編集で「データのインポートノードを生成」にチェックを入れておきます。出力したファイルを再利用するのに便利な機能ですよね。
ストリームのプロパティを再度呼び出して実行タブの右下にある「貼り付け」ボタンを押します。GUIループの処理をPythonで以下のように書き出されます!
あとは赤枠の数文字をテキスト 「 + “.csv” 」 をちょい足ししてください。ファイルに拡張子が加筆されます。
確定したら再生ボタンを押すと、次々とファイルが出来上がります。
いかがでしたでしょうか?
データに含まれるカテゴリの数だけループさせようとスクリプトを書くのは骨が折れますが、ご覧のようにほぼGUIでループの設定ができますし、Pythonに書き出しした上で編集できるのは便利ですよね。
Modeler でPythonスクリプトを用いるとき、日本語Shift-JISのノードラベルや文字列を指定する場合はご注意下さい。「u”レコード集計”」のように「u」を先頭につける必要があります。
ちょっとだけクセがありますが、何度か試すと素晴らしい機能だと気づいていただけます。
もちろんGUIループで全てのスクリプトが実現するわけではありません。例えば、1万回処理を繰り返すなど、回数を指定してシミュレーションするような場合です。この場合、Pythonで書いてゆくほかないのですが、こちらは、2022年のヒモトク新シリーズ第1弾でIBM坂本さんがコツを含めて教えてくださるそうです。
小川 努
本田技研工業株式会社
デジタル改革統括部 バリュークリエーション部
データ分析者達の教訓 #22- 予測モデルはビジネスの文脈で語られ初めてインパクトを持つ
Data Science and AI, SPSS Modeler ヒモトク, アナリティクス...
皆さんこんにちは。IBMの坂本です。 SPSSを含むデータサイエンス製品の技術を担当しています。 このリレー連載ブログはSPSS Modelerの実際のユーザーで第一線で活躍するデータ分析者に、データ活用を ...続きを読む
データ分析者達の教訓 #21- 異常検知には異常を識別する「データと対象への理解」が必要
Data Science and AI, SPSS Modeler ヒモトク, アナリティクス...
皆さんこんにちは。IBMの宮園です。IBM Data&AIでデータサイエンスTech Salesをしています。 このリレー連載ブログはSPSS Modelerの実際のユーザーで第一線で活躍するデータ分析者に、デー ...続きを読む
【予約開始】「SPSS秋のユーザーイベント2024」が11月27日にオンサイト開催
Data Science and AI, SPSS Modeler ヒモトク, アナリティクス...
本年6月800名を超える方々にオンライン参加いただいたSPSS春のユーザーイベントに続き、『秋のSPSSユーザーイベント』を11月27日に雅叙園東京ホテルにて現地開催する運びとなりました。 このイベントは ...続きを読む