Created
August 4, 2021 16:53
-
-
Save aaronspring/f5d34560342ccfb4b56b0c3fa740f86c to your computer and use it in GitHub Desktop.
bias_correction join keyword
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "id": "cd11d9ea-1314-4a4e-939f-20f933824eb6", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import climpred\n", | |
| "import xarray as xr\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "from climpred import HindcastEnsemble" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 34, | |
| "id": "4078782e-5daa-4053-9fb4-98538d3740ce", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "init = climpred.tutorial.load_dataset('NMME_hindcast_Nino34_sst').isel(model=5).isel(M=slice(None,10)).rename({'M':'member'})\n", | |
| "obs = climpred.tutorial.load_dataset('NMME_OIv2_Nino34_sst')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 35, | |
| "id": "07ff11ad-7fc5-4286-aad9-431a553e7966", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "forecast = init.sel(L=0).rename({'S':'init'}).sel(init=slice('1985','2014'))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 36, | |
| "id": "1b40afd4-6c4d-4804-adba-0587e953c09b", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "observation = obs.rename({'time':'init'}).sel(init=forecast.init)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "id": "97254822-8129-48a2-9fe7-93cd3ff2e8db", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 37, | |
| "id": "1dec14c5-d9ff-49af-81f9-5be84964922c", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from bias_correction import XBiasCorrection" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 48, | |
| "id": "74d7219e-5566-4ab3-8ef5-b2181cd4feeb", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "import pandas as pd\n", | |
| "from statsmodels.distributions.empirical_distribution import ECDF\n", | |
| "from scipy.stats import gamma, norm\n", | |
| "from scipy.signal import detrend\n", | |
| "import xarray as xr\n", | |
| "\n", | |
| "\"\"\"\n", | |
| "module for bias corrections. \n", | |
| "Available methods include:\n", | |
| "- basic_quantile\n", | |
| "- modified quantile\n", | |
| "- gamma_mapping\n", | |
| "- normal_mapping \n", | |
| "\"\"\"\n", | |
| "\n", | |
| "\n", | |
| "def quantile_correction(obs_data, mod_data, sce_data, modified=True):\n", | |
| " cdf = ECDF(mod_data)\n", | |
| " p = cdf(sce_data) * 100\n", | |
| " cor = np.subtract(*[np.nanpercentile(x, p) for x in [obs_data, mod_data]])\n", | |
| " if modified:\n", | |
| " mid = np.subtract(*[np.nanpercentile(x, 50) for x in [obs_data, mod_data]])\n", | |
| " g = np.true_divide(*[np.nanpercentile(x, 50) for x in [obs_data, mod_data]])\n", | |
| "\n", | |
| " iqr_obs_data = np.subtract(*np.nanpercentile(obs_data, [75, 25]))\n", | |
| " iqr_mod_data = np.subtract(*np.nanpercentile(mod_data, [75, 25]))\n", | |
| "\n", | |
| " f = np.true_divide(iqr_obs_data, iqr_mod_data)\n", | |
| " cor = g * mid + f * (cor - mid)\n", | |
| " return sce_data + cor\n", | |
| " else:\n", | |
| " return sce_data + cor\n", | |
| "\n", | |
| "\n", | |
| "def gamma_correction(\n", | |
| " obs_data, mod_data, sce_data, lower_limit=0.1, cdf_threshold=0.9999999\n", | |
| "):\n", | |
| " obs_raindays, mod_raindays, sce_raindays = [\n", | |
| " x[x >= lower_limit] for x in [obs_data, mod_data, sce_data]\n", | |
| " ]\n", | |
| " obs_gamma, mod_gamma, sce_gamma = [\n", | |
| " gamma.fit(x) for x in [obs_raindays, mod_raindays, sce_raindays]\n", | |
| " ]\n", | |
| "\n", | |
| " obs_cdf = gamma.cdf(np.sort(obs_raindays), *obs_gamma)\n", | |
| " mod_cdf = gamma.cdf(np.sort(mod_raindays), *mod_gamma)\n", | |
| " sce_cdf = gamma.cdf(np.sort(sce_raindays), *sce_gamma)\n", | |
| "\n", | |
| " obs_cdf[obs_cdf > cdf_threshold] = cdf_threshold\n", | |
| " mod_cdf[mod_cdf > cdf_threshold] = cdf_threshold\n", | |
| " sce_cdf[sce_cdf > cdf_threshold] = cdf_threshold\n", | |
| "\n", | |
| " obs_cdf_intpol = np.interp(\n", | |
| " np.linspace(1, len(obs_raindays), len(sce_raindays)),\n", | |
| " np.linspace(1, len(obs_raindays), len(obs_raindays)),\n", | |
| " obs_cdf,\n", | |
| " )\n", | |
| "\n", | |
| " mod_cdf_intpol = np.interp(\n", | |
| " np.linspace(1, len(mod_raindays), len(sce_raindays)),\n", | |
| " np.linspace(1, len(mod_raindays), len(mod_raindays)),\n", | |
| " mod_cdf,\n", | |
| " )\n", | |
| "\n", | |
| " obs_inverse, mod_inverse, sce_inverse = [\n", | |
| " 1.0 / (1.0 - x) for x in [obs_cdf_intpol, mod_cdf_intpol, sce_cdf]\n", | |
| " ]\n", | |
| "\n", | |
| " adapted_cdf = 1 - 1.0 / (obs_inverse * sce_inverse / mod_inverse)\n", | |
| " adapted_cdf[adapted_cdf < 0.0] = 0.0\n", | |
| "\n", | |
| " initial = (\n", | |
| " gamma.ppf(np.sort(adapted_cdf), *obs_gamma)\n", | |
| " * gamma.ppf(sce_cdf, *sce_gamma)\n", | |
| " / gamma.ppf(sce_cdf, *mod_gamma)\n", | |
| " )\n", | |
| "\n", | |
| " mod_frequency = 1.0 * mod_raindays.shape[0] / mod_data.shape[0]\n", | |
| " sce_frequency = 1.0 * sce_raindays.shape[0] / sce_data.shape[0]\n", | |
| "\n", | |
| " days_min = len(sce_raindays) * sce_frequency / mod_frequency\n", | |
| "\n", | |
| " expected_sce_raindays = int(min(days_min, len(sce_data)))\n", | |
| "\n", | |
| " sce_argsort = np.argsort(sce_data)\n", | |
| " correction = np.zeros(len(sce_data))\n", | |
| "\n", | |
| " if len(sce_raindays) > expected_sce_raindays:\n", | |
| " initial = np.interp(\n", | |
| " np.linspace(1, len(sce_raindays), expected_sce_raindays),\n", | |
| " np.linspace(1, len(sce_raindays), len(sce_raindays)),\n", | |
| " initial,\n", | |
| " )\n", | |
| " else:\n", | |
| " initial = np.hstack(\n", | |
| " (np.zeros(expected_sce_raindays - len(sce_raindays)), initial)\n", | |
| " )\n", | |
| "\n", | |
| " correction[sce_argsort[:expected_sce_raindays]] = initial\n", | |
| " # correction = pd.Series(correction, index=sce_data.index)\n", | |
| " return correction\n", | |
| "\n", | |
| "\n", | |
| "def normal_correction(obs_data, mod_data, sce_data, cdf_threshold=0.9999999):\n", | |
| " obs_len, mod_len, sce_len = [len(x) for x in [obs_data, mod_data, sce_data]]\n", | |
| " obs_mean, mod_mean, sce_mean = [x.mean() for x in [obs_data, mod_data, sce_data]]\n", | |
| " obs_detrended, mod_detrended, sce_detrended = [\n", | |
| " detrend(x) for x in [obs_data, mod_data, sce_data]\n", | |
| " ]\n", | |
| " obs_norm, mod_norm, sce_norm = [\n", | |
| " norm.fit(x) for x in [obs_detrended, mod_detrended, sce_detrended]\n", | |
| " ]\n", | |
| "\n", | |
| " obs_cdf = norm.cdf(np.sort(obs_detrended), *obs_norm)\n", | |
| " mod_cdf = norm.cdf(np.sort(mod_detrended), *mod_norm)\n", | |
| " sce_cdf = norm.cdf(np.sort(sce_detrended), *sce_norm)\n", | |
| "\n", | |
| " obs_cdf = np.maximum(np.minimum(obs_cdf, cdf_threshold), 1 - cdf_threshold)\n", | |
| " mod_cdf = np.maximum(np.minimum(mod_cdf, cdf_threshold), 1 - cdf_threshold)\n", | |
| " sce_cdf = np.maximum(np.minimum(sce_cdf, cdf_threshold), 1 - cdf_threshold)\n", | |
| "\n", | |
| " sce_diff = sce_data - sce_detrended\n", | |
| " sce_argsort = np.argsort(sce_detrended)\n", | |
| "\n", | |
| " obs_cdf_intpol = np.interp(\n", | |
| " np.linspace(1, obs_len, sce_len), np.linspace(1, obs_len, obs_len), obs_cdf\n", | |
| " )\n", | |
| " mod_cdf_intpol = np.interp(\n", | |
| " np.linspace(1, mod_len, sce_len), np.linspace(1, mod_len, mod_len), mod_cdf\n", | |
| " )\n", | |
| " obs_cdf_shift, mod_cdf_shift, sce_cdf_shift = [\n", | |
| " (x - 0.5) for x in [obs_cdf_intpol, mod_cdf_intpol, sce_cdf]\n", | |
| " ]\n", | |
| "\n", | |
| " obs_inverse, mod_inverse, sce_inverse = [\n", | |
| " 1.0 / (0.5 - np.abs(x)) for x in [obs_cdf_shift, mod_cdf_shift, sce_cdf_shift]\n", | |
| " ]\n", | |
| "\n", | |
| " adapted_cdf = np.sign(obs_cdf_shift) * (\n", | |
| " 1.0 - 1.0 / (obs_inverse * sce_inverse / mod_inverse)\n", | |
| " )\n", | |
| " adapted_cdf[adapted_cdf < 0] += 1.0\n", | |
| " adapted_cdf = np.maximum(np.minimum(adapted_cdf, cdf_threshold), 1 - cdf_threshold)\n", | |
| "\n", | |
| " xvals = norm.ppf(np.sort(adapted_cdf), *obs_norm) + obs_norm[-1] / mod_norm[-1] * (\n", | |
| " norm.ppf(sce_cdf, *sce_norm) - norm.ppf(sce_cdf, *mod_norm)\n", | |
| " )\n", | |
| "\n", | |
| " xvals -= xvals.mean()\n", | |
| " xvals += obs_mean + (sce_mean - mod_mean)\n", | |
| "\n", | |
| " correction = np.zeros(sce_len)\n", | |
| " correction[sce_argsort] = xvals\n", | |
| " correction += sce_diff - sce_mean\n", | |
| " # correction = pd.Series(correction, index=sce_data.index)\n", | |
| " return correction\n", | |
| "\n", | |
| "\n", | |
| "class BiasCorrection(object):\n", | |
| " def __init__(self, obs_data, mod_data, sce_data):\n", | |
| " self.obs_data = obs_data\n", | |
| " self.mod_data = mod_data\n", | |
| " self.sce_data = sce_data\n", | |
| "\n", | |
| " def correct(\n", | |
| " self, method=\"modified_quantile\", lower_limit=0.1, cdf_threshold=0.9999999\n", | |
| " ):\n", | |
| " if method == \"gamma_mapping\":\n", | |
| " corrected = gamma_correction(\n", | |
| " self.obs_data,\n", | |
| " self.mod_data,\n", | |
| " self.sce_data,\n", | |
| " lower_limit=lower_limit,\n", | |
| " cdf_threshold=cdf_threshold,\n", | |
| " )\n", | |
| " elif method == \"normal_mapping\":\n", | |
| " corrected = normal_correction(\n", | |
| " self.obs_data, self.mod_data, self.sce_data, cdf_threshold=cdf_threshold\n", | |
| " )\n", | |
| " elif method == \"basic_quantile\":\n", | |
| " corrected = quantile_correction(\n", | |
| " self.obs_data, self.mod_data, self.sce_data, modified=False\n", | |
| " )\n", | |
| "\n", | |
| " elif method == \"modified_quantile\":\n", | |
| " corrected = quantile_correction(\n", | |
| " self.obs_data, self.mod_data, self.sce_data, modified=True\n", | |
| " )\n", | |
| "\n", | |
| " else:\n", | |
| " raise Exception(\"Specify correct method for bias correction.\")\n", | |
| "\n", | |
| " self.corrected = pd.Series(corrected, index=self.sce_data.index)\n", | |
| " return self.corrected\n", | |
| "\n", | |
| "\n", | |
| "class XBiasCorrection(object):\n", | |
| " def __init__(self, obs_data, mod_data, sce_data, dim=\"time\"):\n", | |
| " self.obs_data = obs_data\n", | |
| " self.mod_data = mod_data\n", | |
| " self.sce_data = sce_data\n", | |
| " self.dim = dim\n", | |
| " # print(sce_data)\n", | |
| "\n", | |
| " def correct(\n", | |
| " self,\n", | |
| " method=\"modified_quantile\",\n", | |
| " lower_limit=0.1,\n", | |
| " cdf_threshold=0.9999999,\n", | |
| " vectorize=True,\n", | |
| " dask=\"parallelized\",\n", | |
| " join='exact'\n", | |
| " ):\n", | |
| " dtype = self._set_dtype()\n", | |
| " dim = self.dim\n", | |
| " if method == \"gamma_mapping\":\n", | |
| " corrected = xr.apply_ufunc(\n", | |
| " gamma_correction,\n", | |
| " self.obs_data,\n", | |
| " self.mod_data,\n", | |
| " self.sce_data,\n", | |
| " vectorize=vectorize,\n", | |
| " dask=dask,\n", | |
| " input_core_dims=[[dim], [dim], [dim]],\n", | |
| " output_core_dims=[[dim]],\n", | |
| " output_dtypes=[dtype],\n", | |
| " join=join,\n", | |
| " kwargs={\"lower_limit\": lower_limit, \"cdf_threshold\": cdf_threshold},\n", | |
| " )\n", | |
| " elif method == \"normal_mapping\":\n", | |
| " corrected = xr.apply_ufunc(\n", | |
| " normal_correction,\n", | |
| " self.obs_data,\n", | |
| " self.mod_data,\n", | |
| " self.sce_data,\n", | |
| " vectorize=vectorize,\n", | |
| " dask=dask,\n", | |
| " input_core_dims=[[dim], [dim], [dim]],\n", | |
| " output_core_dims=[[dim]],\n", | |
| " output_dtypes=[dtype],\n", | |
| " join=join,\n", | |
| " kwargs={\"cdf_threshold\": cdf_threshold},\n", | |
| " )\n", | |
| " elif method == \"basic_quantile\":\n", | |
| " corrected = xr.apply_ufunc(\n", | |
| " quantile_correction,\n", | |
| " self.obs_data,\n", | |
| " self.mod_data,\n", | |
| " self.sce_data,\n", | |
| " vectorize=vectorize,\n", | |
| " dask=dask,\n", | |
| " join=join,\n", | |
| " input_core_dims=[[dim], [dim], [dim]],\n", | |
| " output_core_dims=[[dim]],\n", | |
| " kwargs={\"modified\": False},\n", | |
| " )\n", | |
| "\n", | |
| " elif method == \"modified_quantile\":\n", | |
| " corrected = xr.apply_ufunc(\n", | |
| " quantile_correction,\n", | |
| " self.obs_data,\n", | |
| " self.mod_data,\n", | |
| " self.sce_data,\n", | |
| " vectorize=vectorize,\n", | |
| " dask=dask,\n", | |
| " join=join,\n", | |
| " input_core_dims=[[dim], [dim], [dim]],\n", | |
| " output_core_dims=[[dim]],\n", | |
| " kwargs={\"modified\": True},\n", | |
| " )\n", | |
| "\n", | |
| " else:\n", | |
| " raise Exception(\"Specify correct method for bias correction.\")\n", | |
| " self.corrected = corrected\n", | |
| " return self.corrected\n", | |
| "\n", | |
| " def _set_dtype(self):\n", | |
| " aa = self.mod_data\n", | |
| " if isinstance(aa, xr.Dataset):\n", | |
| " dtype = aa[list(aa.data_vars)[0]].dtype\n", | |
| " # print('No `dtype` chosen. Input is Dataset. \\\n", | |
| " # Defaults to %s' % dtype)\n", | |
| " elif isinstance(aa, xr.DataArray):\n", | |
| " dtype = aa.dtype\n", | |
| " return dtype" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 49, | |
| "id": "04f10310-76ac-4eb3-aa37-c9be78778ebd", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.collections.QuadMesh at 0x150e0aee0>" | |
| ] | |
| }, | |
| "execution_count": 49, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 2 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "forecast.sst.plot()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 50, | |
| "id": "08605b88-e1a6-46df-8669-1d3b6da0595d", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
| "<defs>\n", | |
| "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
| "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
| "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
| "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
| "</symbol>\n", | |
| "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
| "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
| "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
| "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
| "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
| "</symbol>\n", | |
| "</defs>\n", | |
| "</svg>\n", | |
| "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
| " *\n", | |
| " */\n", | |
| "\n", | |
| ":root {\n", | |
| " --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
| " --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
| " --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
| " --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
| " --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
| " --xr-background-color: var(--jp-layout-color0, white);\n", | |
| " --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
| " --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
| "}\n", | |
| "\n", | |
| "html[theme=dark],\n", | |
| "body.vscode-dark {\n", | |
| " --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
| " --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
| " --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
| " --xr-border-color: #1F1F1F;\n", | |
| " --xr-disabled-color: #515151;\n", | |
| " --xr-background-color: #111111;\n", | |
| " --xr-background-color-row-even: #111111;\n", | |
| " --xr-background-color-row-odd: #313131;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-wrap {\n", | |
| " display: block;\n", | |
| " min-width: 300px;\n", | |
| " max-width: 700px;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-text-repr-fallback {\n", | |
| " /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
| " display: none;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-header {\n", | |
| " padding-top: 6px;\n", | |
| " padding-bottom: 6px;\n", | |
| " margin-bottom: 4px;\n", | |
| " border-bottom: solid 1px var(--xr-border-color);\n", | |
| "}\n", | |
| "\n", | |
| ".xr-header > div,\n", | |
| ".xr-header > ul {\n", | |
| " display: inline;\n", | |
| " margin-top: 0;\n", | |
| " margin-bottom: 0;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-obj-type,\n", | |
| ".xr-array-name {\n", | |
| " margin-left: 2px;\n", | |
| " margin-right: 10px;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-obj-type {\n", | |
| " color: var(--xr-font-color2);\n", | |
| "}\n", | |
| "\n", | |
| ".xr-sections {\n", | |
| " padding-left: 0 !important;\n", | |
| " display: grid;\n", | |
| " grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-item {\n", | |
| " display: contents;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-item input {\n", | |
| " display: none;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-item input + label {\n", | |
| " color: var(--xr-disabled-color);\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-item input:enabled + label {\n", | |
| " cursor: pointer;\n", | |
| " color: var(--xr-font-color2);\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-item input:enabled + label:hover {\n", | |
| " color: var(--xr-font-color0);\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-summary {\n", | |
| " grid-column: 1;\n", | |
| " color: var(--xr-font-color2);\n", | |
| " font-weight: 500;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-summary > span {\n", | |
| " display: inline-block;\n", | |
| " padding-left: 0.5em;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-summary-in:disabled + label {\n", | |
| " color: var(--xr-font-color2);\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-summary-in + label:before {\n", | |
| " display: inline-block;\n", | |
| " content: '►';\n", | |
| " font-size: 11px;\n", | |
| " width: 15px;\n", | |
| " text-align: center;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-summary-in:disabled + label:before {\n", | |
| " color: var(--xr-disabled-color);\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-summary-in:checked + label:before {\n", | |
| " content: '▼';\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-summary-in:checked + label > span {\n", | |
| " display: none;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-summary,\n", | |
| ".xr-section-inline-details {\n", | |
| " padding-top: 4px;\n", | |
| " padding-bottom: 4px;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-inline-details {\n", | |
| " grid-column: 2 / -1;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-details {\n", | |
| " display: none;\n", | |
| " grid-column: 1 / -1;\n", | |
| " margin-bottom: 5px;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
| " display: contents;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-array-wrap {\n", | |
| " grid-column: 1 / -1;\n", | |
| " display: grid;\n", | |
| " grid-template-columns: 20px auto;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-array-wrap > label {\n", | |
| " grid-column: 1;\n", | |
| " vertical-align: top;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-preview {\n", | |
| " color: var(--xr-font-color3);\n", | |
| "}\n", | |
| "\n", | |
| ".xr-array-preview,\n", | |
| ".xr-array-data {\n", | |
| " padding: 0 5px !important;\n", | |
| " grid-column: 2;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-array-data,\n", | |
| ".xr-array-in:checked ~ .xr-array-preview {\n", | |
| " display: none;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-array-in:checked ~ .xr-array-data,\n", | |
| ".xr-array-preview {\n", | |
| " display: inline-block;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-dim-list {\n", | |
| " display: inline-block !important;\n", | |
| " list-style: none;\n", | |
| " padding: 0 !important;\n", | |
| " margin: 0;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-dim-list li {\n", | |
| " display: inline-block;\n", | |
| " padding: 0;\n", | |
| " margin: 0;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-dim-list:before {\n", | |
| " content: '(';\n", | |
| "}\n", | |
| "\n", | |
| ".xr-dim-list:after {\n", | |
| " content: ')';\n", | |
| "}\n", | |
| "\n", | |
| ".xr-dim-list li:not(:last-child):after {\n", | |
| " content: ',';\n", | |
| " padding-right: 5px;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-has-index {\n", | |
| " font-weight: bold;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-var-list,\n", | |
| ".xr-var-item {\n", | |
| " display: contents;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-var-item > div,\n", | |
| ".xr-var-item label,\n", | |
| ".xr-var-item > .xr-var-name span {\n", | |
| " background-color: var(--xr-background-color-row-even);\n", | |
| " margin-bottom: 0;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-var-item > .xr-var-name:hover span {\n", | |
| " padding-right: 5px;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-var-list > li:nth-child(odd) > div,\n", | |
| ".xr-var-list > li:nth-child(odd) > label,\n", | |
| ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
| " background-color: var(--xr-background-color-row-odd);\n", | |
| "}\n", | |
| "\n", | |
| ".xr-var-name {\n", | |
| " grid-column: 1;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-var-dims {\n", | |
| " grid-column: 2;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-var-dtype {\n", | |
| " grid-column: 3;\n", | |
| " text-align: right;\n", | |
| " color: var(--xr-font-color2);\n", | |
| "}\n", | |
| "\n", | |
| ".xr-var-preview {\n", | |
| " grid-column: 4;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-var-name,\n", | |
| ".xr-var-dims,\n", | |
| ".xr-var-dtype,\n", | |
| ".xr-preview,\n", | |
| ".xr-attrs dt {\n", | |
| " white-space: nowrap;\n", | |
| " overflow: hidden;\n", | |
| " text-overflow: ellipsis;\n", | |
| " padding-right: 10px;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-var-name:hover,\n", | |
| ".xr-var-dims:hover,\n", | |
| ".xr-var-dtype:hover,\n", | |
| ".xr-attrs dt:hover {\n", | |
| " overflow: visible;\n", | |
| " width: auto;\n", | |
| " z-index: 1;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-var-attrs,\n", | |
| ".xr-var-data {\n", | |
| " display: none;\n", | |
| " background-color: var(--xr-background-color) !important;\n", | |
| " padding-bottom: 5px !important;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
| ".xr-var-data-in:checked ~ .xr-var-data {\n", | |
| " display: block;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-var-data > table {\n", | |
| " float: right;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-var-name span,\n", | |
| ".xr-var-data,\n", | |
| ".xr-attrs {\n", | |
| " padding-left: 25px !important;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-attrs,\n", | |
| ".xr-var-attrs,\n", | |
| ".xr-var-data {\n", | |
| " grid-column: 1 / -1;\n", | |
| "}\n", | |
| "\n", | |
| "dl.xr-attrs {\n", | |
| " padding: 0;\n", | |
| " margin: 0;\n", | |
| " display: grid;\n", | |
| " grid-template-columns: 125px auto;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-attrs dt,\n", | |
| ".xr-attrs dd {\n", | |
| " padding: 0;\n", | |
| " margin: 0;\n", | |
| " float: left;\n", | |
| " padding-right: 10px;\n", | |
| " width: auto;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-attrs dt {\n", | |
| " font-weight: normal;\n", | |
| " grid-column: 1;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-attrs dt:hover span {\n", | |
| " display: inline-block;\n", | |
| " background: var(--xr-background-color);\n", | |
| " padding-right: 10px;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-attrs dd {\n", | |
| " grid-column: 2;\n", | |
| " white-space: pre-wrap;\n", | |
| " word-break: break-all;\n", | |
| "}\n", | |
| "\n", | |
| ".xr-icon-database,\n", | |
| ".xr-icon-file-text2 {\n", | |
| " display: inline-block;\n", | |
| " vertical-align: middle;\n", | |
| " width: 1em;\n", | |
| " height: 1.5em !important;\n", | |
| " stroke-width: 0;\n", | |
| " stroke: currentColor;\n", | |
| " fill: currentColor;\n", | |
| "}\n", | |
| "</style><pre class='xr-text-repr-fallback'><xarray.Dataset>\n", | |
| "Dimensions: (member: 10, init: 360)\n", | |
| "Coordinates:\n", | |
| " * init (init) datetime64[ns] 1985-01-01 1985-02-01 ... 2014-12-01\n", | |
| " L float64 0.0\n", | |
| " model <U7 'CanCM4i'\n", | |
| " * member (member) float32 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0\n", | |
| "Data variables:\n", | |
| " sst (member, init) float64 25.7 25.9 26.58 27.18 ... 27.19 27.44 27.51</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-770dfcfe-f315-4548-9401-05d26a6db460' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-770dfcfe-f315-4548-9401-05d26a6db460' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>member</span>: 10</li><li><span class='xr-has-index'>init</span>: 360</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-db2413a9-8d9c-4c37-9eac-9245467fc0c9' class='xr-section-summary-in' type='checkbox' checked><label for='section-db2413a9-8d9c-4c37-9eac-9245467fc0c9' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>init</span></div><div class='xr-var-dims'>(init)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1985-01-01 ... 2014-12-01</div><input id='attrs-e52343a9-841a-444c-818d-2e25428dfa27' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-e52343a9-841a-444c-818d-2e25428dfa27' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-09e8ee21-b9f4-439b-be86-4706b3418c43' class='xr-var-data-in' type='checkbox'><label for='data-09e8ee21-b9f4-439b-be86-4706b3418c43' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array(['1985-01-01T00:00:00.000000000', '1985-02-01T00:00:00.000000000',\n", | |
| " '1985-03-01T00:00:00.000000000', ..., '2014-10-01T00:00:00.000000000',\n", | |
| " '2014-11-01T00:00:00.000000000', '2014-12-01T00:00:00.000000000'],\n", | |
| " dtype='datetime64[ns]')</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>L</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>0.0</div><input id='attrs-4eede5e4-44ae-4096-a9f6-b2b221383bf1' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-4eede5e4-44ae-4096-a9f6-b2b221383bf1' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-f40d13cf-b284-4117-88e7-ef003bb39e65' class='xr-var-data-in' type='checkbox'><label for='data-f40d13cf-b284-4117-88e7-ef003bb39e65' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array(0.)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>model</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'><U7</div><div class='xr-var-preview xr-preview'>'CanCM4i'</div><input id='attrs-9fdff0d7-e7e8-4f47-8f7c-5a8f115083a5' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-9fdff0d7-e7e8-4f47-8f7c-5a8f115083a5' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c2f282aa-c7a6-4a67-8686-83dae0704b70' class='xr-var-data-in' type='checkbox'><label for='data-c2f282aa-c7a6-4a67-8686-83dae0704b70' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array('CanCM4i', dtype='<U7')</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>member</span></div><div class='xr-var-dims'>(member)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>1.0 2.0 3.0 4.0 ... 8.0 9.0 10.0</div><input id='attrs-e9c167f3-1dc7-4f3a-b5a4-15c3b01a976e' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-e9c167f3-1dc7-4f3a-b5a4-15c3b01a976e' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-44f0c8e0-7b95-4905-ba1f-f48c35c22fe6' class='xr-var-data-in' type='checkbox'><label for='data-44f0c8e0-7b95-4905-ba1f-f48c35c22fe6' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.], dtype=float32)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-4232439d-4e5b-4904-91c0-5e469e19c5b2' class='xr-section-summary-in' type='checkbox' checked><label for='section-4232439d-4e5b-4904-91c0-5e469e19c5b2' class='xr-section-summary' >Data variables: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>sst</span></div><div class='xr-var-dims'>(member, init)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>25.7 25.9 26.58 ... 27.44 27.51</div><input id='attrs-c60bd3ae-b544-44f1-883c-e923ab4b5de8' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-c60bd3ae-b544-44f1-883c-e923ab4b5de8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-62b4ed53-fd02-4c85-b46f-5ddf8f7cc13d' class='xr-var-data-in' type='checkbox'><label for='data-62b4ed53-fd02-4c85-b46f-5ddf8f7cc13d' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([[25.70362239, 25.90488136, 26.58206638, ..., 27.18172369,\n", | |
| " 27.46625198, 27.49227491],\n", | |
| " [25.77754475, 25.85395912, 26.61966413, ..., 27.21426676,\n", | |
| " 27.43577696, 27.50389918],\n", | |
| " [25.70295246, 25.89930817, 26.6216554 , ..., 27.19699557,\n", | |
| " 27.45195649, 27.5168339 ],\n", | |
| " ...,\n", | |
| " [25.78233834, 25.88878836, 26.62440432, ..., 27.19424666,\n", | |
| " 27.43101007, 27.54907048],\n", | |
| " [25.70008373, 25.88097319, 26.57498991, ..., 27.19983235,\n", | |
| " 27.43662723, 27.49581357],\n", | |
| " [25.70523854, 25.88829729, 26.623916 , ..., 27.19473497,\n", | |
| " 27.43705139, 27.51411179]])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-46cee3cc-f7c0-4b22-89f7-5f93e1d568f5' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-46cee3cc-f7c0-4b22-89f7-5f93e1d568f5' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>" | |
| ], | |
| "text/plain": [ | |
| "<xarray.Dataset>\n", | |
| "Dimensions: (member: 10, init: 360)\n", | |
| "Coordinates:\n", | |
| " * init (init) datetime64[ns] 1985-01-01 1985-02-01 ... 2014-12-01\n", | |
| " L float64 0.0\n", | |
| " model <U7 'CanCM4i'\n", | |
| " * member (member) float32 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0\n", | |
| "Data variables:\n", | |
| " sst (member, init) float64 25.7 25.9 26.58 27.18 ... 27.19 27.44 27.51" | |
| ] | |
| }, | |
| "execution_count": 50, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "XBiasCorrection(observation, forecast, forecast, dim='init').correct(method='normal_mapping')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 60, | |
| "id": "1f69435a-011f-4d14-8d97-897a37ae312c", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.collections.QuadMesh at 0x10e3d9df0>" | |
| ] | |
| }, | |
| "execution_count": 60, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 2 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "XBiasCorrection(observation.sel(init=slice('1985','1990')), forecast.sel(init=slice('1985','1990')), forecast.sel(init=slice('1990','1999')), dim='init').correct(method='basic_quantile', join='outer').sst.plot()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "id": "133b7fe9-9ade-4225-9030-61bd84e2cb67", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python [conda env:climpred-dev] *", | |
| "language": "python", | |
| "name": "conda-env-climpred-dev-py" | |
| }, | |
| "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.9.6" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 5 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment