0

に組み込まれているモデルを使用して、非常に大きなファイルをスコアリングしたいと考えていますR

アイデアは、R モデル オブジェクトから実際の予測方程式を抽出し、方程式を含む python 文字列を定義することです。

大きな予測子ファイルの予測子ヘッダーには、モデルの構築に使用されたものと同じ予測子名があります (モデル開発およびモデル スコアリング予測子は、同じ Python コードを使用して生成されました)。

Python で大きな予測子ファイルをスコア付けしたいと思います (これにより、R 処理を可能にするために予測子ファイルを分割/チャンクする必要がなくなりRますpredict

だから私はチェックしました PythonでPythonコードを含む文字列を実行するにはどうすればよいですか? と他の投稿。evalPython コミュニティではとが嫌われているためexec、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 に答える