我正在尝试使用Pandas和R加速进程。
假设我有以下数据框:
import pandas as pd
from random import randint
df = pd.DataFrame({'mpg': [randint(1, 9) for x in xrange(10)],
'wt': [randint(1, 9)*10 for x in xrange(10)],
'cyl': [randint(1, 9)*100 for x in xrange(10)]})
df
mpg wt cyl
0 3 40 100
1 6 30 200
2 7 70 800
3 3 50 200
4 7 50 400
5 4 10 400
6 3 70 500
7 8 30 200
8 3 40 800
9 6 60 200
然后,我使用rpy2来建模一些数据:
import rpy2.robjects.packages as rpackages
import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
pandas2ri.activate()
base = rpackages.importr('base')
stats = rpackages.importr('stats')
formula = 'mpg ~ wt + cyl'
fit_full = stats.lm(formula, data=df)
之后我做了一些预测:
rfits = stats.predict(fit_full, newdata=df)
对于小型数据帧,此代码运行没有问题,但实际上我有一个包含数百万行的大数据帧,并且我正在尝试使用其他rpy2模型加速预测部分,但不幸的是,这需要很长时间来处理。 / p>
我第一次尝试使用多处理库来完成此任务但没有成功:
import multiprocessing as mp
pool = mp.Pool(processes=4)
rfits = pool.map(predict(fit_full, newdata=df))
但是我可能做错了,因为我看不到任何速度提升。
我认为这里的主要问题是因为我正在尝试将pool.map
应用于rpy2
函数而不是Python预定义函数。可能有一些解决方法,不使用多处理库,但我看不到任何。
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:1)
您是否尝试过使用StatsModels?
<强> Fitting models using R-style formulas 强> 从版本0.5.0开始,statsmodels 允许用户使用R风格的公式拟合统计模型。 在内部,statsmodels使用patsy包来转换公式和 数据到模型拟合中使用的矩阵。公式 框架非常强大;本教程仅涉及表面。 可以在patsy中找到公式语言的完整描述 文档
import statsmodels.formula.api as smf
formula = 'mpg ~ wt + cyl'
model = smf.ols(formula=formula, data=df)
params = model.fit().params
>>> params
params
Intercept 5.752803
wt 0.037770
cyl -0.004112
>>> model.predict(params, exog=df)
array([ 1725.83759267, 2876.50148582, 575.25352613, 1150.6605447 ,
1150.51281171, 3451.54178359, 575.53800931, 575.4146529 ,
2876.58372342, 5177.46831077])