SPSS Modelerで他の人からもらったストリームを実行するときにファイルパスが違って実行ができないことがあると思います。
1、2ファイルであれば書き換えても大きな手間ではありませんが、たくさんのファイルを使っている場合は大変です。
そこで入出力のファイルパスを一括変更するpythonスクリプトを書きました。
1 pythonスクリプト
import modeler.api
oldpath =u'C:\\Program Files\\IBM\\SPSS\\Modeler\\18.1\\Demos\\japanese_ja\\bankloan.sav'
newpath =u'C:\\Program Files\\IBM\\SPSS\\Modeler\\18.2\\Demos\\japanese_ja\\bankloan.sav'
stream = modeler.script.stream()
for node in stream.iterator():
if (node.getTypeName() == "variablefile"
or node.getTypeName() == "excelimport"
or node.getTypeName() == "statisticsimport"
or node.getTypeName() == "outputfile"
or node.getTypeName() == "excelexport"
or node.getTypeName() == "statisticsexport"):
full_filename=node.getPropertyValue("full_filename")
full_filename=full_filename.replace(oldpath,newpath)
print full_filename
node.setPropertyValue("full_filename",full_filename)
oldpath とnewhpathのところに変更したい旧パスと新パスを指定すればOKです。
- パス名のディレクトリの区切りに\(バックスラッシュ。日本語Windows上だと¥マーク)を使う場合は、上の例のように\\のように二つ重ねてエスケープしてください。
- パス名のディレクトリの区切りには/(スラッシュ)を使うこともできます。この場合はエスケープの必要はありません。Mac版やLinuxのサーバーで使っている場合は/が使われています。
- シングルクォーテーションの前のuを忘れると日本語の入ったファイルパスで失敗します。
- 可変長ファイル、Excelファイル、Statisticsファイルに対応しています。他の形式にも対応したい場合はif (node.getTypeName() == "variablefile"の部分に追加してください。
2 実行例
18.1のデモディレクトリから18.2のデモディレクトリに変更します。
ストリームのスクリプトに上のスクリプトをコピーペーストして、oldpath とnewhpathを変更します。そして、「このスクリプトを実行」ボタンをクリックします。
デバッグの欄に変更したパスを表示します。
3 おまけ
チームでストリームを共有するときには以下の「ディレクトリの設定」「サーバーディレクトリの設定」の機能で上位パスをそろえておいて、相対パスで指定するか、環境変数などをつかって同じファイルパスで指定するようにしておくことをお勧めします。上のスクリプトを毎回実行するのは大変なので。
実行例では製品のデモデータのパスのバージョン部分を変更しましたが、デモデータをつかったストリームを他のバージョンでも読めるようにするには$CLEO_DEMOS環境変数を使ったほうがよいです。以下の指定だとバージョンが変わってもパスの変更の必要がありません。
テストした環境
汎用的に動くと思いますが、テストしたの以下の環境です
SPSS Modeler 18.1.1
Windows 10 64bit