python:有没有频率函数?
在Excel中存在频率函数:python:有没有频率函数?
Excel的FREQUENCY函数此 有用的功能可以分析值的系列 和它们聚合成一个 号所指定的范围。对于 例如一些孩子 的高度可以被分组到四个类别[少于150厘米]的 ; [151 - 160cm]; [161 - 170cm]; [超过170厘米]。
你想了解更多?
Excel 2003中的公式由约翰瓦尔肯巴赫 (附光盘)
FREQUENCY()是一个不寻常的阵列 功能,它的工作方式不同,以 大多数其他正常功能。它可以 不能简单地键入到细胞或 甚至使用Excel 功能向导中输入正确。
注意,此函数不 分析值代入类别例如 家庭支出成组等 如天然气,电力,水,费率等 要执行这种分析的 高级过滤器可能是合适的。
频率函数有两个 参数 - 第一个是要 分析含有值 细胞的范围内;第二个是 单元格的范围,其中包含每个组绑定的上限值 。例如 = FREQUENCY(A3:A120,B6:B10)
第二个参数(该基团上 限制)将排除其中 超过最高类别或 绑扎的任何值。该功能可让您 带上户口本和 范围的分析扩大到其他类别 包含超过规定上限的所有值 。
http://www.meadinkent.co.uk/xlfreq.htm
有在Python这样的事情?
import numpy
numpy.histogram([ <data> ], [ <bins> ])
Docs:
numpy.histogram(a, bins=10, range=None, normed=False, weights=None)
计算的一组数据的直方图。 参数:
a
:array_like 输入数据。直方图是在平坦数组上计算的。
bins
:int或标量的序列,可选 如果仓是一个int,它定义了在给定 范围等宽窗口的数量(10,默认情况下)。如果分箱 是一个序列,则它定义了分箱 边缘,包括最右边的边缘,允许不均匀的分箱宽度。
range
:(浮动,浮动),可选 垃圾箱的上下范围。如果未提供,范围为 (a.min(),a.max())。范围之外的值 被忽略。
normed
:bool,可选 如果为False,结果将包含每个 bin中的样本数。如果为真,则结果是归零的概率密度函数 的值 归一化,使得该范围上的积分是1.注意 直方图值的总和 将不等于1,除非选择单位宽度为 ;它不是一个 概率质量函数。
weights
:array_like,可选 一个与a相同形状的权重数组。仅在 中的每个值贡献其相关权重 朝向箱计数(而不是1)。 如果赋范为True,权重是 归一化,从而使 积分密度在范围内保持1返回:
hist
:阵列 直方图的值。请参阅规范和权重以了解可能的语义描述。
bin_edges
:dtype float的数组 返回bin边(长度(hist)+1)。
您可能首先需要install numpy。
基于什么引用的页面http://www.meadinkent.co.uk/xlfreq.htm状态我写了一个函数我敢肯定,有更快的方式做到这一点,但我相信这是正确的
def FREQUENCY(values, bands, max=None):
counts = [0]*(len(bands)+1)
for v in values:
for i,b in enumerate(bands):
if v <= b:
counts[i] += 1
break
else if v > max:
counts[-1] += 1
break
return counts
Excel的FREQUENCY返回的数组是一个比band长的元素。这个版本没有。 – 2010-08-03 16:00:35
的最佳选择是使用numpy.histogram
,但如果你不想安装numpy的,这里是一个工程就像Excel中:
def frequency(data, bins):
# work with local sorted copy of bins for performance
bins = bins[:]
bins.sort()
freqs = [0] * (len(bins)+1)
for item in data:
for i, bin_val in enumerate(bins):
if item <= bin_val:
freqs[i] += 1
break
else:
freqs[len(bins)] += 1
return freqs
这里的翻译到Python在Excel的帮助的例子:
>>> data = [79, 85, 78, 85, 50, 81, 95, 88, 97]
... bins = [70, 79, 89]
... print frequency(data, bins)
[1, 2, 4, 2]
有一个小小的区别。在Excel中,如果bins
为空,则数据的长度将作为整数返回。这个python版本返回列表中的整数。原因是Python版本将返回一致的数据类型(并且仍然给出正确的答案)。
我不知道是否有在Python这样的功能,但很明显,你可以写:
def frequency(values, groups):
# Build the solution
toret = dict()
toret[ None ] = list()
# Sort them
values.sort()
groups.sort()
# Run over groups
i = 0
for maxValue in groups:
while ((values[ i ] < maxValue) and (i < len(values))):
if (toret.get(maxValue) == None):
toret[ maxValue ] = list()
toret[ maxValue ].append(values[ i ])
i += 1
if (i >= len(values)):
break
if (i < len(values)):
while(i < len(values)):
toret[ None ].append(values[ i ])
i += 1
return toret
l=[ 15,9,3,5,6,4,8,2,1,7,11,12 ]
g=[ 3,6,9 ]
print(frequency(l, g))
这里的结果是一本字典,其中每个元素是最大的一个值组列表。您可以通过计算每个列表的长度来找到频率。
结果是:
{None: [9, 11, 12, 15], 9: [6, 7, 8], 3: [1, 2], 6: [3, 4, 5]}
为什么所有括号? – 2010-08-03 16:40:33
如果您在诸如“print(frequency(l,g))”之类的句子中引用括号,那么它们归因于Python 3的使用。如果您在“if(i
(我没有Excel自动柜员机)是否'FREQUENCY'仅仅数个数据点的数量,每个桶呢,还是斗数据点自己?也就是说,'FREQUENCY'([145,155])是为了给'{'小于150cm':1,...}或'{'小于150cm':145,...''? – katrielalex 2010-08-03 15:40:12
如果是后者,'numpy.histogram'是你的朋友。 – katrielalex 2010-08-03 15:44:49
谢谢!我如何包含它? – 2010-08-03 15:46:49