Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python对大文件进行评分:“exec”的替代方案`_Python_R - Fatal编程技术网

如何使用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是公式),但是我觉得对于一个简单的例子来说,这太过分了。我很高兴这有帮助!的确如此,这直接进入了我的得分代码。非常感谢。