gpt4 book ai didi

python - 带有 bins 值百分比的直方图?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:02:20 26 4
gpt4 key购买 nike

我在 python 中创建一个直方图,我希望 bin 边缘是给定值的百分比 (5-10%)。执行此操作的最佳方法是什么,这样我就不会在 bin 边界中留下间隙,并且不必为 bin 边界计算预先设置一些值?

最佳答案

通常,使用 numpy.histogram 等预定义工具创建直方图很方便,尽管您新发布的评论-暗示您正在使用 matplotlib- 也完全没问题。无论哪种方式,您都可以创建一定数量的自动确定的等宽箱...

import numpy
data = [0,1,1,1,1,1,1,2,3,3]
hist, edges = numpy.histogram( data , bins = 10)
>>> hist
array([1, 0, 0, 6, 0, 0, 1, 0, 0, 2])
>>> edges
array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8, 2.1, 2.4, 2.7, 3. ])

...或者,在您想要预定义箱(可能宽度不同)的奇怪情况下,您可以自己指定箱边缘(阅读文档以获取有关其工作原理的信息):

>>> hist, edges = numpy.histogram( data , bins = [0,.5,1., 1.5,2,3])
>>> hist
array([1, 0, 6, 0, 3])
>>> edges
array([ 0. , 0.5, 1. , 1.5, 2. , 3. ])
>>>

不过,请小心使用截然不同的 bin 大小。在许多情况下,这种粗粒度化可能会扭曲您尝试比较的数字之间的关系。

至于您的值(value) +/-10% 边界?

preferred_bin_centers = [0,1,2,3]
bin_pairs = [ ( 0.9* v , 1.1*v ) for v in preferred_bin_centers ]
>>> [[0.0, 0.0], [0.9, 1.1], [1.8, 2.2], [2.7, 3.3000000000000003]]

或者,将其展平为列表形式,供 numpy.histogram 使用...

bin_edges = sum( [  [ 0.9* v , 1.1*v ]  for v in values ]    , [] )

>>> [0.0, 0.0, 0.9, 1.1, 1.8, 2.2, 2.7, 3.3000000000000003]

(请注意上面列表的前两项,如果您的 bin 中心之一为 0,此代码会给出令人困惑的 bin 边缘;我将其留作仅作为注意事项的示例)

顺便说一句,上面定义的 bin 边缘也会在您想要的范围之外创建中间 bin。例如,如果您在 1,2 和 3 的 +/- 10% 范围内对项目进行分类,那么从本质上讲,2.2 和 2.7 之间也会有一个分类(您所需分类的“外侧边缘”),其中像 2.5 这样的数字会去。如果您的值介于所需的 bin 之间,那么您可能需要相应地调整截止值或可视化。

关于python - 带有 bins 值百分比的直方图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12320395/

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