0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SPSS Modelerのスタンドアロンスクリプト(clemb)で日本語を扱う方法

0
Last updated at Posted at 2026-02-25

SPSS Modelerのスタンドアロンスクリプト(clemb)で日本語を扱う方法

概要

SPSS Modelerのスタンドアロンスクリプトはclembコマンドを使用してバッチ実行できますが、スクリプト内に日本語が含まれていると、デフォルトの設定では文字化けが発生し、正常に動作しません。本記事では、Windows環境でclembスクリプト内の日本語を正しく処理する方法を解説します。

検証環境

  • OS: Windows 11
  • SPSS Modeler: 19.0

サンプル

問題の原因

日本語文字列の文字化けが発生する主な原因は以下の2点です:

  1. Python 2系の文字列処理

    • ModelerスクリプトはJythonを使っているためPython 2.7を使用
    • Python 2系では、文字列リテラルはデフォルトでバイト文字列(str型)として扱われる
    • 日本語などのマルチバイト文字を正しく処理するには、ユニコード文字列(unicode型)として明示的に指定する必要がある
    • そのため、u""プレフィックスが必須(Python 3系では文字列がデフォルトでUnicodeのため不要)
  2. Windows環境のエンコーディング設定

    • clembコマンドは内部でJavaを使用
    • 日本語Windows環境ではデフォルトの文字エンコーディングがShift_JISやCP932に設定されている
    • UTF-8で記述された日本語文字列が正しく解釈されず、文字化けが発生
    • macOS/Linux環境ではデフォルトでUTF-8が使用されるため、この問題は発生しない

つまり、Python 2系を使用している限り、すべての環境で手順1(ユニコードプレフィックス)が必要であり、加えてWindows環境では手順2と3のエンコーディング設定も必要になります。

解決方法

以下の3つの手順で日本語を正しく処理できます。

手順1: Pythonスクリプト内の日本語文字列にユニコードプレフィックスを付ける

ModelerスクリプトはPython 2.7を使用しているため、日本語文字列にはユニコードプレフィックスu""を付ける必要があります。

注意: Python 3系では文字列がデフォルトでUnicodeのため、このプレフィックスは不要です。

# 例: ノード名に日本語を使用する場合
typenode = stream.createAt("type", u"フィールド定義", 250, 100)

# 例: ファイルパスに日本語を使用する場合
input_file = u"C:\\データ\\tree_credit_ja.csv"

# 例: print文で日本語を出力する場合
print u"ストリームが正常に作成されました"

手順2: PythonファイルをUTF-8エンコーディングで保存

スクリプトファイルを必ずUTF-8エンコーディングで保存してください。

ノートパッドでの保存方法:

  1. ファイルを開く
  2. 右下のエンコードをクリック
  3. 「UTF-8」を選択
    image.png

手順3: バッチファイルでエンコーディングを設定(Windows環境のみ)

clembコマンドを実行する前に、コマンドプロンプトとJavaのエンコーディングをUTF-8に設定します。

注意: この手順はWindows環境でのみ必要です。macOS/Linux環境では、デフォルトでUTF-8が使用されるため不要です。

REM コマンドプロンプトの文字コードページをUTF-8に変更(エラー出力を抑制)
chcp 65001 >nul 2>&1

REM Java実行時のエンコーディング設定を環境変数で指定
REM - file.encoding: ファイル入出力のデフォルトエンコーディング
REM - client.encoding.override: クライアント側のエンコーディングを強制
REM - sun.jnu.encoding: ファイル名などのJNI(Java Native Interface)のエンコーディング
set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 -Dclient.encoding.override=UTF-8 -Dsun.jnu.encoding=UTF-8

REM スタンドアロンスクリプトの実行
"C:\Program Files\IBM\SPSS\Modeler\19.0\bin\clemb.exe" -script "credit_model_ja2.py" -execute -log "clemb.log"

動作検証

以下のサンプルスクリプトで動作を確認します。このスクリプトはtree_credit_ja.csvを読み込み、データ型ノードをつなぐストリームを作成します。

サンプルスクリプト(credit_model_ja2.py)

# 信用予測モデルのためのSPSS Modelerスクリプト

# 新しいストリームを作成
stream = modeler.script.stream()

# 入力ファイルパスを定義
input_file = u"C:\\temp6\\tree_credit_ja.csv"

# 可変ファイルノード(CSV入力)を作成
varfilenode = stream.createAt("variablefile", "file", 100, 100)
varfilenode.setPropertyValue("full_filename", input_file)
varfilenode.setPropertyValue("encoding", "UTF-8")

# フィールドメタデータを定義するためのタイプノードを作成
# ノード名に日本語を使用(ユニコードプレフィックス u"" を使用)
typenode = stream.createAt("type", u"フィールド定義", 250, 100)

# 可変ファイルノードをタイプノードにリンク
stream.link(varfilenode, typenode)


# ストリームを保存
output_stream_path = u"C:\\temp6\\credit_model_stream.str"
session = modeler.script.session()
taskrunner = session.getTaskRunner()
taskrunner.saveStreamToFile(stream, output_stream_path)

# 日本語メッセージを出力(ユニコードプレフィックス u"" を使用)
print u"ストリームが正常に作成され、保存されました: " + output_stream_path

検証1: エンコーディング設定なしで実行(失敗例)

エンコーディング設定を行わずに実行すると、すべての日本語文字列(print文の出力、ノード名など)が文字化けします。

REM エンコーディング設定をコメントアウト
REM chcp 65001 >nul 2>&1
REM set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 -Dclient.encoding.override=UTF-8 -Dsun.jnu.encoding=UTF-8

REM スタンドアロンスクリプトの実行
"C:\Program Files\IBM\SPSS\Modeler\19.0\bin\clemb.exe" -script "credit_model_ja2.py" -execute -log "clemb.log"

実行結果(print u"ストリームが正常に作成され、保存されました: "で文字化け発生):

C:\temp6>"C:\Program Files\IBM\SPSS\Modeler\19.0\bin\clemb.exe" -script "credit_model_ja2.py" -execute -log "clemb.log"
郢ァ・ケ郢晏現ホ懃ケ晢スシ郢晢ソス邵コ譴ァ・ュ・」陝カ・ク邵コ・ォ闖エ諛茨ソス闊鯉シ・ケァ蠕鯉ソス竏ス・ソ譎擾スュ蛟・・・ケァ蠕娯穐邵コ蜉ア笳・ C:\temp6\credit_model_stream.str

typenode = stream.createAt("type", u"フィールド定義", 250, 100)で定義したノード名も正しく表示されません。

image.png

検証2: エンコーディング設定ありで実行(成功例)

手順3のエンコーディング設定を行って実行すると、日本語が正しく処理されます。

REM コマンドプロンプトの文字コードページをUTF-8に変更
chcp 65001 >nul 2>&1

REM Java実行時のエンコーディング設定を環境変数で指定
set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 -Dclient.encoding.override=UTF-8 -Dsun.jnu.encoding=UTF-8

REM スタンドアロンスクリプトの実行
"C:\Program Files\IBM\SPSS\Modeler\19.0\bin\clemb.exe" -script "credit_model_ja2.py" -execute -log "clemb.log"

実行結果(正常動作):

C:\temp6>"C:\Program Files\IBM\SPSS\Modeler\19.0\bin\clemb.exe" -script "credit_model_ja2.py" -execute -log "clemb.log"
ストリームが正常に作成され、保存されました: C:\temp6\credit_model_stream.str

ノード名「フィールド定義」も正しく表示されました。

image.png

トラブルシューティング

問題: 設定後も文字化けが発生する

原因と対処法:

  1. Pythonファイルのエンコーディングを確認

    • ファイルが本当にUTF-8で保存されているか確認
    • BOM付きUTF-8ではなく、BOMなしUTF-8で保存
  2. ユニコードプレフィックスの確認

    • すべての日本語文字列にu""が付いているか確認
    • 特にprint文、ファイルパス、ノード名を重点的にチェック
  3. 環境変数の設定を確認

    • バッチファイル内でset JAVA_TOOL_OPTIONSが正しく設定されているか確認
    • コマンドプロンプトでecho %JAVA_TOOL_OPTIONS%を実行して確認

問題: clembコマンドが見つからない

対処法:

  • SPSS Modelerのインストールパスを確認
  • パスが異なる場合は、バッチファイル内のパスを修正
  • 例: "C:\Program Files\IBM\SPSS\Modeler\19.0\bin\clemb.exe"

問題: ログファイルにエラーが記録される

対処法:

  • clemb.logファイルを確認してエラー内容を特定
  • ファイルパスの区切り文字は\\(バックスラッシュ2つ)を使用
  • ファイルの存在確認とアクセス権限を確認

まとめ

SPSS ModelerのclembコマンドでWindows環境において日本語を正しく処理するには、以下の3つの手順が必要です:

  1. Python 2.7のユニコードプレフィックス: すべての日本語文字列にu""を付ける
  2. UTF-8エンコーディング: スクリプトファイルをUTF-8で保存
  3. 実行環境の設定(Windows環境のみ): コマンドプロンプトとJavaのエンコーディングをUTF-8に設定

これらの設定により、ノード名、ファイルパス、print文の出力など、スクリプト内のすべての日本語が正しく処理されます。

環境別の必要な手順:

  • Windows環境: 手順1、2、3のすべてが必要
  • macOS/Linux環境: 手順1のみ必要(手順2と3は通常不要、デフォルトでUTF-8が使用されるため)
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?