ruby - 计算 GitHub 热度分数

标签 ruby algorithm math github

我正在尝试为我当前正在创建的应用程序实现热度评分。该应用程序有一些 github 存储库,其中包含从数据库中的 GH API 获取的所有数据。我会定期刷新这些数据(如拉取请求计数、观星者计数等)以使其保持最新。

我想知道如何实现我自己的性感分数,但问题是我的数学技能可能没有那么高,无法自己发明它。所以我被迫使用或改编其他人的解决方案。 github repos 中没有很多(有相当多的公式用于 ie.reddit 分数或 hackernews 分数),我实际上在这里找到了一个:https://github.com/sendgridlabs/sendgridlabs.github.com/blob/master/index.html并将其重写为 ruby 。这是我的代码:

def calculate_hottness
    week_half_life = 1.146 * (10 ** -9)

    push_delta    = DateTime.now.to_i - repo_pushed_at.to_i
    created_delta = DateTime.now.to_i - repo_created_at.to_i

    push_weight     = 1
    watchers_weight = 1.314 * (10 ** 7)

    hottness  = push_weight * (Math::E ** (-1 * week_half_life * push_delta))
    hottness += watchers_weight * repo_watchers_count / created_delta

    return hottness
  end

我实际上对它的工作方式有点满意,但有一个问题 - 我所说的“热 repo ”并不是指那些普遍流行的,而是在过去几天/几周/几个月内流行的。例如,当使用该方法时,Ruby on Rails 存储库将始终是 HitTest 门的,因为它是用 ruby​​ 编写的最受欢迎的存储库之一,不是因为它最近很流行

所以问题是 - 我如何改进该方法以帮助我找到最近流行的 repo 协议(protocol),而不是那些流行的“因为它们古老而知名”的 repo 协议(protocol)。也许这是在给定方法中更改某些内容的问题,但老实说,我不太确定它是如何工作的以及为什么有人会那样实现它。提前致谢。

最佳答案

您需要更多数据来计算您所描述的趋势类型。例如, repo 协议(protocol)在这一天/周/月获得了多少颗星,仅此一项,您就可以根据最近获得最多星标的人对 repo 协议(protocol)进行排名。观察者也是如此,您可以更加重视观察者分数,因为它更直接地反射(reflect)了它的受欢迎程度。我没有深入研究 GH API,但这个概念类似于获取明星/观看者计数的历史记录,如果 API 不提供,您需要自己保留该历史记录。定期更新计数,然后一周过去后,您可以计算自上周以来的计数增加,并能够找到在时间范围内增加他们的明星/观察者计数最多的 repo 。

关于ruby - 计算 GitHub 热度分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26096194/

相关文章:

algorithm - 不同质数的乘积作为完全平方和

c++ - 求最小值

jquery - 用于用户帖子的 Rails ajax fav 按钮

ruby - 在 Ruby 程序中使用单个 assert_equals 语句

Ruby,Telnet,无超时读取多行响应

java - 棘手的 Java 字符串面试问题。给定 List<String> 和 char [] 返回仅包含 char [] 的最长字符串

Ruby 转义 ARGV 参数或字符串作为 shell 命令的参数

java - 计算给定 n 的每行和每列中正好有 n/2 个零和 n/2 个的矩阵数

language-agnostic - 生成随机 6 个字符的字符串

php - 试图将二进制补码 16 位读入带符号的十进制