Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.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 带rpy2和多处理的熊猫_Python_Pandas_Multiprocessing_Rpy2 - Fatal编程技术网

Python 带rpy2和多处理的熊猫

Python 带rpy2和多处理的熊猫,python,pandas,multiprocessing,rpy2,Python,Pandas,Multiprocessing,Rpy2,我正在尝试使用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)*

我正在尝试使用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吗

自版本0.5.0以来,statsmodels 允许用户使用R型公式拟合统计模型。 在内部,statsmodels使用patsy包转换公式和 将数据添加到模型拟合中使用的矩阵。公式 框架相当强大;本教程仅涉及表面。 公式语言的完整描述可在patsy中找到 文件


您的CPU利用率是什么样子的?你的代码实际上使用了全部4个核吗?不,一点也不,它仍然只使用1个核。可能是相关的,谢谢。我将测试它是否有效。是的,我知道statsmodels,但实际上我需要使用gam(广义相加模型),我认为它还没有在statsmodels中实现。正确。这是他们“沙箱”的一部分哇!我不知道!测试后我会给出反馈!statsmodels沙盒中的Thank.GAM未处于可用状态。(年底前可能会有一些有用的东西。)然而,statsmodels使用的公式包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])