LoginSignup
1
1

More than 1 year has passed since last update.

SPSS Modelerで列名を正規表現で変更する

Last updated at Posted at 2020-04-10

Modelerでたくさんの列名に似たような変換をしたいことがあります。
そういう時にはModelerスクリプトで正規表現を使えば簡単に行うことができます。

例えば以下のように集計をした後の「_Sum」の文字を一括で取り除きたいとします。
image.png

ツールのストリームのプロパティ―の実行でスクリプトのエディタを開きます。
image.png

スクリプトが「Python」になっていることを確認し、以下のPythonコードを貼り付けます。
image.png

import modeler.api
import re
stream = modeler.script.stream()
#フィルターをつなげたいノード名を指定します。。例はレコード集計
startnode   = stream.findByType(None, u"レコード集計")
filternode  = stream.createAt("filter",u"列名変更", startnode.getXPosition() + 120, startnode.getYPosition())
stream.link(startnode, filternode)

for c in filternode.getOutputDataModel().columnIterator():
    originalName = c.getColumnName()
    #置き換えたい文字列を指定。例は_sum
    p = re.compile('_Sum')
   #置換後の文字列を指定。例は''なので消去を意味します
    changedName = p.sub('',originalName)
    filternode.setKeyedPropertyValue("new_name", originalName, changedName)

貼り付けたら「このスクリプトを実行」ボタンをおして実行してみましょう。

image.png

「列名変更」というフィルターノードが追加されています。
プロパティをみると「_sum」の文字列が取り除かれています。
「プレビュー」ボタンをクリックして、プレビューを確認してみましょう。
image.png

全ての列名から「_Sum」の文字列が取り除かれました。
image.png

少しプログラムを見てみます。
以下の行でフィルターノードを連結するノードを指定しています。「_Sum」は「レコード集計」ノードの処理後に付加されるので、「レコード集計」ノードの後ろにつけています。

startnode   = stream.findByType(None, u"レコード集計")

以下の部分で文字列の置き換えをしています。
p = re.compile('_Sum')の'_Sum'が置換の対象文字です。
changedName = p.sub('',originalName)の''が置換後の文字です。これは空文字なので結果的には文字を消去するという意味です。

    #置き換えたい文字列を指定。例は_sum
    p = re.compile('_Sum')
   #置換後の文字列を指定。例は''なので消去を意味します
    changedName = p.sub('',originalName)

image.png

正規表現が使えるので様々な変換ができます。
例えば
p = re.compile('_.+')
とすれば、'_Sum'も'_Mean'も'_Sdev'もすべて変換対象にできます。

以下の記事などを参考にしてください。
正規表現 HOWTO
https://docs.python.org/ja/2.7/howto/regex.html#search-and-replace

サンプルのStreamファイルは以下にあります。
https://github.com/hkwd/spsssample/raw/master/200410%E5%88%97%E5%90%8D%E5%A4%89%E6%9B%B4modeler%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88/200410%E5%88%97%E5%90%8D%E5%A4%89%E6%9B%B4modeler%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88.str

テスト環境

SPSS Modeler 18.2.1
Windows 10

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1