编程确定一组项目(图书、歌曲、电影等)的相对“受欢迎程度”。

7
给定一个(假设)歌曲列表,确定它们的相对“流行度”的最佳方法是什么?
我的第一个想法是使用Google Trends。这个歌曲列表:
  1. 地下忧郁布鲁斯(Subterranean Homesick Blues)
  2. 帝国之州(Empire State of Mind)
  3. 加利福尼亚女孩(California Gurls)
生成以下Google Trends报告:(为了找出当前最受欢迎的内容,我将报告限制在最近30天)

http://s3.amazonaws.com/instagal/original/image001.png?1275516612

“Empire State of Mind”比“California Gurls”稍微受欢迎一些,而“Subterranean Homesick Blues”比两者都不太受欢迎。

因此这个方法还是很有效的,但如果你的列表有100或1000首歌呢?Google Trends只允许您同时比较5个术语,所以除非进行大规模的轮换,否则什么是正确的方法呢?

另一个选择是为每首歌曲进行Google搜索,并查看哪首歌曲的结果最多,但这并没有真正衡量相同的东西。

4个回答

3
出色的问题 - 布兰妮·斯皮尔斯的一首歌曲可能在两个月内非常流行,然后就被遗忘了(谢天谢地),而猫王的另一首歌曲可能会持续流行30年。如何在定量上区分这两者?我们想要认为持续流行比“昙花一现”更重要,但如何得出这个结果呢?
首先,我会在发行日期周围进行归一化处理 -《地下齐唱》现在可能不受欢迎(虽然在我的家里不是这样),但将其归一化回1965年可能会产生不同的结果。
由于大多数歌曲都会在流行中攀升,达到平顶,然后下降,因此让我们选择它们平顶时的区域。可以假设在此期间,两个系列是稳态、不相关且正常分布的。现在,您只需应用测试来确定平均值是否不同即可。
可能有更少限制性的测试方法来确定两个时间序列之间的差异大小,但我尚未找到。任何人有建议吗?

2
你可以在Twitter上搜索该项目,看它被提及了多少次。或者在亚马逊上查看有多少人对其进行了评价,并给出了什么评分。Twitter和Amazon都有API。

2

1

我肯定会将Google的API视为“受限制的”。

一般来说,用于排序算法的比较函数非常“二元”:

  • 输入:2个元素
  • 输出:真/假

在这里,您有:

  • 输入:5个元素
  • 输出:每个元素的相对权重

因此,您只需要调用API的线性数量(而排序通常需要O(N log N)次比较函数调用)。

您将需要确切地ceil((N-1)/4)次调用。虽然您可以并行化处理,但请仔细阅读用户指南,了解您被授权提交的请求数量。

然后,一旦它们全部“评级”,您就可以在本地进行简单的排序。

直观地说,为了正确收集它们,您应该:

  • 将列表洗牌
  • 弹出前5个元素
  • 调用API
  • 按顺序将它们插入结果中(在这里使用插入排序)
  • 选择中位数
  • 弹出前4个元素(如果可用的话,少于4个)
  • 使用中位数和前4个元素调用API
  • 重复执行插入操作,直到元素用完为止

如果您的列表有1000首歌曲,那么对API的调用次数为250次,不会太可怕。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接