Skip to main content

Spatialize: A Python wrapper for C++ ESI library

Project description

Spatialize: A Python/C++ library for Ensemble Spatial Analysis (ESA)

An open source library for spatial analysis that combines the simplicity of basic methods with the power of geostatistical tools.

Overview

Spatialize implements Ensemble Spatial Analysis (ESA), which encompasses two complementary approaches: Ensemble Spatial Interpolation (ESI) and Ensemble Spatial Simulation (ESS). These novel methods address the limitations of traditional geostatistical approaches by leveraging ensemble learning techniques.

ESI works by generating multiple estimates for each target location by creating different spatial partitions of the sample data and applying an interpolation algorithm within each local subset. These local estimates are then aggregated to produce robust predictions. ESS extends this framework to provide stochastic simulation capabilities.

Designed to bridge the gap between expert and non-expert users of geostatistics, Spatialize provides automated tools that eliminate the need for manual spatial analysis and extensive domain expertise.

Main features:

  • Automated Spatial Estimation: Minimal user intervention required
  • Stochastic Modelling & Ensemble Learning: Robust, scalable and suitable for large datasets
  • Uncertainty Quantification: Provides both point estimates and empirical posterior distributions
  • Flexible Data Support: Works with both gridded and non-gridded data
  • Hyperparameter Optimization: Built-in grid search with cross-validation
  • High Performance: C++ core with Python interface

Installation

The source code is currently hosted on GitHub at: https://github.com/alges/spatialize

Direct installers for the latest released version are available at the Python Package Index (PyPI).

PyPI

pip install spatialize

System Requirements

  • Python 3.8+
  • Compatible with Linux, macOS, and Windows

Dependencies

Core Concepts

Function Description
esi_griddata() Spatial interpolation for points on a regular grid
esi_nongriddata() Spatial interpolation for scattered points
esi_hparams_search() Automated hyperparameter optimization with cross-validation

Local Interpolators

  • IDW (Inverse Distance Weighting): Simple yet powerful with configurable distance exponent
  • Kriging: Geostatistical method with multiple variogram models (spherical, exponential, cubic and gaussian)

Partition Methods

  • Mondrian Forests: Uses recursive, axis-aligned partitions (supports up to 5D)
  • Voronoi Forests: Uses Voronoi diagram-based partitions (supports up to 2D)

Quick Start

Here are a few examples to get you started.

Basic Gridded Data Estimation

import numpy as np
from spatialize.gs.esi import esi_griddata

# Generate sample data
def func(x, y):		# a kind of "cubic" function
    return x * (1 - x) * np.cos(4 * np.pi * x) * np.sin(4 * np.pi * y ** 2) ** 2

points = np.random.random((100, 2))
values = func(points[:, 0], points[:, 1])

# Define the estimation grid
grid_x, grid_y = np.mgrid[0:1:50j, 0:1:50j]

# Perform ESI estimation
result = esi_griddata(points, values, (grid_x, grid_y),
		      local_interpolator="idw",
		      p_process="mondrian",
		      n_partitions=300,
		      alpha=0.8,
		      exponent=1.0
		      )

# Get results
estimation = result.estimation()
precision = result.precision()

# Quick visualization
result.quick_plot()

Non-gridded Data Estimation

from spatialize.gs.esi import esi_nongriddata

# Define target locations
target_points = np.random.random((50, 2))

# Perform estimation, using Kriging as local interpolator
result = esi_nongriddata(points, values, target_points,
		         local_interpolator="kriging",
		         model="spherical",
		         nugget=0.1,
		         range=10.0,
		         sill=1.0
		         )

Automated Hyperparameter Search

from spatialize.gs.esi import esi_hparams_search

# Search for optimal parameters
search_result = esi_hparams_search(points, values, (grid_x, grid_y),
			           local_interpolator="idw",
			           griddata=True,
			           k=10,
			           exponent=[1.0, 2.0, 3.0, 4.0],
			           alpha=[0.7, 0.8, 0.9],
			           n_partitions=[100, 300, 500]
			           )

# Perform estimation using best parameters found
best_result = esi_griddata(points, values, (grid_x, grid_y),
			   local_interpolator="idw",
			   best_params_found=search_result.best_result()
			   )

# Visualize search results
search_result.plot_cv_error()

License

Apache-2.0

Citing Spatialize

Please refer to the following articles when publishing work relating to this library or the ESI model:

@article{
	title = {Spatial distributional estimation via ensemble spatial analysis},
	journal = {AIMS Mathematics},
	volume = {10},
	number = {11},
	pages = {26351-26388},
	year = {2025},
	issn = {2473-6988},
	doi = {10.3934/math.20251159},
	url = {https://www.aimspress.com/article/doi/10.3934/math.20251159},
	author = {Alvaro F. Ega{\~n}a and Gonzalo D{\'i}az and Felipe Navarro and Mohammad Maleki and Juan F. S{\'a}nchez-P{\'e}rez},
	keywords = {geostatistics, computational geostatistics, generative geostatistics, non-linear geostatistics, distributional geostatistics, geostatistical simulation, empirical copula, data-driven methods},
	}

@article{spatialize2025,
	author  = {Navarro, Felipe and Ega{\~n}a, {\'A}lvaro F. and Ehrenfeld, Alejandro and Garrido, Felipe and Valenzuela, Mar{\'i}a Jes{\'u}s and S{\'a}nchez-P{\'e}rez, Juan F. },
	title   = {Spatialize v1.0: A Python/C++ Library for Ensemble Spatial Interpolation},
	journal = {},
	year    = {2025},
	volume  = {},
	number  = {},
	pages   = {},
	doi     = {https://doi.org/10.48550/arXiv.2507.17867},
	url     = {https://arxiv.org/abs/2507.17867},
	issn    = {}
	}

@article{AdaptiveESI2025,
	author  = {Ega{\~n}a, {\'A}lvaro F. and Valenzuela, María Jesús and Maleki, Mohammad and S{\'a}nchez-P{\'e}rez, Juan F. and Díaz, Gonzalo},
	title   = {Adaptive ensemble spatial analysis},
	journal = {Scientific Reports},
	year    = {2025},
	volume  = {15},
	number  = {1},
	pages   = {26599},
	doi     = {10.1038/s41598-025-08844-z},
	url     = {https://doi.org/10.1038/s41598-025-08844-z},
	issn    = {2045-2322}
	}

@article{ESI2021,
	author  = {Ega{\~n}a, {\'A}lvaro F. and Navarro, Felipe and Maleki, Mohammad and Grand{\'o}n, Francisca and Carter, Francisco and Soto, Fabi{\'a}n},
	title   = {Ensemble Spatial Interpolation: A New Approach to Natural or Anthropogenic Variable Assessment},
	journal = {Natural Resources Research},
	volume  = {30},
	number  = {5},
	pages   = {3777--3793},
	year    = {2021},
	doi     = {https://doi.org/10.1007/s11053-021-09860-2},
	url     = {https://link.springer.com/article/10.1007/s11053-021-09860-2}
	}

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

spatialize-1.1.0.tar.gz (47.6 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

spatialize-1.1.0-cp313-cp313-win_amd64.whl (47.2 MB view details)

Uploaded CPython 3.13Windows x86-64

spatialize-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl (48.5 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

spatialize-1.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

spatialize-1.1.0-cp313-cp313-macosx_10_13_universal2.whl (47.6 MB view details)

Uploaded CPython 3.13macOS 10.13+ universal2 (ARM64, x86-64)

File details

Details for the file spatialize-1.1.0.tar.gz.

File metadata

  • Download URL: spatialize-1.1.0.tar.gz
  • Upload date:
  • Size: 47.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spatialize-1.1.0.tar.gz
Algorithm Hash digest
SHA256 67f55fe48196ad420c8fb54c9dcc8b708293f5c8b23ad9cbef35b2b1e61e3645
MD5 039407c4ea720b54947d83cfa4cdb674
BLAKE2b-256 4b748599dc5c56b1d6fb06610e4854846efcdd353e46f0de204cc349386bba2e

See more details on using hashes here.

Provenance

The following attestation bundles were made for spatialize-1.1.0.tar.gz:

Publisher: release-upload.yml on alges/spatialize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spatialize-1.1.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: spatialize-1.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 47.2 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spatialize-1.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 6fe5f462c8afc6babb55b04d84b548e8cdfa08cd6ad92f142e31a838f3805f78
MD5 5d13c0937877285199a5056f8c29b2ac
BLAKE2b-256 41464cb7b6e7aedc189153592389104ce2bd87bb60c1870141d62397a7a121d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for spatialize-1.1.0-cp313-cp313-win_amd64.whl:

Publisher: release-upload.yml on alges/spatialize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spatialize-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for spatialize-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 623f3c48cd068dccb288337e228fe9ce2fc0869bfde9745370714ecd1be620fa
MD5 e413a8e29a7dad3c1a4dd47f60023af6
BLAKE2b-256 634c1c903696206818dd923dce32c6d0d5a6027c27cf5f6a977b1368a69f5bc4

See more details on using hashes here.

Provenance

The following attestation bundles were made for spatialize-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: release-upload.yml on alges/spatialize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spatialize-1.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for spatialize-1.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c013cedc656dbbb39fcf6c0c44c5b26d0428dab97cbf892e73c6ef85bd433c1a
MD5 32e039bc770a4976643fbdf8b796f05b
BLAKE2b-256 bab1b06241678f64c0ebcfc633429bd41fdf2542afd8b3cafa02b9b9e5a92cc5

See more details on using hashes here.

Provenance

The following attestation bundles were made for spatialize-1.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release-upload.yml on alges/spatialize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spatialize-1.1.0-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for spatialize-1.1.0-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 5337ce0452b2388b8a9f7750506181c4cc5131931c35a95af8e528a9196c1a71
MD5 1772ddd73dc3273639e85fe751d56c2f
BLAKE2b-256 8ae8e06e4b5742c81dcde96afe3d453a635eea62e3a0c182761bebd3c63e2d89

See more details on using hashes here.

Provenance

The following attestation bundles were made for spatialize-1.1.0-cp313-cp313-macosx_10_13_universal2.whl:

Publisher: release-upload.yml on alges/spatialize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page