我正在尝试向现有表添加新列,其中值是行号/等级.我需要一种方法来生成行号/等级值,我还需要限制受影响的行 - 在这种情况下,字符串中存在子字符串.
现在我有:
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()函数创建/更新列?仅供参考,这意味着要替换不正确的,已存在的"排名"列.
我正在对排名算法进行一些研究,并且想要给出排序列表和该列表的一些排列,计算两个排列之间的一些距离.对于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))
用于奇数大小的列表.
python sorting permutation levenshtein-distance ranking-functions
我遇到了一个挑战,我曾经多次遇到但从未能找到有效的解决方案.想象一下,我有一张大表,其中包含有关银行账户及其从借方到贷方的可能循环移动的数据:
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) 在一些其他数据库(例如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)
SELECT v, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) RN
FROM (
SELECT TOP 100 PERCENT 1 UNION ALL …
Run Code Online (Sandbox Code Playgroud) 我有一些包含一些列的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) 我正在考虑实施体育评级/排名系统(即根据他们在体育比赛中的表现给予每个球员或球队评分).
我一直在研究各种算法,例如:
我没有选择我将使用的算法 - 它可能是Glicko变体之一.但是,如果有现有的图书馆来实施它们,那么一个强大的因素就是它; 写一个数学图书馆需要我很长时间才能做好,我希望能有一个好的开始.
我不是在寻找GUI,只是库.开源将是完美的,免费的,因为啤酒会很好,但也会考虑商业选择.Python将是理想的,但其他语言将被考虑.
任何人都可以推荐我应该看的任何库吗?
请帮助我生成以下查询,我已经挣扎了一段时间了.让我们说我有一个简单的表格,其中包含月份编号和信息,表明在这个特定月份是否有任何失败事件
在脚本下面生成示例数据:
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) 假设我有一个大熊猫系列的美元价值,并希望将其分为9组qcut
.观察数#不能被9整除.SQL Server的ntile
函数对于这种情况有一个标准方法:它使9个组中的前n个1观察大于剩余的(9- n)组.
我在熊猫中注意到,哪些群体的x观察与x + 1观察的分配似乎是随机的.我试图破译algos中的代码来弄清楚分位数函数如何处理这个问题,但无法弄明白.
我有三个相关的问题:
qcut
行为?是随机哪个群体获得更多的观察?qcut
行为类似NTILE
(即,第一组获得x + 1观察)?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 来解决学习排序问题,并且我正在使用以下 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
我一直在研究算法和公式,以找出我的电子商务网站上可用产品的分数.基本上,我想计算某种分数,以便在用户搜索时对产品进行排名.我将提供一些有关我计划定义的标准的背景知识来计算排名:
- 产品点击次数
- 产品浏览量
- 产品转换
- 产品评级(由用户提供)
- 与用户提供的搜索字符串的相关性
理想情况下,我想要一个算法,我可以计算所有的分数并相应地对产品进行排名.我有可用的所有数据,但我很困惑我应该给我上面描述的所有参数多少重量?
任何帮助将不胜感激 !!
提前致谢.
编辑:我打算为每个参数分配权重,如下所示:
- 产品点击次数(CTR):1.0
- 产品浏览次数:1.5
- 产品转换次数:4.0
- 产品评分:2.0
什么可以用来计算得分的公式?
algorithm ranking e-commerce elasticsearch ranking-functions
python ×4
sql ×4
sql-server ×4
t-sql ×3
pandas ×2
ranking ×2
algorithm ×1
e-commerce ×1
libraries ×1
math ×1
permutation ×1
row-number ×1
sorting ×1
statistics ×1