Bonjour !
J'ai un certain nombre d'oeuvre d'art en ligne et j'aimerais bien les filtrer par popularité. Je pensais que ce serait plus simple que ça (ou alors c'est moi qui ai choisi la voie compliquée) mais pour finir je me retrouve bloqué.
J'étais parti sur un petit calcul mathématique pour essayer de faire ça :
Je ne l'ai pas encore testé énormément sur papier mais les quelques tests que j'avais fait avec des résultats assez cohérents. Pour vous expliquer rapidement, j'additionne le nombre de vues et de favoris et ensuite je divise par la soustraction timestamp de la date d'aujourd'hui avec le timestamp de la date de création. Ainsi, ça me permet de déterminer si oui ou non une oeuvre est populaire. Exemple : une oeuvre qui a 1000 vues mais qui est là depuis 1 an est moins populaire qu'une oeuvre qui a 1000 vues mais qui n'est là que depuis une semaine.
Seulement, imaginons qu'une oeuvre n'ai intéressé personne pendant 2-3 ans et puis que, peu importe la raison, il y ai d'un seul coup un engouement pour cette oeuvre, elle deviendra populaire mais il lui faudra un nombre très élevé de vue afin de remonter dans la liste car la date de création remonte à loin et influence le calcul. Et c'est là que je bloque. Comment faire pour favoriser les vues soit du jour soit les plus récentes afin que le système soit cohérent en toute circonstance ? :) Existe-t-il certaines fonctions mathématique dont je ne connais pas l'existence qui pourrait m'aider ou est-ce que l'idée du calcul est idiote ?
Je vous remercie d'avoir lu.
Boris
Bonjour,
Pourquoi ne pas pondérer tes vues?
En gros le "poids" d'une vue ou d'un favoris diminue dans le temps.
une formule du style max(0, (1 - (nbSemaineVue/200) ))
Avec ca au bout de 4 ans une vue ne vaut plus rien.
une oeuvre qui n'a qu'une vue récente aura un score plus haut qu'une oeuvre qui a eu beaucoup de vue il y a longtemps mais plus depuis.
Favoris = vue?
l'action d'ajouter au favoris est pour moi plus forte qu'une vue.
de plus ton algo est pour faire un ordre de tri ? tu arrivera as un probleme , c'est que ton oeuvre la plus populaire au debut risque de la resté vu qu'elle va etre mise plus souvent en avant qu'une oeuvre moins populaire
Il faut juste que tu enregistres jour par jour, ou semaine par semaine (etc.) selon le niveau de précision que tu veux.
Et tu pondères la valeur d'un vue selon qu'il date de la semaine en cours, ou de l'année dernière.
J'avais déjà fais ça mais à une échelle de l'heure (vu que c'était de l'actu, il fallait que l'heure pret, on puisse savoir lequel était populaire, en pondérant en plus les heures de nuit pour ne pas défavoriser une actu ajouté tard).
Tu feras simplement en SUM(du nombre de vue) de la date en cours - X jours coeff élevé + SUM(...) de la date à - X jours au tout début coeff faible.
C'est une piste, faut un peu peaufiner le truc je pense. (ça fait quelques années, je me souviens plus trop comment j'avais fais mon truc)
Bonjour !
Désolé de la réponse tardive mais je voulais essayer de revenir avec un truc terminé au maximum car j'avais un peu de mal à comprendre toutes les notions. En tout cas, je vous remercie pour vos réponses vraiment pertinentes ! :)
Je suis donc parti sur la pondération des vues comme proposé au début par eltharin qui est en fait très logique, j'ai pris pas mal de note et essayé différents trucs et je pense que j'ai un truc qui pourrait fonctionner mais maintenant que je suis à la partie MySQL, je bloque. Dans mes notes, j'avais ça pour faire la somme de toutes les vues pondérées (au bout de 4 ans soit 8760 heures * 4, les vues valent 0 points comme recommandé par eltharin)
SUM(1 - (ABS(TIMESTAMPDIFF(HOUR, NOW(), views.created_at)) / 8760 * 4))
Seulement, je me rends compte que ça ne va pas. Je pense qu'il faut que je fasse une sous-requête mais je n'ai encore jamais fait ça et le souci, c'est que je me demande même si le début de code que j'ai pondu n'est pas totalement faux ou empêche de faire ce que je souhaite réellement.
C'est la première fois que j'utilise le MySQL de façon aussi complexe (pour moi en tout cas) donc veuillez m'excuser si ce qui vous semble logique ne l'est pas tant pour moi :D
woozy j'ai bien prévu de considérer un favori comme plus important qu'une vue. C'est vrai qu'il y a une différence entre simplement regarder une oeuvre et l'ajouter parmi ses favoris :)
Kenor, ton système de pondération pour la nuit est vraiment intéressant ! Je n'avait pas pensé à la différence de traffic qu'il pouvait y avoir entre le jour et la nuit :) Seulement, j'ai un peu de mal à comprendre ton calcul. Je pense comprendre ce qu'est un coefficient mais je ne vois pas ce que tu veux dire par "coefficient faible" et "coefficient élevé" :)
En tout cas, je vous remercie encore de vos réponses ! Ca me permet de bien avancer ! :-)
Boris