Упаковка мышей R в Python - PullRequest
       115

Упаковка мышей R в Python

1 голос
/ 08 мая 2020

Я пытаюсь запустить пакет R mice на Python через Jupyter. Я борюсь с множеством ошибок и технических проблем. Давайте возьмем набор данных 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: модуль 'mice' не имеет атрибута 'complete'

  2. в функции мышей:

    TypeError: 'NULLType 'объект не повторяется

Суть в том, как вы предлагаете запускать мыши R на Python?

1 Ответ

1 голос
/ 08 мая 2020

1) Вероятно, это потому, что функция complete происходит не из библиотеки mice, а из tidyr. Вы можете проверить это в R, просто распечатав его:

print(complete)

, в котором показано пространство имен, из которого оно происходит:

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

Мне было бы любопытно, почему он не реэкспортируется в rpy2 так же, как и в R (здесь поможет ответ от @lgautier).

2) Я не могу воспроизвести; для меня работает, как ожидалось:

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

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