Skip to main content

Generic weighted-criteria ranking engine — score and rank places (or anything) by normalized, weighted factors. Zero dependencies.

Project description

georank

Generic weighted-criteria ranking engine. Score and rank places — or anything — by normalized, weighted factors. Zero dependencies, available for both JavaScript and Python.

This is the open-source core of the ranking method behind GeoRank.place, a map-based tool for comparing cities and regions on the factors that matter for relocation (sunshine, cost, climate, and more).

Method

Each criterion is min-max normalized to 0–100 across the set you pass in, then weighted and summed into a single 0–100 score:

  1. For every criterion, the lowest raw value maps to 0 and the highest to 100.
  2. Set invert: true for criteria where lower is better (cost, tax, rainfall).
  3. Missing values map to a neutral 50 rather than penalizing an item to zero.
  4. Weights need not sum to 1 — they are normalized internally.

Install

npm install georank      # JavaScript / TypeScript
pip install georank      # Python

Usage

JavaScript / TypeScript

import { rank } from "georank";

const cities = [
  { name: "Lisbon",   sunshine: 2799, cost: 100 },
  { name: "Berlin",   sunshine: 1626, cost: 85  },
  { name: "Valencia", sunshine: 2696, cost: 70  },
];

const ranked = rank(cities, [
  { key: "sunshine", weight: 0.6 },
  { key: "cost",     weight: 0.4, invert: true }, // cheaper scores higher
]);

ranked.forEach((r) => console.log(r.item.name, r.score, r.signals));

Python

from georank import rank

cities = [
    {"name": "Lisbon",   "sunshine": 2799, "cost": 100},
    {"name": "Berlin",   "sunshine": 1626, "cost": 85},
    {"name": "Valencia", "sunshine": 2696, "cost": 70},
]

ranked = rank(cities, [
    {"key": "sunshine", "weight": 0.6},
    {"key": "cost",     "weight": 0.4, "invert": True},
])

for r in ranked:
    print(r["item"]["name"], r["score"], r["signals"])

API

rank(items, criteria)

Returns a new array sorted by score (descending). Each result is { item, score, signals }, where signals holds the per-criterion normalized 0–100 value.

criteria is a list of { key, weight, invert? }.

normalize(values, { invert })

Min-max normalize an array of numbers to 0–100. Missing / non-finite values become 50; if every value is equal, every output is 50.

Live tool

See the method applied to real climate and cost data at georank.place — including the interactive city rankings and side-by-side compare.

License

MIT © GeoRank.place

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

georank-0.1.0.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

georank-0.1.0-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

File details

Details for the file georank-0.1.0.tar.gz.

File metadata

  • Download URL: georank-0.1.0.tar.gz
  • Upload date:
  • Size: 4.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for georank-0.1.0.tar.gz
Algorithm Hash digest
SHA256 cbd47a7777dd0e72d886eaf8adb90fbed3a7ee4c016c4cdd3d474a7b57733bda
MD5 0ab321fe2723d3b284f320e09b83f772
BLAKE2b-256 f99654bc71a367f40b4010950bf32bae7c6a5f6ffed00c6108abb64b68819b95

See more details on using hashes here.

File details

Details for the file georank-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: georank-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 4.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for georank-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 abb399228c54a1ca154f2a9946c86b26d1f49a9875dfcb3003021a66de05e4ef
MD5 77f6f99e747cf8b4d31b771d28ec386b
BLAKE2b-256 60e23ec35596a1b0c27f1f4d6b30c8faf81e3de8047dd7dae46d6213095c65c2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page