{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "You can run this notebook in a [live session](https://binder.pangeo.io/v2/gh/pangeo-data/climpred/main?urlpath=lab/tree/docs/source/examples/subseasonal/monthly-enso-subx-example.ipynb) [binder badge](https://binder.pangeo.io/v2/gh/pangeo-data/climpred/main?urlpath=lab/tree/docs/source/examples/subseasonal/monthly-enso-subx-example.ipynb) or view it [on Github](https://github.com/pangeo-data/climpred/blob/main/docs/source/examples/subseasonal/monthly-enso-subx-example.ipynb)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculate ENSO Skill of NMME model NCEP-CFSv2 as Function of Initial Month vs. Lead Time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### In this example, we demonstrate: \n", "1. How to remotely access data from the North American Multi-model Ensemble (NMME) hindcast database and set it up to be used in `climpred` leveraging `dask`.\n", "2. How to calculate the Anomaly Correlation Coefficient (ACC) using monthly data\n", "3. How to calculate and plot historical forecast skill of the Nino3.4 index as function of initialization month and lead time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The North American Multi-model Ensemble (NMME)\n", "\n", "Further information on NMME is available from {cite:t}`Kirtman2014` and the [NMME project website](https://www.cpc.ncep.noaa.gov/products/NMME/).\n", "\n", "The NMME public database is hosted on the International Research Institute for Climate and Society (IRI) data server [http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/](http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/).\n", "\n", "Since the NMME data server is accessed via this notebook, the time for the notebook to run may take a few minutes and vary depending on the speed that data is downloaded." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Definitions\n", "\n", "**Anomalies**\n", ": Departure from normal, where normal is defined as the climatological value based on the average value for each month over all years.\n", "\n", "**Nino3.4**\n", ": An index used to represent the evolution of the El Nino-Southern Oscillation (ENSO). Calculated as the average sea surface temperature (SST) anomalies in the region 5S-5N; 190-240" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 1;\n", " var nbb_unformatted_code = \"# linting\\n%load_ext nb_black\\n%load_ext lab_black\";\n", " var nbb_formatted_code = \"# linting\\n%load_ext nb_black\\n%load_ext lab_black\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# linting\n", "%load_ext nb_black\n", "%load_ext lab_black" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2020-01-06T20:26:56.235431Z", "start_time": "2020-01-06T20:26:54.064651Z" } }, "outputs": [ { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 2;\n", " var nbb_unformatted_code = \"import matplotlib.pyplot as plt\\nimport xarray as xr\\nimport pandas as pd\\nimport numpy as np\\n\\n\\nfrom climpred import HindcastEnsemble\\nimport climpred\";\n", " var nbb_formatted_code = \"import matplotlib.pyplot as plt\\nimport xarray as xr\\nimport pandas as pd\\nimport numpy as np\\n\\n\\nfrom climpred import HindcastEnsemble\\nimport climpred\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import xarray as xr\n", "import pandas as pd\n", "import numpy as np\n", "\n", "\n", "from climpred import HindcastEnsemble\n", "import climpred" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Function to set `360` calendar to `360_day` calendar to decode `cf` times" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2020-01-06T20:26:56.595041Z", "start_time": "2020-01-06T20:26:56.592324Z" } }, "outputs": [ { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 3;\n", " var nbb_unformatted_code = \"def decode_cf(ds, time_var):\\n \\\"\\\"\\\"Decodes time dimension to CFTime standards.\\\"\\\"\\\"\\n if ds[time_var].attrs[\\\"calendar\\\"] == \\\"360\\\":\\n ds[time_var].attrs[\\\"calendar\\\"] = \\\"360_day\\\"\\n ds = xr.decode_cf(ds, decode_times=True)\\n return ds\";\n", " var nbb_formatted_code = \"def decode_cf(ds, time_var):\\n \\\"\\\"\\\"Decodes time dimension to CFTime standards.\\\"\\\"\\\"\\n if ds[time_var].attrs[\\\"calendar\\\"] == \\\"360\\\":\\n ds[time_var].attrs[\\\"calendar\\\"] = \\\"360_day\\\"\\n ds = xr.decode_cf(ds, decode_times=True)\\n return ds\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def decode_cf(ds, time_var):\n", " \"\"\"Decodes time dimension to CFTime standards.\"\"\"\n", " if ds[time_var].attrs[\"calendar\"] == \"360\":\n", " ds[time_var].attrs[\"calendar\"] = \"360_day\"\n", " ds = xr.decode_cf(ds, decode_times=True)\n", " return ds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The original monthly sea surface temperature (SST) hindcast data for the NCEP-CFSv2 model from IRIDL is a large dataset (~20GB). However, we can leverage `ingrid` on the IRIDL server and open server-side preprocessed data via `OpenDAP` into `xarray`. Averaging over longitude `X` and latitude `Y` and ensemble member `M` reduces the download size to just a few kB.\n", "\n", "- [http://iridl.ldeo.columbia.edu/dochelp/topics/DODS/fnlist.html](http://iridl.ldeo.columbia.edu/dochelp/topics/DODS/fnlist.html)\n", "- [https://iridl.ldeo.columbia.edu/dochelp/Documentation/funcindex.html?Set-Language=en](https://iridl.ldeo.columbia.edu/dochelp/Documentation/funcindex.html?Set-Language=en)\n", "\n", "We take the ensemble mean here, since we are just using deterministic metrics in this example. `climpred` will automatically take the mean over the ensemble while evaluating metrics with `comparison=\"e2o\"`, but this should make things more efficient so it doesn't have to be done multiple times." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 59 ms, sys: 15.7 ms, total: 74.7 ms\n", "Wall time: 750 ms\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:  (S: 348, L: 10)\n",
       "Coordinates:\n",
       "  * S        (S) object 1982-01-01 00:00:00 ... 2010-12-01 00:00:00\n",
       "  * L        (L) float32 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5\n",
       "Data variables:\n",
       "    sst      (S, L) float64 26.36 26.63 27.15 27.96 ... 27.93 27.18 26.31 25.96\n",
       "Attributes:\n",
       "    Conventions:  IRIDL
" ], "text/plain": [ "\n", "Dimensions: (S: 348, L: 10)\n", "Coordinates:\n", " * S (S) object 1982-01-01 00:00:00 ... 2010-12-01 00:00:00\n", " * L (L) float32 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5\n", "Data variables:\n", " sst (S, L) float64 26.36 26.63 27.15 27.96 ... 27.93 27.18 26.31 25.96\n", "Attributes:\n", " Conventions: IRIDL" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 4;\n", " var nbb_unformatted_code = \"%%time\\n# server-side average over enso region and ensemble mean\\nurl = 'http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/NCEP-CFSv2/.HINDCAST/.MONTHLY/.sst/X/190/240/RANGEEDGES/Y/-5/5/RANGEEDGES/[X%20Y%20M]average/dods'\\nfcstds = xr.open_dataset(url, decode_times=False)\\nfcstds = decode_cf(fcstds, 'S').compute()\\nfcstds\";\n", " var nbb_formatted_code = \"%%time\\n# server-side average over enso region and ensemble mean\\nurl = 'http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/NCEP-CFSv2/.HINDCAST/.MONTHLY/.sst/X/190/240/RANGEEDGES/Y/-5/5/RANGEEDGES/[X%20Y%20M]average/dods'\\nfcstds = xr.open_dataset(url, decode_times=False)\\nfcstds = decode_cf(fcstds, 'S').compute()\\nfcstds\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%time\n", "# server-side average over enso region and ensemble mean\n", "url = 'http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/NCEP-CFSv2/.HINDCAST/.MONTHLY/.sst/X/190/240/RANGEEDGES/Y/-5/5/RANGEEDGES/[X%20Y%20M]average/dods'\n", "fcstds = xr.open_dataset(url, decode_times=False)\n", "fcstds = decode_cf(fcstds, 'S').compute()\n", "fcstds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The NMME data dimensions correspond to the following `climpred` dimension definitions: `L=lead`,`M=member`, `S=init`. `climpred` renames the dimensions based on their `attrs` `standard_name` when creating {py:class}`.HindcastEnsemble`, but we need to first adapt the coordinates manually." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2020-01-06T20:26:58.652387Z", "start_time": "2020-01-06T20:26:58.649738Z" } }, "outputs": [ { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 5;\n", " var nbb_unformatted_code = \"fcstds = fcstds.rename({\\\"S\\\": \\\"init\\\", \\\"L\\\": \\\"lead\\\"})\";\n", " var nbb_formatted_code = \"fcstds = fcstds.rename({\\\"S\\\": \\\"init\\\", \\\"L\\\": \\\"lead\\\"})\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fcstds = fcstds.rename({\"S\": \"init\", \"L\": \"lead\"})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's make sure that the `lead` dimension is set properly for `climpred`. NMME data stores `leads` as 0.5, 1.5, 2.5, etc, which correspond to 0, 1, 2, ... months since initialization. We will change the `lead` to be integers starting with zero. `climpred` also requires that `lead` dimension has an attribute called `units` indicating what time units the `lead` is assocated with. Options are: `years`, `seasons`, `months`, `weeks`, `pentads`, `days`, `hours`, `minutes` or `seconds`. For the monthly NMME data, the `lead` `units` are `months`. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2020-01-06T20:26:58.932066Z", "start_time": "2020-01-06T20:26:58.928398Z" } }, "outputs": [ { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 6;\n", " var nbb_unformatted_code = \"fcstds[\\\"lead\\\"] = (fcstds[\\\"lead\\\"] - 0.5).astype(\\\"int\\\")\\nfcstds[\\\"lead\\\"].attrs = {\\\"units\\\": \\\"months\\\"}\";\n", " var nbb_formatted_code = \"fcstds[\\\"lead\\\"] = (fcstds[\\\"lead\\\"] - 0.5).astype(\\\"int\\\")\\nfcstds[\\\"lead\\\"].attrs = {\\\"units\\\": \\\"months\\\"}\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fcstds[\"lead\"] = (fcstds[\"lead\"] - 0.5).astype(\"int\")\n", "fcstds[\"lead\"].attrs = {\"units\": \"months\"}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we want to get the verification SST data from the data server. It's a lot smaller, so we don't need to worry about saving it out locally. We keep the spatial dimension as one full chunk since we'll be averaging over the Nino3.4 box soon." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2020-01-06T20:27:01.118878Z", "start_time": "2020-01-06T20:27:00.760475Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 10.7 ms, sys: 7.87 ms, total: 18.6 ms\n", "Wall time: 479 ms\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:  (T: 405)\n",
       "Coordinates:\n",
       "  * T        (T) object 1982-01-16 00:00:00 ... 2015-09-16 00:00:00\n",
       "Data variables:\n",
       "    sst      (T) float64 26.81 26.78 27.26 28.06 ... 28.96 28.83 28.89 28.99\n",
       "Attributes:\n",
       "    Conventions:  IRIDL
" ], "text/plain": [ "\n", "Dimensions: (T: 405)\n", "Coordinates:\n", " * T (T) object 1982-01-16 00:00:00 ... 2015-09-16 00:00:00\n", "Data variables:\n", " sst (T) float64 26.81 26.78 27.26 28.06 ... 28.96 28.83 28.89 28.99\n", "Attributes:\n", " Conventions: IRIDL" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 7;\n", " var nbb_unformatted_code = \"%%time\\nobsurl='http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/.OIv2_SST/.sst/X/190/240/RANGEEDGES/Y/-5/5/RANGEEDGES/[X%20Y]average/dods'\\nverifds = xr.open_dataset(obsurl, decode_times=False)\\nverifds = decode_cf(verifds, 'T').compute()\\nverifds\";\n", " var nbb_formatted_code = \"%%time\\nobsurl='http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/.OIv2_SST/.sst/X/190/240/RANGEEDGES/Y/-5/5/RANGEEDGES/[X%20Y]average/dods'\\nverifds = xr.open_dataset(obsurl, decode_times=False)\\nverifds = decode_cf(verifds, 'T').compute()\\nverifds\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%time\n", "obsurl='http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/.OIv2_SST/.sst/X/190/240/RANGEEDGES/Y/-5/5/RANGEEDGES/[X%20Y]average/dods'\n", "verifds = xr.open_dataset(obsurl, decode_times=False)\n", "verifds = decode_cf(verifds, 'T').compute()\n", "verifds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rename the dimensions to correspond to `climpred` dimensions." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2020-01-06T20:27:01.531745Z", "start_time": "2020-01-06T20:27:01.528852Z" } }, "outputs": [ { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 8;\n", " var nbb_unformatted_code = \"verifds = verifds.rename({\\\"T\\\": \\\"time\\\"})\";\n", " var nbb_formatted_code = \"verifds = verifds.rename({\\\"T\\\": \\\"time\\\"})\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "verifds = verifds.rename({\"T\": \"time\"})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Convert the `time` data to be on the first of the month and in the same calendar format as the forecast output. The time dimension is natively decoded to start in February, even though it starts in January. It is also labelled as mid-month, and we need to label it as the start of the month to ensure that the dates align properly." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2020-01-06T20:27:02.082512Z", "start_time": "2020-01-06T20:27:02.072568Z" } }, "outputs": [ { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 9;\n", " var nbb_unformatted_code = \"verifds[\\\"time\\\"] = xr.cftime_range(\\n start=\\\"1982-01\\\", periods=verifds[\\\"time\\\"].size, freq=\\\"MS\\\", calendar=\\\"360_day\\\"\\n)\";\n", " var nbb_formatted_code = \"verifds[\\\"time\\\"] = xr.cftime_range(\\n start=\\\"1982-01\\\", periods=verifds[\\\"time\\\"].size, freq=\\\"MS\\\", calendar=\\\"360_day\\\"\\n)\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "verifds[\"time\"] = xr.cftime_range(\n", " start=\"1982-01\", periods=verifds[\"time\"].size, freq=\"MS\", calendar=\"360_day\"\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Subset the data to 1982-2010" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2020-01-06T20:27:03.439898Z", "start_time": "2020-01-06T20:27:03.432591Z" } }, "outputs": [ { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 10;\n", " var nbb_unformatted_code = \"fcstds = fcstds.sel(init=slice(\\\"1982-01-01\\\", \\\"2010-12-01\\\"))\\nverifds = verifds.sel(time=slice(\\\"1982-01-01\\\", \\\"2010-12-01\\\"))\";\n", " var nbb_formatted_code = \"fcstds = fcstds.sel(init=slice(\\\"1982-01-01\\\", \\\"2010-12-01\\\"))\\nverifds = verifds.sel(time=slice(\\\"1982-01-01\\\", \\\"2010-12-01\\\"))\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fcstds = fcstds.sel(init=slice(\"1982-01-01\", \"2010-12-01\"))\n", "verifds = verifds.sel(time=slice(\"1982-01-01\", \"2010-12-01\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use {py:class}`.HindcastEnsemble` to calculate the anomaly correlation coefficient (ACC) as a function of initialization `groupby=\"month\"` and `lead`. Before {py:meth}`.HindcastEnsemble.remove_seasonality` remove the monthly seasonal cycle.\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2020-01-06T20:31:40.476350Z", "start_time": "2020-01-06T20:27:06.112662Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 1.55 s, sys: 15 ms, total: 1.57 s\n", "Wall time: 1.62 s\n" ] }, { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 14;\n", " var nbb_unformatted_code = \"%%time\\nhindcast = HindcastEnsemble(fcstds)\\nhindcast = hindcast.add_observations(verifds)\\nhindcast = hindcast.remove_seasonality(\\\"month\\\")\\nresult = hindcast.verify(metric='acc', comparison='e2o', dim='init', alignment='maximize', groupby='month')\";\n", " var nbb_formatted_code = \"%%time\\nhindcast = HindcastEnsemble(fcstds)\\nhindcast = hindcast.add_observations(verifds)\\nhindcast = hindcast.remove_seasonality(\\\"month\\\")\\nresult = hindcast.verify(metric='acc', comparison='e2o', dim='init', alignment='maximize', groupby='month')\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%time\n", "hindcast = HindcastEnsemble(fcstds)\n", "hindcast = hindcast.add_observations(verifds)\n", "hindcast = hindcast.remove_seasonality(\"month\")\n", "result = hindcast.verify(metric='acc', comparison='e2o', dim='init', alignment='maximize', groupby='month')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the ACC {py:func}`.climpred.metrics._pearson_r` as function of Initial Month and lead-time" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Lead Time (Months)')" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", " setTimeout(function() {\n", " var nbb_cell_id = 15;\n", " var nbb_unformatted_code = \"result.sst.plot(y=\\\"lead\\\", cmap=\\\"YlOrRd\\\", vmin=0.0, vmax=1.0)\\n\\nplt.title(\\\"NCEP-CFSv2 Nino3.4 ACC\\\")\\nplt.xlabel(\\\"Initial Month\\\")\\nplt.ylabel(\\\"Lead Time (Months)\\\")\";\n", " var nbb_formatted_code = \"result.sst.plot(y=\\\"lead\\\", cmap=\\\"YlOrRd\\\", vmin=0.0, vmax=1.0)\\n\\nplt.title(\\\"NCEP-CFSv2 Nino3.4 ACC\\\")\\nplt.xlabel(\\\"Initial Month\\\")\\nplt.ylabel(\\\"Lead Time (Months)\\\")\";\n", " var nbb_cells = Jupyter.notebook.get_cells();\n", " for (var i = 0; i < nbb_cells.length; ++i) {\n", " if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", " if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", " nbb_cells[i].set_text(nbb_formatted_code);\n", " }\n", " break;\n", " }\n", " }\n", " }, 500);\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "result.sst.plot(y=\"lead\", cmap=\"YlOrRd\", vmin=0.0, vmax=1.0)\n", "\n", "plt.title(\"NCEP-CFSv2 Nino3.4 ACC\")\n", "plt.xlabel(\"Initial Month\")\n", "plt.ylabel(\"Lead Time (Months)\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### References\n", "\n", "```{eval-rst}\n", ".. bibliography::\n", " :filter: docname in docnames\n", "```" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.10" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }