Skip to main content

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

Metadata

Release files for georank 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for georank 0.1.1
File Size Uploaded Provenance
georank-0.1.1.tar.gz 4.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for georank 0.1.1
File Interpreter ABI Platform
georank-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 8.3 kB

Release files / georank-0.1.1.tar.gz

Download URL georank-0.1.1.tar.gz
Size 4.0 kB
Tags Source
SHA-256 checksum
How to use checksums
79680921617fcc9ea7299959bde30a689b75350390944515a39632773169c74c
BLAKE2b-256 checksum
How to use checksums
39123643dcb954892fcf6c63384ca2add6b7958303b19752581ec7eb414db3ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release files / georank-0.1.1-py3-none-any.whl

Download URL georank-0.1.1-py3-none-any.whl
Size 4.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bc7aa3098cc02fa2fdae5875b8c70592876000ac9ed143eb2f66d2e3bc1d1bdd
BLAKE2b-256 checksum
How to use checksums
a7e8a4e5e20256867fbeec6c7550df09811075f6154ffd27ad5db44cf4bc1e4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Security for georank 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page