javascript - star - Algoritmo utilizado para calcular clasificaciones de 5 estrellas
rating js (8)
Es posible que desee verificar este algoritmo: calcular la calificación promedio de la manera correcta utilizando PHP y MySQL ; no es necesario guardar cada "estrella" (también conocido como grado de calificación) y su número de votos correspondiente y luego tener que recuperar miles de filas de la base de datos cada vez que necesita calcular su promedio. (a menos que desee mostrar exactamente cuántas personas calificaron el elemento dado con 1, 2, 3, 4 y 5 estrellas)
Necesito calcular clasificaciones de 5 estrellas como la del sitio web de Amazon. He hecho suficiente búsqueda para encontrar cuál es el mejor algoritmo, pero no puedo obtener una respuesta adecuada. Por ejemplo, si estas son las calificaciones
5 estrellas - 252 4 estrellas - 124 3 estrellas - 40 2 estrellas - 29 1 estrella - 33 opiniones totales 478 Amazon ha calculado que es "4.1 de 5 estrellas". ¿Alguien puede decirme cómo se llega a esta cifra? No puedo obtener esto solo haciendo un promedio.
Es un promedio ponderado, donde ponderas cada calificación con la cantidad de votos que obtuvo:
(5*252 + 4*124 + 3*40 + 2*29 + 1*33) / (252+124+40+29+33) = 4.11 and change
Este sistema de calificación se basa en un promedio ponderado o media ponderada . Es decir, usaron el peso en términos de estrellas para calcular un valor decimal que se redondea a 4.1. Por ejemplo:
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
Hay una excelente reseña sobre este tema en evanmiller.org. Analiza los pros y los contras de unos pocos enfoques y sugiere una forma matemáticamente confiable de ponderar y calcular los votos.
Promedio ponderado, sume el número de estrellas multiplicado por su peso y luego divídalo por el número total de revisiones.
Sí, puedes promediarlos:
(5 * 252 + 4 * 124 + 3 * 40 + 2 * 29 + 1 * 33) / 478 = 4.11
Súper útil respuesta de Blindy, aquí está el código PHP que está basado en él. Algunos pueden ser útiles. Los resultados serán 4.11 según el ejemplo de OP:
$ratings = array(
5 => 252,
4 => 124,
3 => 40,
2 => 29,
1 => 33
);
function calcAverageRating($ratings) {
$totalWeight = 0;
$totalReviews = 0;
foreach ($ratings as $weight => $numberofReviews) {
$WeightMultipliedByNumber = $weight * $numberofReviews;
$totalWeight += $WeightMultipliedByNumber;
$totalReviews += $numberofReviews;
}
//divide the total weight by total number of reviews
$averageRating = $totalWeight / $totalReviews;
return $averageRating;
}
Si comienza el cálculo de la calificación general desde el comienzo, esta fórmula lo ayudará.
Fórmula
((Calificación general * Calificación total) + calificación nueva) / Calificación total
Ejemplo
supongamos que tiene calificación cero hasta ahora que la fórmula, la calificación general es "0" hasta ahora. primera calificación "1" y calificación dada es "4"
((0 * 1) +4) / 1 = 4
Si la calificación general es "4.11", la calificación total es "478" y la nueva calificación otorgada por un usuario es "2"
entonces la fórmula es como
((4.11 * 478) + 2) / 479 // 479 es un incremento de la nueva calificación de 478