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

背景介绍

近年来,商业分析(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,用户可以

  1. 创建自定义的对话过程,调用内置统计程序。
  2. 为一组扩展命令集创建用户界面。扩展命令是指,用户自定义的、由 Python 或 R 实现的 SPSS Statistics 命令。
  3. 保存创建完成的 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 编辑界面。通过拖拽控件的方式,用户可以快捷地对界面进行编辑,并且指定相应控件的属性。各属性含义参见 Statistics 教程。

图 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 程序进行关联。

  1. 集成客户分群功能

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

图 9. 集成客户分群功能

  1. 集成数据库上传功能

出于安全性考虑,我们将 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.

我们首先取得数据集 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. 统计结果
Statistics
USTOMER_CLUSTER
N Valid 50000
Missing 0
Median 4.0000
Mode 1.00

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

表 2. 统计结果明细
CUSTOMER_CLUSTER
  Frequency Percent Valid Percent Cumulative Percent
Valid .00 427 .9 .9 .9
1.00 6217 12.4 12.4 13.3
2.00 6190 12.4 12.4 25.7
3.00 6194 12.4 12.4 38.1
4.00 6191 12.4 12.4 50.4
5.00 6188 12.4 12.4 62.8
6.00 6191 12.4 12.4 75.2
7.00 6194 12.4 12.4 87.6
8.00 6208 12.4 12.4 100.0
Total 50000 100.0 100.0  

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

图 23. 客户分组图示

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

回页首

结束语

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

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

  1. python数据统计插件_2016年新版数据统计分析工具IBM SPSS Statistics 24优化版

    IBM SPSS Statistics 24为IBM近期推出的新版数据统计分析软件,是目前各行业主流的数据统计分析工具.IBM SPSS Statistics在调查统计行业.市场研究行业.医学统计.政 ...

  2. IBM SPSS Statistics为什么更适合做大数据分析

    在这个大数据的时代,数据每时每刻都在产生.如何高效从这些数据中筛选.分析.提炼出有用的信息,成了当下世界的一个共同课题.我们对数据进行分析最重要的是得到想要的结果,这其中的过程当然是希望软件能够帮助我 ...

  3. IBM SPSS Statistics Subscription新版本发布

    IBM SPSS Statistics是世界领先的统计分析软件,至今已经有40多年的发展历程,广泛地应用于各个行业的分析领域,它的专业性及易用性,深受使用者的喜爱,在统计分析领域一直处于领导者地位. ...

  4. IBM.SPSS.Statistics.v23 win32+win64 MacOSX (统计分析工具)

    IBM.SPSS.Statistics.v23 win32+win64 MacOSX (统计分析工具) 一个划时代的统计分析产品-SPSS Statistics 隆重登场!              ...

  5. spss无法连接到本地计算机,有关IBM SPSS Statistics无法打开的几个原因,附带解决方法...

    IBMSPSSStatistics是一款非常专业的数据统计分析软件,因为该软件收费,所有很多人会选择非正版,这里就会出现各种问题,最常见的就是SPSS无法打开.根据用户反馈,本文整理了有关SPSS无法 ...

  6. 如何使用IBM SPSS Statistics卡方检验

    在使用IBM SPSS Statistics进行数据分析时,我们需要根据数据类型选择合适的检验方法,卡方检验就是一种较为常用的数据检验手段. 为此小编整理了一份SPSS卡方检验的基础教程供大家参考. ...

  7. IBM SPSS Statistics 26.0 for Linux Ubuntu 英/中文安装教程

    SPSS公司推出的软件 SPSS(Statistical Product Service Solutions),"统计产品与服务解决方案"软件.最初软件全称为"社会科学统 ...

  8. IBM SPSS Statistics编辑数据的基本操作

    在我们使用IBM SPSS Statistics进行数据分析的时候,面对着固定的个案和固定的变量,要是我们想要增加新的个案或者变量该怎么办呢?另外要是我们的数据非常的多,面对海量的数据我们该怎么样快速 ...

  9. IBM SPSS Statistics教程——多项排序功能详解

    排序功能是数据统计软件必不可少的一项主要功能,当我们在进行缺失值的查找.重复值的查找以及数据排名时,排序功能就显得非常方便有用.掌握好IBM SPSS Statistics的排序功能,是熟练掌握SPS ...

最新文章

  1. 无线路由器配置不佳 可耗净手机电量
  2. Tensorflow入门——训练结果的保存与加载
  3. 【Step1】【SPFA】poj2457-Part Acquisition
  4. 【c++】【转】c++中的explicit关键字
  5. SQL 性能优化梳理 —— 基本概念、创建时优化、查询时优化
  6. mac全选文字的快捷键_最全Mac系统快捷键一览
  7. html5中3个盒子怎样设置,Web前端开发任务驱动式教程(HTML5+CSS3+JavaScript)任务10 盒子模型及应用.pptx...
  8. 关于ASP.NET与CLR相互关系的一些总结
  9. Fedora 14常规娱乐软件
  10. javascript创建动态表格
  11. sublime安装插件详细教程
  12. stm8L 触摸库使用教程 一步一步
  13. 如何让MAC只显示外接屏幕!
  14. 一些EXCHANGE命令
  15. 生硬的论文,非得写什么架构设计
  16. 我深爱的Java,对不起,我出轨了!!!呸!渣男!
  17. CREO:CREO软件之零件【工具(调查/模型意图/实用工具)】、【视图(可见性/方向/模型显示/显示/窗口)】的简介及其使用方法(图文教程)之详细攻略
  18. 一个很棒的手机app:金手指音乐曲谱​
  19. IDEA+SSH :图书管理系统实现
  20. 沃尔玛的产品知识图谱

热门文章

  1. pycharm专业版 激活+汉化
  2. 考拉电子公司—GMV异常分析及RFM用户价值分析
  3. opencv计算机视觉_opencv是计算机视觉的至尊工具
  4. 攻防世界 Crypto高手进阶区 5分题 简单流量分析
  5. day9 进程 协程
  6. python每日一练:输入一个字符串,统计其中的小写字母,大写字母,空格键,以及其它字符,并在一行内输出统计的个数
  7. MATLAB绘制正弦函数与余弦函数的线性组合曲线
  8. java实验Employee_java实验报告5
  9. mysql 游标当前行,MySQL游标的使用笔记大全
  10. Ubuntu 安装时出现“failed to load ldlinux.c32” 方法总结