如何使用Statsmodels库从Pandas数据框创建马赛克图?

Dir*_*irk 7 python pandas statsmodels

使用Python 3.4,Pandas 0.15和Statsmodels 0.6.0,我尝试从Statsmodels文档中描述的数据创建马赛克图.但是,我只是不明白输入必须如何格式化提供给函数.mosaic()

给出一个简单的数据帧:

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
Run Code Online (Sandbox Code Playgroud)

在尝试创建此数据的马赛克图时:

from statsmodels.graphics.mosaicplot import mosaic
mosaic(data=myDataframe, title='Mosaic Plot')
Run Code Online (Sandbox Code Playgroud)

ValueError: cannot label index with a null key

由于马赛克图是列联表的可视化,我试图创建这样的第一个

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

Out:
length  long  short
size               
large      1      2
small      2      1
Run Code Online (Sandbox Code Playgroud)

仍然,使用myCrosstableas data参数会产生相同的错误.

如何对数据帧进行格式化以便被mosaic()函数接受?文档说明了数据参数的说明:参数:

data: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.
Run Code Online (Sandbox Code Playgroud)

这不是pd.crosstab函数返回的吗?如果没有,我该如何相应地转换数据框?

Pri*_*mer 12

我使用了你的数据和这段代码:

mosaic(myDataframe, ['size', 'length'])
Run Code Online (Sandbox Code Playgroud)

得到这样的图表:

马赛克图表