2013-01-16 10 views
5

Seguendo l'esempio quiRMagic, IPython e l'informazione di sintesi

http://www.randalolson.com/2013/01/14/filling-in-pythons-gaps-in-statistics-packages-with-rmagic/

Ho provato lo stesso su un set di dati diverso trovato qui, in un quaderno IPython.

https://github.com/burakbayramli/kod/blob/master/delltest/dell.tgz

from pandas import * 
orders = read_csv("dell.csv",sep=",") 
%load_ext rmagic 
%R -i orders print(summary(orders)) 

ottengo

 Length Class Mode 
[1,] 25  -none- list 
[2,] 25  -none- list 
[3,] 25  -none- list 
.. 

Tuttavia lo stesso in R

data <- read.csv ("dell.csv",header=TRUE,sep=",") 
print (summary(data)) 

mi dà le informazioni di riepilogo corretta.

 rank  per_customer_count total_total_amount orderid  
Min. : 1.000 Min. : 1.000  Min. : 0.14 Min. : 1 
1st Qu.: 2.000 1st Qu.: 6.000  1st Qu.: 866.11 1st Qu.: 2964 
Median : 4.000 Median : 8.000  Median : 1764.08 Median : 5980 
Mean : 4.997 Mean : 9.426  Mean : 2004.95 Mean : 5987 
3rd Qu.: 7.000 3rd Qu.:12.000  3rd Qu.: 2856.06 3rd Qu.: 9004 
... 

Qualche idea?

+0

Come una supposizione, è la conversione del panda dataframe ad una matrice R, piuttosto che un R dataframe. Dovremmo migliorare questo. –

+0

@ Thomas-K: Mi sembrava che si stesse convertendo in una lista di liste (di liste). Dovremmo aprire un problema sul sito dev per ipython (ha più senso lì che sul sito di rpy2) e lavorare sul miglioramento delle regole di conversione utilizzate da rmagic. – lgautier

+0

Ho creato il problema sulla pagina GH per ipython - https://github.com/ipython/ipython/issues/2797 – user423805

risposta

2

Ho avuto una rapida occhiata e sembra che ci siano un numero di situazioni in cui la magia di ipython non ottiene la conversione corretta. Devo mettermi in contatto con loro per quanto riguarda rmagic e più magia.

Nel frattempo, si dovrebbe essere in grado di cucinare ciò che è necessario per progredire dal frammento di codice di seguito:

import pandas 
orders = pandas.read_csv("dell.csv", sep=",") 
%load_ext rmagic 

import rpy2.robjects 
d = dict() 
for i, (k,v) in enumerate(orders.iteritems()): 
    print("%s (type: %s - %i/%i)" %(k, v.dtype.kind, i, orders.shape[1])) 
    if v.dtype.kind == 'O': 
     v = rpy2.robjects.vectors.StrVector(v) 
    d[k] = rpy2.robjects.conversion.py2ri(v) 
df = rpy2.robjects.DataFrame(d) 

def print_rsummary(x): 
    print(rpy2.robjects.baseenv['summary'](x)) 

print_rsummary(df) 
+0

Nota che questa funzionalità è ora in rpy2 2.3.3+ (vedi http://rpy.sourceforge.net/rpy2/doc-2.3/html/changes.html?highlight=pandas)! –