パラメーター

パラメーターは、直接スクリプトの中で値を固定的にコーディングするのではなく、 実行時に渡す場合に便利です。 パラメーターとその値は、フローの場合と同じ方法で定義されます。つまり、フローのパラメーター・テーブル内の項目として、またはコマンド行のパラメーターとして定義されます。 Streamクラスは、以下の表に示すように、ParameterProviderオブジェクトによって定義された一連の関数を実装します。 Sessionは、これらの関数を定義するオブジェクトを返すgetParameters()呼び出しを提供します。

表 1. ParameterProvider オブジェクトによって定義されている関数
方法 戻りの型 説明
p.parameterIterator() イテレーター このオブジェクトのパラメーター名の反復子を返します。
p.getParameterDefinition( parameterName) ParameterDefinition 指定された名前を持つパラメーターのパラメーター定義を返します。そのようなパラメーターがこのプロバイダーに存在しない場合は、Noneを返します。 結果は、 メソッドが呼び出された時点での定義のスナップショットである可能性があり、 その後にこのプロバイダーを通じてパラメーターに対して行われた変更が反映されているとは限りません。
p.getParameterLabel(parameterName) string 指定されたパラメーターのラベルを返すか、そのようなパラメーターが存在しない場合はNoneを返します。
p.setParameterLabel(parameterName, label) 適用外 指定されたパラメーターのラベルを設定します。
p.getParameterStorage( parameterName) ParameterStorage 指定されたパラメーターのストレージを返すか、そのようなパラメーターが存在しない場合はNoneを返します。
p.setParameterStorage( parameterName, storage) 適用外 指定されたパラメーターのストレージを設定します。
p.getParameterType(parameterName) ParameterType 指定されたパラメーターのタイプを返すか、そのようなパラメーターが存在しない場合はNoneを返します。
p.setParameterType(parameterName, type) 適用外 指定されたパラメーターのデータ型を設定します。
p.getParameterValue(parameterName) オブジェクト 指定されたパラメーターの値を返します。そのようなパラメーターが存在しない場合はNoneを返します。
p.setParameterValue(parameterName, value) 適用外 指定されたパラメーターの値を設定します。

以下の例では、スクリプトで通信データを集計して、 平均収入データが最も低い領域を探します。 その後、この領域でフロー・パラメーターが設定されます。 このフロー・パラメーターは条件抽出ノードで使用され、残りのデータに対してチャーン・モデルが作成される前に、その領域をデータから除外します。

この例では、スクリプトで条件抽出ノード自体を生成するため、 正しい値を条件抽出ノードの式に直接生成できたという点で、 不自然な例になっています。 ただし、フローは通常は事前作成されているため、この方法でパラメーターを設定すると便利な例が提供されます。

このサンプル・スクリプトの最初の部分では、平均収入が最も低い領域を含むフロー・パラメーターを作成します。 また、 スクリプトでは集計ブランチとモデル作成ブランチにノードを作成し、相互に接続します。

import modeler.api

stream = modeler.script.stream()

# Initialize a flow parameter
stream.setParameterStorage("LowestRegion", modeler.api.ParameterStorage.INTEGER)

# First create the aggregation branch to compute the average income per region
sourcenode = stream.findByID("idGXVBG5FBZH")

aggregatenode = modeler.script.stream().createAt("aggregate", "Aggregate", 294, 142)
aggregatenode.setPropertyValue("keys", ["region"])
aggregatenode.setKeyedPropertyValue("aggregates", "income", ["Mean"])

tablenode = modeler.script.stream().createAt("table", "Table", 462, 142)

stream.link(sourcenode, aggregatenode)
stream.link(aggregatenode, tablenode)

selectnode = stream.createAt("select", "Select", 210, 232)
selectnode.setPropertyValue("mode", "Discard")
# Reference the flow parameter in the selection
selectnode.setPropertyValue("condition", "'region' = '$P-LowestRegion'")

typenode = stream.createAt("type", "Type", 366, 232)
typenode.setKeyedPropertyValue("direction", "Drug", "Target")

c50node = stream.createAt("c50", "C5.0", 534, 232)

stream.link(sourcenode, selectnode)
stream.link(selectnode, typenode)
stream.link(typenode, c50node)

このサンプル・スクリプトでは、以下のフローが作成されます。

図1: サンプル・スクリプトの結果のフロー
サンプル・スクリプトの結果のフロー