2015-11-29 49 views
2

我有一個大熊貓非數據幀:Python 3 - 如何從高維數據製作馬賽克圖?

data = pd.read_csv(r'C:\data-path\demographics.csv', sep=',') print(data)

PersonID Married No. of Children Sex 1 yes 0 male 2 no 0 female 3 no 1 male 4 yes 1 male 5 no 1 female 6 no 2 female 7 no 1 male 8 no 2 male 9 no 2 male 10 no 1 male 11 no 0 female

現在,我嘗試創建一個mosaicplot出來,用statsmodels.graphics.mosaicplot

mosaic(data, ['Married', 'No. of Children'])

...它的工作原理但是,每當我嘗試添加第三個維度時,例如:

mosaic(data, ['Married', 'No. of Children', 'Sex'])

...我收到以下錯誤消息:

ValueError: at least one proportion should begreater than zero

我不知道,它從我的希望。是否有一些參數丟失/錯誤設置?

我選擇哪個列/維度或按什麼順序也沒有關係。每當我有2個以上的時候,我會遇到一個錯誤。

有人有想法嗎?

在此先感謝

+0

經過進一步的研究,我遇到了以下情況:http://photo.etangkk.com/Python/blog-03.asp。在頁面底部附近,還有一個由3個變量組成的馬賽克圖。我自己嘗試了代碼,它確實有效!她和我的代碼有什麼重大區別?她的數據實際上比我的複雜得多......任何人都知道這裏發生了什麼? – Carlo1990

+0

查看[這裏](https://stackoverflow.com/questions/45352585/how-to-make-a-mosaic-plot-in-matplotlib)另一種方法 – jrjc

回答

1

一些修修補補後,我沒有找到解決辦法,但這個錯誤的根源。

它位於mosaicplot級/ -module的代碼內:http://nipy.bic.berkeley.edu/nightly/statsmodels/doc/html/_modules/statsmodels/graphics/mosaicplot.html

簡而言之:它無法處理在一個數據集的類,它是空的,即,具有0的實例。

考慮從原來的問題的數據集,然後將下面的函數調用:

mosaic(data, ['Married', 'No. of Children'])

什麼「mosaic'法會做,是確定第一類有多少類具有(在此情況:2),然後每個類發生的頻率。然後,它會生成情節的矩形「比例」基於這樣的列表,這在「Married'類的情況下,將

[2,9]

...因爲有2 '是'和9'沒有'實例。

對於每個類,根據第二個類別,這裏將會有新的拆分:'否。孩子的'。有3個等級(0,1和2),這將產生以下「比例」:

[1,1,0](1個已婚,0個孩子,1個已婚,1個孩子,0個已婚,2個僅根據上述兒童)

[2,4,3](1個單用0兒童,等等...)

,它是能夠得出一個完全正常馬賽克圖。

但是,一旦我們考慮了第三類(例如:'性'),上面列表中的0就成了一個問題。它將產生[0,0]列表,因爲它們是0個已婚男人/ 2個孩子的女人。

而在源代碼的第45行中,有一個if-子句會引發全0列表中的異常(因爲它們「無意義」)。

如上所述,我無法找到修復/解決方法來執行此操作。簡單地說,if-clause會允許所有分割正常執行,但是,這也會導致馬賽克繪圖在matplotlib的backend_agg.py中拋出一個異常,因爲它們現在是現在的值,它們是NaN (不是數字)。

這是爲什麼,我不知道,如果有人比我更聰明,更有經驗,我會很高興。

我仍然不排除我必須以不同的方式設置一些參數。