【发布时间】:2015-04-20 18:37:03
【问题描述】:
我正在尝试使用 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 预定义函数。在不使用多处理库的情况下,可能有一些解决方法,但我看不到。
任何帮助将不胜感激。提前致谢。
【问题讨论】:
-
您的 CPU 利用率如何?您的代码实际上是否使用了所有 4 个内核?
-
不,一点也不,它仍然只使用 1 个核心。
-
This 可能是相关的,那么
-
谢谢。我要测试它是否有效。
标签: python pandas multiprocessing rpy2