标签: ranking

在GROUP BY中使用LIMIT来获得每组N个结果?

以下查询:

SELECT
year, id, rate
FROM h
WHERE year BETWEEN 2000 AND 2009
AND id IN (SELECT rid FROM table2)
GROUP BY id, year
ORDER BY id, rate DESC
Run Code Online (Sandbox Code Playgroud)

收益率:

year    id  rate
2006    p01 8
2003    p01 7.4
2008    p01 6.8
2001    p01 5.9
2007    p01 5.3
2009    p01 4.4
2002    p01 3.9
2004    p01 3.5
2005    p01 2.1
2000    p01 0.8
2001    p02 12.5
2004    p02 12.4
2002    p02 12.2
2003    p02 10.3
2000    p02 8.7
2006    p02 …
Run Code Online (Sandbox Code Playgroud)

mysql sql ranking greatest-n-per-group

361
推荐指数
8
解决办法
32万
查看次数

一种更好的变长字符串相似度排序算法

我正在寻找一种字符串相似度算法,它可以在变长字符串上产生比通常建议的更好的结果(levenshtein距离,soundex等).

例如,

鉴于字符串A:"罗伯特",

然后是字符串B:"Amy Robertson"

会比一个更好的比赛

字符串C:"理查德"

此外,优选地,该算法应该是语言不可知的(也可以用于除英语之外的语言).

fuzzy-search similarity ranking string-matching

149
推荐指数
15
解决办法
7万
查看次数

LINQ中"最受欢迎的"GROUP BY?

假设有一个像stackoverflow问题标签的标签表:

TagID(bigint),QuestionID(bigint),Tag(varchar)

使用LINQ获取25个最常用标签的最有效方法是什么?在SQL中,一个简单的GROUP BY将:

SELECT Tag, COUNT(Tag) FROM Tags GROUP BY Tag
Run Code Online (Sandbox Code Playgroud)

我写了一些有效的LINQ:

var groups = from t in DataContext.Tags
             group t by t.Tag into g
             select new { Tag = g.Key, Frequency = g.Count() };
return groups.OrderByDescending(g => g.Frequency).Take(25);
Run Code Online (Sandbox Code Playgroud)

喜欢,真的吗?这不是很啰嗦吗?可悲的是,我这样做是为了保存大量的查询,因为我的Tag对象已经包含一个Frequency属性,否则如果我实际使用了该属性,则需要使用数据库检查每个Tag.

然后我将这些匿名类型解析 Tag对象:

groups.OrderByDescending(g => g.Frequency).Take(25).ToList().ForEach(t => tags.Add(new Tag()
{
    Tag = t.Tag,
    Frequency = t.Frequency
}));
Run Code Online (Sandbox Code Playgroud)

我是LINQ新手,这似乎不对.请告诉我它是如何完成的.

.net linq group-by ranking

30
推荐指数
3
解决办法
3万
查看次数

热内容算法/得分随时间衰减

我一直在阅读+研究算法和公式,为我的用户提交的内容计算得分,以显示列表上方的当前热门/趋势项目,但是我承认我在这里有点过头了.

我将介绍一下我在追求的内容......用户将音频上传到我的网站,音频有几个动作:

  • 玩过
  • 下载
  • 喜欢
  • 被收藏

理想情况下,我想一个算法,我可以更新音频新活动被记录一次得分(出场,下载等),也有下载行为的价值超过一打多了,像多了下载和多喜爱一样.

如果可能的话,我希望1周以上的音频从列表中大幅下降,以便为更新的内容提供更多的趋势.

我已经读过看起来很好的reddits算法了,但是我对如何调整它以利用我的多个变量以及在大约7天后丢弃旧文章感到满意.

一些我们感兴趣的文章:

任何帮助表示赞赏!

保罗

sorting algorithm ranking

30
推荐指数
1
解决办法
1万
查看次数

如何在Pandas系列中找到与输入数字最接近的值?

我见过:

这些与香草蟒蛇有关,而不是熊猫.

如果我有这个系列:

ix   num  
0    1
1    6
2    4
3    5
4    2
Run Code Online (Sandbox Code Playgroud)

我输入3,我怎样才能(有效地)找到?

  1. 如果在系列中找到,则索引为3
  2. 如果在系列中找不到,则该值的索引低于和高于3.

IE浏览器.使用上面的系列{1,6,4,5,2}和输入3,我应该得到带有索引(2,4)的值(4,2).

python ranking dataframe pandas

30
推荐指数
4
解决办法
3万
查看次数

字串相似算法?

我需要比较2个字符串并计算它们的相似性,以过滤掉最相似字符串的列表.

例如.寻找"狗"会回来

  1. 该死
  2. 沼泽
  3. 多雾路段
  4. 有雾

例如.寻找"破解"将返回

  1. 裂纹
  2. 俏皮话
  3. 插口
  4. 嘎嘎

我遇到过:

你知道更多的字符串相似度算法吗?

string algorithm comparison filtering ranking

29
推荐指数
3
解决办法
5万
查看次数

Wilson Score Interval的Python实现?

在阅读了如何不按平均评级排序后,我很好奇是否有人对伯努利参数的Wilson分数置信区间的下限进行了Python实现?

python algorithm statistics ranking

29
推荐指数
5
解决办法
8218
查看次数

在Python中计算列表的秩向量的有效方法

我正在寻找一种有效的方法来计算Python中列表的秩向量,类似于R的rank函数.在元素之间没有联系的简单列表中,列表的等级向量的元素il应该是x,当且仅当l[i]是排序列表中的第x个元素时.到目前为止,这很简单,以下代码片段可以解决这个问题:

def rank_simple(vector):
    return sorted(range(len(vector)), key=vector.__getitem__)
Run Code Online (Sandbox Code Playgroud)

然而,如果原始列表具有联系(即具有相同值的多个元素),则事情变得复杂.在这种情况下,具有相同值的所有元素应该具有相同的等级,这是使用上述朴素方法获得的等级的平均值.所以,例如,如果我有[1, 2, 3, 3, 3, 4, 5],天真的排名给了我[0, 1, 2, 3, 4, 5, 6],但我想拥有的是[0, 1, 3, 3, 3, 5, 6].在Python中哪一个是最有效的方法?


脚注:我不知道NumPy是否已经有了实现这一目标的方法; 如果确实如此,请告诉我,但无论如何我都会对纯Python解决方案感兴趣,因为我正在开发一个在没有NumPy的情况下也可以工作的工具.

python sorting list ranking

27
推荐指数
3
解决办法
4万
查看次数

排名有数百万条目

我正在开发一款能够处理数百万玩家的在线游戏服务器.现在游戏需要排行榜并且希望能够向玩家显示当前玩家当前位置以及可能在当前玩家位置附近的其他玩家以及玩家朋友的位置.

现在我已经在MySQL之前完成了这些工作并且我知道它在技术上是如何可能的,但我想,因为这是许多在线游戏的常见做法,必须有现有的库或数据库,特别是为此目的?

任何人都可以告诉我什么数据库最适合这些类型的查询,可能还有任何预先存在的库已经做了很多这方面的工作?具有API访问权限的第三方服务也可以.

希望得到一些好的建议,谢谢!

编辑:

为了澄清,我需要一个可以容纳数百万个条目的数据库(到目前为止MySQL是有用的),我可以轻松获得排名结果.例如,如果我从"排行榜"表中获取特定行,我需要知道该行具有哪个排名.无论db的大小如何,此查询都必须低于500毫秒.

或者,使用当前排名信息更新表的方法可能会很长,因为此更新查询不会锁定整个表,并且更新查询在30秒内运行.

关于使用什么数据库/机制或第三方服务的任何想法将非常感谢!

mysql database ranking

26
推荐指数
3
解决办法
1万
查看次数

使用Levenshtein距离匹配的匹配百分比

我试图使用Levenshtein距离算法将单个搜索项与可能匹配的字典进行匹配.该算法返回一个距离,表示为将搜索字符串转换为匹配字符串所需的操作数.我想在排名最高的"N"(比方说10)比赛的百分比列表中显示结果.

由于搜索字符串可以比单个字典字符串更长或更短,因此将距离表示为百分比的适当逻辑将定性地反映出查询字符串的每个结果与"百分比"的接近程度,100 %表示完全匹配.

我考虑了以下选项:

Q = query string
M = matched string
PM = Percentage Match
Option 1. PMi = (1 - Lev_distance(Q, Mi)/Strlen(Q)) * 100
Option 2. PMi = (1 - Lev_distance(Q, Mi)/max(Strlen(Q), strlen(Mi))) * 100
Run Code Online (Sandbox Code Playgroud)

如果距离大于搜索字符串长度(匹配字符串为长),则选项1可能为负百分比.例如查询"ABC"与"ABC Corp."匹配 会导致负匹配百分比.

选项2似乎不会在一组Mi中给出一致的百分比,因为每个计算可能使用不同的分母,因此得到的百分比值不会被标准化.

只有我能想到的另一种方法是抛弃lev_distance与字符串长度的比较,而是将顶部"N"匹配的比较距离表示为反百分位数等级(100百分位等级).

有什么想法吗?有更好的方法吗?我必须遗漏一些东西,因为Levenshtein距离可能是最常见的模糊匹配算法,这一定是一个非常常见的问题.

distance ranking percentage levenshtein-distance

26
推荐指数
3
解决办法
2万
查看次数