计算一组值看起来有多好(分布有多好)

时间:2011-01-24 17:00:56

标签: math statistics computer-science visualization data-visualization

这组价值观: 1 2 3 3 4 1 如果你在条形图上想到它,看起来很不错:

*   *
* * * *
=======
1 2 3 4 

虽然这个看起来很糟糕.. 1 2 2 2 2 2 2 2 2 9 8

  *
  *
  * 
  * 
  *
  *
  *
* *           * *
=================
1 2 3 4 5 6 7 8 9

这是因为2和8之间有很多2和很大的差距......

我需要找一个公式来计算一组数字看起来有多好。 我想我需要一些偏差功能..任何想法?

感谢

3 个答案:

答案 0 :(得分:3)

chi-square analysis可能是您正在寻找的。如果以正确的方式使用,它将为您提供一个数字,描述您的分布与离散均匀分布的接近程度。离散的均匀分布将是平坦的(即在每个直方图桶中具有大致相同数量的元素),这似乎符合您对“好”的定义。

答案 1 :(得分:1)

这对我来说似乎很合理,但我对统计数据知之甚少:

from collections import Counter
def tonums( s ):
        return [int(x) for x in s if x!=' ']

def nice( nums ):
    # how far do they spread
    used_range = range(min(nums), max(nums)+1)

    # how often would each number occur if they were equally distributed
    expected = 1.0*len(nums)/len(used_range)

    # how often do they actually occur
    counter = Counter(nums)

    # compute the variance
    return sum((count-expected)**2 for item, count in counter.iteritems())


# should be fst < snd
print nice(tonums('1 2 3 3 4 1'))
print nice(tonums('1 2 2 2 2 2 2 2 2 9 8'))

# these should be 0
print nice(tonums('1'))
print nice(tonums('1 1 1 1'))

# should be equal
print nice(tonums('1 1 2 3'))
print nice(tonums('1 2 2 3'))

答案 2 :(得分:0)

你对“好”的定义有点宽泛。基于我对你的意思的解释,我建议采用两种方法

  1. 计算(或估算)how far away from您的数据为normally distributed。统计教科书或统计数据包应该讨论这一点。
  2. 执行某种Fourier transform - 许多高频成分可能不是“好”。