SASpy模块,利用Python操作SAS

SASpy模块打通了Python与SAS之间的连接。有了SASpy模块,我们就能够在Python中操控SAS。本文将首先介绍SASpy模块的一些基本方法,最后通过一个聚类分析的例子,来展示如何在Python中调用SAS的机器学习过程,以及对聚类结果的可视化。

SASpy模块特点

1、需要Python3.X及以上,SAS9.4及以上,需要Java环境;

2、无论是本地SAS还是远程服务器上的SAS,都可以使用SASpy调用SAS进程;

3、可以在Python和SAS之间传递数据(也就是Pandas数据框与SAS数据集可以相互转换);

4、某些Pandas方法可以直接在SAS数据集上使用(实际背后进行了转化);

5、可以调用SAS的各种模块,比如统计stat、质量控制qc、预测ets、机器学习(EM模块)等。

SASpy模块的安装

关于安装的介绍,请参考如下文章:

1、SAS中文论坛,https://www.sohu.com/a/218339423_278472

2、SASpy的官网,https://sassoftware.github.io/saspy/install.html

上篇:SASpy模块的基本方法

假使我们已经安装好了SASpy模块,现在我们只需要导入该模块,并通过saspy.SASsession()来建立一个SAS进程(可能会花费数十秒),当看到提示:SAS Connection established时,这说明我们已经成功创建。如果有任何报错,可以参考如上两篇安装文章中的提示。直接输入sas,可以看到有关该进程的一些接口、基本参数信息。此外,可以通过dir(sas)查看有关方法,通过help(sas)查看更详细的帮助信息。

1、SASpy基本操作

在接下来的程序中,体现了SASpy的一些基本用法,如建立SAS逻辑库、判断数据集是否存在、sas数据集与pandas数据框的转换,以及CSV文件的导出与导入。有了这些方法之后,在数据的交互层面,基本已经没有问题了。对应于下面代码中的每一行,分别表示:

显示sas日志-1

建立一个sas逻辑库-2

判断class数据集是否存在(存在为1,否则为0)-3

判断sashelp.class数据集是否存在-4

获取sashelp逻辑库的cars数据集(sas数据集)-5

获取sashelp逻辑库的iris数据集(sas数据集)-6

获取sashelp逻辑库class数据集(pandas数据框)-7

获取sashelp逻辑库ari数据集(pandas数据框)-8

将Python的air数据框转为sas的myair数据集-9

将Python的air数据框转为sas数据集-10

将sashelp.class导出到CSV文件-11

CSV文件导入到SAS数据集-12

判断所导入的数据是否存在(结果为1)-13

cars对象的类型为sas数据集-14

air对象的类型为pandas数据框-15

2、提交SAS代码

可以在Python中直接提交“原汁原味”的SAS代码吗?当然可以,使用sas.submit()方法,将所有代码都放入submit()中,像'''SAS code'''这样,将SAS代码包裹起来。请看下面一个例子:

3、获取宏变量

宏变量、宏程序可以说是SAS编程的精华,可以极大地提升程序开发的效率,是任何一个优秀的SAS programmer都应该的必备技能。如果不太了解SAS Macro,可以暂且将它理解为一段可进行“文本替换”的代码,经常会结合循环使用,以提高代码的复用性、易于维护性,同时减少代码量。

下面的代码中,使用sas.symput()方法,定义了一个宏变量dataname,并在sas.submit()中进行了引用。同时,在sas.submit()中通过%let方法,定义了一个宏变量mydate,并通过sas.symget()方法获取。mydate是自定义宏变量,sysdate9是SAS系统宏变量,显示当前系统日期。

4、一个好玩的功能

在SASpy模块中,有一个好玩的方法,sas.teach_me_SAS()。当参数设置为True时(默认为False),不真正执行代码,而是给出SASpy方法对应的SAS代码。可以大概知道,这些SASpy方法的背后,对应的是SAS宏程序“模板”,执行时只需要提供参数即可(或者叫代码文本替换),例如数据集名称等。为了说明这一点,在下篇的聚类分析例子中,将会看到这种“替换”。

下篇:利用SASpy模块进行机器学习

SASpy接口十分丰富,利用dir()方法,可以查看各模块的各种方法。对于SAS中的机器学习过程,可以参考SAShelp的帮助文档。虽然SAS的语法和Python有所不同,但是建模理论却是相通的。

1、聚类模型的建立

下面的例子中以iris鸢尾花数据集为例,进行简单的聚类分析。通过proc hpclus聚类过程的NOC选项设置,模型告诉我们最佳的聚类数目是4类(注意ITERSTATS中的IterationNum是模型的迭代次数,不是最佳聚类数目)。最终的聚类特征,在WITHINCLUSSTATS中体现,关于模型的评估、解释,这里不做讨论。

此外,也可以通过sum of squared error (SSE)组内平方误差和来确定最佳聚类数目(如下图所示)。随着聚类数目增多,组内样本数就减少,从而WSS也减小。但WSS减小的速度是在下降的,也就是斜率越来越平缓了。从1类下降到3类速度较快,从3类下降到4类已经不那么明显了。因此将聚类数目确定为3类也是可以的。

2、聚类结果的可视化

为了便于对聚类结果的可视化,我们通过主成分PCA进行降维处理,将原来的4个特征减少为2维。结果就是如下的iris2数据框。

在SAS中如何对聚类结果作图呢?让我们再次开启SAS教学模式,teach_me_SAS设置为True。在如下scatter作图代码中,y后面的这一堆参数设置,显然不太符合Python的语言风格。y参数是一个文本,既然是文本,就可以进行文本替换,无论是简单的文本,还是复杂一点的文本,反正只要扔在SAS代码中可以执行就没有问题。这再次说明了SASpy方法的背后,是通过对SAS代码“模板”进行“文本替换”,交由SAS执行并返回结果。

总结

本文分为上下两篇,分别介绍了SASpy模块的基本功能(可能会比较常用的一部分,并非全部),以及利用SASpy模块调用SAS进行机器学习的一个例子(聚类分析)。

借助SASpy接口,我们可以在Python中对SAS进行各种操控,仿佛是扔掉了SAS的“壳”,留下了SAS的“魂”。但随着Python在数据分析、机器学习、大规模数据处理方面的日益强大(比如pyspark),加上开源免费的特点,相信越来越多的人会选择拥抱Python。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180604G08HLK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券