From 44491ef1b9b52e4ed4a5f245cbbeef123a436b18 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Tue, 14 Jan 2020 22:23:16 +0100 Subject: [PATCH] much better ranking --- bin/filters.php | 2 +- bin/import-game-data.php | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/bin/filters.php b/bin/filters.php index 703114a..04a998f 100644 --- a/bin/filters.php +++ b/bin/filters.php @@ -84,7 +84,7 @@ function filterBestRated($origGames, $limit) usort( $games, function ($gameA, $gameB) { - return $gameB->rating->average - $gameA->rating->average; + return ($gameB->rating->rank - $gameA->rating->rank) * 100; } ); diff --git a/bin/import-game-data.php b/bin/import-game-data.php index 2d0076e..467dac5 100755 --- a/bin/import-game-data.php +++ b/bin/import-game-data.php @@ -98,6 +98,8 @@ foreach ($gameFiles as $gameFile) { } } +calculateRank($games); + foreach ($developers as $developer) { writeJson( //index.htm does not need a rewrite rule @@ -733,6 +735,29 @@ function addMissingGameProperties($game) } } +/** + * Implements a sensible ranking system described in + * https://stackoverflow.com/a/1411268/2826013 + */ +function calculateRank(array $games) +{ + $averageRatings = array_map( + function ($game) { + return $game->rating->average; + }, + $games + ); + $average = array_sum($averageRatings) / count($averageRatings); + $C = $average; + $m = 500; + + foreach ($games as $game) { + $R = $game->rating->average; + $v = $game->rating->count; + $game->rating->rank = ($R * $v + $C * $m) / ($v + $m); + } +} + function getFirstVideoUrl($media) { foreach ($media as $medium) { -- 2.30.2