IBM Support

Python Scriptを用いたデモ用ストリームの実装(catalog_forecast.str)

White Papers


Abstract

IBM SPSS Modelerでは、アプリケーションの例として使用されるデータ・ファイルやサンプル・ストリームが、製品のインストールディレクトリのDemosフォルダー (例: C:¥Program Files¥IBM¥SPSS¥Modeler¥<version>¥Demos) にインストールされいる。これらのサンプル・ストリームはGUIをベースに作成されているが、Python Scriptを用いて実装することも可能である。ここでは、サンプル・ストリームの一つである catalog_forecast.str を Script ベースで作成する方法について紹介する。

Content

使用する catalog_forecast.str はGUI上では下図のように構成されており、使用しているノードは以下の 3 種類である。
  • Statistics ファイルノード (statisticsimportnode)
  • 時系列ノード (ts)
  • 時系列グラフ・ノード (timeplotnode)
catalog_forecast.str
ストリームの具体的な内容はこちら
ここでは、このストリームをpythonスクリプトで作成・設定する方法を紹介する。
 
※Note※
ノード、ストリーム、モデル、および出力のすべてには、ほとんどの場合に設定可能なプロパティーがある。 通常、プロパティーはオブジェクトの動作および外観を変更するために使用され、今回もそのプロパティーを設定しながらストリームを構築していく。オブジェクトのプロパティーのアクセスおよび設定に使用できるメソッドはこちら
  1. Statistics ファイルノード (statisticsimportnode)
    まず "createAt" メソッドを用いて、Statistics ファイルノードをキャンバス上に作成する。"create" メソッドを使用してもノードを作成することができるが、こちらを使うとノードを作成するキャンバスの位置を指定できないため "createAt" を使う。このメソッドの第一引数に "statisticsimport" を指定すると、作成されるノードがStatistics ファイルノードとなる。
    次に読み込むデータを指定する必要がある。プロパティー "full_filename" では、ファイルのディレクトリーを含む完全な名前を指定することで、そのファイルをノードに読み込むことができる。
    変数名のプロパティーとして "名前とラベルを読み込み" を選択し、値のプロパティーとしては "データとラベルを読み込み" を選択する。
    Statistics ファイルノードでは、データ型ノードと同様にフィールドのメタデータやプロパティーを指定することができる。ここでは分析対象として フィールド "men" を指定し、他のフィールドは全て "None" に設定する。
    stream = modeler.script.stream()
    
    # Input
    statisticsimport_node = stream.createAt("statisticsimport", "SAV Import", 100, 175)
    
    statisticsimport_node.setPropertyValue("full_filename", "$CLEO_DEMOS/catalog_seasfac.sav")
    statisticsimport_node.setPropertyValue("import_names", "NamesAndLabels")
    statisticsimport_node.setPropertyValue("import_data", "DataAndLabels")
    statisticsimport_node.setPropertyValue("use_field_format_for_storage", True)
    
    statisticsimport_node.setKeyedPropertyValue("direction", "men", "Target")
    statisticsimport_node.setKeyedPropertyValue("type", "men", "Default")
    statisticsimport_node.setKeyedPropertyValue("value_mode", "men", "Read")
    for field in ["date", "women", "jewel", "mail", "page", "phone", "print", "service", "YEAR_", "MONTH_", "DATE_", \
                        "Seasonal_Err_Men", "Seasonal_AdjSer_Men", "Seasonal_Factors_Men", "Seasonal_TrendCycle_Men"]:
        statisticsimport_node.setKeyedPropertyValue("direction", field, "None")
    Statistics ファイルノードのプロパティーに関する詳細
     
  2. 時系列ノード (ts)
    "createAt" でノードをキャンバス上に作成する。第一引数に "ts" を指定すると時系列ノードを作成できる。
    次に、作成したノードを接続させる。"link" メソッドを使うと、引数に指定した各ノードを接続することができる。第一引数が接続元、第二引数が接続先となっている。ここでは Statistics ファイルノードと時系列ノードを接続する。
    時系列ノードでは、時系列から指数平滑法、1 変量の自己回帰型統合移動平均法 (ARIMA)、および多変量 ARIMA (または伝達関数) モデルを推測し、将来のパフォーマンスの予測を作成することができる。ここでは、指数平滑化を使用した場合の設定例を載せる。モデルタイプはデフォルトのシンプルとする。
     
    # Ts
    ts_node = stream.createAt("ts", "My node", 250, 175)
    stream.link(statisticsimport_node, ts_node)
    
    ts_node.setPropertyValue("date_time_field", "date")
    ts_node.setPropertyValue("input_interval", "Month")
    ts_node.setPropertyValue("method", "Exsmooth")
    ts_node.setPropertyValue("cal_PI", True)
    ts_node.setPropertyValue("extend_records_into_future", True)
    ts_node.setPropertyValue("conf_limits", True)
    ts_node.setPropertyValue("noise_res", True)
    時系列ノードのプロパティーに関する詳細
     
  3. 実行
    ストリームを実行してモデルナゲットを生成する。
    次に "finByType" メソッドでモデルナゲットのオブジェクトを取得する。時系列ノードから作成されたモデルナゲットを探す場合、第一引数には "applyts" を指定する。
    # Execution
    modeler.script.stream().runAll(None)
    
    model_nugget = stream.findByType("applyts", None)
    時系列モデルナゲットのプロパティーに関する詳細
     
  4. 時系列グラフノード (timeplotnode)
    "createAt" でノードをキャンバス上に作成する。第一引数に "timeplot" を指定すると時系列グラフノードを作成できる。
    また、"link" メソッドでモデルナゲットと時系列グラフノードを接続する。
    時系列グラフノードでは、時系列データの 1 つ以上のセットを表示する。そのため、x軸で使用するフィールドやy軸で使用するフィールドを指定する必要がある。
    最後に時系列グラフノードを実行することで、グラフを画面上に出力させることができる。
    # Timeplot
    timeplot_node = stream.createAt("timeplot", "My node", 400, 292)
    stream.link(model_nugget, timeplot_node)
    
    timeplot_node.setPropertyValue("use_custom_x_field", True)
    timeplot_node.setPropertyValue("x_field", "date")
    timeplot_node.setPropertyValue("y_fields", ["men", "$TS-men"])
    timeplot_node.setPropertyValue("panel", False)
    timeplot_node.setPropertyValue("normalize", False)
    
    timeplot_node.run(None)

今回使用したpythonスクリプト

[{"Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SS3RA7","label":"IBM SPSS Modeler"},"ARM Category":[{"code":"a8m500000008TyaAAE","label":"Modeler->Stream"}],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"18.2.1"}]

Document Information

Modified date:
15 December 2020

UID

ibm16382134