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.1.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.1-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: georank-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 79680921617fcc9ea7299959bde30a689b75350390944515a39632773169c74c
MD5 ff6ee434ca80608d4ad50b9670b6c65a
BLAKE2b-256 39123643dcb954892fcf6c63384ca2add6b7958303b19752581ec7eb414db3ce

See more details on using hashes here.

File details

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

File metadata

  • Download URL: georank-0.1.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bc7aa3098cc02fa2fdae5875b8c70592876000ac9ed143eb2f66d2e3bc1d1bdd
MD5 2ecf475205626fb4cf445ea90b487e83
BLAKE2b-256 a7e8a4e5e20256867fbeec6c7550df09811075f6154ffd27ad5db44cf4bc1e4c

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