Climate indices computation package based on Xarray with extensive climate analysis capabilities
Comprehensive atmospheric climate indicators for temperature, precipitation, wind, and humidity analysis. These indicators provide standardized climate metrics used in climate services, impact assessment, and adaptation planning.
Basic temperature statistics and averages for climate monitoring and trend analysis.
def tg_mean(tas, freq="YS"):
"""
Mean of daily mean temperature.
Parameters:
- tas: xr.DataArray, daily mean temperature data
- freq: str, resampling frequency (default "YS" for yearly)
Returns:
xr.DataArray: Mean temperature over specified frequency
"""
def tx_mean(tasmax, freq="YS"):
"""
Mean of daily maximum temperature.
Parameters:
- tasmax: xr.DataArray, daily maximum temperature data
- freq: str, resampling frequency
Returns:
xr.DataArray: Mean of daily maximum temperatures
"""
def tn_mean(tasmin, freq="YS"):
"""
Mean of daily minimum temperature.
Parameters:
- tasmin: xr.DataArray, daily minimum temperature data
- freq: str, resampling frequency
Returns:
xr.DataArray: Mean of daily minimum temperatures
"""Temperature extremes and ranges for heat wave and cold spell analysis.
def tx_max(tasmax, freq="YS"):
"""
Maximum of daily maximum temperature.
Parameters:
- tasmax: xr.DataArray, daily maximum temperature data
- freq: str, resampling frequency
Returns:
xr.DataArray: Maximum temperature over period
"""
def tn_min(tasmin, freq="YS"):
"""
Minimum of daily minimum temperature.
Parameters:
- tasmin: xr.DataArray, daily minimum temperature data
- freq: str, resampling frequency
Returns:
xr.DataArray: Minimum temperature over period
"""
def dtr(tasmax, tasmin, freq="YS"):
"""
Mean diurnal temperature range.
Parameters:
- tasmax: xr.DataArray, daily maximum temperature
- tasmin: xr.DataArray, daily minimum temperature
- freq: str, resampling frequency
Returns:
xr.DataArray: Mean daily temperature range
"""
def etr(tasmax, tasmin, freq="YS"):
"""
Extreme temperature range (max of tasmax - min of tasmin).
Parameters:
- tasmax: xr.DataArray, daily maximum temperature
- tasmin: xr.DataArray, daily minimum temperature
- freq: str, resampling frequency
Returns:
xr.DataArray: Extreme temperature range
"""Temperature accumulation indices for agricultural and energy applications.
def growing_degree_days(tas, thresh="4.0 degC", freq="YS"):
"""
Growing degree days above threshold temperature.
Parameters:
- tas: xr.DataArray, daily mean temperature
- thresh: str or float, base threshold temperature (default "4.0 degC")
- freq: str, resampling frequency
Returns:
xr.DataArray: Accumulated growing degree days
"""
def heating_degree_days(tas, thresh="17 degC", freq="YS"):
"""
Heating degree days below threshold temperature.
Parameters:
- tas: xr.DataArray, daily mean temperature
- thresh: str or float, base threshold temperature (default "17 degC")
- freq: str, resampling frequency
Returns:
xr.DataArray: Accumulated heating degree days
"""
def cooling_degree_days(tas, thresh="18 degC", freq="YS"):
"""
Cooling degree days above threshold temperature.
Parameters:
- tas: xr.DataArray, daily mean temperature
- thresh: str or float, base threshold temperature (default "18 degC")
- freq: str, resampling frequency
Returns:
xr.DataArray: Accumulated cooling degree days
"""
def freshing_degree_days(tas, thresh="0 degC", freq="YS"):
"""
Freshing degree days below freezing point.
Parameters:
- tas: xr.DataArray, daily mean temperature
- thresh: str or float, freezing threshold (default "0 degC")
- freq: str, resampling frequency
Returns:
xr.DataArray: Accumulated freshing degree days
"""Count-based temperature indices for climate extremes analysis.
def tx_days_above(tasmax, thresh="25 degC", freq="YS"):
"""
Number of days with maximum temperature above threshold.
Parameters:
- tasmax: xr.DataArray, daily maximum temperature
- thresh: str or float, temperature threshold (default "25 degC")
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of days above threshold
"""
def tn_days_below(tasmin, thresh="0 degC", freq="YS"):
"""
Number of days with minimum temperature below threshold.
Parameters:
- tasmin: xr.DataArray, daily minimum temperature
- thresh: str or float, temperature threshold (default "0 degC")
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of days below threshold
"""
def frost_days(tasmin, thresh="0 degC", freq="YS"):
"""
Number of frost days (minimum temperature below 0°C).
Parameters:
- tasmin: xr.DataArray, daily minimum temperature
- thresh: str or float, frost threshold (default "0 degC")
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of frost days
"""
def ice_days(tasmax, thresh="0 degC", freq="YS"):
"""
Number of ice days (maximum temperature below 0°C).
Parameters:
- tasmax: xr.DataArray, daily maximum temperature
- thresh: str or float, ice threshold (default "0 degC")
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of ice days
"""
def summer_days(tasmax, thresh="25 degC", freq="YS"):
"""
Number of summer days (maximum temperature above 25°C).
Parameters:
- tasmax: xr.DataArray, daily maximum temperature
- thresh: str or float, summer threshold (default "25 degC")
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of summer days
"""
def tropical_nights(tasmin, thresh="20 degC", freq="YS"):
"""
Number of tropical nights (minimum temperature above 20°C).
Parameters:
- tasmin: xr.DataArray, daily minimum temperature
- thresh: str or float, tropical threshold (default "20 degC")
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of tropical nights
"""Extended temperature extreme event detection and characterization.
def hot_spell_frequency(tasmax, thresh_tasmax="30 degC", window=3, freq="YS"):
"""
Number of hot spell events above temperature threshold.
Parameters:
- tasmax: xr.DataArray, daily maximum temperature
- thresh_tasmax: str or float, temperature threshold (default "30 degC")
- window: int, minimum number of consecutive days (default 3)
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of hot spell events
"""
def cold_spell_frequency(tasmin, thresh_tasmin="-10 degC", window=3, freq="YS"):
"""
Number of cold spell events below temperature threshold.
Parameters:
- tasmin: xr.DataArray, daily minimum temperature
- thresh_tasmin: str or float, temperature threshold (default "-10 degC")
- window: int, minimum number of consecutive days (default 3)
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of cold spell events
"""
def hot_spell_max_length(tasmax, thresh_tasmax="30 degC", window=3, freq="YS"):
"""
Maximum length of hot spell events.
Parameters:
- tasmax: xr.DataArray, daily maximum temperature
- thresh_tasmax: str or float, temperature threshold
- window: int, minimum number of consecutive days
- freq: str, resampling frequency
Returns:
xr.DataArray: Maximum hot spell length in days
"""Basic precipitation statistics and accumulation measures.
def prcptot(pr, thresh="1 mm/day", freq="YS"):
"""
Total precipitation from wet days.
Parameters:
- pr: xr.DataArray, daily precipitation data
- thresh: str or float, wet day threshold (default "1 mm/day")
- freq: str, resampling frequency
Returns:
xr.DataArray: Total precipitation amount
"""
def pr_max(pr, freq="YS"):
"""
Maximum daily precipitation.
Parameters:
- pr: xr.DataArray, daily precipitation data
- freq: str, resampling frequency
Returns:
xr.DataArray: Maximum daily precipitation
"""
def sdii(pr, thresh="1 mm/day", freq="YS"):
"""
Simple daily intensity index (mean precipitation on wet days).
Parameters:
- pr: xr.DataArray, daily precipitation data
- thresh: str or float, wet day threshold (default "1 mm/day")
- freq: str, resampling frequency
Returns:
xr.DataArray: Simple daily intensity index
"""Wet and dry day statistics for drought and flooding analysis.
def wet_days(pr, thresh="1 mm/day", freq="YS"):
"""
Number of wet days (precipitation above threshold).
Parameters:
- pr: xr.DataArray, daily precipitation data
- thresh: str or float, wet day threshold (default "1 mm/day")
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of wet days
"""
def dry_days(pr, thresh="1 mm/day", freq="YS"):
"""
Number of dry days (precipitation below threshold).
Parameters:
- pr: xr.DataArray, daily precipitation data
- thresh: str or float, dry day threshold (default "1 mm/day")
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of dry days
"""
def r10mm(pr, thresh="10 mm/day", freq="YS"):
"""
Number of days with precipitation >= 10mm.
Parameters:
- pr: xr.DataArray, daily precipitation data
- thresh: str or float, precipitation threshold (default "10 mm/day")
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of heavy precipitation days
"""
def r20mm(pr, thresh="20 mm/day", freq="YS"):
"""
Number of days with precipitation >= 20mm.
Parameters:
- pr: xr.DataArray, daily precipitation data
- thresh: str or float, precipitation threshold (default "20 mm/day")
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of very heavy precipitation days
"""Drought and wet spell characterization for water resource management.
def cdd(pr, thresh="1 mm/day", freq="YS"):
"""
Maximum number of consecutive dry days.
Parameters:
- pr: xr.DataArray, daily precipitation data
- thresh: str or float, dry day threshold (default "1 mm/day")
- freq: str, resampling frequency
Returns:
xr.DataArray: Maximum consecutive dry days
"""
def cwd(pr, thresh="1 mm/day", freq="YS"):
"""
Maximum number of consecutive wet days.
Parameters:
- pr: xr.DataArray, daily precipitation data
- thresh: str or float, wet day threshold (default "1 mm/day")
- freq: str, resampling frequency
Returns:
xr.DataArray: Maximum consecutive wet days
"""Surface wind speed analysis for renewable energy and extreme weather applications.
def sfcwind_mean(sfcwind, freq="YS"):
"""
Mean surface wind speed.
Parameters:
- sfcwind: xr.DataArray, daily surface wind speed
- freq: str, resampling frequency
Returns:
xr.DataArray: Mean wind speed
"""
def sfcwind_max(sfcwind, freq="YS"):
"""
Maximum surface wind speed.
Parameters:
- sfcwind: xr.DataArray, daily surface wind speed
- freq: str, resampling frequency
Returns:
xr.DataArray: Maximum wind speed
"""
def windy_days(sfcwind, thresh="10 m/s", freq="YS"):
"""
Number of windy days above wind speed threshold.
Parameters:
- sfcwind: xr.DataArray, daily surface wind speed
- thresh: str or float, wind speed threshold (default "10 m/s")
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of windy days
"""Agricultural season timing and length for crop management applications.
def growing_season_length(tas, thresh="5 degC", window=6, freq="YS"):
"""
Length of growing season based on temperature threshold.
Parameters:
- tas: xr.DataArray, daily mean temperature
- thresh: str or float, temperature threshold (default "5 degC")
- window: int, minimum window length for season detection (default 6)
- freq: str, resampling frequency
Returns:
xr.DataArray: Growing season length in days
"""
def growing_season_start(tas, thresh="5 degC", window=6, freq="YS"):
"""
Start date of growing season.
Parameters:
- tas: xr.DataArray, daily mean temperature
- thresh: str or float, temperature threshold (default "5 degC")
- window: int, minimum window length (default 6)
- freq: str, resampling frequency
Returns:
xr.DataArray: Growing season start day of year
"""
def growing_season_end(tas, thresh="5 degC", window=6, freq="YS"):
"""
End date of growing season.
Parameters:
- tas: xr.DataArray, daily mean temperature
- thresh: str or float, temperature threshold (default "5 degC")
- window: int, minimum window length (default 6)
- freq: str, resampling frequency
Returns:
xr.DataArray: Growing season end day of year
"""import xarray as xr
import xclim.atmos as xca
# Load temperature data
ds = xr.tutorial.open_dataset("air_temperature")
tasmax = ds.air.rename("tasmax")
tasmin = tasmax - 5 # Create tasmin for example
# Compute temperature indicators
tmax_mean = xca.tx_mean(tasmax, freq="YS")
summer_days = xca.summer_days(tasmax, thresh="25 degC", freq="YS")
frost_days = xca.frost_days(tasmin, thresh="0 degC", freq="YS")
growing_dd = xca.growing_degree_days(tasmax, thresh="4.0 degC", freq="YS")# Load precipitation data
pr = ds.precip.rename("pr") # assuming precip exists
# Compute precipitation indicators
total_precip = xca.prcptot(pr, freq="YS")
heavy_days = xca.r10mm(pr, freq="YS")
dry_spell = xca.cdd(pr, thresh="1 mm/day", freq="YS")
wet_spell = xca.cwd(pr, thresh="1 mm/day", freq="YS")
intensity = xca.sdii(pr, freq="YS")# Detect heat waves
heat_waves = xca.hot_spell_frequency(
tasmax,
thresh_tasmax="30 degC",
window=3, # 3+ consecutive days
freq="YS"
)
# Maximum heat wave length
max_heat_wave = xca.hot_spell_max_length(
tasmax,
thresh_tasmax="30 degC",
window=3,
freq="YS"
)