这组价值观: 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和很大的差距......
我需要找一个公式来计算一组数字看起来有多好。 我想我需要一些偏差功能..任何想法?
感谢
答案 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)
你对“好”的定义有点宽泛。基于我对你的意思的解释,我建议采用两种方法