如何使用python对大文件进行评分:“exec”的替代方案`
我想使用内置的如何使用python对大文件进行评分:“exec”的替代方案`,python,r,Python,R,我想使用内置的R模型对非常大的文件进行评分 其思想是从R模型对象中提取实际的预测方程,并定义一个包含该方程的python字符串 大型预测器文件的预测器头与用于构建模型的预测器名称相同(模型开发和模型评分预测器使用相同的python代码生成) 我想用python对大型预测器文件进行评分(从而避免了拆分/分块预测器文件以允许R处理的需要,即使R的predict函数确实是一个有吸引力的替代方法) 所以我查了一下其他的帖子。由于python社区不赞成使用eval和exec,我想知道动态地将等式应用于存储
R
模型对非常大的文件进行评分
其思想是从R模型对象中提取实际的预测方程,并定义一个包含该方程的python字符串
大型预测器文件的预测器头与用于构建模型的预测器名称相同(模型开发和模型评分预测器使用相同的python代码生成)
我想用python对大型预测器文件进行评分(从而避免了拆分/分块预测器文件以允许R处理的需要,即使R
的predict
函数确实是一个有吸引力的替代方法)
所以我查了一下其他的帖子。由于python社区不赞成使用eval
和exec
,我想知道动态地将等式应用于存储在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
为了扩展我的评论,这里有一个可能的解决方案,可以将等式转换为一个函数,该函数使用以列标题命名的参数,然后从
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)
您的公式是否需要作为字符串出现在Python代码中?你能把它写成一个函数吗,也许可以用关键字参数?使用
csv.DictReader
:func(**row\u dict)
这将有助于找到一个更自然的解决方案。不一定:将公式放入字符串是我想到的最简单的选项(对R
中的变量名和系数运行paste
)。我将查找csv.DictReader,谢谢。@user2105469:哇,是的,这是代码上一次迭代的产物。如果你想打印的话,我一直在想办法让函数方便地打印出来(它的名字是你的最终值的名字,它的docstring是公式),但是我觉得对于一个简单的例子来说,这太过分了。我很高兴这有帮助!的确如此,这直接进入了我的得分代码。非常感谢。