Skip to main content

geometrics — regional growth, convergence, and inequality, spatially, in Python

geometrics

CI Docs PyPI Python License: MIT Ruff Open In Colab

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 and is presented in three modules, each with its own pedagogical walkthrough and Colab notebook:

Module What it does Docs Colab
🗺️ Explore Choropleths, weights, Moran/LISA, space-time views Explore explore.ipynb
🧮 Analyze β/σ/club convergence, spatial models with impacts, Markov, inequality, GWR Analyze analyze.ipynb
📚 Learn 11 learn_* concept sandboxes + a 30-topic explainer index; .interpret() / .explain() on every result Learn learn.ipynb

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[streamlit]"    # + the three no-code apps
pip install "geometrics[all]"          # everything, incl. PNG export

Run the apps locally with streamlit run app_explore.py (or app_analyze.py / app_learn.py), or from Python with geometrics.streamlit_app.ExploreApp().

Bundled case studies

  • India — 520 districts observed by satellite nighttime lights (1996-2010), from Mendez, Kabiraj & Li (quarcs-lab/project2025s-py): gm.data.load_india(), load_india_states()
  • Bolivia — PWT-anchored local GDP (2021 PPP US$, 2012-2022) at three scales, derived from Rossi-Hansberg & Zhang (2026) and Penn World Table 11.0: gm.data.load_bolivia() (112 provinces), load_bolivia_departments() (9 departments), load_bolivia_grid() (1,603 cells) — see datasets/ for the citation-grade documentation

At a glance: the Indian case study

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)
  • Concept sandboxes — 11 learn_* teaching functions that simulate data from a known DGP so you can watch each estimator recover a planted parameter (learn_spatial_autocorrelation, learn_spatial_spillovers, learn_beta_convergence, ...)

Documentation

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

Metadata

Release files for geometrics 0.1.3

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

Source distribution (sdist)

Source distribution for geometrics 0.1.3
File Size Uploaded
geometrics-0.1.3.tar.gz 373.4 kB Details

Built distribution (wheel)

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

Total release size: 657.0 kB

Release files / geometrics-0.1.3.tar.gz

Download URL geometrics-0.1.3.tar.gz
Size 373.4 kB
Tags Source
SHA-256 checksum
How to use checksums
7bd3ff0d41f5eb2b79818877b156c5feb980f71dab4fbceb6463916fe4434a62
BLAKE2b-256 checksum
How to use checksums
eb96c9f67e2d5f735900b57b90d4f6ebc51d270f8abe7285de200fe582cfdc99
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 2, 2026.

Transparency log

Release files / geometrics-0.1.3-py3-none-any.whl

Download URL geometrics-0.1.3-py3-none-any.whl
Size 283.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
de98f1a63310a4f1669c26c074f6ab04f8d755cdb71087757f0357ac1b4a1223
BLAKE2b-256 checksum
How to use checksums
aa75b7069ba42cf01358b411ae8a816f22f79014fc16805d46fab7a259805731
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 2, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

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