我想使用在R中构建的模型来给非常大的文件评分。
这个想法是从R模型对象中提取实际的预测方程,并定义一个包含该方程的python字符串。
大型预测器文件的预测器标题与用于构建模型的预测器名称相同(模型开发和模型评分预测器是使用相同的python代码生成的)。
我想用python给大的predictor文件打分(从而避免分割/分块predictor文件以允许R处理,即使R的predict函数确实是一个有吸引力的替代方法)。
所以我查看了How do I execute a string containing Python code in Python?和其他帖子。由于eval和exec在python社区中不受欢迎,我想知道将方程动态应用于存储在csv文件中的一组预测器的最具python风格的方法是什么。谢谢。
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发布于 2013-05-23 07:20:41
为了扩展我的评论,这里有一个可能的解决方案,它可以将您的等式转换为一个函数,该函数接受以列标题命名的参数,然后从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)https://stackoverflow.com/questions/16702506
复制相似问题