处理数据以进行缩放

时间:2012-12-06 04:50:49

标签: python c++

我有这些数据:

Game 1: 7.0/10.0, Reviewed: 1000 times
Game 2: 7.5/10.0, Reviewed: 3000 times
Game 3: 8.9/10.0, Reviewed: 140,000 times
Game 4: 10.0/10.0 Reviewed: 5 times
.
.
. 

我想以某种方式操纵这些数据,以使每个评级反映其被审核的次数。

例如,第3场游戏的重量应该比游戏4重一点,因为它已经过更多的评论。 第二场比赛7的比赛加权应该超过第一场比赛的第七场比赛。

是否有适当的功能来进行缩放?以这种方式

ScaledGameRating = OldGameRating *(某些指数函数?)

3 个答案:

答案 0 :(得分:1)

如何简单地将平均分数标准化(即减去5,评分间隔的中点)并乘以评论数量?根据评论的数量,这将对正分或负分进行加权。

使用这种方法,您可以获得以下四种游戏的值:

Game 1:     2,000  (7-5)*1000
Game 2:     7,500  (7.5-5)*3000
Game 3:   546,000  (8.9-5)*140000
Game 4:        25  (10-5)*5

正常化适用于负面评论的游戏,因为具有大量负面(< 5)评论的游戏将不会击败具有少量正面(> 5)评论的游戏。如果你在没有标准化的情况下使用绝对分数,那将不会是这种情况。

答案 1 :(得分:0)

你可以这样做:

查找 总评论

对于10分的评分,你可以得到
游戏x评分:((游戏x评论次数)/(总评价))* 10

会给你10个评分。这是在总比赛中评估的特定游戏的重量。

答案 2 :(得分:0)

我对这个问题的看法不同。考虑到审核计数是否较少,剩余的审核是未知的,可能在1到10之间。因此,我们可以在缺失的范围内进行随机分布,并找出整个最大审核人群的平均值

max_freq = max(rating, key = itemgetter(1))[-1]
>>> for r,f in rating:
    missing = max_freq - f
    actual_rating = r
    if missing:
        actual_rating = sum(randint(1,10) for e in range(missing))/ (10.0*missing)
    print "Original Rating {}, Scaled Rating {}".format(r, actual_rating)


Original Rating 0.7, Scaled Rating 0.550225179856
Original Rating 0.75, Scaled Rating 0.550952554745
Original Rating 0.89, Scaled Rating 0.89
Original Rating 1, Scaled Rating 0.54975249116)


Original Rating 0.7, Scaled Rating 0.550576978417
Original Rating 0.75, Scaled Rating 0.549582481752
Original Rating 0.89, Scaled Rating 0.89
Original Rating 1, Scaled Rating 0.550458230651