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:
- For every criterion, the lowest raw value maps to 0 and the highest to 100.
- Set
invert: truefor criteria where lower is better (cost, tax, rainfall). - Missing values map to a neutral 50 rather than penalizing an item to zero.
- 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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| georank-0.1.1.tar.gz | 4.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.