sas可以调用python脚本吗SAS官方发布saspython函数了在Base SAS中直接调用R、Python等开源软件saspython函数的开源工具 。
saspython函数你从这里看看能找到什么线索saspython函数:
python代码转化为sas代码saspython函数 , Python 和 SAS 是两个很常用的数据挖掘工具 。Python 开源、免费、有丰富的三方库,一般在互联网公司广泛使用 。而SAS需付费,且费用较高,一般互联网公司无法承担,更多的是在银行等传统金融机构中使用,不过这两年由于Python太火,原本使用SAS的也开始逐渐转向Pythonsaspython函数了 。
拥抱开源,越来越多的爱好者造出优秀的Python轮子,比如当下比较流行的万金油模型Xgboost、LightGBM,在各种竞赛的top级方案中均有被使用 。而SAS的脚步就比较慢了 , 对于一些比较新的东西都无法直接提供,所以对于那些使用SAS的朋友 , 就很难受了 。
一直以来很多粉丝问过东哥这个问题:有没有一种可以将Python模型转成SAS的工具saspython函数?
因为我本身是两个技能都具备的,实际工作中一般都是配合使用,也很少想过进行转换 。但是,最近东哥逛技术论坛刚好发现了一个骚操作 , 借助Python的三方库m2cgen和Python脚本即可完成Python模型到SAS的转换 。
m2cgen是什么?
m2cgen是一个Python的第三方库,主要功能就是将Python训练过的模型转换为其它语言,比如 R 和 VBA 。遗憾的是,目前m2cgen尚不支持SAS,但这并不影响我们最终转换为SAS 。
我们仍然使用m2cgen,需要借助它间接转换成SAS 。具体的方案就是先将Python模型转换为VBA代码,然后再将VBA代码更改为 SAS脚本,曲线救国 。
如何使用m2cgen?
我直接用一个例子说明下如何操作 。
数据我们使用sklearn自带的iris dataset,链接如下:
The Iris Dataset — scikit-learn 1.1.1 documentation
下面 , 演示一下如何将Python的XGBoost模型转成SAS代码 。
首先导入所需的库包和数据 。
# 导入库
import pandas as pd
import numpy as np
import os
import re
from sklearn import datasets
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import m2cgen as m2c
# 导入数据
iris = datasets.load_iris()
X = iris.data
Y = iris.target
登录后复制
然后,我们划分数据集,直接扔进XGBoost里面,建立base模型 。
# 划分数据为训练集和测试集
seed = 2020
test_size = 0.3
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)
# 训练数据
model = XGBClassifier()
model.fit(X_train, y_train)
登录后复制
然后,再将XGBoost模型转换为VBA 。使用m2cgen的export_to_visual_basic方法就可以直接转成VBA了 。转换成其saspython函数他语言脚本也是同理 , 非常简单 。
code = m2c.export_to_visual_basic(model, function_name = 'pred')
登录后复制
核心的骚操作来了!
m2cgen不支持SAS,但我们可以把VBA代码稍加改动,就能变成符合SAS标准的代码了 。而这个改动也无需手动一个个改,写一段Python脚本即可实现VBA脚本转换为SAS脚本 。
改动的地方不多 , 主要包括:删除在SAS环境中不能使用的代码,像上面结果中的Module xxx,Function yyy ,Dim var Z As Double,还有在语句结尾加上;,这些为的就是遵循SAS的语法规则 。
下面就是转换的Python脚本 , 可以自动执行上面所说的转换操作 。
# 1、移除SAS中不能使用的代码
code = re.sub('Dim var.* As Double', '', code)
code = re.sub('End If', '', code)
# 下面操作将修改成符合SAS的代码
# 2、修改起始
code = re.sub('Module Model\nFunction pred(ByRef inputVector() As Double) As Double()\n',
'DATA pred_result;\nSET dataset_name;', code)
# 3、修改结尾
code = re.sub('End Function\nEnd Module\n', 'RUN;', code)
# 4、在结尾加上分号';'
all_match_list = re.findall('[0-9] \n', code)
for idx in range(len(all_match_list)):
original_str = all_match_list[idx]
new_str = all_match_list[idx][:-1] ';\n'
code = code.replace(original_str, new_str)
all_match_list = re.findall(')\n', code)
for idx in range(len(all_match_list)):
original_str = all_match_list[idx]
new_str = all_match_list[idx][:-1] ';\n'
code = code.replace(original_str, new_str)
# 用var来替代inputVector
dictionary = {'inputVector(0)':'sepal_length',
'inputVector(1)':'sepal_width',
'inputVector(2)':'petal_length',
'inputVector(3)':'petal_width'}
for key in dictionary.keys():
code = code.replace(key, dictionary[key])
# 修改预测标签
code = re.sub('Math.Exp', 'Exp', code)
code = re.sub('pred = .*\n', '', code)
temp_var_list = re.findall(r"var[0-9] (\d)", code)
for var_idx in range(len(temp_var_list)):
code = re.sub(re.sub('\(', '\(', re.sub('\)', '\)', temp_var_list[var_idx])), iris.target_names[var_idx] '_prob', code)
登录后复制
对以上脚本分步解释说明一下 。
1、开头、结尾、输出名称
前三个部分非常简单 。使用正则表达式删除多余的行,然后将脚本的开头更改为DATA pred_result; \ nSETdataset_name; 。
使用过SAS的同学就很熟悉了 , pred_result是运行SAS脚本后的输出表名称 , dataset_name是我们需要预测的输入表名称 。
最后再将脚本的结尾更改为RUN; 。
# 移除SAS中不能使用的代码
code = re.sub('Dim var.* As Double', '', code)
code = re.sub('End If', '', code)
# 下面操作将修改成符合SAS的代码
# 修改起始
code = re.sub('Module Model\nFunction pred(ByRef inputVector() As Double) As Double()\n',
'DATA pred_result;\nSET dataset_name;', code)
# 修改结尾
code = re.sub('End Function\nEnd Module\n', 'RUN;', code)
登录后复制
2、语句末尾添加分号
为遵循SAS中的语法规则,还需将每个语句的结尾加上; 。仍用正则表达式,然后for循环在每一行最后添加字符;即可 。
# 在结尾加上分号';'
all_match_list = re.findall('[0-9] \n', code)
for idx in range(len(all_match_list)):
original_str = all_match_list[idx]
new_str = all_match_list[idx][:-1] ';\n'
code = code.replace(original_str, new_str)
all_match_list = re.findall(')\n', code)
for idx in range(len(all_match_list)):
original_str = all_match_list[idx]
new_str = all_match_list[idx][:-1] ';\n'
code = code.replace(original_str, new_str)
登录后复制
3、映射变量名称
使用字典将InputVector与变量名称映射到输入数据集中,一次性更改所有InputVector 。
# 用var来替代inputVector
dictionary = {'inputVector(0)':'sepal_length',
'inputVector(1)':'sepal_width',
'inputVector(2)':'petal_length',
'inputVector(3)':'petal_width'}
for key in dictionary.keys():
code = code.replace(key, dictionary[key])
登录后复制
4、映射变量名称
最后一步就是更改预测标签 。
# 修改预测标签
code = re.sub('Math.Exp', 'Exp', code)
code = re.sub('pred = .*\n', '', code)
temp_var_list = re.findall(r"var[0-9] (\d)", code)
for var_idx in range(len(temp_var_list)):
code = re.sub(re.sub('\(', '\(', re.sub('\)', '\)', temp_var_list[var_idx])), iris.target_names[var_idx] '_prob', code)
登录后复制
然后保存sas模型文件 。
#保存输出
vb = open('vb1.sas', 'w')
vb.write(code)
vb.close()
登录后复制
最后,为了验证sas脚本是否正确,我们将sas模型的预测结果和Python的结果进行一下对比 。
# python 预测
python_pred = pd.DataFrame(model.predict_proba(X_test))
python_pred.columns = ['setosa_prob','versicolor_prob','virginica_prob']
python_pred
# sas 预测
sas_pred = pd.read_csv('pred_result.csv')
sas_pred = sas_pred.iloc[:,-3:]
sas_pred
(abs(python_pred - sas_pred)0.00001).sum()
登录后复制
可以看到 , 两个预测的结果基本上一样,基本没问题,我们就可以在sas中跑xgboost模型了 。
总结
上面只是个最简单的示例,没有对特征处理 。对于复杂的建模过程,比如很多特征工程,那就要对Python脚本进一步调整了 。
以上就是本次分享的所有内容 , 如果你觉得文章还不错,欢迎关注公众号:Python编程学习圈,每日干货分享,发送“J”还可领取大量学习资料,内容覆盖Python电子书、教程、数据库编程、Django , 爬虫,云计算等等 。或是前往编程学习网,了解更多编程技术知识 。
python
机器学习
数据挖掘
视频教程-完整的Python和SAS数据分析-大数据
422阅读·0评论·0点赞
2020年5月28日
python 访问sas 逻辑库,SAS | 逻辑库和SAS数据集
460阅读·0评论·0点赞
2021年4月26日
python学习笔记---linux/windows调用sas程序
875阅读·0评论·0点赞
2019年10月24日
python可以代替sas_Python、 R 语言、SAS、SPSS 优缺点比较?(转)
604阅读·0评论·1点赞
2020年12月17日
python 访问sas 逻辑库_SAS编程基础 - 逻辑库和数据集
138阅读·0评论·0点赞
2020年12月9日
服务器部署sas_如何在阿里云SAS上部署WordPress网站
1429阅读·0评论·0点赞
2020年8月29日
python和sas配合使用_太骚了!Python模型完美切换SAS,还能这么玩 。。
1963阅读·0评论·2点赞
2021年1月14日
python导入sas数据集_将变量从SAS传递到Python
344阅读·0评论·0点赞
2021年2月3日
python 访问sas 逻辑库_SAS岩论 | 在Jupyter Notebook中使用SAS
429阅读·0评论·0点赞
2020年12月9日
#sas建模-建模入门介绍
2257阅读·0评论·2点赞
2019年9月18日
#sas建模-建模过程介绍
2805阅读·1评论·0点赞
2019年9月18日
python调用sas_SAS日常使用的语句预定的python表达
370阅读·0评论·0点赞
2020年12月8日
python读取sas数据集_SASpy模块 , 利用Python操作SAS
1432阅读·0评论·0点赞
2020年11月26日
python可以代替sas,像SAS一样转置的python数据帧
156阅读·0评论·0点赞
2021年4月27日
sas和python的区别 知乎_银行业为什么喜欢用 sas 而不是 python?
1559阅读·0评论·0点赞
2020年12月9日
python和sas代码编写_如何从SAS到python编写if语句
329阅读·0评论·0点赞
2021年1月29日
saspython知乎_pyt
sas和python的区别【saspython函数 sass python】sas和python的区别:1.成本
SAS是商业软件,对于大部分个体数据分析师而言 , 是根本买不起的!但是SAS在机构或公司中拥有最高的市场份额 。而Python是开源免费的,开放下载使用 。
2.处理逻辑
数据处理能力曾经一直是SAS的优势,SAS基于硬盘的处理能力也使得其可以处理一般规模的大数据 。Python的计算都在RAM内存中进行,于是它的计算过程受限于机器的RAM内存大小 。当然 , 伴随着Hadoop , Spark这一切都将不再是问题 。
3.版本更新
这三个工具都提供了基本的、以及最常用的分析函数,你可以应付大部分模型的构建 。但假如 , 你正好需要使用最新最前沿的技术或算法怎么办?
Python由于其开源性,算法可以很快得到更新 , R因为一直广泛使用于学术界,因此更新最快 。SAS的更新是自有的研发团队完成的,SAS则要再下一个版本中得到更新 。
4.编程
首先,SAS非常容易上手,proc步和data步,它的PROC SQL命令 , 对于任何一个学过SQL的人来说都可以立即上手 。
在编程界,Python以简易性闻名,在数据分析界也是如此 。而且Python的notebook非常方面编辑、记录与分享 。
5.用途
SAS:在商业分析领域,它是无可争辩的霸主 。主要应用领域目前集中在银行、医药、保险、航空、政府等 。
Python:Python近些年的风头大胜,标准库的完善,使得Python不仅使用于研究和原型构建 。同时也适用于构建生产系统
SAS和Python学哪个好具体业务用的是什么咯,对比可以看下
(1)SAS:在商业分析领域,它是无可争辩的霸主 。SAS提供了丰富的统计功能,友好的GUI界面可以让分析师快速上手,技术支持也做的相当到位 。但,太贵了,并且对于一些最新的统计分析方法,SAS更新比较慢 。
(2)Python:最早是一个开源脚本语言 , 近几年使用率大增 。如今一些库(如numpy、scipy和matplotlib)和函数的引入,也使得它能支持几乎所有统计分析和统计建模工作 。另外也由于Pandas这个库,使得Python在结构化数据的处理上非常给力 。
saspython函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于sass python、saspython函数的信息别忘了在本站进行查找喔 。
推荐阅读
- 快手直播长视频怎么拍,快手直播间咋样放短视频
- 小程序接入wap支付,小程序接入聚合支付
- 如何去除百度里的广告推广,怎么去除百度里的广告
- 直播自行车什么意思,直播单车
- windows系统的c盘的简单介绍
- 查询路由器错误报告怎么查,检查路由器
- 飞行游戏苹果推荐软件,飞行游戏苹果推荐软件有哪些
- 为什么路由器有个pon,无线路由器上的pon一直闪
- mysql英文怎么翻译 mysql中文翻译