背景介绍

近年来,商业分析(Business Analytics,BA)软件逐渐成为企业增强洞察力的利器。其中,IBM SPSS Statistics 是统计分析领域中久享盛名的应用软件。企业在实际运营中,已根据不同的业务需求,开发或购买了满足自身需求的商业数据整合方案,并期待与 Statistics 进行集成,以便更高效、准确的分析数据,提取数据中隐含的信息。

Statistics 不仅为用户提供了丰富的统计算法来帮助用户分析数据,而且也提供了非常灵活的编程接口,供外部用户将自定义的功能模块与 Statistics 集成。用户可以通过自定义模块对 Statistics 进行功能扩展。借助 Statistics,用户自定义模块可以获得更加完整、有意义的输入数据。

Statistics 16.0(及以上)为用户提供了的可编程插件(Programmability plug-ins)包括 Python plug-in、R plug-in 和 Microsoft .NET plug-in。其中,Python 语法简洁而清晰、具有丰富强大的类库,并且其能够很轻松的与其他语言实现的模块集成在一起。所以,本文将使用 Python 功能模块作为演示。

Customer Dialog 简介

Statistics 在编程插件的基础上提供了 Extension Command 机制使用户能够以 Statistics 内部语法命令(syntax command) 的形式来包装使用编程插件开发出来的功能模块。Customer Dialog 为 Extension Command 提供了相应的用户界面。

Customer Dialog 允许用户创建符合 Statistics 界面风格的对话窗口,以及创建自定义的 Statistics 内置统计程序。对话窗口作为该统计程序的用户界面,可接受并传递基于用户输入的参数,并调用相应的内置统计程序。通过 Customer Dialog Builder,用户可以

创建自定义的对话过程,调用内置统计程序。

为一组扩展命令集创建用户界面。扩展命令是指,用户自定义的、由 Python 或 R 实现的 SPSS Statistics 命令。

保存创建完成的 Customer Dialog,并将其安装至 Statistics 中。

Statistics Syntax 和 Python plug-in 简介

SPSS Statistics 具备强大的数据处理和分析功能,除了提供友好、灵活的 UI 操作界面外,Statistics 为其所有的功能设计了相应的命令,即 Statistics 的语法 Syntax。除此之外,Syntax 具有高级编程的功能,可以完成比 UI 所提供的功能更为复杂的数据分析工作。SPSS Statistics 内核是基于命令驱动的,Syntax 是其灵魂。用户在 UI 界面的所有操作,均会被转换成 Syntax 命令传递至内核执行。详见下图。

图 1. Statistics 执行过程

Python plug-in 和 Statistics 产品的交互方式很灵活。用户既可以在自定义的 Python 代码中引入 SPSS 模块,运用 Statistics 完成数据的读取、处理、分析、输出任务,也可以在 Syntax 中直接加入 Python 代码块(BEGIN PROGRAM PYTHON-END PROGRAM)来控制 Syntax 工作流。本文采用了后一种方式。如:

图 2. Python Plug-in 程序段 1

使用 Python Plug-in 的好处是,可以动态的创建 string 字符串以及 Syntax 命令。

集成方法论述

由上节讨论可知,我们可以利用 Statistics 中的 Python Plug-in 对自定义 Python 模块进行集成,包括:利用 Customer Dialog 设计满足用户习惯的 UI 交互界面;编写内置统计程序;与 Statistics 进行集成。

本文设计的 Python 功能模块实现了一种客户分群方法。其依据大量的客户属性数据和消费数据,将客户分组,属于同一组的客户具有极大的相似性,可以采用相同的商业策略;不同组的客户具有极大的差异性,保证组与组之间的差别最大化,以便采取不同的商业策略,获得最大的商业利润。

UI 界面设计及参数传递

本节将讨论 UI 界面的布局以及 UI 参数传递。在设计 UI 界面前,我们首先应该明确,Python 功能模块所需的输入参数,这些参数将出现在 UI 界面上。同时,若模块功能较为复杂,可以添加子对话过程实现特定的功能。该功能模块的输入包括:数据文件、控制文件以及最大分组数。输出为客户分群结果文件,包括用户的基本信息以及所属的群组号。子对话的功能为客户分群结果上传至数据库。

运行 Utilities -> Customer Dialog Builder,出现 Customer Dialog 编辑界面。通过拖拽控件的方式,用户可以快捷地对界面进行编辑,并且指定相应控件的属性。

图 3. Customer Dialog 1- 主对话框界面

图中,该 dialog 有 5 个控件。Item 1 为该对话窗口的标题,将显示在该窗口的标题栏中;Item 2、Item 3 以及 Item 4 用于用户输入 Python 功能模块参数 , 分别为控制文件路径,数据文件路径以及最大分组数;Item 5 为该对话窗口的子对话窗口,用于实现特定子功能。本文中设计的子功能是将 Python 模块的执行结果上传至数据库中。Item 5 的 UI 界面如下图。

图 4. Customer Dialog 2 – 子对话框界面

图 4 中 Item 6 为子对话框的标题,Item 7、Item8 以及 Item9 用于输入上传数据库所需参数,分别为 DSN 名称、数据库名称,以及待建的数据表名。

以 Item 2 为例,我们演示如何传递参数。下图为 Item 2 的属性。

图 5. Customer Dialog 3 – 控件属性

其中,属性 “Identifier” 用于传递参数,如图中的 “control_file_path”。它记录用户的输入值,在 Python 程序中,以 “%%” 标记对读出该输入值,传递给 Syntax 和 Python 程序。传递过程如下图所示。

图 6. Python Plug-in 程序段 2 – Python Plug-in 参数传递

编辑好 UI 界面后,将其保存为 customer dialog package file(.spd) 文件,本文中为 CustomerClustering.spd。使用 “Preview” 功能,对界面进行预览。

图 7. Customer Dialog 4 – Preview 1

图 7 红框部分是子对话窗口按钮,用户点击该按钮将出现子对话框,如下图所示。

图 8. Customer Dialog 5 – Preview 2

在设计子对话窗口控件属性时,我们为 “DSN” 以及 “Database Name” 设置了默认值 “TEST”。

集成 Python 功能模块

本文涉及到的自定义 Python 模块主要实现两类功能。一类是客户分群,是用嵌入了 Python 程序的 Syntax 实现 (CustomerClustering.sps) ;另一类是分群结果上传至数据库,是用 Python 脚本实现 (UploadtoDatabase.py)。我们利用 Customer Dialog 里的 Syntax Template 将 UI 参数与 Python 程序进行关联。

集成客户分群功能

在集成该功能时,本文选择了 Statistics 提供的 “INSERT” 命令。我们通过用户从 UI 界面的输入 control_file_path、input_file_path 获得待操作的数据集,通过 max_clusters_ui 获取到命令文件运行所需参数,并将该参数赋值给变量 max_clusters。max_clusters 为命令文件中定义的全局变量 , 以实现参数传递。最后,我们利用 spss.Submit( ) 函数执行该命令。至此,内置统计程序在运行时,可以调用指定的命令文件,并将运行时参数传递给该命令文件。具体实现如下图所示。

图 9. 集成客户分群功能

集成数据库上传功能

出于安全性考虑,我们将 UploadtoDatabase.py 文件编辑为二进制的 UploadtoDatabase.pyc 文件以避免暴露源代码,所以图中 “import UploadtoDatabase” 所引入的实际为 .pyc 文件。这里,在引入 .pyc 文件时,需要指定所引入文件的路径,即 “sys.path.append(‘C:\Integration\PythonScript\’)” 所示。dsn,db_name 和 db_tablename 为用户通过 UI 界面传递的数据库信息。调用方法如下。

图 10. 集成数据库上传功能

图中 UploadtoDatabase 中 run 函数的声明和实现方式如下:

图 11. Python Script 主函数定义

保存 Python 功能模块运行结果

我们可以将 Python 功能模块的运行结果保存为指定格式文件,或上传至数据库。使用 Syntax “SAVE TRANSLATE OUTFILE”命令可将运行结果保存为指定格式的文件。其中,数据集 RESULT 为 Python 功能模块的输出数据集,output_result_file 为待保存文件的文件名。我们首先设置操作的主数据集是 RESULT,然后使用 spss.Submit( ) 函数执行保存输出结果命令,就可以将 RESULT 数据集保存为指定格式的文件。具体命令如下。

图 12. 文件保存程序段

本例中,我们将 RESULT 数据集分别保存为 .csv 文件以及 .sav 文件。除此之外,我们还可以利用 ODBC 连接将输出数据集 RESULT 上传至数据库,为此,我们需要在系统中设定 DSN(Data Source Name)。DSN 为 ODBC 指定了某一数据源和相对应的 ODBC 驱动程序。接着,使用 Syntax “SAVE TRANSLATE ”命令实现上传数据库功能,具体命令如下。

清单 1. 数据库上传程序段

begin program python.

import spss

import spssaux

DSN = r"%%DSN%%"

db_name=r"%%DBName%%"

table_name=r"%%TableName%%"

spss.Submit("dataset active RESULTS . \n")

spss.Submit("execute . \n")

varcount=spss.GetVariableCount()

data_str = spss.GetVariableName(0)

if spss.GetVariableType(0) > 0:

data_type_str=spss.GetVariableName(0)+' '+'varchar'

else:

data_type_str=spss.GetVariableName(0)+' '+ 'double'

for i in range(1,varcount):

data_str = data_str +', '+ spss.GetVariableName(i)

data_type_str = data_type_str +',

'+spss.GetVariableName(i)

if spss.GetVariableType(i) > 0:

data_type_str = ' '+data_type_str+' ' +'varchar'

else:

data_type_str = ' '+data_type_str+' ' + 'double'

print DSN,db_name,table_name

commands="""

SAVE TRANSLATE /TYPE=ODBC

/CONNECT='DSN="""+DSN+""";UID= ;PWD=,3;DBALIAS="""+db_name+

""";'

/ENCRYPTED

/MISSING=IGNORE

/SQL='CREATE TABLE """+table_name+"""

("""+data_type_str+""" )'

/REPLACE

/TABLE='SPSS_TEMP'

/KEEP=All

/SQL='INSERT INTO """+table_name+""" ("""+data_str+""")

SELECT """+data_str+""" FROM SPSS_TEMP'

/SQL='DROP TABLE SPSS_TEMP'."""

print commands

spss.Submit(commands)

end program.Show moreShow more icon

我们首先取得数据集 RESULT 中各数据值及其类型,根据这些数据信息用 SQL 命令在数据库中创建数据表,该表的表名是由用户通过 UI 界面指定的。

与 Statistics 进行集成

在 Customer Dialog 中设计完 UI 界面,把 UI 界面与上述的 Python 程序进行关联后,我们需要在 Statistics 中安装该 Customer Dialog,便于用户通过 UI 来使用我们自定义的 Python 功能模块。安装方式如图。

图 13. 安装 Customer Dialog 1

如图所示,在 Customer Dialog Builder 界面选择 File -> Install,选择保存好的对话框文件(CustomerClustering.spd)并指定安装位置本例中我们把创建的名为 Customer Clustering 的功能安装 至 Utilities 菜单下。安装完成结果如下所示。

图 14. 安装 Customer Dialog 2

如图所示,Statistics 的菜单栏 Utilities 下,出现了我们自定义的功能模块 Customer Clustering。

自定义 Python 模块运行演示及结果分析

本节分为两部分,讨论如何利用 Statistics 对自定义 Python 功能模块进行数据预处理以及对该功能模块的执行结果进行分析。

数据预处理

在大多数数据分析中,原始数据不适合直接使用,而需要进行预处理才能满足需求。比如,将多个小分类值组合为一个大分类值,或将一个连续变量转换成分类变量,这可以使得分析结果更易理解。本文需要把连续型变量”销售额”定义为一组分类变量,如:高、中、低,从而提高了数据的易用性。同时会使用 Statistics 的 Visual Binning 对功能模块输入数据进行预处理。

下面是处理过程。输入数据文件如下所示:

图 15. 输入文件演示

如图所示,我们需要对三类销售额进行分类,分别为 “SALES_RETAIL”、“SALES_ONLINE” 以及 “SALES_TOTAL”。我们以 “SLAES_RETAIL” 为例,其余两个变量处理过程与其类似。

在 Statistics 工具栏中,选择 Transform -> Visual Binning,出现 Visual Binning 对话框,选中 “SALES_RETAIL”,如下图所示。

图 16. Visual Binning 1

选择 “Continue”,指定新变量名 B_SALES_RETAIL。在 “Grid” 栏设置分类点(bin cut point)。这里,我们依据业务含义,选择了 9 个分类点,并点击 Make Lable 按钮,Statistics 会自动为分类变量生成标签。

图 17. Visual Binning 2

如图所示,我们把原始的 “SALES_RETAIL” 变量分为了 10 类,由图示可知,连续型变量 “SALES_RETAIL” 的值,将会分别落入分类类型 “B_SALES_RETAIL” 的 10 个分类值中。运行结果部分展示如下图所示。

图 18. Visual Binning 3

示例 Python 模块集成结果演示

原始数据的经过预处理后,已经满足了本文用户自定义功能模块的数据要求。现在,用户可以直接进入 Utilities->Customer Clustering,来调用自定义的方法并获得结果。

运行 Statistics 工具栏 Utilities -> Customer Clustering ,出现自定义对话框。

图 19. 集成结果演示 1

如图所示,输入所需参数,红框部分为我们数据预处理 Visual Binning 后的输入文件,用户规定最大分组为 8,则共有 9 个客户分群,分别为 0 至 8。点击 “OK” 运行,运行结果保存为 .csv 文件和 .sav 文件。除此之外,我们还可以将执行结果上传至数据库。点击 “Upload to Database”,出现如下子对话框。

图 20. 集成结果演示 2

如图所示,输入上传数据库所需参数,表 “CustomerClustering” 用于存储客户分群结果。

输出结果文件如下图所示。

图 21. 集成结果演示 3

其中,“CUSTOMER_CLUSTER” 为客户的分组信息,如 Customer ID 分别为 1 的客户,属于分组 5。数据库上传结果如下所示。

图 22. 集成结果演示 4

由图可知,我们在指定数据库 TEST 中,创建了表 CUSTOMERCLUSTERING,红框 3 中为 CUSTOMERCLUSTER 属性,其包含了客户所属分组信息。

示例 Python 模块集成结果分析

为了更加清楚的了解客户分群情况,我们可以利用 Statistics 中的 Frequencies 方法对其进行分析。分析结果如下。

表 1. 统计结果

由表 1 可知,输出结果中,针对客户分组”CUSTOMER_CLUSTER”共有 50000 条有效的客户记录,其中中位数为分组 4,说明大部分的客户都集中在前半部分的分组当中(分组 1 至分组 4),分组 1 拥有最多的客户。表 1 只能提供给我们大概的统计结果,业务含义较少,详细统计信息如下。

表 2. 统计结果明细

由表 2 可知,分组 0 拥有最少的客户数 427,分组 1 拥有最多的客户数 6217,并且客户较为均匀的分布在分组 1 至分组 8。客户分布情况图如下。

图 23. 客户分组图示

上图是对客户分群情况更为直观的展示,分组 1 至分组 8 拥有较多的客户,且分布较均匀。针对分组 0,由于其人数较少,业务优先级较低,我们可以对该组客户采用一般的销售策略。而对于分组 1 至分组 8,由于其人数较多,业务优先级较高,我们需要对该组客户进行进一步的分析,以便采取更加准确的销售策略,提升客户的忠诚度,减少客户流失。

结束语

本文介绍了用户自定义 Python 功能模块与 IBM SPSS Statistics 集成的方法,并对集成结果进行了演示与分析。通过本文,读者可以了解,如何设计满足用户习惯的 UI 交互界面,如何编写内置统计程序,以及如何与 Statistics 进行集成。

相关主题

python for spss statistics_IBM SPSS Statistics 与用户自定义 Python 模块的集成及分析相关推荐

  1. IBM SPSS Statistics 与用户自定义 Python 模块的集成及分析

    本文介绍了如何将用户自定义的功能模块与 IBM SPSS Statistics 进行集成, 如何利用 Statistics 提供的统计分析方法对功能模块的输入数据进行预处理,并对集成结果进行分析与演示 ...

  2. python方差的代码_Python statistics pvariance()用法及代码示例

    先决条件:Python统计信息| variance() pvariance()函数有助于计算整个方差,而不是样本方差.之间的唯一区别variance()和pvariance()是在使用variance ...

  3. 十三、写了两年多Python文章的我,带你走进Python数据分析

    @Author : By Runsen @Date : 2020/5/13 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

  4. 学python语言有前途吗-在成都学Python有发展前景吗?

    这两年在成都互联网行业,Python工程师是当仁不让的"网红",无论是技术热度,还是就业热度都超过很多其他语言,是非常有前景的工作.做Python开发有多种入门途径,比较流行的途径 ...

  5. python是什么意思中文、好学吗-python好学吗

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 先来装逼一下[传说我还是第一个vip周末班完成] 大家好,本人刚学完课程 ...

  6. 基于python的股票程序化交易论文_基于Python工具的股票量化投资策略研究

    2019 年第 07 期 20 世 纪 80 年代, 一 些 投 资 者 开 始 利用 计 算 机 研究金 融 数据 , 并 初显 成 效 . 20 世 纪 末 , 投 资 者 把 计 算 机 技术 ...

  7. python与金融投资_金融量化投资与Python

    一.为什么选择Python? 闲谈 计算机姑娘是擅长进行科学计算的,本来她就是做这个的,只不过后来人们让她处理了很多文字内容罢了,乃至于现在有一些人认为她是用来打字写文章的(变成打字机了),忘记了她最 ...

  8. python编写异常处理_Python 简明教程 --- 23,Python 异常处理

    要么做第一个,要么做最好的一个. 目录 我们在编写程序时,总会不自觉的出现一些错误,比如逻辑错误,语法错误和一些其它的运行时错误等. 逻辑错误: 这种错误不会导致程序崩溃,它不容易被发现,只有在执行结 ...

  9. python语法详解大全_笔记:Python 语法要点汇总

    Python 是一门解释型语言,无需编译和链接 Python 解释器 交互模式 脚本模式 源码编码 默认情况下,Python 源文件是 UTF-8 编码 指定源文件的字符编码 # -*- coding ...

  10. Python基础教程(七):函数、模块

    Python函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...

最新文章

  1. 数字图像处理:(4)二阶微分在数字图像处理中的应用
  2. springboot + rabbitmq 用了消息确认机制,感觉掉坑里了
  3. tar: Cowardly refusing to create an empty archive 问题
  4. layui如何获取父节点的父节点_jquery获取父元素或父节点的方法
  5. php简单实例,php实现推荐功能的简单实例
  6. Linux磁盘管理与文件系统(实验详解,一看就懂)
  7. java模板方法模式_Java中的模板方法模式
  8. mysql中条件查询加排序和索引的关系
  9. 百度地图SDK的使用
  10. 随机森林模型预测和交叉验证
  11. Web渗透测试实战——(1)Web渗透测试简介
  12. 射极跟随器实验报告数据处理_射极跟随器实验报告
  13. 视频流调试过程(海康威视+Kurento)
  14. 三星android怎么解锁屏幕旋转,三星S10如何设置打开应用自动旋转屏幕
  15. h5生成海报到php生成海报
  16. TCP/IP详解(全面)
  17. 微软新Logo四色代表什么?Win8/Office/Xbox等
  18. 单片机——C51实验含Proteus仿真(独立键盘,矩阵键盘)
  19. 优秀不够,你是否无可替代
  20. [踩坑]packets.go:428: busy buffer invalid connection

热门文章

  1. mvn命令及生命周期
  2. ocx控件注册和解除注册
  3. 小米路由器Android,手机设置小米路由器_小米路由器用手机设置教程-192路由网
  4. python打开pcap文件_python 抓包保存为pcap文件并解析的实例
  5. 区块链100讲:如果连电子钱包都不懂,还谈什么区块链开发(有彩蛋)
  6. 贝叶斯分析好坏_交易必读|浅谈贝叶斯分析
  7. 基于R语言的现代贝叶斯统计学(INLA下的贝叶斯回归、多层贝叶斯回归、生存分析、随机游走模型、广义可加模型、极端数据的贝叶斯分析等)
  8. 线性代数 --- LU分解(Gauss消元法的矩阵表示)
  9. zipf定律与相似性度量
  10. Handler native层实现原理