Доступ к выводу скрипта Python в R, выполненному через системную команду - PullRequest
0 голосов
/ 13 мая 2018

Мой текущий вопрос - следующий вопрос по ссылке ниже.

Невозможно импортировать панд в R

Я выполнил код Python в R с помощью системной команды.Теперь в конце скрипта на python я хочу получить доступ к Dataframe, созданному в R. Один из способов - сохранить Dataframe, созданный в python, с помощью df.to_csv, а затем импортировать его в R. Но мне интересно, есть ли эффективный способ прямого доступа к выводув R.

x=system("/Users/ravinderbhatia/anaconda/bin/python /Users/ravinderbhatia/Downloads/Untitled3.py EMEA regulatory '10% productivity saves SOW'")

выходной фрейм данных:

description                       status region
10  10% productivity saves SOW   pending   EMEA
16  10% productivity saves SOW  approved   EMEA

X просто содержит 0/1 (статус).Как уже упоминалось выше, как получить доступ к Dataframe напрямую в R, не сохраняя его.

Python script used is:


import pandas as pd 
import numpy as np
import sys


from difflib import SequenceMatcher

def similar(a, b):
    return SequenceMatcher(None, a, b).ratio()

arg1 = sys.argv[1]
arg2 = sys.argv[2]
arg3 = sys.argv[3]
print (arg1)
print (arg2)
print (arg3)

def get_similar_CRs(arg1, arg2,arg3):
##create dummy data
    cr_id=range(1,41)

    description=['change in design','More robust system required',
                 'Grant system adminstrator rights',
                 'grant access to all products',
                 'Increase the credit limit',
                 'EDAP Scenario',
                 'Volume prpductivity for NA 2015',
                 '5% productivity saves SOW',
                 'effort reduction',
                 'reduction of false claims',
                 'Volume productivity EMEA',
                 'Volume productivity for NA 2016',
                 '10% productivity saves SOW',
                ]
    region=['EMEA','Asia Pacific','UK']

    business=['card','secured loan','mortgage']
    type=['regulatory','system','audit']

    status=['pending','approved']

    data=pd.DataFrame()
    data['description']=np.random.choice(description, 40)
    data['cr_id']=cr_id
    data['region']=np.random.choice(region,40)
    data['business']=np.random.choice(business, 40)
    data['status']=np.random.choice(status,40)
    data['type']=np.random.choice(type,40)

    subset_data=data.loc[data.region == arg1]
    print (subset_data.head())
    subset_data=subset_data.loc[subset_data.type ==arg2]

    ##This has to be captured dynamically
    new_cr=arg3

    cr_list=data['description'].unique().tolist()

    similar_CR=[] ###global variable
#     for new_cr in new_cr_lis
    for cr in cr_list:
        result=similar(new_cr,cr)
        if result >=0.8:
            similar_CR.append(cr)

    temp=subset_data.loc[subset_data.description.isin(similar_CR)]
    temp=temp[['description','status','region']]
    return temp

temp= get_similar_CRs (arg1, arg2, arg3)

print temp

1 Ответ

0 голосов
/ 13 мая 2018

Я предлагаю заглянуть в пакет reticulate (см. онлайн-виньетка ).

Вы можете запустить свой файл с помощью py_run_file() и получить доступ к основному модулю python с помощью py,Допустим, ваш файл называется «Untitled3.py», а созданный им фрейм данных называется df, затем

library(reticulate)

use_python("/Users/ravinderbhatia/anaconda/bin/python")

py_run_file("Untitled3.py")

py$df

Редактировать

Кроме того, вы можете импортировать только функцию из файла Python и просто вызывать их из REg, иметь файл Python как

import pandas as pd 
import numpy as np
import sys
from difflib import SequenceMatcher

def similar(a, b):
    return SequenceMatcher(None, a, b).ratio()

def get_similar_CRs(arg1, arg2,arg3):
    ##create dummy data
    cr_id=range(1,41)

    description=['change in design','More robust system required',
                 'Grant system adminstrator rights',
                 'grant access to all products',
                 'Increase the credit limit',
                 'EDAP Scenario',
                 'Volume prpductivity for NA 2015',
                 '5% productivity saves SOW',
                 'effort reduction',
                 'reduction of false claims',
                 'Volume productivity EMEA',
                 'Volume productivity for NA 2016',
                 '10% productivity saves SOW',
                ]
    region=['EMEA','Asia Pacific','UK']

    business=['card','secured loan','mortgage']
    type=['regulatory','system','audit']

    status=['pending','approved']

    data=pd.DataFrame()
    data['description']=np.random.choice(description, 40)
    data['cr_id']=cr_id
    data['region']=np.random.choice(region,40)
    data['business']=np.random.choice(business, 40)
    data['status']=np.random.choice(status,40)
    data['type']=np.random.choice(type,40)

    subset_data=data.loc[data.region == arg1]
    print (subset_data.head())
    subset_data=subset_data.loc[subset_data.type ==arg2]

    ##This has to be captured dynamically
    new_cr=arg3

    cr_list=data['description'].unique().tolist()

    similar_CR=[] ###global variable
#     for new_cr in new_cr_lis
    for cr in cr_list:
        result=similar(new_cr,cr)
        if result >=0.8:
            similar_CR.append(cr)

    temp=subset_data.loc[subset_data.description.isin(similar_CR)]
    temp=temp[['description','status','region']]
    return temp

, а затем запустить

library(reticulate)

# To install pandas and numpy in the regular python environment
py_install("pandas", "numpy")

py_run_file("Untitled3.py")

py$get_similar_CRs("EMEA", "regulatory", "10% productivity saves SOW")

#>                   description  status region
#> 2  10% productivity saves SOW pending   EMEA
#> 25 10% productivity saves SOW pending   EMEA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...