Regional growth, convergence, and inequality analysis on the PySAL stack.
Project description
geometrics
geometrics studies regional growth, convergence, and inequality with explicit spatial methods. It builds on the excellent PySAL family — libpysal, esda, giddy, inequality, mapclassify, spreg, and mgwr — and wraps the standard analyses of the regional convergence literature into illustrative, easy-to-apply functions that return interactive Plotly figures, Great Tables, and tidy DataFrames.
It follows the design language of expdpy: every
function returns a typed result object with .df, .fig, plain-language
.interpret(), and concept .explain().
The data model: three inputs
| Input | What it is | How it enters |
|---|---|---|
gdf |
Geometry with only the entity ID — shapefile, zipped shapefile, GeoJSON, or GeoPackage (or a GeoDataFrame) | gm.read_gdf("districts.gpkg", entity="district_id") |
df |
A long-form panel — one row per (entity, time) | gm.set_panel(df, entity="district_id", time="year") |
df_dict |
A data dictionary — var_name, var_def, label, type, role, can_be_na |
gm.set_labels(df, df_dict, set_panel=True) |
Installation
pip install geometrics # core
pip install "geometrics[dynamics]" # + Markov / spatial Markov (giddy)
pip install "geometrics[all]" # everything, incl. PNG export
Quickstart: the Indian case study
The bundled case study covers 520 Indian districts observed by satellite nighttime lights (1996-2010), from Mendez, Kabiraj & Li (quarcs-lab/project2025s-py).
import geometrics as gm
gdf, df, df_dict = gm.data.load_india() # ID-only geometry, long panel, dictionary
df = gm.set_labels(df, df_dict, set_panel=True)
gm.explore_choropleth_map(df, "ntl_total", gdf=gdf, period=2010).fig
w = gm.make_weights(gdf, method="knn", k=6)
gm.explore_lisa_cluster_map(df, "log_ntl_pc_1996", gdf=gdf, w=w).fig
res = gm.analyze_beta_convergence(
df, "ntl_total", model="sdm", gdf=gdf, w=w
)
print(res.interpret()) # plain-language reading
res.fig # convergence scatter
Features
- Maps & ESDA — classified/animated choropleths (
explore_choropleth_map), weights connectivity (explore_connectivity_map), Moran scatterplots, LISA cluster maps, Moran over time - Space-time dynamics — cross-sectional distribution evolution
(
explore_distribution_over_time), entity-by-time heatmaps - Convergence — β-convergence with OLS or spatial (SAR/SEM/SLX/SDM) estimators and LeSage-Pace impact decomposition, σ-convergence, Phillips-Sul convergence clubs with club maps
- Spatial econometrics — the spreg suite (
analyze_spatial_model), LM diagnostics with a model recommendation (analyze_spatial_diagnostics), alternative-weights robustness (analyze_spatial_model_by_weights) - Distribution dynamics — Markov and spatial Markov transition analysis
(
analyze_markov_transitions,analyze_spatial_markov) - Inequality — Gini/Theil trends with spatial decomposition
(
analyze_inequality_over_time), Theil between/within decomposition (analyze_theil_decomposition) - Local models — GWR and multiscale GWR with mapped local coefficients
(
analyze_gwr,analyze_mgwr)
Documentation
- Website: https://quarcs-lab.github.io/geometrics/
- The India case study article and Colab notebooks: see
docs/andnotebooks/
Development
git clone https://github.com/quarcs-lab/geometrics
cd geometrics
uv sync --locked --all-extras --group dev --group docs
make test && make lint && make typecheck
Citation
If you use geometrics in your research, please cite the repository (see
CITATION.cff) and the underlying PySAL packages.
Acknowledgments
Developed at the QuaRCS Lab (Quantitative Regional and Computational Science). geometrics stands on the shoulders of the PySAL project, geopandas, Plotly, and Great Tables.
License
MIT
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file geometrics-0.1.0.tar.gz.
File metadata
- Download URL: geometrics-0.1.0.tar.gz
- Upload date:
- Size: 289.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1cf31cb0a7cae15fdb2f0fa977e65a7ef4180afd0883a92802001f14b37dad40
|
|
| MD5 |
087a21329909cf852401fb09844a12cb
|
|
| BLAKE2b-256 |
f2948948af9f82442f51058b79835d72ea9d825a265155705ee0207e06941074
|
Provenance
The following attestation bundles were made for geometrics-0.1.0.tar.gz:
Publisher:
release.yml on quarcs-lab/geometrics
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
geometrics-0.1.0.tar.gz -
Subject digest:
1cf31cb0a7cae15fdb2f0fa977e65a7ef4180afd0883a92802001f14b37dad40 - Sigstore transparency entry: 2044420438
- Sigstore integration time:
-
Permalink:
quarcs-lab/geometrics@d7ba337a35563cc4da793ce6c62a615ca261b220 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/quarcs-lab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d7ba337a35563cc4da793ce6c62a615ca261b220 -
Trigger Event:
push
-
Statement type:
File details
Details for the file geometrics-0.1.0-py3-none-any.whl.
File metadata
- Download URL: geometrics-0.1.0-py3-none-any.whl
- Upload date:
- Size: 212.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
729f79ff1381f48e44459752483d2f771e9dbfa071596b2e832302141ce3fe0b
|
|
| MD5 |
80e63fb24144bbda5522d41fdb2f6db8
|
|
| BLAKE2b-256 |
66cdd1896acae2829fb61914bf7fe39169c8b89cc8875f090a606bf589b6dc96
|
Provenance
The following attestation bundles were made for geometrics-0.1.0-py3-none-any.whl:
Publisher:
release.yml on quarcs-lab/geometrics
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
geometrics-0.1.0-py3-none-any.whl -
Subject digest:
729f79ff1381f48e44459752483d2f771e9dbfa071596b2e832302141ce3fe0b - Sigstore transparency entry: 2044420500
- Sigstore integration time:
-
Permalink:
quarcs-lab/geometrics@d7ba337a35563cc4da793ce6c62a615ca261b220 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/quarcs-lab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d7ba337a35563cc4da793ce6c62a615ca261b220 -
Trigger Event:
push
-
Statement type: