lsapy.stats.spatial_stats_summary#

lsapy.stats.spatial_stats_summary(data, areas, name='area', mask_kwargs=None, **kwargs)[source]#

Generate a descriptive statistics summary of the data for given areas.

Returns a pandas DataFrame of data according to the given parameters. The statistics includes count, mean, std, min, max, and 25%, 50%, and 75% percentiles. Bins can be provided to further group the data into intervals. The statistics are calculated for each area provided in the areas GeoDataFrame.

Parameters:
  • data (DataArray | Dataset) – The input data.

  • areas (GeoDataFrame) – Areas to be used as spatial masks.

  • name (str) – Name of the area column in the output DataFrame. Default is ‘area’.

  • mask_kwargs (dict[str, Any] | None) – Additional keyword arguments passed to regionmask.from_geopandas.

  • **kwargs (dict, optional) – Additional keyword arguments passed to lsapy.stats.stats_summary.

Returns:

A DataFrame with the statistics for each area, including: count, mean, std, min, max, and 25%, 50%, and 75% percentiles.

Return type:

DataFrame

Examples

>>> from lsapy.utils import open_data
>>> from lsapy import SuitabilityCriteria, LandSuitabilityAnalysis
>>> import lsapy.standardize as lstd
>>> from xclim.indicators.atmos import growing_degree_days
>>> import geopandas as gpd

Let’s first define a Land Suitability Analysis (LSA):

>>> drainage = open_data("land", variables="drainage")
>>> tas = open_data("climate", variables="tas")
>>> sc = {
...     "drainage_class": SuitabilityCriteria(
...         name="drainage_class",
...         long_name="Drainage Class Suitability",
...         weight=3,
...         category="soilTerrain",
...         indicator=drainage,
...         func=lstd.discrete,
...         fparams={"rules": {0: 0, 1: 0.1, 2: 0.5, 3: 0.9, 4: 1}},
...     ),
...     "growing_degree_days": SuitabilityCriteria(
...         name="growing_degree_days",
...         long_name="Growing Degree Days Suitability",
...         weight=1,
...         category="climate",
...         indicator=growing_degree_days(tas, thresh="10 degC", freq="YS-JUL"),
...         func=lstd.vetharaniam2022_eq5,
...         fparams={"a": -1.41, "b": 801},
...     ),
... }
>>> lsa = LandSuitabilityAnalysis("land_use", sc)
>>> lsa.run(inplace=True)

We can then load a GeoDataFrame of areas and compute the statistics summary for each area.

>>> areas = gpd.read_file("path_to_your_areas_file.shp")
>>> stats = spatial_stats_summary(lsa.data, areas)