2014-12-01 22 views
7

Sử dụng Python 3.4, Pandas 0.15 và Statsmodels 0.6.0, tôi cố gắng tạo một mosaic plot từ một khung dữ liệu như mô tả trong Statsmodels documentation. Tuy nhiên, tôi chỉ không hiểu cách đầu vào phải được định dạng được cung cấp cho hàm mosaic().Làm thế nào để tạo ra cốt truyện khảm từ Pandas dataframe với thư viện Statsmodels?

Cho một dataframe đơn giản:

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 

Khi cố gắng để tạo ra một âm mưu khảm các dữ liệu này:

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

cho ValueError: cannot label index with a null key

Như lô khảm là một hình dung của bảng ngẫu nhiên, Trước tiên, tôi đã cố gắng tạo ra điều này với

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

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

Vẫn còn, sử dụng myCrosstable làm đối số dữ liệu cho cùng một lỗi.

Làm cách nào để định dạng khung dữ liệu phải được định dạng để được chấp nhận bởi hàm mosaic()? Các tài liệu nói là lời giải thích cho lập luận dữ liệu: Tham số:

dữ liệu: 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. 

Mà không phải là những gì pd.crosstab hàm trả về? Nếu không, làm thế nào tôi có thể chuyển đổi dataframe cho phù hợp?

Trả lời

11

tôi đã sử dụng dữ liệu của bạn và mã này:

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

và nhận được bảng xếp hạng như thế này:

mosaic chart

2

Bạn cũng có thể sử dụng chức năng ngăn xếp trên crosstab để tránh recomputing những bất ngờ bàn.

Với mã của bạn, mosaic(myCrossTable.stack()) hoạt động.

Các vấn đề liên quan