2010-09-14 15 views
9

Para el consejo estudiantil este año, estoy en el comité de "canciones", elegimos las canciones. Desafortunadamente, los niños en los bailes siempre terminan odiando algunas de las elecciones estúpidas de canciones. Pensé que podría hacerlo diferente este año. El jueves pasado, creé una aplicación PHP simple para que los niños pudieran enviar canciones a la base de datos, proporcionando el nombre de la canción, el artista y el género (de un menú desplegable). También implementé una función de votación similar a la de Reddit. Haz clic en un botón de reenvío, has actualizado la canción y aumentado el recuento de votos. Lo mismo con downvotes.Ordenando una lista de canciones por Popularidad

Anywho, en la base de datos, tengo tres cositas de información que pensé que podría utilizar para calificar estas canciones, upvotes, downvotes y una marca de tiempo. Por un tiempo, el rango fue creado simplemente teniendo las canciones con el mayor número de "votos" en la parte superior. Es decir, mientras más votaciones ascendentes, menos votaciones negativas (votaciones ascendentes, votaciones abajo) estarían en la parte superior de la lista. Eso funcionó, por un tiempo, pero había cerca de 75 canciones en la lista para el domingo, y las canciones que se presentaron primero estaban simplemente en la parte superior de la lista.

Domingo, cambié el algoritmo de rango a (upvotes - downvotes)/(CurrentTimestamp - CreationTimestamp), es decir, cuanto mayor sea el conteo de votos en el menor tiempo, mayor será la canción en la lista. Esto funciona, mejor, pero aun así no es como me gustaría.

Lo que sucede ahora, es que en el instante en que se crea una canción y se sube la votación a un conteo de votos de 1, termina en la parte superior de la lista en alguna parte. Las canciones que tienen conteos de votos en los negativos no se ven a menudo porque los niños generalmente no se desplazan hacia abajo.

Supongo que podría ordenar los datos para que las canciones más bajas aparezcan en la parte superior, por lo que las personas se ven obligadas a ver las canciones más graves. Honestamente, nunca he tenido que trabajar en un algoritmo de "popularidad" antes, entonces, ¿cuáles son tus pensamientos?

sitio web de al http://www.songs.taphappysoftware.com - No sé si debo poner esto aquí o no, podría causar que algunas canciones no deseadas en el baile: 0

+0

Creo que el algoritmo está bien. El problema es la interfaz de usuario. Hay demasiada información innecesaria sobre una canción. ¿Por qué no simplemente poner el rango, luego la canción con un signo + y - al lado.presentarlos en una vista de mosaico (flikr). Con eso, muestras más canciones sin desplazarte. También puede hacer que el título y el cuadro de instrucciones sean mucho más pequeños y solo darles un color más llamativo para compensar su tamaño. – sheeks06

+1

Soy corregido. El ranking algo de @David Johnstone es mejor. – sheeks06

+0

No confíe en un algoritmo con esto. Use su propio gusto (usted está en el comité de canciones después de todo). O contrata a un DJ. Ya hay suficientes listas de reproducción generadas por computadora en la radio. – Thilo

Respuesta

6

Esa es una pregunta muy buena. Hay algunas preguntas similares que se han hecho aquí.

This article es probablemente un buen lugar para comenzar. Aparentemente votaciones ascendentes menos votos negativos es una mala forma de hacerlo. La mejor manera es usar complicated maths para asignar una puntuación a cada uno y ordenar por eso.

Aquí es una función de puntuación en Ruby del artículo de:

require 'statistics2' 

def ci_lower_bound(pos, n, power) 
    if n == 0 
     return 0 
    end 
    z = Statistics2.pnormaldist(1-power/2) 
    phat = 1.0*pos/n 
    (phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n) 
end 

pos es el número de calificación positiva, n es el número total de valoraciones, y power se refiere a la potencia estadística : elija 0.10 para tener un 95% de probabilidad de que su límite inferior sea correcto, 0.05 para tener un 97.5% de posibilidades, etc.

Como una cuestión de usabilidad, ordenaría los datos por puntaje, pero no mostraría el puntaje al usuario. Solo mostraría el número de votos positivos y negativos.

+0

Sí, los puntajes resultan ser unos decimales disparatados, actualmente. Solo muestro los votos y luego, si pasa el mouse sobre una fila de la tabla, el conteo (+/-) se desmarca. –

+0

@Matt Egan: No mostraría los votos por votos menos los votos a favor, ya que no ayuda en nada. Además, tus clasificaciones no se ven del todo bien en este momento, ya que "Hey Leonardo" (+ 1/-8) está por encima de unas pocas + 1/-2 canciones. –

+0

Aún no he implementado esta clasificación de popularidad. Estoy a punto de acostarme en la cama, voy a revisar algunas de mis notas de Estadísticas del segundo año para poder comprender lo que estoy haciendo aquí. Me gusta entender lo que estoy haciendo. - Además, ahora que lo señalas, no creo que toda esta calificación de "tiempo" funcione demasiado bien:/ –

0

¿Qué tal ordenar las canciones publicando el tiempo o el número de votos (negativo + positivo)? Si tu objetivo es darle a cada canción la misma atención, esto suena bastante bien.