Python中的R-mices包

2024-09-23 08:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图通过Jupyter在Python上运行R mice包。 我正在与许多错误和技术问题作斗争。 让我们使用Iris数据集并插入一些na:

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
data1 = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                     columns= iris['feature_names'] + ['target'])

data1.iloc[1,1] = np.nan
data1.iloc[4,4] = np.nan
data1.iloc[149,2] = np.nan

在R中,我将运行以下脚本:

library(mice)
md.pattern(data1)
imputed_df = mice(data1, m=3)
df = complete(imputed_df,2)

这里有一个问题,在Python中我尝试运行以下脚本:

from rpy2.robjects import pandas2ri
pandas2ri.activate()
from rpy2.robjects.packages import importr
Mice = importr('mice')

pattern = robjects.r("md.pattern")
Mice.complete(Mice.mice(pattern(data1), m=3),2)

我得到两种类型的错误:

  1. 关于完整函数:

    AttributeError:模块“鼠标”没有属性“完成”

  2. 关于小鼠的功能:

    TypeError:“NULLType”对象不可编辑

底线是,您建议如何在Python上运行R鼠标?


Tags: fromimportirisdfas错误npnan
2条回答

1)这可能是因为complete函数不是来自mice库,而是来自tidyr。只需打印即可在R中检查:

print(complete)

其中显示了它来自的名称空间:

function (data, ..., fill = list()) 
{
    UseMethod("complete")
}
<bytecode: 0x55bc2e74e1d0>
<environment: namespace:tidyr>

我很好奇为什么它不能像在R中一样以rpy2的方式重新导出(这里@lgautier的回答会有所帮助)

2)我不能复制;以下工作符合我的预期:

mice = importr('mice')
tidyr = importr('tidyr')

tidyr.complete(mice.mice(pattern(data1), m=3), 2)

这对我很有用:

import pandas as pd
import rpy2.robjects as ro
from rpy2.robjects.packages import importr
from rpy2.robjects import pandas2ri
from rpy2.robjects.conversion import localconverter

utils = importr('utils')

pandas2ri.activate()

# convert the pandas dataframe to a R dataframe
with localconverter(ro.default_converter + pandas2ri.converter):
   r_frame = ro.conversion.py2rpy(df)    

# load mice package
mice = importr('mice')

tmp = mice.mice(r_frame, m=5)

# load complete function
complete = ro.r['complete']

df_imputated = complete(tmp, 1)

相关问题 更多 >