dynamic-ranking

client-side library for building interactive dyanamic weighted ranking systems on the web

Quick Start (index.js)

// import dynamic-ranking library functions
import { fetchData } from "../lib/data-fetch.js";
import { clean } from "../lib/clean.js";
import { DynamicRanking } from "../lib/dynamic-ranking.js";

// get data for rankings
var rawData = await fetchData('https://external-api.com');

// manipulate/parse data from file as necessary
rawData = rawData['stats'][0]['splits'];

// specify features and their properties
const features = [
    { id: "era", name: "ERA", path: "stat:era", normalization: 'standard', strategy: 'minimize', "defaultWeight": 0, minWeight: 0, maxWeight: 10 },
    { id: "whip", name: "WHIP", path: "stat:whip", normalization: 'log', strategy: 'minimize', "defaultWeight": 0, minWeight: 0, maxWeight: 10 },
    { id: "strikeoutsPer9Inn", name: "K/9", path: "stat:strikeoutsPer9Inn", normalization: 'linear', strategy: 'maximize', "defaultWeight": 0, minWeight: 0, maxWeight: 10 },
    { id: "walksPer9Inn", name: "BB/9", path: "stat:walksPer9Inn", normalization: 'linear', strategy: 'minimize', "defaultWeight": 0, minWeight: 0, maxWeight: 10 },    
];

// specify container, model, primary key, score decimal places, and ranking sort method
const slidersContainerId = 'sliders-container';
const rankingsContainerId = 'rankings-container';
const model = 'weighted-sum';
const digits = 2;
const sort = "descending";
const primaryKey = {
    id: "PlayerName",
    path: "player:fullName"
}

// clean data
const cleanData = clean(rawData, groupFeatures, primaryKey);

// construct ranking system
new DynamicRanking(
    slidersContainerId,
    rankingsContainerId,
    cleanData,
    model,
    features,
    primaryKey,
    digits,
    sort
);