SPSS 中的 Python 使用指南

作者:Ruben Geert van den Berg,归属于 SPSS Python 基础

  • SPSS Python Essentials (SPSS Python 必备组件)
  • 从 SPSS 语法窗口运行 Python
  • 将 Python 代码封装成函数
  • 编写自己的 Python 模块
  • 创建 SPSS 扩展

SPSS Python Essentials (SPSS Python 必备组件)

首先,在 SPSS 中使用 Python,始终需要你的计算机上安装:

  • SPSS
  • Python
  • SPSS-Python 插件文件

这些组件统称为 SPSS Python essentials (SPSS Python 必备组件)。对于最新的 SPSS 版本,默认情况下会安装 Python 必备组件。一种检查方法是导航到 E dit (编辑) SPSS Menu Arrow Optio n s (选项) SPSS Menu Arrow File Locations (文件位置),你可能会在其中找到一些 Python 位置,如下所示。

SPSS Python Location In Edit Options

那么你应该在这里看到什么呢?

  • 如果你在这里看到一个活动的 Python 3 位置,那么一切就绪;
  • 如果你 看到一个活动的 Python 2 位置,那么你只能使用 Python 2,但它已经不再受支持。最好的选择是升级到 SPSS 24 或更高版本(最好);
  • 如果所有位置都显示为灰色(甚至不存在),那么你的 SPSS 没有安装任何 Python 必备组件。在这种情况下,你需要(重新)安装最新的 SPSS 版本。

从 SPSS 语法窗口运行 Python

好的。如果你的 SPSS 正确安装了 Python 必备组件,那么接下来该做什么?

最简单的方法是从 SPSS 语法窗口运行 Python。将所有 Python 代码行用 BEGIN PROGRAM PYTHON3.END PROGRAM. 括起来,如下所示。

Python 3 Program Block In SPSS Syntax Window

尝试复制、粘贴并运行下面的整个语法。请注意,此 Python 代码块只是将所有变量名转换为小写,无论它们是什么或有多少。

***SPSS syntax for creating empty test data.
**
data list free/V1 V2 v3 v4 EDUC gender SAlaRY.
begin data
end data.

***Run Python block for lowercasing all variable names.
**
begin program python3.
import spss,spssaux
oldNames = spssaux.GetVariableNamesList()
newNames = [var.lower() for var in oldNames]
spss.Submit("RENAME VARIABLES (%s = %s)."%(' '.join(oldNames),' '.join(newNames)))
end program.

将 Python 代码封装成函数

好的,我们刚刚从 SPSS 语法窗口运行了一些 Python 代码。这样做是可以的,但存在一些缺点:

  • 如果我们的语法包含很长的 Python 代码块,那么它的可读性和可管理性就会降低;
  • 如果我们在多个 SPSS 语法文件中使用相同的 Python 代码块,并且想要更正它,那么我们需要在每个语法文件中都进行更正;
  • SPSS 语法编辑器是一个很差的文本编辑器。

解决这些问题的第一步是将我们的 Python 代码封装到一个 Python 函数中。

***Create empty test data.
**
data list free/V1 V2 v3 v4 EDUC gender SAlaRY.
begin data
end data.

***Define lowerCaseVars as Python function.
**
begin program python3.
def lowerCaseVars():
    import spss,spssaux
    oldNames = spssaux.GetVariableNamesList()
    newNames = [var.lower() for var in oldNames]
    spss.Submit("RENAME VARIABLES (%s = %s)."%(' '.join(oldNames),' '.join(newNames)))
end program.

***Run function.
**
begin program python3.
lowerCaseVars()
end program.

请注意,我们首先 定义 一个 Python 函数,然后 运行 它。这样,你可以开发一个包含多个此类函数的 SPSS 语法文件。

只需运行此文件一次(最好使用 INSERT),即可定义所有 Python 函数。现在,你可以在 SPSS 会话期间将这些函数用于所有项目。

编写自己的 Python 模块

我们刚刚定义并运行了一个函数。下一步是将我们的函数移动到一个 Python 文件中:这是一个扩展名为 .py 的纯文本文件,我们将把它放在 C:\Program Files\IBM\SPSS Statistics\Python3\Lib\site-packages 或者 site-packages 文件夹所在的任何位置。

Python Module In Site Packages Folder

现在,我们可以使用 Notepad++ 编辑此文件,它比 SPSS 的语法编辑器好用得多。由于 Python 文件只包含 Python 代码,因此我们将省略 BEGIN PROGRAM PYTHON3.END PROGRAM.

Python Module Contents

如果现在我们在 SPSS 中导入我们的模块,我们可以立即运行它包含的任何函数,如下所示。

***Create empty test data.
**
data list free/V1 v2 V3 V4 v5 V6.
begin data
end data.

***Import module and lowercase variable names.
**
begin program python3.
import ruben
ruben.lowerCaseVars()
end program.

开发和使用我们自己的 Python 模块具有很大的优势:

  • 每个函数只定义一次,不会使我们的语法窗口变得混乱;
  • 如果我们需要更正某些函数,我们只需要在一个可以被多个 SPSS 语法文件使用的模块中进行更正;
  • 我们可以在模块中使用函数中的函数。这样做可以使我们的代码更短、更易于管理。

一个小提示:如果你正在开发你的模块,请在每次编辑后重新加载它。

***Tip: if you're editing your module, reload it before each use.
**
begin program python3.
import ruben,importlib **# import ruben and importlib modules
**
importlib.reload(ruben) **# use importlib to reload ruben module
**
ruben.lowerCaseVars() **# run function from ruben module
**
end program.

创建 SPSS 扩展

SPSS 扩展是由所有 SPSS 用户开发的,可以用于各种任务的工具。如需查看出色的 SPSS 扩展集合,请访问 SPSS Tools - Overview

扩展很容易安装,通常可以从 SPSS 菜单对话框中运行,如下所示。

SPSS Create All Scatterplots Tool Dialog 2

那么这是如何工作的,它与 Python 有什么关系?

嗯,大多数扩展都定义了新的 SPSS 语法命令。这些命令与内置命令(如 FREQUENCIESDESCRIPTIVES)没有太大区别。下面的语法显示了 SPSS - Create All Scatterplots Tool 中的一个示例。

***Fit all possible curves for 4 predictors onto single dependent variable.
**
SPSS TUTORIALS SCATTERS YVARS=costs XVARS=alco cigs exer age
/OPTIONS ANALYSIS=FITALLTABLES ACTION=RUN.

现在,运行此 SPSS 语法命令基本上将其参数(如输入/输出变量、值或标题)传递给底层 Python 函数并运行它。反过来,此 Python 函数会创建并运行 SPSS 语法,从而完成最终任务。

请注意,SPSS 用户在运行此语法时不会 看到 任何 Python 代码,除非他们能使 Python 代码崩溃。要真正看到 Python 代码,你可以解压缩 SPSS 扩展 (.spe) 文件,并在生成的文件夹中查找一些 Python (.py) 文件。

Unzip SPSS Extension File 解压缩 SPSS 扩展 (.spe) 文件会生成一个文件夹,你通常会在其中找到一个 Python (.py) 文件。

关于 SPSS 扩展的一些最后说明是,开发它们非常具有挑战性,需要大量的实践。然而,编写良好的扩展可以在未来的几年里为你节省大量的时间和精力。