mls-elo
Version:
Calculate ELO rankings for Major League Soccer
60 lines (52 loc) • 1.68 kB
JavaScript
const db = require('sqlite');
const fs = require('fs-extra');
const teams = require('../data/teams');
const results = require('../data/results');
module.exports = async (argv) => {
const {dbPath, verbose, elo, trueskill} = argv;
if (verbose) {
console.info(`using db in ${dbPath}`);
}
await db.open(dbPath, { Promise });
const dateResult = await db.get(`
SELECT max(date) as date
FROM rankings
`);
const standingsDate = new Date(dateResult.date);
if (elo) {
const eloStandings = await db.all(`
SELECT teamname, elo
FROM rankings
INNER JOIN teams on teams.teamid = rankings.rankingteamid
WHERE date = (
SELECT max(date)
FROM rankings
WHERE rankings.rankingteamid = teams.teamid
)
AND teams.dissolved IS NULL
ORDER BY elo DESC
`);
console.info(`ELO Standings as of ${standingsDate.toLocaleDateString()}\n`);
eloStandings.forEach((standing, i) => {
console.info(`${i + 1}.) ${standing.teamname} (${Math.round(standing.elo)})`);
});
}
if (trueskill) {
const trueskillStandings = await db.all(`
SELECT teamname, trueskillmu
FROM rankings
INNER JOIN teams on teams.teamid = rankings.rankingteamid
WHERE date = (
SELECT max(date)
FROM rankings
WHERE rankings.rankingteamid = teams.teamid
)
AND teams.dissolved IS NULL
ORDER BY trueskillmu DESC
`);
console.info(`\n\nTrueSkill Standings as of ${standingsDate.toLocaleDateString()}\n`);
trueskillStandings.forEach((standing, i) => {
console.info(`${i + 1}.) ${standing.teamname} (${standing.trueskillmu})`);
});
}
}