下面的代码展示了执行指令表节点来在表中显示计算出的指令的流脚本。
1
2
3
4
5
| # Execute the "Directives" table node to compute the directives
directivesResults = []
diagram.findByType('tablenode', "Directives .run(directivesResults)
directivesRowSet = directivesResults[0].getRowSet()
directivesRowCount = directivesRowSet.getRowCount()
|
该代码还捕获指令总数作为表中的行数。
directivesAll = [ ] 变量声明为持有从表输出捕获的列表中的每个指令。
随着脚本迭代表输出的每一行,下面的代码将系数和条件组装到一个指令中,该指令存储为一个包含两个元素的列表。
1
2
3
4
5
6
7
8
9
10
11
| # Iterate through the table output to read each directive
for ii in range(directivesRowCount):
directiveCurrent = []
# Get the factor
directiveFactor = directivesRowSet.getValueAt(ii, 0)
directiveCurrent.append(directiveFactor)
# Get the condition
directiveCondition = directivesRowSet.getValueAt(ii, 1)
directiveCurrent.append(directiveCondition)
# Append the directive into a list of lists
directivesAll.append(directiveCurrent)
|
使用下面的代码组装指令后,就可以将它们用作平衡节点中的指令。
1
2
3
| # Set the directives in the Balance node
balanceNode = diagram.findByType('balancenode', "Balance")
balanceNode.setPropertyValue('directives', directivesAll)
|
无论在执行脚本前平衡节点中的设置是什么,这些设置都会反映出执行脚本后的指令表节点输出的内容,如 所示。
脚本化的平衡节点指令 该数据集现在拥有均匀的男女分布,而且它将始终拥有均衡的分布,甚至在源数据中的基础分布发生改变时也是如此。
IDGENDER NUM_PAGES A Male 181 D Male 164 E Female 175 F Female 188 无论您喜欢 boost 不常见的类别还是 reduce 更常见的类别,此方法都适用,因为这取决于您对 Target_count 字段的计算结果。
也可以仅使用画布上的节点,按动态分配的系数来复制平衡节点的输出,而无需编写脚本。如果流脚本已很复杂,或者需要在多个属性间进行更复杂的平衡,您可能更喜欢此选项。
最好在减少更常见类别中的案例数量时使用动态平衡,因为这使您能够使用许多相同的基础节点来获得 中演示的相同结果,而无需执行脚本。
示例 5:使用复杂采样的动态平衡 本示例中使用的流。
示例 5 的目的与示例 4 相同:创建一个具有均匀的男女分布的数据集。
通过采样执行动态平衡的流 该流的上分支几乎总是与示例 4 中使用的流相同,除非不再需要名为 Factor and Condition 的导出节点并已省略它。
第二个合并节点将源数据与上分支中计算的指令相合并,包括每个类别的目标数量和将用于采样更常见类别的系数。
GENDERIDNUM_PAGESTarget_count Female F 188 4 Female E 175 4 Male D 164 4 Male C 142 4 Male B 191 4 Male A 181 4 名为 Complex 的 将代替平衡节点来执行平衡。
将采样方法设置为 Complex,如 所示。选择 GENDER 字段作为用于对采样分层的字段。
样本节点的设置 然后选择计算的字段 Factor 作为按比例随机采样的变量。
IDGENDERNUM_PAGES A Male 181 D Male 164 E Female 175 F Female 188 同样地,结果数据集具有均匀的男女分布。
动态平衡方法的一个优势是,样本节点包含将随机种子设置为常量值的选项,这使得随机采样在每次执行时返回完全相同的记录。常规的平衡节点没有此功能,如 中所述。 |