EquiPop (Python)
k-nearest neighbour contexts/neighbourhoods on gridded and hexagonal data: bespoke neighbourhoods, friction-aware growth, distance decay, neighbourhood statistics and segregation measures - for very large datasets.
EquiPop finds, for every populated location, the k nearest individuals (by cumulative population count, expanding over a uniform grid) and reports the composition of that individualised neighbourhood. The gridded design means one pre-computed distance ordering serves every origin, which is what makes millions of locations feasible.
The EquiPop family
This is the first Python implementation. Its relatives: the original C# EquiPop (three generations, two public releases; radial and Flow models, downloadable via Uppsala University) and an R version covering I/O and the basic k-NN parts. This Python version additionally carries friction growth, five decay models, exact neighbourhood statistics (mean/median/SD/SE/Gini/entropy), segregation indices, hexagonal grids, area aggregation and metadata logging.
Install
pip install equipop # core
pip install equipop[geo,io,viz] # shapefiles/rasters, Excel/SPSS, maps
Quick start
import pandas as pd
from equipop import build_cells, run_knn_stats
df = pd.read_csv("individuals.csv") # one row per individual
cd = build_cells(df, e_col="X", n_col="Y",
binary_vars=["treated"], value_vars=["income"],
unit_size=100)
res = run_knn_stats(cd, k_values=[100, 400, 1600, 6400],
stats={"treated": ["ratio"],
"income": ["mean", "median", "gini"]})
For aggregated counts at national scale use the vectorised
run_knn_counts; for friction-constrained growth run_knn_friction;
for segregation profiles seg_profile; for policy-area reporting
aggregate_output; for quick maps map_output. See MANUAL_TOPICS.md.
Repository: https://github.com/GeoJohnSwe/EquiPop
Citing
Please cite the software and the methods you use - see CITATION.cff. Core reference: Östh (2014), Introducing the EquiPop software, Uppsala University. Segregation measures: Östh, Clark & Malmberg (2015), Geographical Analysis 47(1). Decay parameters: Östh, Lyhagen & Reggiani (2016), EJTIR 16(2). Friction growth: Östh & Türk (2020), Handbook of Urban Segregation. Decay profiles in application: Türk, Östh, Kourtit & Nijkamp (2026), Journal of Urban Mobility 9.
License
MIT. Attribution through citation is warmly requested (see above).
Release files for equipop 1.26.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| equipop-1.26.0.tar.gz | 754.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| equipop-1.26.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.1 MB
Release files / equipop-1.26.0.tar.gz
| Download URL | equipop-1.26.0.tar.gz |
|---|---|
| Size | 754.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e5eaaf7e1c01cb958ff9a86a2e11a7476417dd0ac60f18b18315238c7625733a
|
|
BLAKE2b-256 checksum How to use checksums |
6267e92c44c8cc2d2d8287727e57e01ae30e0890265b21381bbc40e3138f4ac3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.9
|
Release files / equipop-1.26.0-py3-none-any.whl
| Download URL | equipop-1.26.0-py3-none-any.whl |
|---|---|
| Size | 308.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
010f3d2a9f7c0e067626505b08ae264a0f654a9394f1aa4f8e5e837331fc782e
|
|
BLAKE2b-256 checksum How to use checksums |
fda522a6302fac0fbf7dace8af6beee4bfbddf1b28707901be60df6e4eb9bfda
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.9
|