标签: ranking-functions

如何在SQL Server 2012中添加行号列

我正在尝试向现有表添加新列,其中值是行号/等级.我需要一种方法来生成行号/等级值,我还需要限制受影响的行 - 在这种情况下,字符串中存在子字符串.

现在我有:

UPDATE table
SET row_id=ROW_NUMBER() OVER (ORDER BY col1 desc) FROM table
WHERE CHARINDEX('2009',col2) > 0
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

Windowed functions can only appear in the SELECT or ORDER BY clauses.
Run Code Online (Sandbox Code Playgroud)

(同样的错误RANK())

有没有办法用ROW_NUMBER()函数创建/更新列?仅供参考,这意味着要替换不正确的,已存在的"排名"列.

sql sql-server row-number ranking ranking-functions

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

有效地确定列表的"排序方式",例如.Levenshtein距离

我正在对排名算法进行一些研究,并且想要给出排序列表和该列表的一些排列,计算两个排列之间的一些距离.对于Levenshtein距离的情况,这对应于计算序列与该序列的分类副本之间的距离.例如,还有"反转距离",这里详细描述了线性时间算法,我正在努力实现.

有没有人知道反演距离的现有python实现,和/或Levenshtein距离的优化?我在大约50,000到200,000个元素的序列上计算它,因此O(n ^ 2)太慢,但O(n log(n))或更好应该足够.

还可以理解排列相似性的其他度量.


为未来的人们编辑:

基于Raymond Hettinger的回应 ; 它不是Levenshtein或反转距离,而是"格式塔模式匹配":P

from difflib import SequenceMatcher
import random
ratings = [random.gauss(1200, 200) for i in range(100000)]
SequenceMatcher(None, ratings, sorted(ratings)).ratio()
Run Code Online (Sandbox Code Playgroud)

在可怕的桌面上运行约6秒钟.

编辑2:如果你可以将你的序列强制转换为[1 .. n]的排列,那么曼哈顿度量的变化非常快并且有一些有趣的结果.

manhattan = lambda l: sum(abs(a - i) for i, a in enumerate(l)) / (0.5 * len(l) ** 2)
rankings = list(range(100000))
random.shuffle(rankings)
manhattan(rankings) # ~ 0.6665, < 1 second
Run Code Online (Sandbox Code Playgroud)

归一化因子在技术上是近似值; 它对于偶数大小的列表是正确的,但应该(0.5 * (len(l) ** 2 - 1))用于奇数大小的列表.

Edit3:还有其他几种算法可用于检查列表相似度!的肯德尔头排名系数和斯皮尔曼 …

python sorting permutation levenshtein-distance ranking-functions

15
推荐指数
1
解决办法
1591
查看次数

SQL over子句 - 将分区划分为编号的子分区

我遇到了一个挑战,我曾经多次遇到但从未能找到有效的解决方案.想象一下,我有一张大表,其中包含有关银行账户及其从借方到贷方的可能循环移动的数据:

AccountId DebitCredit AsOfDate
--------- ----------- ----------
aaa       d           2018-11-01
aaa       d           2018-11-02
aaa       c           2018-11-03
aaa       c           2018-11-04
aaa       c           2018-11-05
bbb       d           2018-11-02
ccc       c           2018-11-01
ccc       d           2018-11-02
ccc       d           2018-11-03
ccc       c           2018-11-04
ccc       d           2018-11-05
ccc       c           2018-11-06
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我想将子分区号分配给AccountId和DebitCredit的组合,其中每次DebitCredit移位时分区号都会递增.换句话说,在上面的示例中,我希望得到以下结果:

AccountId DebitCredit AsOfDate   PartNo
--------- ----------- ---------- ------
aaa       d           2018-11-01      1
aaa       d           2018-11-02      1
aaa       c           2018-11-03      2
aaa       c           2018-11-04      2
aaa       c           2018-11-05      2

bbb       d           2018-11-02      1

ccc       c           2018-11-01      1 …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server ranking-functions sql-server-2016

13
推荐指数
2
解决办法
517
查看次数

为派生表计算SQL Server ROW_NUMBER()OVER()

在一些其他数据库(例如DB2或Oracle ROWNUM)中,我可以省略ORDER BY排名函数子句中的OVER()子句.例如:

ROW_NUMBER() OVER()
Run Code Online (Sandbox Code Playgroud)

当与有序派生表一起使用时,这尤其有用,例如:

SELECT t.*, ROW_NUMBER() OVER()
FROM (
    SELECT ...
    ORDER BY
) t
Run Code Online (Sandbox Code Playgroud)

如何在SQL Server中进行模拟?我发现人们使用这个 技巧,但这是错误的,因为它对于派生表中的顺序会表现得非确定:

-- This order here ---------------------vvvvvvvv
SELECT t.*, ROW_NUMBER() OVER(ORDER BY (SELECT 1))
FROM (
    SELECT TOP 100 PERCENT ...
    -- vvvvv ----redefines this order here
    ORDER BY
) t
Run Code Online (Sandbox Code Playgroud)

一个具体的例子(可以在SQLFiddle看到):

SELECT v, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) RN
FROM (
  SELECT TOP 100 PERCENT 1 UNION ALL …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server window-functions ranking-functions

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

DataFrame:添加列,其值是现有列的分位数/排名?

我有一些包含一些列的DataFrame.我想添加一个新列,其中每个行值是一个现有列的分位数等级.

我可以使用DataFrame.rank对列进行排名,但后来我不知道如何获取此排名值的分位数,并将此分位数添加为新的colunm.

示例:如果这是我的DataFrame

df = pd.DataFrame(np.array([[1, 1], [2, 10], [3, 100], [4, 100]]), columns=['a', 'b'])

   a    b
0  1    1
1  2   10
2  3  100
3  4  100
Run Code Online (Sandbox Code Playgroud)

我想知道b列的分位数(使用2个分位数).我期待这个结果:

   a    b  quantile
0  1    1    1
1  2   10    1
2  3  100    2
3  4  100    2
Run Code Online (Sandbox Code Playgroud)

python pandas ranking-functions

7
推荐指数
1
解决办法
7037
查看次数

体育评级图书馆

我正在考虑实施体育评级/排名系统(即根据他们在体育比赛中的表现给予每个球员或球队评分).

我一直在研究各种算法,例如:

我没有选择我将使用的算法 - 它可能是Glicko变体之一.但是,如果有现有的图书馆来实施它们,那么一个强大的因素就是它; 写一个数学图书馆需要我很长时间才能做好,我希望能有一个好的开始.

我不是在寻找GUI,只是库.开源将是完美的,免费的,因为啤酒会很好,但也会考虑商业选择.Python将是理想的,但其他语言将被考虑.

任何人都可以推荐我应该看的任何库吗?

math statistics libraries ranking-functions

6
推荐指数
0
解决办法
850
查看次数

使用排名函数查找重复出现的事件

请帮助我生成以下查询,我已经挣扎了一段时间了.让我们说我有一个简单的表格,其中包含月份编号和信息,表明在这个特定月份是否有任何失败事件

在脚本下面生成示例数据:

WITH DATA(Month, Success) AS
(
    SELECT  1, 0 UNION ALL
    SELECT  2, 0 UNION ALL
    SELECT  3, 0 UNION ALL
    SELECT  4, 1 UNION ALL
    SELECT  5, 1 UNION ALL
    SELECT  6, 0 UNION ALL
    SELECT  7, 0 UNION ALL
    SELECT  8, 1 UNION ALL
    SELECT  9, 0 UNION ALL
    SELECT 10, 1 UNION ALL
    SELECT 11, 0 UNION ALL
    SELECT 12, 1 UNION ALL
    SELECT 13, 0 UNION ALL
    SELECT 14, 1 UNION ALL
    SELECT 15, 0 …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2008 ranking-functions

6
推荐指数
1
解决办法
435
查看次数

Python Pandas qcut的行为与观察结果不能被#箱整除

假设我有一个大熊猫系列的美元价值,并希望将其分为9组qcut.观察数#不能被9整除.SQL Server的ntile函数对于这种情况有一个标准方法:它使9个组中的前n个1观察大于剩余的(9- n)组.

我在熊猫中注意到,哪些群体的x观察与x + 1观察的分配似乎是随机的.我试图破译algos中的代码来弄清楚分位数函数如何处理这个问题,但无法弄明白.

我有三个相关的问题:

  1. 任何熊猫开发者都可以解释其qcut行为?是随机哪个群体获得更多的观察?
  2. 有没有办法强迫qcut行为类似NTILE(即,第一组获得x + 1观察)?
  3. 如果#2的答案是否定的,那么关于函数的任何想法都会表现得像NTILE?(如果这是一项复杂的工作,只需对您的方法进行概述就会有所帮助.)

以下是SQL Server NTILE输出的示例.

Bin |# Observations
1   26
2   26
3   26
4   26
5   26
6   26
7   26
8   25
9   25
Run Code Online (Sandbox Code Playgroud)

这是熊猫:

Bin |# Observations
1   26
2   26
3   26
4   25 (Why is this 25 vs others?)
5   26
6   26
7   25 …
Run Code Online (Sandbox Code Playgroud)

python pandas ranking-functions

6
推荐指数
1
解决办法
1627
查看次数

NDCG(标准化贴现收益)是否有缺陷?我计算了一些替代的排名质量衡量标准,但我无法理解它

我正在使用 python 来解决学习排序问题,并且我正在使用以下 DCG 和 NDCG 代码(来自http://nbviewer.ipython.org/github/ogrisel/notebooks/blob/master/Learning %20to%20Rank.ipynb )

def dcg(relevances, rank=20):
    relevances = np.asarray(relevances)[:rank]
    n_relevances = len(relevances)
    if n_relevances == 0:
        return 0.
    discounts = np.log2(np.arange(n_relevances) + 2)
    return np.sum(relevances / discounts)

def ndcg(relevances, rank=20):
    best_dcg = dcg(sorted(relevances, reverse=True), rank)
    if best_dcg == 0:
        return 0.
    return dcg(relevances, rank) / best_dcg
Run Code Online (Sandbox Code Playgroud)

以下是 3 个项目列表中最好和最坏情况的 DCG 值,没有重复的排名...

>>> ndcg(np.asarray([3,2,1]))
1.0
>>> ndcg(np.asarray([1,2,3]))
0.78999800424603583
Run Code Online (Sandbox Code Playgroud)

我们可以使用这个指标来比较两个排名,看看哪个更好。但是,如果我计算 4 项列表的最坏情况......

>>> ndcg(np.asarray([1,2,3,4]))
0.74890302967841715
Run Code Online (Sandbox Code Playgroud)

4 项列表似乎不再与 3 项列表具有可比性。

我还计算了两个替代的 NDCG。NDCG2 将获得的 dcg 与 bot …

python information-retrieval machine-learning ranking-functions supervised-learning

5
推荐指数
1
解决办法
4435
查看次数

在电子商务网站上计算产品排名的算法/公式(基于以下标准)

我一直在研究算法和公式,以找出我的电子商务网站上可用产品的分数.基本上,我想计算某种分数,以便在用户搜索时对产品进行排名.我将提供一些有关我计划定义的标准的背景知识来计算排名:

  • 产品点击次数
  • 产品浏览量
  • 产品转换
  • 产品评级(由用户提供)
  • 与用户提供的搜索字符串的相关性

理想情况下,我想要一个算法,我可以计算所有的分数并相应地对产品进行排名.我有可用的所有数据,但我很困惑我应该给我上面描述的所有参数多少重量?

任何帮助将不胜感激 !!

提前致谢.

编辑:我打算为每个参数分配权重,如下所示:

  • 产品点击次数(CTR):1.0
  • 产品浏览次数:1.5
  • 产品转换次数:4.0
  • 产品评分:2.0

什么可以用来计算得分的公式?

algorithm ranking e-commerce elasticsearch ranking-functions

5
推荐指数
1
解决办法
4104
查看次数