计算GitHub hottness得分

时间:2014-09-29 09:05:59

标签: ruby algorithm math github

我正在尝试为我目前正在创建的应用程序实现hottness分数。该应用程序有一些github repos,其中包含从数据库中的GH API获得的所有数据。我定期刷新这些数据(如拉请求数,观星计数等)以使其保持最新状态。

我想知道如何实现我自己的hottness得分,但问题是我的数学技能可能不是那么高,能够自己发明。所以我被迫使用或改编别人的解决方案。 github repos中没有很多它们(有相当的公式,例如.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

我实际上对它的工作原理感到满意,但有一个问题 - " hot repos"我并不是指那些一般受欢迎但在过去几天/几周/几个月内颇受欢迎的人。例如,使用该方法时,Ruby on Rails存储库将始终是最热门的存储库,因为它是用ruby编写的最受欢迎的存储库之一,不是因为它最近的趋势

所以问题是 - 我如何改进这种方法,以帮助我找到最近流行的回购而不是那些流行的回购#34;因为它们已经老了,而且很有名[&34]。也许这是在给定方法中改变某些事情的问题但是,说实话,我不太确定它是如何工作的以及为什么某人已经实现了它。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您需要更多数据来计算您所描述的趋势类型。比如回购每天/周/月有多少颗星,只有这个你可以根据谁最近得到最多的星级排名回购。对于观察者来说同样如此,你可以将更多的重量放在观察者的分数上,因为它更直接地表明它的受欢迎程度。我没有深入研究GH API,但这个概念就像获得星星/观察者的历史一样,如果API没有提供,那么你需要自己保留历史。定期更新计数,然后每周一次,您可以计算自上周以来的计数增加,并能够找到增加他们的星/观察者在该时间范围内计数最多的回购。