Generic indices recipes#
You will find below a few example of icclim v6 Generic indices/indicators.
import icclim
from icclim import build_threshold
# Change `data` to your own netcdf file path.
data = "netcdf_files/gridded.1991-2010.nc"
Count occurrences#
Occurrences of events where tas is between 20 and 30 degree Celsius and precipitation are above 3 mm/day.
# Equivalent to using `okay_temp = "<= 30 deg_C AND >= 20 deg_C"`
okay_temp = build_threshold("<= 30 deg_C") & build_threshold(">= 20 deg_C")
some_rain = icclim.build_threshold("> 3 mm/day")
dataset = icclim.count_occurrences(
in_files={
"tmax": {"study": data, "thresholds": okay_temp},
"precip": {"study": data, "thresholds": some_rain},
}
)
# .compute must be called to ask dask to run the actual computation
conputed_data = dataset.count_occurrences.compute()
tx99p_dataset = icclim.count_occurrences(
in_files=data, var_name="tasmax", threshold=">= 99 doy_per"
)
# .compute must be called to ask dask to run the actual computation
tx99p = dataset.count_occurrences.compute()
Sum#
Sum of precipitation that are above 4 mm/day.
rain_sum_above_4mm = icclim.sum(
in_files=data, var_name="precip", threshold="> 4 mm/day"
).sum.compute()
Standard Deviation#
Standard deviation of tas
variable.
tas_std = icclim.std(in_files=data, var_name="tas").std.compute()
Average#
Average of the tas
variable, per year by default.
tas_average = icclim.average(in_files=data, var_name="tas").average.compute()
Average of the tas
values that are above the 87th period percentile
(computed on the whole period here), per year by default.
tas_average_above_percentile_of_period = icclim.average(
in_files=data, var_name="tas", threshold="> 87 period_per"
).average.compute()
Maximum Consecutive Occurrences#
Almost equivalent to ECAD’s index CDD (Consecutive Dry Days, days when pr is below 1 mm/day).
CDD = icclim.max_consecutive_occurrence(
in_files=data, var_name="precip", threshold="< 1.3 mm/day"
).max_consecutive_occurrence.compute()
Sum of Spell Lengths#
Almost equivalent to ECAD’s index WSDI (Warm Spell Duration Index, maximum consecutive occurrence of tasmax > 90th doy percentile)
custom_wsdi = icclim.sum_of_spell_lengths(
in_files=data, var_name="precip", threshold="> 90 doy_per AND > 28 degC"
).sum_of_spell_lengths.compute()
Excess#
Excess of minimal daily temperature above the 22 daily percentile threshold computed overs the 1991-1995 reference period, with a focus on the June to August periods.
jja_tmin_excess = (
icclim.excess(
climp_file,
var_name=["tmin"],
threshold=icclim.build_threshold(
"22 doy_per", base_period_time_range=["1991-01-01", "1995-12-31"]
),
slice_mode="jja",
)
.compute()
.excess
)
Deficit#
Deficit of minimal daily temperature below 17 degree Celsius.
result13 = icclim.index(
climp_file,
var_name=["tmin"],
index_name="deficit",
threshold=build_threshold("17 degC"),
).compute()
Fraction of Total#
Fraction of precipitations above the 75th period percentile, where percentiles are computed only on values above 1 mm/day This is equivalent to the ECAD’s index R75pTOT.
result14 = (
icclim.fraction_of_total(
climp_file,
var_name=["precip"],
threshold=build_threshold("> 75 period_per", threshold_min_value="1 mm/day"),
)
.compute()
.fraction_of_total
)
Maximum#
Maximum of tas temperature per month.
max_of_tas = (
icclim.maximum(
climp_file,
var_name=["tas"],
slice_mode="month",
)
.compute()
.maximum
)
Minimum#
Minimum of tas temperature per month.
min_of_tas = (
icclim.minimum(
climp_file,
var_name=["tas"],
slice_mode="month",
)
.compute()
.minimum
)
Max of Rolling Sum#
Maximum of rolling sum of precipitation that are above the period median, where the median is computed for the whole period (default behavior when there is no base_period_time_range) only on values above 1mm/day.
max_of_rolling_sum = (
icclim.index(
climp_file,
index_name="max_of_rolling_sum",
var_name=["precip"],
threshold=build_threshold(">= 50 period_per", threshold_min_value="1 mmday"),
)
.compute()
.max_of_rolling_sum
)
Min of Rolling Sum#
Minimum of rolling sum of precipitation that are above the period median, where the median is computed for the whole period (default behavior when there is no base_period_time_range) only on values above 1mm/day.
min_of_rolling_sum = (
icclim.min_of_rolling_sum(
climp_file,
var_name=["precip"],
threshold=build_threshold(">= 50 period_per", threshold_min_value="1 mmday"),
)
.compute()
.min_of_rolling_sum
)
Max of Rolling Average#
Maximum of rolling average of precipitation that are above the period median, where the median is computed for the whole period (default behavior when there is no base_period_time_range) only on values above 1mm/day.
max_of_rolling_average = (
icclim.index(
climp_file,
index_name="max_of_rolling_average",
var_name=["precip"],
threshold=build_threshold(">= 50 period_per", threshold_min_value="1 mmday"),
)
.compute()
.max_of_rolling_average
)
Min of Rolling Average#
Minimum of rolling average of precipitation that are above the period median, where the median is computed for the whole period (default behavior when there is no base_period_time_range) only on values above 1mm/day.
min_of_rolling_average = (
icclim.min_of_rolling_average(
climp_file,
var_name=["precip"],
threshold=build_threshold(">= 50 period_per", threshold_min_value="1 mmday"),
)
.compute()
.min_of_rolling_average
)
Mean of difference#
Mean of the difference between tasmax in tasmin. It’s a generification of ECAD’s index DTR.
dtr = (
icclim.index(
climp_file,
index_name="mean_of_difference",
var_name=["tmax", "tmin"],
)
.compute()
.mean_of_difference
)
Difference of extremes#
Difference of the maximum of tasmax and the minimum of tasmin. It’s a generification of ECAD’s index ETR.
dtr = (
icclim.index(
climp_file,
index_name="difference_of_extremes",
var_name=["tmax", "tmin"],
)
.compute()
.difference_of_extremes
)
Difference of means#
Difference between averaged tas and the averaged tas values of the
reference period. Also known as the anomaly
.
anomaly = (
icclim.difference_of_means(
climp_file,
var_name=["tas"],
base_period_time_range=["1991-01-01", "1995-12-31"],
)
.compute()
.difference_of_means
)
Mean Of Absolute One Time Step Difference#
Mean of absolute difference between tasmax and tasmin with a one time step lag (usually 1 day). This is equivalent to the pseudo-code:
a = tasmax[T + 1] - tasmin[T + 1]
b = tasmax[T] - tasmin[T]
average(a - b)
It’s a generification of ECAD’s index vDTR.
result = (
icclim.mean_of_absolute_one_time_step_difference(
climp_file,
var_name=["tmax", "tmin"],
)
.compute()
.mean_of_absolute_one_time_step_difference
)