gpt4 book ai didi

Python 3 - 如何从高维数据制作马赛克图?

转载 作者:太空宇宙 更新时间:2023-11-04 05:40:49 24 4
gpt4 key购买 nike

我有一个 pandas-DataFrame:

data = pd.read_csv(r'C:\data-path\demographics.csv', sep=',')
打印(数据)

PersonID 已婚子女人数性别
1 是 0 男性
2无0女
3无1男
4对1男
5无1女
6号2女
7无1男
8号2男
9号2男
10无1男
11 无 0 女

现在我尝试使用 statsmodels.graphics.mosaicplot 从中创建一个马赛克图

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

...但是,无论何时我尝试添加第三个维度,都有效,例如:

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

...我收到以下错误消息:

ValueError:至少有一个比例应该大于零

我不确定,它想从我这里得到什么。是否缺少/错误设置了某些参数?

我选择的列/维度或顺序也无关紧要。每当我有超过 2 个时,我都会收到错误消息。

有人有想法吗?

提前致谢

最佳答案

经过一些修补,我没有找到解决方案,而是找到了 bug 的根源。

它位于 mosaicplot-class/-module 的代码中:http://nipy.bic.berkeley.edu/nightly/statsmodels/doc/html/_modules/statsmodels/graphics/mosaicplot.html

简而言之:它无法处理数据集中的类,这些类是空的,即具有 0 个实例。

考虑原始问题的数据集,然后调用以下函数:

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

“马赛克”方法的作用是确定第一个类别有多少个类别(在本例中为 2 个),然后确定每个类别出现的频率。然后它将基于此生成绘图矩形的“比例”列表,在“已婚”类别的情况下将是

[2, 9]

...因为有 2 个"is"和 9 个“否”实例。

对于每个类别,都会有新的拆分,根据第二个类别,这里:'No. child 的'。有 3 个类(0、1 和 2),这将生成以下“比例”:

[1, 1, 0](1 已婚有 0 个 child ,1 已婚有 1 个 child ,0 已婚有 2 个 child )

[2, 4, 3](1个单例,有0个 child ,等等....)

仅凭以上,就可以绘制出完美的马赛克图。

但是,一旦我们考虑了第三个类别(例如:“性”),上述列表之一中的 0 就会成为问题。它会产生列表 [0, 0],因为他们是 0 个有 2 个 child 的已婚男人/女人。

在源代码的第 45 行,有一个 if 子句会在全 0 列表中引发异常(因为它们“没有意义”)。

如上所述,我无法找到修复/解决方法来执行此操作。简单地取消注释所说的 if 子句将允许所有拆分正常执行,但是,这也会导致马赛克图的绘制在 matplotlib 的 backend_agg.py 中抛出异常,因为不知何故它们现在是 NaN 的值(不是数字)。

这是为什么,我不知道,如果有人比我更聪明、更有经验,我会很高兴研究这个。

我仍然不排除我必须设置一些不同的参数。

关于Python 3 - 如何从高维数据制作马赛克图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33987423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com