我需要对数据进行重新排序,但我不能在生活中找出如何做到这一点。
(Int ((1- (([TD] - min)/( max - min)))*20))+1
这将在[TD]中取0-1之间的数字(假设max = 1& min = 0)并将其分成20个整数代码(我需要能够切换20)。代码1将是前5%,代码2 = 5-10%范围等。
为[TD]输入.954,获得1,输入.923,获得2
目前它会打破均匀尺寸的垃圾箱,你可以重新调整,这样垃圾箱会沿着对数刻度或其他指数曲线分解 - 参见图表以查看基本的分布模式。重要提示:如果您可以解决,则需要保持相同的语法,以便将其放入特定的程序中。 Int()函数向下舍入到最接近的整数,我无法找到一个'向上舍入'功能,所以我想继续使用它。谢谢大家,
答案 0 :(得分:0)
可能"正确"设置垃圾箱的方法,使用类似数据概率分布的倒数。通常,除非您了解数据的统计属性,否则很难构建。
或者,如果您知道数据是按照指数递减的分布粗略分布的,那么通过取每个值的对数,您将使这些转换值更均匀地间隔。然后可以使用与您的公式类似的配方对这些对数转换后的值进行分箱。
以下Python代码说明了原则:
import numpy
x = 0.1 + numpy.random.exponential(size=(100000,))
nBins = 20
logX = numpy.log(x)
eps = 1e-9
minLogX, maxLogX = numpy.min(logX), numpy.max(logX)
bins = numpy.floor((nBins - eps) * (logX - minLogX) / (maxLogX - minLogX))
binCentres = numpy.exp(minLogX + (numpy.arange(0, nBins) + 0.5)
* (maxLogX - minLogX) / nBins)
如果我们使用20个分箱对原始数据x
进行直方图分析,那么大部分数据只需几个分档:
如果我们在应用log / exp转换后计算分箱数据的计数,我们会得到这样的分布(再次使用20个分箱):
这显示了在x=1.5
区域中具有更高计数的更大数量的区域,并且随着x
的增加,区域之间的间隔越来越大。