使用Python 3.4,Pandas 0.15和Statsmodels 0.6.0,我尝试从数据框创建mosaic plot,如Statsmodels documentation中所述。但是,我只是不了解如何格式化提供给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()
函数接受?文档说明了数据参数的解释:
参数:
数据: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
函数返回的内容吗?如果没有,我该如何相应地转换数据框?
答案 0 :(得分:12)
我使用了您的数据和此代码:
mosaic(myDataframe, ['size', 'length'])
得到了这样的图表:
答案 1 :(得分:2)
您还可以在交叉表上使用堆栈功能,以避免重新计算列联表。
使用您的代码,mosaic(myCrossTable.stack())
可以使用。