In [1]:
Copied!
from OceanDataStore import OceanDataCatalog
from OceanDataStore import OceanDataCatalog
- Create an instance of the OceanDataCatalog class to access the National Oceanography Centre ocean model Spatio-Temporal Access Catalog (
noc-stac):
In [ ]:
Copied!
catalog = OceanDataCatalog(catalog_name="noc-stac")
catalog = OceanDataCatalog(catalog_name="noc-stac")
- Let's use the
.search()method to search for allobservationdatasets in thenoc-stac:
In [3]:
Copied!
catalog.search(dataset_type="observation")
catalog.search(dataset_type="observation")
Out[3]:
Search Results 25 Items found
| Item ID | Title | Platform | Start Date | End Date | Variables |
|---|---|---|---|---|---|
| nsidc/nsidc_sea_ice_index_v4_antarctic_monthly | NSIDC Sea Ice Index, Version 4 - Antarctic | gn | 1978-11-15T00:00:00Z | 2025-12-15T00:00:00Z | 4 variablessiconc cell_area siextent simask |
| nsidc/nsidc_sea_ice_index_v4_arctic_monthly | NSIDC Sea Ice Index, Version 4 - Arctic | gn | 1978-11-15T00:00:00Z | 2025-12-15T00:00:00Z | 4 variablescell_area siextent siconc simask |
| woa23/woa23_1971_2000_annual_climatology | World Ocean Atlas 2023 temperature and salinity annual climatology (1971-2000). | gr | 1971-01-01T00:00:00Z | 2000-12-31T00:00:00Z | 31 variablesbasin_mask cell_volume dy crs dx bottom_level cell_area depth_bnds cell_thickness so_mn mask so_an so_gp lat_bnds so_oa lon_bnds so_dd thetao_mn thetao_an thetao_dd thetao_gp thetao_oa so_sdo thetao_sdo thetao_sea thetao_sd time_bnds so_se so_sd thetao_se so_sea |
| woa23/woa23_1971_2000_monthly_climatology | World Ocean Atlas 2023 temperature and salinity monthly climatology (1971-2000). | gr | 1971-01-01T00:00:00Z | 2000-12-31T00:00:00Z | 33 variablesbasin_mask dy bottom_level crs depth_bnds cell_volume cell_area cell_thickness dx lat_bnds lon_bnds so_gp so_mn so_oa so_dd so_se so_sdo so_ma mask so_an thetao_an thetao_gp thetao_oa thetao_ma thetao_se thetao_sea so_sd thetao_mn time_bnds thetao_sdo so_sea thetao_sd thetao_dd |
| woa23/woa23_1981_2010_annual_climatology | World Ocean Atlas 2023 temperature and salinity annual climatology (1981-2010). | gr | 1981-01-01T00:00:00Z | 2010-12-31T00:00:00Z | 31 variablescell_area depth_bnds dx basin_mask bottom_level crs cell_volume dy cell_thickness lon_bnds so_an so_gp so_mn lat_bnds so_oa so_se thetao_gp mask thetao_an so_sd thetao_dd so_sea thetao_oa so_dd so_sdo thetao_sd thetao_sdo thetao_se time_bnds thetao_mn thetao_sea |
| woa23/woa23_1981_2010_monthly_climatology | World Ocean Atlas 2023 temperature and salinity monthly climatology (1981-2010). | gr | 1981-01-01T00:00:00Z | 2010-12-31T00:00:00Z | 33 variablesdx crs cell_thickness depth_bnds dy bottom_level cell_volume basin_mask cell_area lat_bnds so_gp so_dd lon_bnds mask so_an so_mn so_ma so_se so_sea thetao_dd so_oa so_sd thetao_an thetao_gp so_sdo thetao_sdo thetao_mn thetao_sd thetao_ma thetao_sea thetao_oa thetao_se time_bnds |
| woa23/woa23_1991_2020_annual_climatology | World Ocean Atlas 2023 temperature and salinity annual climatology (1991-2020). | gr | 1991-01-01T00:00:00Z | 2020-12-31T00:00:00Z | 31 variablesbasin_mask dx cell_thickness bottom_level cell_volume depth_bnds dy cell_area mask crs lon_bnds so_an lat_bnds so_oa so_se thetao_dd so_sdo so_sd so_sea so_gp so_dd thetao_an thetao_gp so_mn thetao_mn thetao_oa thetao_sd thetao_se thetao_sea thetao_sdo time_bnds |
| woa23/woa23_1991_2020_monthly_climatology | World Ocean Atlas 2023 temperature and salinity monthly climatology (1991-2020). | gr | 1991-01-01T00:00:00Z | 2020-12-31T00:00:00Z | 33 variablesbasin_mask bottom_level dy depth_bnds cell_thickness dx cell_area crs cell_volume mask so_ma so_an lat_bnds so_dd so_gp lon_bnds so_se so_sd thetao_ma so_sdo thetao_an thetao_dd so_sea so_mn thetao_gp so_oa thetao_mn thetao_oa thetao_sd time_bnds thetao_sea thetao_se thetao_sdo |
| oisst/oisst_v2.1_monthly | NOAA OISSTv2.1 Monthly Timeseries. | gr | 1981-09-01T00:00:00Z | 2026-05-01T00:00:00Z | 8 variablesdx dy mask siconc siarea_NH siarea_SH tos cell_area |
| oisst/oisst_v2.1_1991_2020_monthly_climatology | NOAA OISSTv2.1 Monthly Climatology (1991-2020) | gr | 1991-01-01T00:00:00Z | 2020-12-31T00:00:00Z | 7 variablesdx cell_area dy siconc time_bnds tos mask |
| en4.2.2/en4.2.2_analysis_g10_monthly | EN.4.2.2 ocean temperature and salinity monthly timeseries. | gr | 1950-01-01T00:00:00Z | 2026-03-12T00:00:00Z | 14 variablescell_area mask depth_bnds so so_uncertainty dx thetao thetao_obs_weights thetao_uncertainty cell_thickness so_obs_weights cell_volume time_bnds dy |
| en4.2.2/en4.2.2_analysis_g10_1971_2000_monthly_climatology | EN.4.2.2 ocean temperature and salinity monthly climatology (1971-2000). | gr | 1971-01-01T00:00:00Z | 2000-12-31T00:00:00Z | 14 variablesdepth_bnds dy cell_thickness mask dx cell_area cell_volume so time_bnds so_uncertainty thetao_obs_weights thetao_uncertainty so_obs_weights thetao |
| en4.2.2/en4.2.2_analysis_g10_1981_2010_monthly_climatology | EN.4.2.2 ocean temperature and salinity monthly climatology (1981-2010). | gr | 1981-01-01T00:00:00Z | 2010-12-31T00:00:00Z | 14 variablescell_area cell_volume cell_thickness depth_bnds so so_uncertainty mask thetao_obs_weights so_obs_weights dy time_bnds thetao_uncertainty dx thetao |
| en4.2.2/en4.2.2_analysis_g10_1991_2020_monthly_climatology | EN.4.2.2 ocean temperature and salinity monthly climatology (1991-2020). | gr | 1991-01-01T00:00:00Z | 2020-12-31T00:00:00Z | 14 variablescell_area mask cell_thickness dx cell_volume dy depth_bnds so_obs_weights so thetao thetao_obs_weights time_bnds so_uncertainty thetao_uncertainty |
| armor3d/armor3d_global_my_monthly | Multi Observation Global Ocean 3D Temperature Salinity Height Geostrophic Current and MLD. | gr | 1993-01-01T00:00:00Z | 2024-12-31T00:00:00Z | 12 variablescell_area cell_thickness mask dx cell_volume dy mlotst thetao vgo zo ugo so |
| armor3d/armor3d_global_my_1971_2000_monthly_climatology | Multi Observation Global Ocean 3D Temperature Salinity Height Geostrophic Current and MLD monthly climatology (1971-2000). | gr | 1971-01-01T00:00:00Z | 2000-12-31T00:00:00Z | 13 variablesmask cell_volume cell_thickness cell_area dx dy mlotst ugo zo so thetao time_bnds vgo |
| armor3d/armor3d_global_my_1981_2010_monthly_climatology | Multi Observation Global Ocean 3D Temperature Salinity Height Geostrophic Current and MLD monthly climatology (1981-2010). | gr | 1981-01-01T00:00:00Z | 2010-12-31T00:00:00Z | 13 variablescell_volume mask mlotst cell_area dx dy cell_thickness thetao vgo so time_bnds ugo zo |
| armor3d/armor3d_global_my_1991_2020_monthly_climatology | Multi Observation Global Ocean 3D Temperature Salinity Height Geostrophic Current and MLD monthly climatology (1991-2020). | gr | 1991-01-01T00:00:00Z | 2020-12-31T00:00:00Z | 13 variablescell_thickness dx cell_volume cell_area mask mlotst dy so ugo zo thetao vgo time_bnds |
| hadisst/hadisst_v1.1_monthly | Hadley Centre Sea Ice and Sea Surface Temperature (HadISST) monthly timeseries. | gr | 1870-01-16T00:00:00Z | 2026-05-01T00:00:00Z | 9 variablescell_area dx dy siarea_SH siarea_NH mask siconc tos time_bnds |
| ostia/ostia_rep_na_1991_2020_daily_climatology | OSTIA Reprocessed North Atlantic Daily Climatology (1991-2020) | gr | 1991-01-01T00:00:00Z | 2020-12-31T00:00:00Z | 10 variablescell_area dx time_bnds tos_mean tos_mean_ma tos_p10 dy tos_p10_ma tos_p90 tos_p90_ma |
| ostia/ostia_rep_na_1996_2025_daily_climatology | OSTIA Reprocessed North Atlantic Daily Climatology (1996-2025) | gr | 1996-01-01T00:00:00Z | 2025-12-31T00:00:00Z | 10 variablescell_area tos_mean dx tos_mean_ma time_bnds dy tos_p90 tos_p10_ma tos_p10 tos_p90_ma |
| ostia/ostia_rep_na_daily_timeseries | OSTIA Reprocessed North Atlantic Daily Timeseries | gr | 1981-10-01T00:00:00Z | 2025-12-18T00:00:00Z | 7 variablescell_area mask dy dx siconc tos tos_error |
| ostia/ostia_nrt_na_daily_timeseries | OSTIA Near-Real-Time North Atlantic Daily Timeseries | gr | 2025-01-01T00:00:00Z | 2026-06-28T00:00:00Z | 7 variablescell_area mask dx tos dy siconc tos_error |
| ostia/ostia_rep_na_daily_spatial | OSTIA Reprocessed North Atlantic Daily Timeseries | gr | 1981-10-01T00:00:00Z | 2025-12-18T00:00:00Z | 7 variablescell_area dx dy mask tos siconc tos_error |
| ostia/ostia_nrt_na_daily_spatial | OSTIA Near-Real-Time North Atlantic Daily Timeseries | gr | 2025-01-01T00:00:00Z | 2026-06-28T00:00:00Z | 7 variablescell_area tos_error mask siconc tos dy dx |
- Now that we have performed a
searchoperation on our catalog, we can also use theavailable_itemsproperty to return the names (IDs) of the available STAC Items resulting from our search.
In [4]:
Copied!
catalog.available_items
catalog.available_items
Out[4]:
['nsidc/nsidc_sea_ice_index_v4_antarctic_monthly', 'nsidc/nsidc_sea_ice_index_v4_arctic_monthly', 'woa23/woa23_1971_2000_annual_climatology', 'woa23/woa23_1971_2000_monthly_climatology', 'woa23/woa23_1981_2010_annual_climatology', 'woa23/woa23_1981_2010_monthly_climatology', 'woa23/woa23_1991_2020_annual_climatology', 'woa23/woa23_1991_2020_monthly_climatology', 'oisst/oisst_v2.1_monthly', 'oisst/oisst_v2.1_1991_2020_monthly_climatology', 'en4.2.2/en4.2.2_analysis_g10_monthly', 'en4.2.2/en4.2.2_analysis_g10_1971_2000_monthly_climatology', 'en4.2.2/en4.2.2_analysis_g10_1981_2010_monthly_climatology', 'en4.2.2/en4.2.2_analysis_g10_1991_2020_monthly_climatology', 'armor3d/armor3d_global_my_monthly', 'armor3d/armor3d_global_my_1971_2000_monthly_climatology', 'armor3d/armor3d_global_my_1981_2010_monthly_climatology', 'armor3d/armor3d_global_my_1991_2020_monthly_climatology', 'hadisst/hadisst_v1.1_monthly', 'ostia/ostia_rep_na_1991_2020_daily_climatology', 'ostia/ostia_rep_na_1996_2025_daily_climatology', 'ostia/ostia_rep_na_daily_timeseries', 'ostia/ostia_nrt_na_daily_timeseries', 'ostia/ostia_rep_na_daily_spatial', 'ostia/ostia_nrt_na_daily_spatial']
- To view a STAC Item in detail, we can pass the Item ID to the
.item_summary()method.
In [5]:
Copied!
catalog.item_summary(id='en4.2.2/en4.2.2_analysis_g10_monthly')
catalog.item_summary(id='en4.2.2/en4.2.2_analysis_g10_monthly')
Out[5]:
en4.2.2/en4.2.2_analysis_g10_monthly en4.2.2
Platform gr
Start 1950-01-01T00:00:00Z
End 2026-03-12T00:00:00Z
BBox (-180.00, 90.00, -90.00, 180.00)
| Title | Description |
|---|---|
| EN.4.2.2 ocean temperature and salinity monthly timeseries. | EN.4.2.2 quality controlled ocean temperature and salinity monthly timeseries from objective analyses with uncertainty estimates using Gouretski and Reseghetti (2010) corrections. |
Access
catalog.open_dataset(id='en4.2.2/en4.2.2_analysis_g10_monthly') catalog.open_repo(id='en4.2.2/en4.2.2_analysis_g10_monthly') Properties
| Property | Value |
|---|---|
| dataset_type | observation |
| product_type | timeseries |
| product_version | 1.0 |
| institution | Met Office, UK |
| citation | Good, S. A., Martin, M. J., and Rayner, N. A., 2013. EN4: quality controlled ocean temperature and salinity profiles and monthly objective analyses with uncertainty estimates, Journal of Geophysical Research: Oceans, 118, 6704-6716, doi:10.1002/2013JC009067. |
| acknowledgement | None |
| license | EN.4.2.2 data were obtained from https://www.metoffice.gov.uk/hadobs/en4/ and are © Crown Copyright, Met Office, [2026], provided under a Non-Commercial Government Licence http://www.nationalarchives.gov.uk/doc/non-commercial-government-licence/version/2/. |
| doi | None |
| horizontal_grid_type | regular rectilinear |
| horizontal_grid_resolution | 1 degree |
| vertical_grid_type | z |
| vertical_grid_coordinate | depth |
| vertical_grid_levels | 42 |
| dimensions | 5 itemslatitude longitude time depth bnds |
| variables | 14 itemscell_area mask depth_bnds so so_uncertainty dx thetao thetao_obs_weights thetao_uncertainty cell_thickness so_obs_weights cell_volume time_bnds dy |
| variable_standard_names | 14 itemscell_area sea_binary_mask depth_bnds sea_water_salinity so_uncertainty cell_x_length sea_water_potential_temperature thetao_obs_weights thetao_uncertainty cell_thickness so_obs_weights cell_volume time_bnds cell_y_length |
| aggregation | mean |
| aggregation_frequency | monthly |
| status | ongoing |
| update_frequency | quarterly |
| latest_data_update | 2026-06-29T11:02:01.115314 |
Assets
| Key | Media Type | Endpoint | Bucket | Prefix |
|---|---|---|---|---|
| en4.2.2_analysis_g10_monthly | application/vnd.zarr+icechunk | https://noc-msm-o.s3-ext.jc.rl.ac.uk | en4.2.2 | en4.2.2_analysis_g10_monthly |
- Next, let's open a subset (2000-2019) of the monthly-mean EN4.2.2 data as an
xarray.Datasetby using the.open_dataset()method and specifying start and end date strings.
In [6]:
Copied!
ds = catalog.open_dataset(id="en4.2.2/en4.2.2_analysis_g10_monthly",
start_datetime='2000-01',
end_datetime='2019-12',
)
ds
ds = catalog.open_dataset(id="en4.2.2/en4.2.2_analysis_g10_monthly",
start_datetime='2000-01',
end_datetime='2019-12',
)
ds
Out[6]:
<xarray.Dataset> Size: 25GB
Dimensions: (latitude: 173, longitude: 360, depth: 42, time: 240,
bnds: 2)
Coordinates:
* latitude (latitude) float32 692B -83.0 -82.0 -81.0 ... 88.0 89.0
* longitude (longitude) float32 1kB -180.0 -179.0 ... 178.0 179.0
* depth (depth) float32 168B 5.022 15.08 ... 5.051e+03 5.35e+03
* time (time) datetime64[ns] 2kB 2000-01-16T12:00:00 ... 201...
Dimensions without coordinates: bnds
Data variables: (12/14)
cell_area (latitude, longitude) float32 249kB dask.array<chunksize=(173, 360), meta=np.ndarray>
cell_volume (depth, latitude, longitude) float32 10MB dask.array<chunksize=(20, 173, 360), meta=np.ndarray>
cell_thickness (depth) float32 168B dask.array<chunksize=(20,), meta=np.ndarray>
depth_bnds (time, depth, bnds) float32 81kB dask.array<chunksize=(1, 20, 2), meta=np.ndarray>
dy (latitude, longitude) float32 249kB dask.array<chunksize=(173, 360), meta=np.ndarray>
dx (latitude, longitude) float32 249kB dask.array<chunksize=(173, 360), meta=np.ndarray>
... ...
so_obs_weights (time, depth, latitude, longitude) float32 3GB dask.array<chunksize=(1, 20, 173, 360), meta=np.ndarray>
thetao_obs_weights (time, depth, latitude, longitude) float32 3GB dask.array<chunksize=(1, 20, 173, 360), meta=np.ndarray>
thetao (time, depth, latitude, longitude) float64 5GB dask.array<chunksize=(1, 20, 173, 360), meta=np.ndarray>
so (time, depth, latitude, longitude) float64 5GB dask.array<chunksize=(1, 20, 173, 360), meta=np.ndarray>
thetao_uncertainty (time, depth, latitude, longitude) float64 5GB dask.array<chunksize=(1, 20, 173, 360), meta=np.ndarray>
time_bnds (time, bnds) datetime64[ns] 4kB dask.array<chunksize=(1, 2), meta=np.ndarray>
Attributes: (12/24)
Conventions: CF-1.0
title: EN.4.2.2 ocean temperature and salinity mont...
description: EN.4.2.2 quality controlled ocean temperatur...
source: Numerical models: Objective Analysis. In-sit...
dataset_type: observation
product_type: timeseries
... ...
vertical_grid_levels: 42
aggregation: mean
aggregation_frequency: monthly
status: ongoing
update_frequency: quarterly
bbox: [-180.0, 180.0, -90.0, 90.0]- Finally, let's create a plot of the time-mean (2000-2019) sea water potential temperature at 300 m:
Pre-Calculated Climatologies¶
So far, we have seen how to access time series of ocean observations, including sea water temperature, salininity etc.
But often when evaluating the mean-state of ocean models, we would prefer to verify simulated seawater properties against long-term observational climatologies.
Let's next search the
OceanDataCatalogfor any Items which are defined byproduct_type = "climatology":
In [8]:
Copied!
catalog.search(collection="en4.2.2", product_type='climatology')
catalog.search(collection="en4.2.2", product_type='climatology')
Out[8]:
Search Results 3 Items found en4.2.2
| Item ID | Title | Platform | Start Date | End Date | Variables |
|---|---|---|---|---|---|
| en4.2.2/en4.2.2_analysis_g10_1971_2000_monthly_climatology | EN.4.2.2 ocean temperature and salinity monthly climatology (1971-2000). | gr | 1971-01-01T00:00:00Z | 2000-12-31T00:00:00Z | 14 variablesdepth_bnds dy cell_thickness mask dx cell_area cell_volume so time_bnds so_uncertainty thetao_obs_weights thetao_uncertainty so_obs_weights thetao |
| en4.2.2/en4.2.2_analysis_g10_1981_2010_monthly_climatology | EN.4.2.2 ocean temperature and salinity monthly climatology (1981-2010). | gr | 1981-01-01T00:00:00Z | 2010-12-31T00:00:00Z | 14 variablescell_area cell_volume cell_thickness depth_bnds so so_uncertainty mask thetao_obs_weights so_obs_weights dy time_bnds thetao_uncertainty dx thetao |
| en4.2.2/en4.2.2_analysis_g10_1991_2020_monthly_climatology | EN.4.2.2 ocean temperature and salinity monthly climatology (1991-2020). | gr | 1991-01-01T00:00:00Z | 2020-12-31T00:00:00Z | 14 variablescell_area mask cell_thickness dx cell_volume dy depth_bnds so_obs_weights so thetao thetao_obs_weights time_bnds so_uncertainty thetao_uncertainty |
We can see from the list of search Items that three EN4.2.2 30-year climatologies are available following the standard climate-normal definitions.
Next, let's open the
en4.2.2_analysis_g10_1991_2020_monthly_climatologydataset and explore the contents.
In [9]:
Copied!
ds_climatology = catalog.open_dataset(id="en4.2.2/en4.2.2_analysis_g10_1991_2020_monthly_climatology")
ds_climatology
ds_climatology = catalog.open_dataset(id="en4.2.2/en4.2.2_analysis_g10_1991_2020_monthly_climatology")
ds_climatology
Out[9]:
<xarray.Dataset> Size: 1GB
Dimensions: (latitude: 173, longitude: 360, month: 12, depth: 42,
bnds: 2)
Coordinates:
* latitude (latitude) float32 692B -83.0 -82.0 -81.0 ... 88.0 89.0
* longitude (longitude) float32 1kB -180.0 -179.0 ... 178.0 179.0
* month (month) int64 96B 1 2 3 4 5 6 7 8 9 10 11 12
* depth (depth) float32 168B 5.022 15.08 ... 5.051e+03 5.35e+03
time datetime64[ns] 8B ...
Dimensions without coordinates: bnds
Data variables: (12/14)
cell_area (latitude, longitude) float32 249kB dask.array<chunksize=(173, 360), meta=np.ndarray>
depth_bnds (month, depth, bnds) float32 4kB dask.array<chunksize=(1, 20, 2), meta=np.ndarray>
dx (latitude, longitude) float32 249kB dask.array<chunksize=(173, 360), meta=np.ndarray>
cell_volume (depth, latitude, longitude) float32 10MB dask.array<chunksize=(20, 173, 360), meta=np.ndarray>
dy (latitude, longitude) float32 249kB dask.array<chunksize=(173, 360), meta=np.ndarray>
mask (latitude, longitude) int64 498kB dask.array<chunksize=(173, 360), meta=np.ndarray>
... ...
thetao_obs_weights (month, depth, latitude, longitude) float32 126MB dask.array<chunksize=(1, 20, 173, 360), meta=np.ndarray>
so_obs_weights (month, depth, latitude, longitude) float32 126MB dask.array<chunksize=(1, 20, 173, 360), meta=np.ndarray>
so (month, depth, latitude, longitude) float64 251MB dask.array<chunksize=(1, 20, 173, 360), meta=np.ndarray>
so_uncertainty (month, depth, latitude, longitude) float64 251MB dask.array<chunksize=(1, 20, 173, 360), meta=np.ndarray>
thetao_uncertainty (month, depth, latitude, longitude) float64 251MB dask.array<chunksize=(1, 20, 173, 360), meta=np.ndarray>
time_bnds (month, bnds) datetime64[ns] 192B dask.array<chunksize=(1, 2), meta=np.ndarray>
Attributes: (12/24)
Conventions: CF-1.0
title: EN.4.2.2 ocean temperature and salinity mont...
description: EN.4.2.2: quality controlled ocean temperatu...
source: Numerical models: Objective Analysis. In-sit...
dataset_type: observation
product_type: climatology
... ...
vertical_grid_levels: 42
aggregation: mean
aggregation_frequency: monthly
status: completed
update_frequency: None
bbox: [-180.0, 180.0, -90.0, 90.0]