python转学sas多久(python导入sas文件)

导读:本篇文章首席CTO笔记来给大家介绍有关python转学sas多久的相关内容,希望对大家有所帮助,一起来看看吧。

sas和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不仅使用于研究和原型构建。同时也适用于构建生产系统

python转学sas多久(python导入sas文件)  第1张

如何零基础自学SAS?

从过来人的经验来看,最好最快的途径就是读牛人的代码,并且逐步运行看结果。比如你随便创建一个数据集,set sashelp.class,就可以运行很多数据步的代码。抛开SAS统计方法层面的各种proc,data步是SAS的精髓。看一个人SAS水平如何通常有两点,一就体现在数据步的使用上,比如看数据步会不会用first,last,set by算累计频数,因为PDV的读取是SAS的核心,如果你还会巧妙使用end= in=等技巧就刚好;二是看会不会写macro,要了解宏变量读取的方式,以及多个如何转义,个人感觉写宏其实不难,只要你打开options中的macrogen,mprint以及symbolgen等选项,并且知道在macro中可以开放的写%if 以及%do while等,而不必像一般程序一样必须要写在封闭的数据步中就好,这样debug就变得很容易。

SAS和Python学哪个好

具体业务用的是什么咯,对比可以看下

(1)SAS:在商业分析领域,它是无可争辩的霸主。SAS提供了丰富的统计功能,友好的GUI界面可以让分析师快速上手,技术支持也做的相当到位。但,太贵了,并且对于一些最新的统计分析方法,SAS更新比较慢。

(2)Python:最早是一个开源脚本语言,近几年使用率大增。如今一些库(如numpy、scipy和matplotlib)和函数的引入,也使得它能支持几乎所有统计分析和统计建模工作。另外也由于Pandas这个库,使得Python在结构化数据的处理上非常给力。

python代码转化为sas代码

,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 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了。转换成其他语言脚本也是同理,非常简单。

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的区别 知乎

根据我个人经历的话:风管爱SAS,策略爱Python。SAS能handle很大数据量,量大时跑得快,而且很多统计功能用起来方便,和其它软件结合的很好,可以博采众长。有时候有些功能sas能实现但proc加其它软件做merge啊join啊能快很多;Python的话就比较好上手,而且package各式各样的,设计那种从网页扒数据的策略啊,time series相关的策略啊,都可以选相应的package辅助。另外我的经验来看的确美帝大公司很爱SAS,我前老板说这个写简历上会非常fancy。【毕竟这软件不便宜个人一般不用?】Python的话很accessible,用mac就更是自带python。另外一些网上的回测平台都是用的python的语法,的确很适合拿它写策略吖~

python做数据分析怎么样?

     我使用python这门语言也有三年了,被其简洁、易读、强大的库所折服,我已经深深爱上了python。其pythonic语言特性,对人极其友好,可以说,一个完全不懂编程语言的人,看懂python语言也不是难事。

     在数据分析和交互、探索性计算以及数据可视化等方面,相对于R、MATLAB、SAS、Stata等工具,Python都有其优势。近年来,由于Python库的不断发展(如pandas),使其在数据挖掘领域崭露头角。结合其在通用编程方面的强大实力,我们完全可以只使用Python这一种语言去构建以数据为中心的应用程序。

     由于python是一种解释性语言,大部分编译型语言都要比python代码运行速度快,有些同学就因此鄙视python。但是小编认为,python是一门高级语言,其生产效率更高,程序员的时间通常比CPU的时间值钱,因此为了权衡利弊,考虑用python是值得的。

Python强大的计算能力依赖于其丰富而强大的库:

Numpy

Numerical Python的简称,是Python科学计算的基础包。其功能:

1. 快速高效的多维数组对象ndarray。

2. 用于对数组执行元素级计算以及直接对数组执行数学运算的函数。

3. 线性代数运算、傅里叶变换,以及随机数生成。

4. 用于将C、C++、Fortran代码集成到Python的工具。

除了为Python提供快速的数组处理能力,NumPy在数据分析方面还有另外一个主要作用,即作为在算法之间传递数据的容器。对于数值型数据,NumPy数组在存储和处理数据时要比内置的Python数据结构高效得多。此外,由低级语言(比如C和Fortran)编写的库可以直接操作NumPy数组中的数据,无需进行任何数据复制工作。

SciPy

是一组专门解决科学计算中各种标准问题域的包的集合,主要包括下面这些包:

1. scipy.integrate:数值积分例程和微分方程求解器。

2. scipy.linalg:扩展了由numpy.linalg提供的线性代数例程和矩阵分解功能。

3. scipy.optimize:函数优化器(最小化器)以及根查找算法。

4. scipy.signal:信号处理工具。

5. scipy.sparse:稀疏矩阵和稀疏线性系统求解器。

6. scipy.special:SPECFUN(这是一个实现了许多常用数学函数(如伽玛函数)的Fortran库)的包装器。

7. scipy.stats:标准连续和离散概率分布(如密度函数、采样器、连续分布函数等)、各种统计检验方法,以及更好的描述统计法。

8. scipy.weave:利用内联C++代码加速数组计算的工具。

注:NumPy跟SciPy的有机结合完全可以替代MATLAB的计算功能(包括其插件工具箱)。

SymPy

是python的数学符号计算库,用它可以进行数学表达式的符号推导和演算。

pandas

提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

pandas兼具NumPy高性能的数组计算功能以及电子表格和关系型数据库(如SQL)灵活的数据处理功能。它提供了复杂精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。

对于使用R语言进行统计计算的用户,肯定不会对DataFrame这个名字感到陌生,因为它源自于R的data.frame对象。但是这两个对象并不相同。R的data.frame对象所提供的功能只是DataFrame对象所提供的功能的一个子集。也就是说pandas的DataFrame功能比R的data.frame功能更强大。

matplotlib

是最流行的用于绘制数据图表的Python库。它最初由John D. Hunter(JDH)创建,目前由一个庞大的开发人员团队维护。它非常适合创建出版物上用的图表。它跟IPython(马上就会讲到)结合得很好,因而提供了一种非常好用的交互式数据绘图环境。绘制的图表也是交互式的,你可以利用绘图窗口中的工具栏放大图表中的某个区域或对整个图表进行平移浏览。

TVTK

是python数据三维可视化库,是一套功能十分强大的三维数据可视化库,它提供了Python风格的API,并支持Trait属性(由于Python是动态编程语言,其变量没有类型,这种灵活性有助于快速开发,但是也有缺点。而Trait库可以为对象的属性添加检校功能,从而提高程序的可读性,降低出错率。) 和NumPy数组。此库非常庞大,因此开发公司提供了一个查询文档,用户可以通过下面语句运行它:

from enthought.tvtk.toolsimport tvtk_doc

tvtk_doc.main()

Scikit-Learn

是基于python的机器学习库,建立在NumPy、SciPy和matplotlib基础上,操作简单、高效的数据挖掘和数据分析。其文档、实例都比较齐全。

小编建议:初学者使用python(x, y),其是一个免费的科学和工程开发包,提供数学计算、数据分析和可视化展示。非常方便!

其官网:(由于某种原因,国内上不去,需要翻墙)

下载地址:(小编到网上搜到的一个地址,亲测可以用)

下图展示了python(x, y) 强大功能。

结语:以上就是首席CTO笔记为大家介绍的关于python转学sas多久的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。

以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!

版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023-09-23 13:12
下一篇 2023-09-23

相关推荐

发表回复

登录后才能评论