2014-12-01 8 views
7

Utilizzando Python 3.4, Pandas 0.15 e Statsmodels 0.6.0, provo a creare un mosaic plot da un dataframe come descritto nello Statsmodels documentation. Tuttavia, semplicemente non capisco come debba essere formattato l'input fornito alla funzione mosaic().Come creare un grafico a mosaico dal dataframe di Pandas con la libreria Statsmodels?

Dato un semplice dataframe:

In: 
myDataframe = pd.DataFrame({'size' : ['small', 'large', 'large', 'small', 'large', 'small'], 'length' : ['long', 'short', 'short', 'long', 'long', 'short']}) 

Out: 
    length size 
0 long small 
1 short large 
2 short large 
3 long small 
4 long large 
5 short small 

Quando si cerca di creare un grafico a mosaico di questi dati:

from statsmodels.graphics.mosaicplot import mosaic 
mosaic(data=myDataframe, title='Mosaic Plot') 

ValueError: cannot label index with a null key

Come grafico a mosaico sono una visualizzazione delle tabelle di contingenza, Ho provato a creare tale prima con

In: 
myCrosstable = pd.crosstab(myDataframe['size'], myDataframe['length']) 

Out: 
length long short 
size    
large  1  2 
small  2  1 

Ancora, utilizzando myCrosstable come argomento dati dà lo stesso errore.

Come deve essere formattato il dataframe per poter essere accettato dalla funzione mosaic()? La documentazione dice come spiegazione per l'argomento di dati: Parametri:

dati: dict, pandas.Series, np.ndarray, pandas.DataFrame

The contingency table that contains the data. Each category should contain a non-negative number with a tuple as index. 

Non è quello che il pd.crosstab la funzione ritorna? In caso contrario, come posso convertire il dataframe di conseguenza?

risposta

11

ho usato i dati e questo codice:

mosaic(myDataframe, ['size', 'length']) 

e ha ottenuto il grafico come questo:

mosaic chart

2

È anche possibile utilizzare la funzione di stack sul campi incrociati per evitare di ricalcolare la contingenza tavolo.

Con il tuo codice, mosaic(myCrossTable.stack()) funziona.

Problemi correlati