,Python 和 SAS 是两个很常用的数据挖掘工具。Python 开源、免费、有丰富的三方库,一般在互联网公司广泛使用。而SAS需付费,且费用较高,一般互联网公司无法承担,更多的是在银行等传统金融机构中使用,不过这两年由于Python太火,原本使用SAS的也开始逐渐转向Python了。
拥抱开源,越来越多的爱好者造出优秀的Python轮子,比如当下比较流行的万金油模型Xgboost、LightGBM,在各种竞赛的top级方案中均有被使用。而SAS的脚步就比较慢了,对于一些比较新的东西都无法直接提供,所以对于那些使用SAS的朋友,就很难受了。
一直以来很多粉丝问过东哥这个问题:有没有一种可以将Python模型转成SAS的工具?
因为我本身是两个技能都具备的,实际工作中一般都是配合使用,也很少想过进行转换。但是,最近东哥逛技术论坛刚好发现了一个骚操作,借助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 111 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 sklearnmodel_selection import train_test_split
from sklearnmetrics import accuracy_score
import m2cgen as m2c
# 导入数据
iris = datasetsload_iris()
X = irisdata
Y = iristarget
登录后复制
然后,我们划分数据集,直接扔进XGBoost里面,建立base模型。
# 划分数据为训练集和测试集
seed = 2020
test_size = 03
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)
# 训练数据
model = XGBClassifier()
modelfit(X_train, y_train)
登录后复制
然后,再将XGBoost模型转换为VBA。使用m2cgen的export_to_visual_basic方法就可以直接转成VBA了。转换成其他语言脚本也是同理,非常简单。
code = m2cexport_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 = resub('Dim var As Double', '', code)
code = resub('End If', '', code)
# 下面操作将修改成符合SAS的代码
# 2、修改起始
code = resub('Module Model\nFunction pred(ByRef inputVector() As Double) As Double()\n',
'DATA pred_result;\nSET dataset_name;', code)
# 3、修改结尾
code = resub('End Function\nEnd Module\n', 'RUN;', code)
# 4、在结尾加上分号';'
all_match_list = refindall('[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 = codereplace(original_str, new_str)
all_match_list = refindall(')\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 = codereplace(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 dictionarykeys():
code = codereplace(key, dictionary[key])
# 修改预测标签
code = resub('MathExp', 'Exp', code)
code = resub('pred = \n', '', code)
temp_var_list = refindall(r"var[0-9]+(\d)", code)
for var_idx in range(len(temp_var_list)):
code = resub(resub('\(', '\(', resub('\)', '\)', temp_var_list[var_idx])), iristarget_names[var_idx]+'_prob', code)
登录后复制
对以上脚本分步解释说明一下。
1、开头、结尾、输出名称
前三个部分非常简单。使用正则表达式删除多余的行,然后将脚本的开头更改为DATA pred_result; \ nSETdataset_name;。
使用过SAS的同学就很熟悉了,pred_result是运行SAS脚本后的输出表名称,dataset_name是我们需要预测的输入表名称。
最后再将脚本的结尾更改为RUN;。
# 移除SAS中不能使用的代码
code = resub('Dim var As Double', '', code)
code = resub('End If', '', code)
# 下面操作将修改成符合SAS的代码
# 修改起始
code = resub('Module Model\nFunction pred(ByRef inputVector() As Double) As Double()\n',
'DATA pred_result;\nSET dataset_name;', code)
# 修改结尾
code = resub('End Function\nEnd Module\n', 'RUN;', code)
登录后复制
2、语句末尾添加分号
为遵循SAS中的语法规则,还需将每个语句的结尾加上;。仍用正则表达式,然后for循环在每一行最后添加字符;即可。
# 在结尾加上分号';'
all_match_list = refindall('[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 = codereplace(original_str, new_str)
all_match_list = refindall(')\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 = codereplace(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 dictionarykeys():
code = codereplace(key, dictionary[key])
登录后复制
4、映射变量名称
最后一步就是更改预测标签。
# 修改预测标签
code = resub('MathExp', 'Exp', code)
code = resub('pred = \n', '', code)
temp_var_list = refindall(r"var[0-9]+(\d)", code)
for var_idx in range(len(temp_var_list)):
code = resub(resub('\(', '\(', resub('\)', '\)', temp_var_list[var_idx])), iristarget_names[var_idx]+'_prob', code)
登录后复制
然后保存sas模型文件。
#保存输出
vb = open('vb1sas', 'w')
vbwrite(code)
vbclose()
登录后复制
最后,为了验证sas脚本是否正确,我们将sas模型的预测结果和Python的结果进行一下对比。
# python 预测
python_pred = pdDataFrame(modelpredict_proba(X_test))
python_predcolumns = ['setosa_prob','versicolor_prob','virginica_prob']
python_pred
# sas 预测
sas_pred = pdread_csv('pred_resultcsv')
sas_pred = sas_prediloc[:,-3:]
sas_pred
(abs(python_pred - sas_pred) > 000001)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
藏尾诗表白
表白藏尾诗:
1、我爱他山石,喜得春景迟。欢此大风诗,你若不嫌弃。李白之从叔,朵颐进芰实。
2、我爱古人道,喜闻三字耗。欢尝有馀滋,你若不嫌弃。李白坟前路,朵密红相照。
3、我爱明镜洁,喜闻有行役。欢酣朝野同,你若不嫌弃。李杜常挨托,朵颐进芰实。
4、我爱炼骨骨已清,喜见从王道化平。欢戚犹来恨不平,你坐轻舟顺江游。李白已亡工部死,朵朵精神叶叶柔。
5、我爱崇山双剑北,喜吟新咏见玄微。欢笑胜愁歌胜哭,你我同行笑连声。李夫人病已经秋,朵朵精神叶叶柔。
扩展资料:
表白被拒绝的注意事项:
1、不要沮丧
千万不能在表白对象面前表露出沮丧的这种情绪,对方对表白者并没有恶意,被表白者只是忠于自己,拒绝了是对表白者负责的表现,没必要为此怏怏不快,那样只会给对方增加压力觉得表白者很幼稚。
2、保留隐私
被拒之后可以轻描淡写地告诉那些朋友被拒绝了,但不要把整件事的来龙去脉前因后果都毫无保留地倾泄而出。女人们的人际关系总是很复杂,如果说了过多不该说的话,传到对方的耳朵里,两人之间的关系只能以崩裂收场了。
3、默默关注
如果真爱一个人就要某某关心关注对方,在暗中帮助对方,就算得不到对方的心灵,也要明白爱在于奉献。只要做到这点就超过了别的单相思或无爱情的人。
4、勇于尝试
即使被拒,还要有勇气去进行第二次告白,第二次告白的成功率要比第一次来得高。经历过第一次之后第二次应该也没有那么困难了吧,而且这样更能体现出自己的诚意,即使被发了第二次好人卡,也不要灰心,是男人就要勇敢求爱。
隐藏式表白我喜欢你
隐藏式表白方式
隐藏式表白方式,在很多时候多数的表白都是送礼物、送花,然后再说些令人心动的情话,虽说不失浪漫,但也因为常见而显得普通乏味了,而且有时也会面临表白失败的尴尬境地。所以现在的很多小伙伴为了避免这样的局面,而开始选择一些隐藏式表白方式,下面就和我一起来看看都有哪些吧。
隐藏式表白方式1
隐藏式表白梗
1、今晚月色真美
“今晚月色真美”就是我爱你的意思。这是夏目漱石的`经典名句,来自夏目漱石翻译的一篇英文文章,男主跟女主表白时,将“Iloveyou”翻译成“月が绮丽ですね”,就是“今晚月色真美”。
总结:所以当有人表白用“今晚月色真美”的时候,如果你是拒绝的你就回复“适合刺猹”,如果你是拒绝的话,你就回复“风也温柔”。
2、乌鸦为什么像写字台
这句“乌鸦为什么想写字台”其实是出自于**《爱丽丝梦游仙境》
在爱丽丝小时侯梦游仙境时
爱丽丝:疯帽子,我喜欢你
疯帽子:为什么
爱丽丝:因为乌鸦像写字台
疯帽子:为什么乌鸦像写字台
爱丽丝:因为我喜欢你没有理由
总结:这是一个非常好的偷偷表白的一个方式,当你想要表达对一个人的喜欢,那就不妨用“乌鸦为什么像写字台”,她一定不知道是什么意思,其实这是你在偷偷的表白。
隐藏式表白我喜欢你的方式
1、“我爱你”之化学元素
OsAtNb
HAtTc。
OsAsAtGeNb。
GaOsPd!
2、“我爱你”之函数表达式
y=x/1
x2+y2=9
y=|-2x|
x=-3|siny|
第一个是反比例函数、第二个是以O点为圆心,半径为3的圆、第三个应该是以y轴为对称轴,左边一个正比例函数,右边一个正比例函数,开口朝上、第四个正弦函数肯定是波浪线。如果答案是E的话,中间那一横肯定是x轴,取开口朝右的一节,类似于这样的∈。这四个函数会组成一个LOVE。
隐藏式表白方式2
隐藏式表白方式
1、工|_0/|三|_|
表白解密:看图形很容易发现,造型其实就是“ILOVEU”。
2、网页代码:iu
表白解密:这个代码在页面上展示的效果就是iu。
3、百度字符:
%69%6C%6F%76%65%75
4、OsAtNb
表白解密:这是化学周期元素表上的元素:Os是锇,At是砹,Nb是铌。谐音就是:我爱你。
5、128√e980
表白解密:将这个写在黑板上,或者容易擦掉的板子上,然后抹去上面一半,就是“ILOVEYOU”。
6、翻译密码:墙眼睛膝盖
墙壁=Wall,眼睛=eye,膝盖=knee。那么谐音就是“我爱你”。
藏尾诗表白我喜欢你简单
我驭清风入清山,喜遇竹林伴流泉。欢心花海寻玉兔,你笑回声满峰峦。
我扶桌案闲作诗,喜与淡茶做故知。欢合只盼伊人现,你抚瑶琴伴我词。
我居都城妻在乡,喜妻无悔侍高堂。欢歌难掩想思绪,你熬甜汤为我尝。
我欲乘风远游兮,喜闻妙语若珠玑。欢声飘荡回溯兮,你影存心永不离。
我携红豆寄相思,喜鹊河畔鸣新枝。欢颜踏步闻佳音,你在桃花浅红里。
既藏头又藏尾的诗表白
藏头又藏尾的表白诗是把每句诗的第一个字或者最后一个字连起来,如下所示:
1、来岁北来如访我
凭轼几州沾惠爱
稽首拜手元是你
更号能书居第一
长乐城中家几万
玉铉辞荣已十年
2、六道不千我
田翁逢我喜
屡暌心所欢
怨你又恋你
3、我今欲诗说与你
喜鹊乌鸦一家是
欢声月里今月脑
你听谗言我心残
4、我有三尺琴
喜迁乔木近
欢宴不尽怀
你若不信爱
5、我欲乘风去
会友在南山
永世难忘却
远路不畏艰
爱恋不思迁
着衣正娇容
你我把手牵
相关诗句:
1、我寻竹马旅尘埃,喜见梅花独自开,欢得东风无限好,你似故人有缘来。
2、我在山海里,爱在河流里,你在云雾里。
3、我依窗前思红颜,喜雨漫洒穿珠帘,欢歌漫舞漂倩影,你笑嫣然似花仙。
4、爱在三春芳无闲,上唯双燕把琴弹。你闻曲音感时殇,我愁泪雨湿春蚕。非天无眼怨别离,常青恒古此时怜。幸有莹丝缠春晓,福化轻风吹更暖。
5、我慕倾心久眷恋,喜恋莺燕长呢喃,欢歌相伴人唱晚,你舞飘逸俱欢颜。
6、我见犹怜缘天赐,喜笑颜开山盟誓,欢聚一堂心依心,你挚我诚红烛时。
endsas。
三种操作方法具体操作如下:1、“关闭”按钮。
2、在命令栏输入“bye”。
3、在编程栏输入:endsas。开机点击Ctrl+C进入SAS控制台,能看到一下界面,直接点击回车键。点击回车后出现三个选项,选择“RAIDProperties”回车进入,做RAID1。选择“CreateRAID1Volume”点击回车进入。可以看到0,1接口接了两块硬盘,将光标移动到RAIDDISK处使用键盘“+/-”按键将“NO”修改为“YES”。之后点击C保存RAID。此时会提示警告原有的硬盘上数据,继续此操作数据将会被删除。继续点击C按键创建RAID。后再次进入“RAIDProperties”会多出一个选项为“ManageVolume”,可以通过此选项查看及管理RAID信息,此时可以看到显示Type为“RAID1”,组建RAID成功。按ESC之后选择保存更改然后退出,配置RAID1就成功了。
欢迎分享,转载请注明来源:表白网
评论列表(0条)