参数

参数提供了一种在运行时传递值的有用方法,而不是直接在脚本中硬编码。 参数及其值的定义方式与流的定义方式相同; 即,作为流的参数表中的条目,或作为命令行上的参数。 Stream 类实现由 ParameterProvider 对象定义的一组函数,如下表中所示。 Session 提供了一个 getParameters() 调用,该调用返回用于定义这些函数的对象。

表 1. 由 ParameterProvider 对象定义的功能
方法 返回类型 描述
p.parameterIterator() 迭代器 返回此对象的参数名称迭代器。
p.getParameterDefinition( parameterName) ParameterDefinition 返回具有指定名称的参数的定义,如果此提供程序中不存在此类参数,则返回 None 。 结果可能是调用方法时定义的快照,而不必反映通过此提供程序对参数所做的任何后续修改。
p.getParameterLabel(parameterName) 字符串 返回命名参数的标签,如果不存在该参数,则返回 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。 从示例脚本生成的流
从示例脚本生成的流