Tutorial

Spy4Cast offers a frontend to manage datasets in .nc format in python

Open

You can open a dataset really easily with a line of code using the Dataset interface:

from spy4cast import Dataset

DIR = "data/"  # If no dir is specified it look sin the current directory
NAME = "dataset.nc"
VAR = "sst"  # Variable to use in the dataset. For example `sst`
ds = Dataset(NAME, dir=DIR).open(VAR)

Slice

Most of the times you would like to slice a region of the dataset. You will need to use Region and Month for that:

from spy4cast import Dataset, Month, Region  # --- new --- #

DIR = "data/"
NAME = "dataset.nc"
VAR = "sst"  # Variable to use in the dataset. For example `sst`
ds = Dataset(NAME, dir=DIR).open(VAR)

# --- new --- #

# Latitulde goes from -90 to 90 and longitude form -180 to 180.
# If the dataset you use doesn't work like that and longiutde
# goes from 0 to 360 when you open the dataset this will be
# changed so you ALWAYS have to latitude from -90 to 90
# and longitude form -180 to 180
region = Region(
    lat0=-45,
    latf=0,
    lon0=-6,
    lonf=40,
    month0=Month.DEC,
    monthf=Month.MAR,
    # If the initial month is bigger than the final month (DEC --> MAR)
    # the dataset uses the year before for the initial month (1874 in thiss case)
    year0=1875,
    yearf=1990,
)
ds.slice(region)

# You can also do this in one line like: ds = Dataset(NAME, dir=DIR).open(VAR).slice(region)

Save

Every methodology can be saved for future usage (.save(“prefix_”, dir=’saved_data_directory’))

from spy4cast import Dataset, Region, Month
from spy4cast.spy4cast import Preprocess

DIR = "data/"
NAME = "dataset.nc"
VAR = "sst"  # Variable to use in the dataset. For example `sst`
ds = Dataset(NAME, dir=DIR).open(VAR).slice(
    Region(-90, 90, -180, 180, Month.JAN, Month.MAR, 1870, 1995)
)
preprocesed = Preprocess(ds)
preprocesed.save('save_preprocess_', dir='saved')
from spy4cast import Dataset, Region, Month
from spy4cast.meteo import Clim

DIR = "data/"
NAME = "dataset.nc"
VAR = "sst"  # Variable to use in the dataset. For example `sst`
ds = Dataset(NAME, dir=DIR).open(VAR).slice(
    Region(-90, 90, -180, 180, Month.JAN, Month.MAR, 1870, 1995)
)
clim = Clim(ds, 'map')  # You can plot a time series with Clim(ds, 'ts')
clim.plot(show_plot=True, save_fig=True, cmap='jet', dir='plots', name='plot.png')
# --- new --- #
clim.save('save_clim_', dir='saved')

Load

You can use the saved data with a simple line of code

from spy4cast.spy4cast import Preprocess

preprocessed = Preprocess.load('save_preprocess_', dir='saved')
preprocessed.plot(selected_year=1990, show_plot=True, save_fig=True, cmap='jet', dir='plots', name='plot.png')
from spy4cast.meteo import Clim

clim = Clim.load('save_clim_', dir='saved')
clim.plot(show_plot=True, save_fig=True, cmap='jet', dir='plots', name='plot.png')

Note

Load and Save work for Clim, Anom, Preprocess, MCA, Crossvalidation and Validation (every methodology the API supports)

Spy4Cast

The main methodology of spy4cast is Spy4Cast :-).

It requires a predictor dataset and a predictand dataset. Here is an example which you can download here

from spy4cast import Dataset, Region, Month
from spy4cast.spy4cast import Preprocess, MCA, Crossvalidation, Validation

predictor = Dataset('predictor.nc').open('predictor-var').slice(
    Region(-20, 30, -5, 40, Month.DEC, Month.MAR, 1870, 1990)
)

predictand = Dataset('predictand.nc').open('predictand-var').slice(
    Region(-50, -10, -40, 40, Month.JUN, Month.AUG, 1871, 1991)
)

Preprocess

We now preprocess everything. nm and alpha are required parameters

nm = 3
alpha = 0.1

predictor_preprocessed = Preprocess(predictor, order=5, period=11)  # If we supply `order` and `period` parameters, it applies a filter
predictand_preprocessed = Preprocess(predictand)

MCA

Apply MCA

mca = MCA(dsy=predictor_preprocessed, dsz=predictand_preprocessed, nm=nm, alpha=alpha)

Crossvalidation

Apply Crossvalidation

cross = Crossvalidation(dsy=predictor_preprocessed, dsz=predictand_preprocessed, nm=nm, alpha=alpha)

Validation

Apply Validation: needs a training period to compute the training MCA which then applies through out the validting period

training_preprocessed_y = Preprocess(training_predictor)
training_preprocessed_z = Preprocess(training_predictand)
training_mca = MCA(training_preprocessed_y, training_preprocessed_z, nm=3, alpha=0.1)

validating_preprocessed_y = Preprocess(validating_predictor)
validating_preprocessed_z = Preprocess(validating_predictand)

validation = Validation(training_mca, validating_preprocessed_y, validating_preprocessed_z)

Visualization

Check out the plotting section.

Plot

You can learn all about plotting in the Plotting section.

To plot the results of a methodology you can use the built in plot function. Its purpose is to be fast and to serve you as a debugging tool. For final results we reccommend you to create your own plotting functions.

Spy4Cast

Each spy4cast methodology has its own plotting functions: Spy4Cast.

Clim

Clim performs the climatology for the given region

from spy4cast import Dataset, Region, Month
from spy4cast.meteo import Clim

DIR = "data/"
NAME = "dataset.nc"
VAR = "sst"  # Variable to use in the dataset. For example `sst`
ds = Dataset(NAME, dir=DIR).open(VAR).slice(
    Region(-90, 90, -180, 180, Month.JAN, Month.MAR, 1870, 1995)
)
clim = Clim(ds, 'map')  # You can plot a time series with Clim(ds, 'ts')
clim.plot(show_plot=True, save_fig=True, cmap='jet', dir='plots', name='plot.png')

You can slice a dataset with only a Month and a year (Region(-90, 90, -180, 180, Month.JAN, Month.JAN, 1900, 1900)) and plot the clmatollogy of this dataset if you want to plot a certain month and year.

Anom

Anom performs the anomaly for the given region

from spy4cast import Dataset, Region, Month
from spy4cast.meteo import Anom

DIR = "data/"
NAME = "dataset.nc"
VAR = "sst"  # Variable to use in the dataset. For example `sst`
ds = Dataset(NAME, dir=DIR).open(VAR).slice(
    Region(-90, 90, -180, 180, Month.JAN, Month.MAR, 1870, 1995)
)
anom = Anom(ds, 'map')  # You can plot a time series with Clim(ds, 'ts')
# A year is needed because Anom produces lots of maps (if you use 'ts', the year parameter becomes invalid)
anom.plot(show_plot=True, save_fig=True, year=1990, cmap='jet', dir='plots', name='plot.png')