algorithm used to calculate 5 star ratings

前端 未结 14 895
挽巷
挽巷 2021-01-29 17:49

I need to calculate 5-star ratings like the one on Amazon website. I have done enough search to find what is the best algorithm, but I am not able to get a proper answer. For ex

相关标签:
14条回答
  • 2021-01-29 18:26

    with C#

    double rating = (double)(5 * star5 + 4 * star4 + 3 * star3 + 2 * star2 + 1 * star1) / (star1 + star2 + star3 + star4 + star5);
    rating = Math.Round(rating, 1);
    
    0 讨论(0)
  • 2021-01-29 18:28

    in Javascript

    function calcAverageRating(ratings) {
    
      let totalWeight = 0;
      let totalReviews = 0;
    
      ratings.forEach((rating) => {
    
        const weightMultipliedByNumber = rating.weight * rating.count;
        totalWeight += weightMultipliedByNumber;
        totalReviews += rating.count;
      });
    
      const averageRating = totalWeight / totalReviews;
    
      return averageRating.toFixed(2);
    }
    
    
    const ratings = [
      {
        weight: 5,
        count: 252
      },
      {
        weight: 4,
        count: 124
      },
      {
        weight: 3,
        count: 40
      },
      {
        weight: 2,
        count: 29
      },
      {
        weight: 1,
        count: 33
      }
    ];
    
    console.log(calcAverageRating(ratings));
    
    0 讨论(0)
  • 2021-01-29 18:33

    That's a weighted average, where you weigh each rating with the number of votes it got:

    (5*252 + 4*124 + 3*40 + 2*29 + 1*33) / (252+124+40+29+33) = 4.11 and change
    
    0 讨论(0)
  • 2021-01-29 18:35

    This rating system is based on a weighted average or weighted mean. That is, they used the weight in terms of stars to compute a decimal value which rounds to 4.1. For example:

    Sum of (weight * number of reviews at that weight) / total number of reviews
    (5*252 + 4*124 + 3*40 + 2*29 + 1*33) / 478 = 4.1
    
    0 讨论(0)
  • 2021-01-29 18:44

    There is a really great write up on this topic at evanmiller.org. He goes through and discusses the pros and cons of a few approaches and suggests a mathematically reliable way of weighting and calculating votes.

    http://evanmiller.org/ranking-items-with-star-ratings.html

    0 讨论(0)
  • 2021-01-29 18:45

    a better way to do this,

    rating = (sum_of_rating * 5)/sum_of_max_rating_of_user_count  
    

    example:

    total users rated: 6  
    sum_of_max_rating_of_user_count: 6 x 5 = 30  
    sum_of_rating: 25
    
    rating = (25 * 5) / 30
    

    Done!

    0 讨论(0)
提交回复
热议问题