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

11

我正在使用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

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

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

给出了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

即便如此,将myCrosstable用作数据参数仍会导致相同的错误。

为了使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.
那不就是pd.crosstab函数返回的内容吗?如果不是,我该如何相应地转换数据框呢?
2个回答

16

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

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

并得到了这样的图表:

马赛克图表


嗨,我该如何使得这些方框基于另一列的值来创建? - user147529
@user147529 - mosaic 的第二个参数是你想要用来调整方块大小的列列表。如果这不能解决问题,也许可以尝试提出一个单独的问题。 - Primer

3
您可以在交叉表上使用堆栈函数来避免重新计算列联表。
使用您的代码,mosaic(myCrossTable.stack()) 即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接