在 SPSS Modeler 中使用 Python 实现数据流的反馈循环

64 阅读2分钟

SPSS Modeler 新手希望在 SPSS Modeler 中使用 Python 脚本实现一个反馈循环。当前的数据流程如下:

数据导入 -> 计算统计量 -> 条件筛选器 -> 输出

目标是将条件筛选器的输出反馈到计算统计量节点,并且在一个条件得到满足之前重复这个循环,如下所示:

数据导入 -> 计算统计量 -> 条件筛选器 -> 输出
                    ^                    |
                    |____________________|

2、解决方案

有以下两种方法可以实现这一目标:

  1. 使用 Python 脚本

以下是一个 Python 脚本示例,可以实现上述目标:

import spss, spssaux

# 定义数据导入节点
data_import_node = spssaux.SPSSNode("Data Import")
data_import_node.setProperties({"File": "data.csv", "Type": "CSV"})

# 定义计算统计量节点
derive_stats_node = spssaux.SPSSNode("Derive Statistics")
derive_stats_node.setProperties({"Variables": ["age", "gender", "income"], "Statistics": ["mean", "median", "mode"]})

# 定义条件筛选器节点
conditional_filter_node = spssaux.SPSSNode("Conditional Filter")
conditional_filter_node.setProperties({"Condition": "age > 18"})

# 定义输出节点
output_node = spssaux.SPSSNode("Output")
output_node.setProperties({"File": "output.csv", "Type": "CSV"})

# 创建一个列表来存储中间结果
stats_list = []

# 将节点连接起来
data_import_node.connectTo(derive_stats_node)
derive_stats_node.connectTo(conditional_filter_node)
conditional_filter_node.connectTo(output_node)

# 运行数据流程
spss.SubmitNodes([data_import_node, derive_stats_node, conditional_filter_node, output_node])

# 获取条件筛选器的输出
filtered_data = conditional_filter_node.getOutput()

# 将条件筛选器的输出反馈到计算统计量节点
derive_stats_node.setInput(filtered_data)

# 重复循环,直到条件得到满足
while True:
    # 计算统计量
    spss.SubmitNodes([derive_stats_node])

    # 获取计算统计量的输出
    stats = derive_stats_node.getOutput()

    # 将计算统计量的输出添加到列表中
    stats_list.append(stats)

    # 检查条件是否得到满足
    if stats[-1]["mean"]["age"] > 25:
        break

# 将列表中的结果保存到文件中
with open("stats.csv", "w") as f:
    for stats in stats_list:
        f.write(f"{stats['mean']['age']}, {stats['median']['age']}, {stats['mode']['age']}\n")
  1. 使用 SPSS Modeler 内置的循环节点

SPSS Modeler 还提供了一个内置的循环节点,可以实现上述目标。循环节点允许用户在满足一定条件之前多次执行一个数据流程。

要使用循环节点,首先需要创建一个数据流程,其中包含需要重复执行的节点。然后,将循环节点添加到数据流程的开头,并将需要重复执行的数据流程连接到循环节点的输出。最后,将条件节点连接到循环节点的循环条件输入端口。

以下是一个使用循环节点实现上述目标的示例:

循环节点 -> 数据导入 -> 计算统计量 -> 条件筛选器 -> 输出

希望这些方案可以帮助您在 SPSS Modeler 中实现数据流的反馈循环。