如何将数据集的相对频率保存为列表?

How to save the relative frequencies of a data set as a list?

我的数据包含超过一千个值的列表,例如:

[3.481, 2.413, 4.682,...]

并且可以轻松绘制直方图。但是,我想将这些值的相对频率(或每个值出现的概率)保存为列表,并确保频率加起来为 1。我尝试使用

import numpy

numpy.histogram(data, density=None)

但它没有给我我想要的,因为总和不等于 1。并且将密度设置为等于 'True' 将归一化,使得范围内的积分为 1,但我希望 sum 等于 1。任何帮助将不胜感激,我试着到处寻找简单的代码。

这应该可以完成工作。

def rel_freq(x):
    freqs = [(x.count(value) / len(x)) for value in set(x)]
    return freqs

但是,请注意总和不会正好等于 1,而是类似于 0.9999,这是因为 floating point error.

np.histogram(x) 函数已经根据 bin 为您提供了 x 中出现的次数。从那里你只需除以 x.size 得到频率:

In [1]: import numpy as np

In [2]: x = np.random.random(1000)

In [3]: counts, bin_edges = np.histogram(x, bins=np.linspace(0.0, 1.0, 10))

In [4]: counts
Out[4]: array([101, 111, 119, 110, 119, 106, 120, 106, 108], dtype=int64)

In [5]: counts / x.size
Out[5]: array([0.101, 0.111, 0.119, 0.11 , 0.119, 0.106, 0.12 , 0.106, 0.108])

In [6]: np.sum(counts) / x.size
Out[6]: 1.0

请注意,正如@prnvbn 指出的那样,浮点运算是不精确的,您可能并不总是得到精确的 1.0 作为结果。