Skip to article frontmatterSkip to article content

Climatology in EO

CSIC
UCM
IGEO

Definition. The climatology of a variable is a variables condition averaged over a period of time.

Climatological Averages - These are monthly mean values of a climate variable over a specific period of time. This period will change depending upon the availability of the data. The typical range can span 2-20 years.

Climatological Normals. These are monthly averages computed for a prolonged period of at least 30 consecutive years. In the community, the default climatological standard normal is the average of the period from 1981-01-01 to 2010-12-31.

Formulation

Climatology Equation:yˉc(t)=1Nsn=1Nsy(xn,t)Climatology Function:yˉc:ΩGlobe×TReferenceRDySpatial Domain:xΩGlobeRDsTemporal Domain:tTReferenceR+\begin{aligned} \text{Climatology Equation}: && && \bar{y}_c(t) &= \frac{1}{N_s}\sum_{n=1}^{Ns}\boldsymbol{y}(\mathbf{x}_n,t) \\ \text{Climatology Function}: && && \bar{y}_c&: \Omega_\text{Globe}\times\mathcal{T}_\text{Reference} \rightarrow \mathbb{R}^{D_y} \\ \text{Spatial Domain}: && && \mathbf{x}&\in\Omega_\text{Globe}\subseteq\mathbb{R}^{D_s}\\ \text{Temporal Domain}: && && t&\in\mathcal{T}_\text{Reference}\subseteq\mathbb{R}^+ \end{aligned}

Pseudo-Code

Get the spatio temporal dataset

# get a spatiotemporal dataset, e.g. ["time", "lat", "lon"]
ds: xr.Dataset["Nt Nx Ny"] = ...

Now, we need to choose the parameters for calculating the climatology. Remember, the climatology is basically the weighted spatiotemporal mean at some frequency.

  • Region: We need to define the region where we want to grab the signal.
  • Period: We need to define the period where we want to grab the signal.
  • Frequency: We need to define the frequency of when we want the signal.
  • Percentiles: The percentiles
# choose frequency of climatology 
freq: str = "monthly" # "daily", "yearly", "seasonal"
# choose the region where we 
region: str = "globe" # "spain", "europe", "globe" 
# choose the reference period
reference = ["1981","2010"]
# percentiles
percentiles: List[float] = [5., 95.]
# other function 'cooking' parameters
params: Dict = dict(
    region=region,
    period=period,
    freq=freq,
    percentiles=percentiles,
    ...
)
# calculate climatology, i.e., weighted spatial mean per time step
ds_clim: xr.Dataset = calculate_climatology(ds, **params)

Now, we can calculate the anomalies which works by removing the

Resources

  • Calculating Seasonality with selectors and masks - Notebook
  • Removing Climatology with mapping - Notebook
  • Calculating ENSO with xarray - Pythia
  • Simple Example with Hostorical Period - Notebook
  • Simple Climatology - Notebook
  • xcdat for climatologies - Notebook
  • Extended Tutorial - CDS Docs
  • Example of different means (daily, monthly, seasonly, yearly) - geocat docs
  • code with climatology and anomaly abstraction - Geocat