我正在尝试加快使用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模型加速预测部分,但是不幸的是,这需要很长时间来处理。

我第一次尝试为此任务使用多处理库,但没有成功:

import multiprocessing as mp

pool = mp.Pool(processes=4)
rfits = pool.map(predict(fit_full, newdata=df))


但可能是我做错了,因为看不到任何速度改进。

我认为这里的主要问题是因为我试图将pool.map应用于rpy2函数,而不是Python预定义函数。可能有一些不使用多处理库的解决方法,但我看不到任何解决方法。

任何帮助将不胜感激。提前致谢。

最佳答案

您是否尝试过使用StatsModels?


  Fitting models using R-style formulas
  从0.5.0版开始,statsmodels
  允许用户使用R样式公式拟合统计模型。
  在内部,statsmodels使用patsy包来转换公式并
  数据到模型拟合中使用的矩阵。公式
  框架非常强大;本教程仅涉及表面知识。
  patsy中可以找到公式语言的完整说明
  docs


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])

关于python - 具有rpy2和多处理功能的 Pandas ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29755787/

10-12 22:00