Work / Moveq
Moveq
Python libraries that turn service and demographic data into standard inequality measures — and keep cross-country methods honest.
The problem
Inequality measures get reimplemented per project, slightly differently each time, and cross-country studies quietly drop the measures that do not travel. The omission never makes it into the write-up.
Library
A CSV of trips per area, population counts and deprivation ranks is read by moveq-core, a pure NumPy layer with no required input-output or geospatial dependencies. It computes population-weighted Gini, the Palma ratio, the Wagstaff concentration index and a configurable composite accessibility score. moveq-catalogue holds a harmonization registry where each measure in a cross-country study is declared as the same, replaced by a national equivalent, or omitted, so omissions are explicit. moveq-cli exposes the same functions as a command line, and the moveq meta package installs core and catalogue together.
How it works
- 01
Bring a CSV
Trips per area, population counts and deprivation ranks. No GIS stack, no framework, no service to deploy.
- 02
Get the standard measures
Population-weighted Gini, the Palma ratio, the Wagstaff concentration index and a configurable composite accessibility score.
- 03
Declare how methods travel
For cross-country work the catalogue makes you state, per measure, whether it is the same, replaced by a national equivalent, or omitted.
- 04
Keep the judgment
moveq computes what the data shows and records what was computed. It does not decide policy.
Engineering notes
- Four packages — moveq-core, moveq-catalogue, moveq, moveq-cli — versioned together and published to PyPI.
- moveq-core is pure NumPy with no required I/O or GIS dependencies, so it drops into an existing analysis without pulling a stack behind it.
- The catalogue exposes programmatic same / replace / omit contracts, making an omission an explicit declaration rather than a silent gap.
- moveq-cli gives a CSV-in, numbers-out interface for quick checks and CI; optional pandas helpers install via the frames extra.
Trade-offs
Pure NumPy core
instead of pandas or GeoPandas as a hard dependency
A statistics core that drags in a GIS stack cannot be used inside someone else's pipeline. Optional extras cover the convenience cases.
An explicit harmonization contract
instead of silently skipping measures that do not apply
The silent version is how cross-country studies mislead. Forcing a declaration puts the limitation in the output where a reader can see it.
Evidence
4
packages on PyPI
3
inequality measures
0
required GIS dependencies
0.1.2
current version