ecmwf-projects / c3s2-eqc-quality-assessment

https://ecmwf-projects.github.io/c3s2-eqc-quality-assessment/
Apache License 2.0
3 stars 0 forks source link

Using Sea Surface Temperature to monitor ocean surface warming #68

Closed dcianicnr83 closed 1 month ago

dcianicnr83 commented 6 months ago

Data Type

Satellite ECVs - Ocean

Assessment Category

Trend Assessment

Dataset Name

satellite-sea-surface-temperature

Question Number

02

Workflow ID

eqctier3-9a17ec54-2b72-4d3e-a061-d8a98013d917

Zipped Notebook

satellite_esacci_gmpe_trends.ipynb.zip

Environment

``` name: wp5 channels: - conda-forge dependencies: - _libgcc_mutex=0.1=conda_forge - _openmp_mutex=4.5=2_gnu - affine=2.4.0=pyhd8ed1ab_0 - aiohttp=3.9.5=py311h459d7ec_0 - aiosignal=1.3.1=pyhd8ed1ab_0 - alsa-lib=1.2.11=hd590300_1 - annotated-types=0.6.0=pyhd8ed1ab_0 - ansicolors=1.1.8=pyhd8ed1ab_0 - antlr-python-runtime=4.11.1=pyhd8ed1ab_0 - anyio=4.3.0=pyhd8ed1ab_0 - argon2-cffi=23.1.0=pyhd8ed1ab_0 - argon2-cffi-bindings=21.2.0=py311h459d7ec_4 - arrow=1.3.0=pyhd8ed1ab_0 - asciitree=0.3.3=py_2 - asttokens=2.4.1=pyhd8ed1ab_0 - async-lru=2.0.4=pyhd8ed1ab_0 - attr=2.5.1=h166bdaf_1 - attrs=23.2.0=pyh71513ae_0 - aws-c-auth=0.7.17=he0b1f16_2 - aws-c-cal=0.6.11=heb1d5e4_0 - aws-c-common=0.9.15=hd590300_0 - aws-c-compression=0.2.18=hce8ee76_3 - aws-c-event-stream=0.4.2=h01f5eca_8 - aws-c-http=0.8.1=hdb68c23_10 - aws-c-io=0.14.7=hbfbeace_6 - aws-c-mqtt=0.10.3=h50844eb_4 - aws-c-s3=0.5.7=hb7bd14b_1 - aws-c-sdkutils=0.1.15=hce8ee76_3 - aws-checksums=0.1.18=hce8ee76_3 - aws-crt-cpp=0.26.6=hf567797_4 - aws-sdk-cpp=1.11.267=hbf3e495_6 - azure-core-cpp=1.11.1=h91d86a7_1 - azure-storage-blobs-cpp=12.10.0=h00ab1b0_1 - azure-storage-common-cpp=12.5.0=h94269e2_4 - babel=2.14.0=pyhd8ed1ab_0 - beautifulsoup4=4.12.3=pyha770c72_0 - bleach=6.1.0=pyhd8ed1ab_0 - blosc=1.21.5=hc2324a3_1 - bokeh=3.4.1=pyhd8ed1ab_0 - bottleneck=1.3.8=py311h1f0f07a_0 - branca=0.7.2=pyhd8ed1ab_0 - brotli=1.1.0=hd590300_1 - brotli-bin=1.1.0=hd590300_1 - brotli-python=1.1.0=py311hb755f60_1 - bzip2=1.0.8=hd590300_5 - c-ares=1.28.1=hd590300_0 - ca-certificates=2024.2.2=hbcca054_0 - cached-property=1.5.2=hd8ed1ab_1 - cached_property=1.5.2=pyha770c72_1 - cads-api-client=0.10.0=pyhd8ed1ab_0 - cairo=1.18.0=h3faef2a_0 - cartopy=0.23.0=py311h320fe9a_0 - cdsapi=0.7.0=pyhd8ed1ab_0 - certifi=2024.2.2=pyhd8ed1ab_0 - cf-units=3.2.0=py311h1f0f07a_4 - cf_xarray=0.9.0=pyhd8ed1ab_0 - cffi=1.16.0=py311hb3a22ac_0 - cfgrib=0.9.11.0=pyhd8ed1ab_0 - cfitsio=4.4.0=hbdc6101_1 - cftime=1.6.3=py311h1f0f07a_0 - charset-normalizer=3.3.2=pyhd8ed1ab_0 - click=8.1.7=unix_pyh707e725_0 - click-plugins=1.1.1=py_0 - cligj=0.7.2=pyhd8ed1ab_1 - cloudpickle=3.0.0=pyhd8ed1ab_0 - cmocean=4.0.3=pyhd8ed1ab_0 - colorama=0.4.6=pyhd8ed1ab_0 - colorspacious=1.1.2=pyh24bf2e0_0 - comm=0.2.2=pyhd8ed1ab_0 - contourpy=1.2.1=py311h9547e67_0 - cycler=0.12.1=pyhd8ed1ab_0 - cytoolz=0.12.3=py311h459d7ec_0 - dask=2024.4.2=pyhd8ed1ab_0 - dask-core=2024.4.2=pyhd8ed1ab_0 - dask-expr=1.0.13=pyhd8ed1ab_0 - dbus=1.13.6=h5008d03_3 - debugpy=1.8.1=py311hb755f60_0 - decorator=5.1.1=pyhd8ed1ab_0 - defusedxml=0.7.1=pyhd8ed1ab_0 - distributed=2024.4.2=pyhd8ed1ab_0 - eccodes=2.35.0=he84ddb8_0 - entrypoints=0.4=pyhd8ed1ab_0 - esmf=8.6.1=nompi_h7b237b1_0 - esmpy=8.6.1=pyhc1e730c_0 - exceptiongroup=1.2.0=pyhd8ed1ab_2 - executing=2.0.1=pyhd8ed1ab_0 - expat=2.6.2=h59595ed_0 - fasteners=0.17.3=pyhd8ed1ab_0 - findlibs=0.0.5=pyhd8ed1ab_0 - fiona=1.9.6=py311hf8e0aa6_0 - flox=0.9.6=pyhd8ed1ab_0 - fmt=10.2.1=h00ab1b0_0 - folium=0.16.0=pyhd8ed1ab_0 - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - font-ttf-inconsolata=3.000=h77eed37_0 - font-ttf-source-code-pro=2.038=h77eed37_0 - font-ttf-ubuntu=0.83=h77eed37_1 - fontconfig=2.14.2=h14ed4e7_0 - fonts-conda-ecosystem=1=0 - fonts-conda-forge=1=0 - fonttools=4.51.0=py311h459d7ec_0 - fqdn=1.5.1=pyhd8ed1ab_0 - freeglut=3.2.2=hac7e632_2 - freetype=2.12.1=h267a509_2 - freexl=2.0.0=h743c826_0 - frozenlist=1.4.1=py311h459d7ec_0 - fsspec=2024.3.1=pyhca7485f_0 - gdal=3.8.4=py311h8be719e_5 - geopandas=0.14.4=pyhd8ed1ab_0 - geopandas-base=0.14.4=pyha770c72_0 - geos=3.12.1=h59595ed_0 - geotiff=1.7.1=h6b2125f_15 - gettext=0.22.5=h59595ed_2 - gettext-tools=0.22.5=h59595ed_2 - gflags=2.2.2=he1b5a44_1004 - giflib=5.2.2=hd590300_0 - glib=2.80.0=hf2295e7_6 - glib-tools=2.80.0=hde27a5a_6 - glog=0.7.0=hed5481d_0 - graphite2=1.3.13=h59595ed_1003 - greenlet=3.0.3=py311hb755f60_0 - gst-plugins-base=1.24.1=hfa15dee_1 - gstreamer=1.24.1=h98fc4e7_1 - h11=0.14.0=pyhd8ed1ab_0 - h2=4.1.0=pyhd8ed1ab_0 - harfbuzz=8.4.0=h3d44ed6_0 - hdf4=4.2.15=h2a13503_7 - hdf5=1.14.3=nompi_h4f84152_100 - hpack=4.0.0=pyh9f0ad1d_0 - httpcore=1.0.5=pyhd8ed1ab_0 - httpx=0.27.0=pyhd8ed1ab_0 - hyperframe=6.0.1=pyhd8ed1ab_0 - icu=73.2=h59595ed_0 - idna=3.7=pyhd8ed1ab_0 - importlib-metadata=7.1.0=pyha770c72_0 - importlib_metadata=7.1.0=hd8ed1ab_0 - importlib_resources=6.4.0=pyhd8ed1ab_0 - ipykernel=6.29.3=pyhd33586a_0 - ipython=8.22.2=pyh707e725_0 - isoduration=20.11.0=pyhd8ed1ab_0 - jasper=4.2.4=h536e39c_0 - jedi=0.19.1=pyhd8ed1ab_0 - jinja2=3.1.3=pyhd8ed1ab_0 - joblib=1.4.0=pyhd8ed1ab_0 - json-c=0.17=h7ab15ed_0 - json5=0.9.25=pyhd8ed1ab_0 - jsonpointer=2.4=py311h38be061_3 - jsonschema=4.21.1=pyhd8ed1ab_0 - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0 - jsonschema-with-format-nongpl=4.21.1=pyhd8ed1ab_0 - jupyter-lsp=2.2.5=pyhd8ed1ab_0 - jupyter-server-proxy=4.1.2=pyhd8ed1ab_0 - jupyter_client=8.6.1=pyhd8ed1ab_0 - jupyter_core=5.7.2=py311h38be061_0 - jupyter_events=0.10.0=pyhd8ed1ab_0 - jupyter_server=2.14.0=pyhd8ed1ab_0 - jupyter_server_terminals=0.5.3=pyhd8ed1ab_0 - jupyterlab=4.1.8=pyhd8ed1ab_0 - jupyterlab_pygments=0.3.0=pyhd8ed1ab_1 - jupyterlab_server=2.27.1=pyhd8ed1ab_0 - kealib=1.5.3=h2f55d51_0 - keyutils=1.6.1=h166bdaf_0 - kiwisolver=1.4.5=py311h9547e67_1 - krb5=1.21.2=h659d440_0 - lame=3.100=h166bdaf_1003 - lcms2=2.16=hb7c19ff_0 - ld_impl_linux-64=2.40=h55db66e_0 - lerc=4.0.0=h27087fc_0 - libabseil=20240116.1=cxx17_h59595ed_2 - libaec=1.1.3=h59595ed_0 - libarchive=3.7.2=h2aa1ff5_1 - libarrow=15.0.2=h07fc4ce_5_cpu - libarrow-acero=15.0.2=hbabe93e_5_cpu - libarrow-dataset=15.0.2=hbabe93e_5_cpu - libarrow-flight=15.0.2=hc4f8a93_5_cpu - libarrow-flight-sql=15.0.2=he4f5ca8_5_cpu - libarrow-gandiva=15.0.2=hc1954e9_5_cpu - libarrow-substrait=15.0.2=he4f5ca8_5_cpu - libasprintf=0.22.5=h661eb56_2 - libasprintf-devel=0.22.5=h661eb56_2 - libblas=3.9.0=22_linux64_openblas - libboost-headers=1.84.0=ha770c72_2 - libbrotlicommon=1.1.0=hd590300_1 - libbrotlidec=1.1.0=hd590300_1 - libbrotlienc=1.1.0=hd590300_1 - libcap=2.69=h0f662aa_0 - libcblas=3.9.0=22_linux64_openblas - libclang-cpp15=15.0.7=default_h127d8a8_5 - libclang13=18.1.3=default_h5d6823c_0 - libcrc32c=1.1.2=h9c3ff4c_0 - libcups=2.3.3=h4637d8d_4 - libcurl=8.7.1=hca28451_0 - libdeflate=1.20=hd590300_0 - libedit=3.1.20191231=he28a2e2_2 - libev=4.33=hd590300_2 - libevent=2.1.12=hf998b51_1 - libexpat=2.6.2=h59595ed_0 - libffi=3.4.2=h7f98852_5 - libflac=1.4.3=h59595ed_0 - libgcc-ng=13.2.0=hc881cc4_6 - libgcrypt=1.10.3=hd590300_0 - libgdal=3.8.4=h7c88fdf_5 - libgettextpo=0.22.5=h59595ed_2 - libgettextpo-devel=0.22.5=h59595ed_2 - libgfortran-ng=13.2.0=h69a702a_6 - libgfortran5=13.2.0=h43f5ff8_6 - libglib=2.80.0=hf2295e7_6 - libglu=9.0.0=hac7e632_1003 - libgomp=13.2.0=hc881cc4_6 - libgoogle-cloud=2.23.0=h9be4e54_1 - libgoogle-cloud-storage=2.23.0=hc7a4891_1 - libgpg-error=1.49=h4f305b6_0 - libgrpc=1.62.2=h15f2491_0 - libiconv=1.17=hd590300_2 - libjpeg-turbo=3.0.0=hd590300_1 - libkml=1.3.0=h01aab08_1018 - liblapack=3.9.0=22_linux64_openblas - libllvm14=14.0.6=hcd5def8_4 - libllvm15=15.0.7=hb3ce162_4 - libllvm16=16.0.6=hb3ce162_3 - libllvm18=18.1.3=h2448989_0 - libnetcdf=4.9.2=nompi_h9612171_113 - libnghttp2=1.58.0=h47da74e_1 - libnl=3.9.0=hd590300_0 - libnsl=2.0.1=hd590300_0 - libogg=1.3.4=h7f98852_1 - libopenblas=0.3.27=pthreads_h413a1c8_0 - libopus=1.3.1=h7f98852_1 - libparquet=15.0.2=hacf5a1f_5_cpu - libpng=1.6.43=h2797004_0 - libpq=16.2=h33b98f1_1 - libprotobuf=4.25.3=h08a7969_0 - libre2-11=2023.09.01=h5a48ba9_2 - librttopo=1.1.0=h8917695_15 - libsndfile=1.2.2=hc60ed4a_1 - libsodium=1.0.18=h36c2ea0_1 - libspatialindex=1.9.3=h9c3ff4c_4 - libspatialite=5.1.0=h7bd4643_4 - libsqlite=3.45.3=h2797004_0 - libssh2=1.11.0=h0841786_0 - libstdcxx-ng=13.2.0=h95c4c6d_6 - libsystemd0=255=h3516f8a_1 - libthrift=0.19.0=hb90f79a_1 - libtiff=4.6.0=h1dd3fc0_3 - libudunits2=2.2.28=h40f5838_3 - libutf8proc=2.8.0=h166bdaf_0 - libuuid=2.38.1=h0b41bf4_0 - libvorbis=1.3.7=h9c3ff4c_0 - libwebp-base=1.4.0=hd590300_0 - libxcb=1.15=h0b41bf4_0 - libxcrypt=4.4.36=hd590300_1 - libxkbcommon=1.7.0=h662e7e4_0 - libxml2=2.12.6=h232c23b_2 - libzip=1.10.1=h2629f0a_3 - libzlib=1.2.13=hd590300_5 - llvmlite=0.42.0=py311ha6695c7_1 - locket=1.0.0=pyhd8ed1ab_0 - lz4=4.3.3=py311h38e4bf4_0 - lz4-c=1.9.4=hcb278e6_0 - lzo=2.10=hd590300_1001 - mapclassify=2.6.1=pyhd8ed1ab_0 - markdown-it-py=3.0.0=pyhd8ed1ab_0 - markupsafe=2.1.5=py311h459d7ec_0 - matplotlib=3.8.4=py311h38be061_0 - matplotlib-base=3.8.4=py311h54ef318_0 - matplotlib-inline=0.1.7=pyhd8ed1ab_0 - mdurl=0.1.2=pyhd8ed1ab_0 - minizip=4.0.5=h0ab5242_0 - mistune=3.0.2=pyhd8ed1ab_0 - mpg123=1.32.6=h59595ed_0 - msgpack-python=1.0.7=py311h9547e67_0 - multidict=6.0.5=py311h459d7ec_0 - multiurl=0.3.1=pyhd8ed1ab_0 - munkres=1.1.4=pyh9f0ad1d_0 - mysql-common=8.3.0=hf1915f5_4 - mysql-libs=8.3.0=hca2cd23_4 - nbclient=0.10.0=pyhd8ed1ab_0 - nbconvert=7.16.3=hd8ed1ab_1 - nbconvert-core=7.16.3=pyhd8ed1ab_1 - nbconvert-pandoc=7.16.3=hd8ed1ab_1 - nbformat=5.10.4=pyhd8ed1ab_0 - nc-time-axis=1.4.1=pyhd8ed1ab_0 - ncurses=6.4.20240210=h59595ed_0 - nest-asyncio=1.6.0=pyhd8ed1ab_0 - netcdf-fortran=4.6.1=nompi_hacb5139_103 - netcdf4=1.6.5=nompi_py311he8ad708_100 - networkx=3.3=pyhd8ed1ab_1 - notebook-shim=0.2.4=pyhd8ed1ab_0 - nspr=4.35=h27087fc_0 - nss=3.98=h1d7d5a4_0 - numba=0.59.1=py311h96b013e_0 - numcodecs=0.12.1=py311hb755f60_0 - numpy=1.26.4=py311h64a7726_0 - numpy_groupies=0.11.1=pyhd8ed1ab_0 - openjpeg=2.5.2=h488ebb8_0 - openssl=3.2.1=hd590300_1 - orc=2.0.0=h17fec99_1 - overrides=7.7.0=pyhd8ed1ab_0 - packaging=24.0=pyhd8ed1ab_0 - pandas=2.2.2=py311h320fe9a_0 - pandoc=3.1.13=ha770c72_0 - pandocfilters=1.5.0=pyhd8ed1ab_0 - papermill=2.6.0=pyhd8ed1ab_0 - parso=0.8.4=pyhd8ed1ab_0 - partd=1.4.1=pyhd8ed1ab_0 - patsy=0.5.6=pyhd8ed1ab_0 - pcre2=10.43=hcad00b1_0 - pexpect=4.9.0=pyhd8ed1ab_0 - pickleshare=0.7.5=py_1003 - pillow=10.3.0=py311h18e6fac_0 - pip=24.0=pyhd8ed1ab_0 - pixman=0.43.2=h59595ed_0 - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1 - platformdirs=4.2.1=pyhd8ed1ab_0 - plotly=5.21.0=pyhd8ed1ab_0 - ply=3.11=pyhd8ed1ab_2 - pooch=1.8.1=pyhd8ed1ab_0 - poppler=24.03.0=h590f24d_0 - poppler-data=0.4.12=hd8ed1ab_0 - postgresql=16.2=h82ecc9d_1 - proj=9.3.1=h1d62c97_0 - prometheus_client=0.20.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.42=pyha770c72_0 - properscoring=0.1=py_0 - psutil=5.9.8=py311h459d7ec_0 - pthread-stubs=0.4=h36c2ea0_1001 - ptyprocess=0.7.0=pyhd3deb0d_0 - pulseaudio-client=17.0=hb77b528_0 - pure_eval=0.2.2=pyhd8ed1ab_0 - pwlf=2.2.1=py311h38be061_3 - pyarrow=15.0.2=py311hd5e4297_5_cpu - pyarrow-hotfix=0.6=pyhd8ed1ab_0 - pycparser=2.22=pyhd8ed1ab_0 - pydantic=2.7.1=pyhd8ed1ab_0 - pydantic-core=2.18.2=py311h5ecf98a_0 - pydantic-settings=2.2.1=pyhd8ed1ab_0 - pydoe=0.3.8=py_1 - pygments=2.17.2=pyhd8ed1ab_0 - pyparsing=3.1.2=pyhd8ed1ab_0 - pyproj=3.6.1=py311hca0b8b9_5 - pyqt=5.15.9=py311hf0fb5b6_5 - pyqt5-sip=12.12.2=py311hb755f60_5 - pyshp=2.3.1=pyhd8ed1ab_0 - pysocks=1.7.1=pyha2e5f31_6 - python=3.11.9=hb806964_0_cpython - python-dateutil=2.9.0=pyhd8ed1ab_0 - python-dotenv=1.0.1=pyhd8ed1ab_0 - python-eccodes=1.7.0=py311h1f0f07a_1 - python-fastjsonschema=2.19.1=pyhd8ed1ab_0 - python-json-logger=2.0.7=pyhd8ed1ab_0 - python-tzdata=2024.1=pyhd8ed1ab_0 - python_abi=3.11=4_cp311 - pytz=2024.1=pyhd8ed1ab_0 - pyyaml=6.0.1=py311h459d7ec_1 - pyzmq=26.0.2=py311h08a0b41_0 - qt-main=5.15.8=hc9dc06e_21 - rasterio=1.3.9=py311ha38370a_2 - rdma-core=51.0=hd3aeb46_0 - re2=2023.09.01=h7f4b329_2 - readline=8.2=h8228510_1 - referencing=0.35.0=pyhd8ed1ab_0 - regionmask=0.12.1=pyhd8ed1ab_0 - requests=2.31.0=pyhd8ed1ab_0 - rfc3339-validator=0.1.4=pyhd8ed1ab_0 - rfc3986-validator=0.1.1=pyh9f0ad1d_0 - rich=13.7.1=pyhd8ed1ab_0 - rioxarray=0.15.5=pyhd8ed1ab_0 - rpds-py=0.18.0=py311h46250e7_0 - rtree=1.2.0=py311h3bb2b0f_0 - s2n=1.4.12=h06160fa_0 - scikit-learn=1.4.2=py311hc009520_0 - scipy=1.13.0=py311h64a7726_0 - seaborn=0.13.2=hd8ed1ab_0 - seaborn-base=0.13.2=pyhd8ed1ab_0 - send2trash=1.8.3=pyh0d859eb_0 - setuptools=69.5.1=pyhd8ed1ab_0 - shapely=2.0.4=py311h2032efe_0 - shellingham=1.5.4=pyhd8ed1ab_0 - simpervisor=1.0.0=pyhd8ed1ab_0 - sip=6.7.12=py311hb755f60_0 - six=1.16.0=pyh6c4a22f_0 - snappy=1.2.0=hdb0a2a9_1 - sniffio=1.3.1=pyhd8ed1ab_0 - snuggs=1.4.7=py_0 - sortedcontainers=2.4.0=pyhd8ed1ab_0 - soupsieve=2.5=pyhd8ed1ab_1 - sparse=0.15.1=pyhd8ed1ab_1 - spdlog=1.13.0=hd2e6256_0 - sqlalchemy=2.0.29=py311h459d7ec_0 - sqlite=3.45.3=h2c6b66d_0 - stack_data=0.6.2=pyhd8ed1ab_0 - statsmodels=0.14.1=py311h1f0f07a_0 - structlog=24.1.0=pyhd8ed1ab_0 - tblib=3.0.0=pyhd8ed1ab_0 - tenacity=8.2.3=pyhd8ed1ab_0 - terminado=0.18.1=pyh0d859eb_0 - threadpoolctl=3.4.0=pyhc1e730c_0 - tiledb=2.21.2=h8cb5cbd_3 - tinycss2=1.3.0=pyhd8ed1ab_0 - tk=8.6.13=noxft_h4845f30_101 - toml=0.10.2=pyhd8ed1ab_0 - tomli=2.0.1=pyhd8ed1ab_0 - toolz=0.12.1=pyhd8ed1ab_0 - tornado=6.4=py311h459d7ec_0 - tqdm=4.66.2=pyhd8ed1ab_0 - traitlets=5.14.3=pyhd8ed1ab_0 - typer=0.12.3=pyhd8ed1ab_0 - typer-slim=0.12.3=pyhd8ed1ab_0 - typer-slim-standard=0.12.3=hd8ed1ab_0 - types-python-dateutil=2.9.0.20240316=pyhd8ed1ab_0 - typing-extensions=4.11.0=hd8ed1ab_0 - typing_extensions=4.11.0=pyha770c72_0 - typing_utils=0.1.0=pyhd8ed1ab_0 - tzcode=2024a=h3f72095_0 - tzdata=2024a=h0c530f3_0 - ucx=1.15.0=ha691c75_8 - udunits2=2.2.28=h40f5838_3 - uri-template=1.3.0=pyhd8ed1ab_0 - uriparser=0.9.7=h59595ed_1 - urllib3=2.2.1=pyhd8ed1ab_0 - wcwidth=0.2.13=pyhd8ed1ab_0 - webcolors=1.13=pyhd8ed1ab_0 - webencodings=0.5.1=pyhd8ed1ab_2 - websocket-client=1.8.0=pyhd8ed1ab_0 - wheel=0.43.0=pyhd8ed1ab_1 - xarray=2024.3.0=pyhd8ed1ab_0 - xarraymannkendall=1.4.5=pyhd8ed1ab_0 - xcb-util=0.4.0=hd590300_1 - xcb-util-image=0.4.0=h8ee46fc_1 - xcb-util-keysyms=0.4.0=h8ee46fc_1 - xcb-util-renderutil=0.3.9=hd590300_1 - xcb-util-wm=0.4.1=h8ee46fc_1 - xerces-c=3.2.5=hac6953d_0 - xesmf=0.8.5=pyhd8ed1ab_0 - xhistogram=0.3.2=pyhd8ed1ab_0 - xkeyboard-config=2.41=hd590300_0 - xorg-fixesproto=5.0=h7f98852_1002 - xorg-inputproto=2.3.2=h7f98852_1002 - xorg-kbproto=1.0.7=h7f98852_1002 - xorg-libice=1.1.1=hd590300_0 - xorg-libsm=1.2.4=h7391055_0 - xorg-libx11=1.8.9=h8ee46fc_0 - xorg-libxau=1.0.11=hd590300_0 - xorg-libxdmcp=1.1.3=h7f98852_0 - xorg-libxext=1.3.4=h0b41bf4_2 - xorg-libxfixes=5.0.3=h7f98852_1004 - xorg-libxi=1.7.10=h7f98852_0 - xorg-libxrender=0.9.11=hd590300_0 - xorg-renderproto=0.11.1=h7f98852_1002 - xorg-xextproto=7.3.0=h0b41bf4_1003 - xorg-xf86vidmodeproto=2.3.1=h7f98852_1002 - xorg-xproto=7.0.31=h7f98852_1007 - xskillscore=0.0.26=pyhd8ed1ab_0 - xyzservices=2024.4.0=pyhd8ed1ab_0 - xz=5.2.6=h166bdaf_0 - yaml=0.2.5=h7f98852_2 - yarl=1.9.4=py311h459d7ec_0 - zarr=2.17.2=pyhd8ed1ab_0 - zeromq=4.3.5=h59595ed_1 - zict=3.0.0=pyhd8ed1ab_0 - zipp=3.17.0=pyhd8ed1ab_0 - zlib=1.2.13=hd590300_5 - zstd=1.5.5=hfc55251_0 - pip: - c3s-eqc-automatic-quality-control==0.1.2.dev109+gacaba21 - cacholote==0.10.0 - cads-toolbox==0.0.2b0 - cgul==0.0.4 - coucal==0.0.1b3 - emohawk==0.0.4b0 - kaleido==0.2.1 - pymannkendall==1.4.3 prefix: /data/common/miniforge3/envs/wp5 ```

Anything else we need to know?

No response

malmans2 commented 6 months ago

Here is the permalink: https://github.com/ecmwf-projects/c3s2-eqc-quality-assessment/blob/abde6d129db83066a4508630892ac251e5311697/Satellite_ECVs/Ocean_ECVs/satellite_satellite-sea-surface-temperature_trend-assessment_q02.ipynb

Please make sure that the notebook name is correct.

If you need to make modifications (e.g., to address the reviewer's comment), please share here the new version of the notebook and I will provide a new permalink.

Let me know when the notebook is accepted, I will merge the PR into main.

malmans2 commented 5 months ago

Hi @dcianicnr83,

I'm caching this notebook on the new VM, but it looks like there's a bug. Specifically, I think one of the cached function has been modified without invalidating the cache. This is the function in the template I've provided and cached on the old VM:

@cacholote.cacheable
def compute_mann_kendall_trend(
    collection_id,
    request,
    chunks,
    year_start,
    year_stop,
    seasonal,
    open_mfdataset_kwargs,
    **mann_kendall_kwargs,
):
    dataarrays = []
    for year in tqdm.tqdm(range(year_start, year_stop + 1), desc="annual"):
        requests = download.update_request_date(
            request, start=f"{year-1}-12", stop=f"{year}-11", stringify_dates=True
        )
        ds = download.download_and_transform(
            collection_id=collection_id,
            requests=requests,
            chunks=chunks,
            transform_chunks=False,
            transform_func=compute_low_resolution,
            transform_func_kwargs={"freq": "Q-DEC" if seasonal else "MS"},
            **open_mfdataset_kwargs,
        )
        dataarrays.append(rechunk(ds["analysed_sst"]))
    da = xr.concat(dataarrays, "time")

    if seasonal:
        ds = da.groupby("time.season").map(_mann_kendall, **mann_kendall_kwargs)
        ds["trend"].attrs["units"] = f"{da.attrs['units']}/year"
    else:
        ds = _mann_kendall(da, **mann_kendall_kwargs)
        ds["trend"].attrs["units"] = f"{da.attrs['units']}/month"
    return rechunk(ds)

And this is the function you have in your notebook:

@cacholote.cacheable
def compute_mann_kendall_trend(
    collection_id,
    request,
    chunks,
    year_start,
    year_stop,
    seasonal,
    open_mfdataset_kwargs,
    **mann_kendall_kwargs,
):
    dataarrays = []
    for year in tqdm.tqdm(range(year_start, year_stop + 1), desc="annual"):
        requests = download.update_request_date(
            request, start=f"{year-1}-12", stop=f"{year}-11", stringify_dates=True
        )
        ds = download.download_and_transform(
            collection_id=collection_id,
            requests=requests,
            chunks=chunks,
            transform_chunks=False,
            transform_func=compute_low_resolution,
            transform_func_kwargs={"freq": "Q-DEC" if seasonal else "MS"},
            **open_mfdataset_kwargs,
        )
        dataarrays.append(rechunk(ds["analysed_sst"]))
    da = xr.concat(dataarrays, "time")

    if seasonal:
        ds = da.groupby("time.season").map(_mann_kendall, **mann_kendall_kwargs)
        ds["trend"].attrs["units"] = f"{da.attrs['units']}/year"
    else:
        ds = da.groupby("time.year").map(_mann_kendall, **mann_kendall_kwargs)
        ds["trend"].attrs["units"] = f"{da.attrs['units']}/year"
    return rechunk(ds)

In theory, the function you wrote should create the dimension "year" when seasonal is None. Because the function has been modified after caching the data, this is not happening on the old VM.

The bug shows up in this line when you make the plots:

    row="season" if "season" in ds.dims else None,

You'd have to use the following if you group by year:

    row="year" if "year" in ds.dims else None,

What is the desired result? If you want to achieve the plots shown in your notebook, then we need to use the version of compute_mann_kendall_trend in the template.

vincenzodetoma commented 5 months ago

Hi @malmans2 @dcianicnr83, we wanted to calculate the trend, when not grouped by seasons, on a yearly basis instead of having monthly data. So I would say we have to use the new function we provided within the notebook, if possible. Thanks!!

malmans2 commented 5 months ago

We can use the new function, no problem. But the first plot is going do be different. Do you want to show column="product" and row="year"?

vincenzodetoma commented 5 months ago

No we want to keep the first plot with the same structure, averaging on the year dimension.

malmans2 commented 5 months ago

OK, understood!

vincenzodetoma commented 5 months ago

Great, thanks @malmans2 👍 :-)

malmans2 commented 5 months ago

Hi there,

I've revised the template and re-cached the data that you need for this notebook. See: https://github.com/bopen/c3s-eqc-toolbox-template/commit/0ac48b2f0c4f9c7f93548df5a090eecde7694706 The frequency changed from Q-DEC to QE-DEC to address a deprecation warning.

This notebook and #69 are now broken on the VM. Could you please align the notebooks with the template, and send me the new notebooks? All you have to do is this:

  1. copy-paste compute_mann_kendall_trend from the template to your notebook
  2. After retrieving cached data, apply a reduction to get rid of the dimension year. For example I did this:
    if not seasonal:
    ds = ds.mean("year", keep_attrs=True)
  3. Run the notebooks to produce the output and re-upload them here.

Thanks!

vincenzodetoma commented 5 months ago

Hi @malmans2, I'm trying to implement what you've adapted and I'm realizing that I may have explained badly what we wanted to achieve in the end - we wanted to carry out the trend on yearly averaged data, which is not the same as doing the yearly-average on the trend calculated on monthly data.. Can we somehow fix? thanks

malmans2 commented 5 months ago

OK, I think I got it, but that's not the code you implemented in the function. Are you OK with a change along these lines?

-        ds = da.groupby("time.year").map(_mann_kendall, **mann_kendall_kwargs)
+        ds = _mann_kendall(da.groupby("time.year").mean(), **mann_kendall_kwargs)
        ds["trend"].attrs["units"] = f"{da.attrs['units']}/year"
vincenzodetoma commented 5 months ago

I'd say yes! Thanks :)

malmans2 commented 5 months ago

OK, I'll do it and let you know when I'm done. It should be much quicker this way - please don't run this function on the VM until I'm done.

vincenzodetoma commented 5 months ago

I already shut down the previous notebook, when you want you can go ahead!

malmans2 commented 5 months ago

All set. Can you try again implementing the latest template? Here is the diff: https://github.com/bopen/c3s-eqc-toolbox-template/commit/697d7cb3e0e29892aea46946eff2ff38e12e8363

vincenzodetoma commented 5 months ago

Ok, we'll implement the new template also in the first use case and return to you :) Thanks, @malmans2 !

dcianicnr83 commented 5 months ago

Hi @malmans2 , we worked with @vincenzodetoma to produce a new version of the notebook with the new template. Please find it in attachment. satellite-sea-surface-temperature_trends.zip

malmans2 commented 5 months ago

Here is the new permalink: https://github.com/ecmwf-projects/c3s2-eqc-quality-assessment/blob/dbbb4ad688657be72db26a37d20e93c17a1900ce/Satellite_ECVs/Ocean_ECVs/satellite_satellite-sea-surface-temperature_trend-assessment_q02.ipynb

vincenzodetoma commented 4 months ago

Hi @malmans2, here it is the notebook with links fixed! Thanks, Vincenzo satellite_satellite-sea-surface-temperature-ensemble-product_trend-assessment_q02_27062024.ipynb.zip

malmans2 commented 4 months ago

Here is the permalink: https://github.com/ecmwf-projects/c3s2-eqc-quality-assessment/blob/82c74424229d6e15d3398de9819919fd08114297/Satellite_ECVs/Ocean_ECVs/satellite_satellite-sea-surface-temperature_trend-assessment_q02.ipynb

vincenzodetoma commented 4 months ago

Hi @malmans2, notebook corrected also here. Thanks! satellite_esacci_gmpe_trends_q2.ipynb.zip

malmans2 commented 4 months ago

Here is the permalink: https://github.com/ecmwf-projects/c3s2-eqc-quality-assessment/blob/33809a9c2ec640b3e30ca53441aec427f163d200/Satellite_ECVs/Ocean_ECVs/satellite_satellite-sea-surface-temperature_trend-assessment_q02.ipynb

malmans2 commented 1 month ago

Closed in favour of #199