0

我想使用内置的模型对非常大的文件进行评分R

这个想法是从 R 模型对象中提取实际的预测方程,并定义一个包含该方程的 Python 字符串。

大型预测器文件的预测器标头具有与用于构建模型的预测器名称相同的预测器名称(模型开发和模型评分预测器是使用相同的 python 代码生成的)。

我想用 python 对大型预测器文件进行评分(从而避免需要拆分/分块预测器文件以允许 R 处理,即使R'spredict函数确实是一个有吸引力的替代方案)。

所以我检查了如何在 Python 中执行包含 Python 代码的字符串?和其他帖子。由于eval并且exec在 python 社区中不受欢迎,我想知道将方程动态应用于存储在 csv 文件中的一组预测变量的最 Pythonic 方式是什么。谢谢。

import csv
import StringIO

predfile = StringIO.StringIO(
'''x1,x2
1,2
3,4''')

eq = '1 + 2*x1 + 3*x2'
reader = csv.reader( predfile , delimiter=',' )
header = reader.next()
for row in reader:
    exec("{0}={1}".format(header[0],row[0]))
    exec("{0}={1}".format(header[1],row[1]))
    exec("yhat={0}".format(eq))
    print yhat
4

1 回答 1

1

为了扩展我的评论,这里有一个可能的解决方案,它将您的方程变成一个函数,该函数接受以列标题命名的参数,然后从 a 中输入行DictReader

import csv
import StringIO

predfile = StringIO.StringIO(
'''x1,x2
1,2
3,4''')

def func(x1, x2):
    x1 = int(x1)
    x2 = int(x2)
    return 1 + 2*x1 + 3*x2

reader = csv.DictReader( predfile , delimiter=',' ) # header is handled automatically
for row in reader:
    print func(**row)
于 2013-05-22T23:20:40.883 回答