繁体   English   中英

Python-查找数组中最大的数字

[英]Python - Find top largest numbers in array

好吧-我有两难选择。 到目前为止,我的脚本将页面标题转换为类别。 这是基于关键字的,当存在匹配项时,将添加一定的分数,即,某些单词的值保留为10,有些则只有1。这将累加到每个类别的总得分中。

[{15: [32, 'massages']}, {45: [12, 'hair-salon']}, {23,:[3, 'automotive service']}]

索引是类别ID,第一个值是得分,第二个值是类别。

在某些情况下,这可以超过10个类别匹配。

如何将其仅过滤到前60%至75%

即显然按摩和美发沙龙是最多的,因为它们远不止汽车服务。 但是我们如何对这种智能进行编程?

我以为stddev可以帮上忙吗?

编辑

我试图过滤掉得分较低的项目,例如

data = [{15: [32, 'massages']}, {45: [1, 'hair-salon']}, {23:[1, 'automotive service']}]]

按摩是这种情况下唯一的高分项目

data = [{15: [4, 'massages']}, {45: [2, 'hair-salon']}, {23:[1, 'automotive service']}]]

高脚按摩

data = [{15: [10, 'massages']}, {45: [50, 'hair-salon']}, {23:[5, 'automotive service']}]]

现在是美发沙龙(因为它远超其他)

因此,我不需要第一个(N)个对象,而且,第一个比其他数字高x个的对象(以百分比或标准差的形式)。

所以50比10和5高得多

10比3或2高得多

但是9、8和6几乎相同

这是使用heapq.nlargest()的解决方案

import heapq

data = [{15: [32, 'massages']}, {45: [12, 'hair-salon']}, {23:[3, 'automotive service']}]

N = int(len(data) * 0.6 + 1)
print heapq.nlargest(N, data, key = lambda x: next(x.itervalues())[0])

打印:

[{15: [32, 'massages']}, {45: [12, 'hair-salon']}]

编辑:如果要消除“ 低分项目 ”,则需要准确定义“ 低分 ”的含义。

这是一些采用完全任意的“低得分”定义的代码:如果得分比最大得分低一个标准差,那么得分就很低:

import math

data = [{15: [32, 'massages']}, {45: [1, 'hair-salon']}, {23:[3, 'automotive service']}]

scores = [score for d in data for cat,(score,name) in d.iteritems()]
score_mean = sum(scores) / float(len(scores))
score_stdev = math.sqrt(sum(abs(s - score_mean)**2 for s in scores) / float(len(scores)))

print [d for d in data if next(d.itervalues())[0] > (max(scores) - score_stdev)]

打印:

[{15: [32, 'massages']}]
yourdata = [{15: [32, 'massages']}, {45: [12, 'hair-salon']}, {23:[3, 'automotive service']}]

# transfer your data into a more usable format
data = [(score,cat,name) for dat in yourdata for cat,(score,name) in dat.iteritems()]

# sort on descending score
data.sort(reverse=True)

# throw away the low-scoring items
data = data[:int(len(data)*0.6 + 1)]

退货

[(32, 15, 'massages'), (12, 45, 'hair-salon')]

(得分最高的两个项目)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM