Python怎么导入数据集(python导入数据包)

http://www.itjxue.com  2023-04-02 19:01  来源:未知  点击次数: 

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

怎么在python中导入数据集

本文实例讲述了Python导入oracle数据的方法。分享给大家供大家参考。具体如下:

import cx_Oracle

dns_tns=cx_Oracle.makedsn("192.168.0.288",1521,"skynet")

print dns_tns

con = cx_Oracle.connect('alibaba', 'zhimakamen', dns_tns)

cur=con.cursor()

for index,line in enumerate(file("f2.csv")):

sql="""insert into iq_data_B011F8286A1B2000A

(field1,field2,field3,field4) values ("""

for fields in (line.split(",")):

sql=sql+"'"+fields+"',"

cur.execute(sql[:-1]+")")

con.commit()

con.close()

pycharm怎么调用数据集

pycharm怎么调用数据集

实例必须是开机状态

选择左上角的File-settings-Python Interpreter,点击小齿轮选择Add

进入下一个界面后,点击SSH Interpreter,红框中信息从自己实例的ssh指令获取

然后点击Next

回到AutoDL自己的实例中,将密码复制下来

填入刚复制好的密码,点击Next

路径选择一定要正确,如图;最后点击Finish,再弹出新框后点击Apply,OK,这样就连接成功了。

1 如何用Python导入Excel以及csv数据集

Excel是一个二进制文件,它保存有关工作簿中所有工作表的信息

CSV代表Comma Separated Values 。这是一个纯文本格式,用逗号分隔一系列值

Excel不仅可以存储数据,还可以对数据进行操作

CSV文件只是一个文本文件,它存储数据,但不包含格式,公式,宏等。它也被称为平面文件

Excel是一个电子表格,将文件保存为自己的专有格式,即xls或xlsx

CSV是将表格信息保存为扩展名为.csv的分隔文本文件的格式

保存在excel中的文件不能被文本编辑器打开或编辑

CSV文件可以通过文本编辑器(如记事本)打开或编辑

excel中会有若干个表单,每个表单都会这些属性:?

行数(nrows) 列数(ncols) 名称(name) 索引(number)?

import xlrd //执行操作前需要导入xlrd库?

#读取文件?

excel = xlrd.open_workexcel("文件地址") //这里表格名称为excel,文件的地址可以从文件的属性中看到?

#读取表格表单数量?

sheet_num= excel.nsheets // sheet_num为变量,其值为表格表单数量?

#读取表格表单名称?

sheet_name = excel.sheet_names() // sheet_name为变量,其值为表格表单名称?

#如果想要看到上述两个变量,可以使用print()函数将它们打印出来?

#想要读取某个表单的数据,首先获取表单 excel.sheet_by_index(0)?

//表单索引从0开始,获取第一个表单对象 excel.sheet_by_name('xxx')?

// 获取名为”xxx”的表单对象 excel.sheets()?

// 获取所有的表单对象 获取单元格的内容:使用cell_value 方法 这里有两个参数:行号和列号,用来读取指定的单元格内容。?

第一行的内容是:sheet.row_values(rowx=0)?

第一列的内容是:sheet.col_values(colx=0)

CSV是英文Comma Separate Values(逗号分隔值)的缩写,文档的内容是由 “,” 分隔的一列列的数据构成的。在python数据处理中也经常用到。

import csv //执行操作前需要导入csv库?

#csv读取?

遍历其中数据 csv_file = csv.reader(open(‘文件地址’,’r’)) for x in csv_file print(x)

python数据分析的基本步骤

一、环境搭建

数据分析最常见的环境是Anaconda+Jupyter notebook

二、导入包

2.1数据处理包导入

2.2画图包导入

2.3日期处理包导入

2.4jupyter notebook绘图设置

三、读取数据

四、数据预览

1.数据集大小

2.查看随便几行或前几行或后几行

3.查看数据类型

4.查看数据的数量、无重复值、平均值、最小值、最大值等

5.查看字段名、类型、空值数为多少

五、数据处理

把需要的字段挑选出来。

数据类型转换

日期段数据处理。

序列数据集怎么加载

可以使用Python中的pickle模块来加载序列数据集,pickle模块提供了一种方法来将Python对象存储到文件中,并且在需要的时候可以将对象从文件中读取出来。

使用pickle模块加载序列数据集的步骤如下:

1. 导入pickle模块:import pickle

2. 打开要加载的序列数据集文件:f = open('filename.pkl', 'rb')

3. 使用pickle模块的load()函数加载数据集:data = pickle.load(f)

4. 关闭文件:f.close()

(责任编辑:IT教学网)

更多

推荐Fireworks教程文章