{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Detection and attribution of climate change using deep learning\n", "\n", "## Context\n", "### Purpose\n", "Demonstrate the power of deep learning models and variational approaches in the detection and attribution of climate change, using climate simulation and observational data.\n", "\n", "### Description\n", "The modelling pipeline consists of the following three procedures: data acquisition & preprocessing, climate change detection and climate change attribution. \n", "* Observations (OBS) of the 2 m air temperature over the continent from HadCRUT4 blended with sea surface temperature from HadISST412. The outputs of ocean-atmosphere general circulation models from the Coupled Model Intercomparison Project 6(CMIP6) are also acquired and divided into several categories based on used forcings: single-forcing simulations utilizing greenhouse gas concentration (GHG), single-forcing simulations utilizing anthropogenic aerosols (AER), single-forcing simulations utilizing natural forcings such as volcanic aerosols and solar variations(NAT), and historical simulations using all the external forcings (HIST). The data is converted into an annual mean and is spatially averaged over the globe to obtain the global mean surface temperature (GMST). Then the mean temperatures of the pre-industrial time period (1850-1900) are removed from the period of interest (1900-2014) to obtain the temperature anomalies. \n", "* To determine the relation between the GMST of the single-forcing models GHG, AER, NAT to that of HIST, a convolutional neural network (CNN) is trained. The CNN uses the single-forcing model simulations as input of size (3,115), and uses the HIST simulations as the target of size (1,115). To estimate whether the added non-linearities of the CNN model improve the model performance, a simple linear model is trained using the same inputs and targets. \n", "* The trained CNN is then used to obtain the variational inversion using the backpropagation algorithm. In this case, the OBS time series is used and linked to the single-forcing models (GHG, AER, NAT). \n", "\n", "The model was implemented in Python 3.10 using PyTorch v1.13.0. Further details can be found in the Environmental Data Science paper [\"Detection and attribution of climate change: A deep learning and variational approach\"](https://www.cambridge.org/core/journals/environmental-data-science/article/detection-and-attribution-of-climate-change-a-deep-learning-and-variational-approach/110E2AFF9666A50F44339FC56B67BFAE).\n", "\n", "### Highlights\n", "* Acquire, preprocess and visualize the observation and climate simulation data\n", "* Train a CNN model to predict the historical simulation time series (HIST) given the three single-forcing model simulations (GHG, AER, NAT)\n", "* Inverse Modelling - TBD\n", "\n", "### Contributions\n", "\n", "#### Notebook\n", "* Viktor Domazetoski (author), University of Göttingen, [@ViktorDomazetoski](https://github.com/ViktorDomazetoski)\n", "* Andrés Zúñiga-González (author), Affiliation, GitHub alias\n", "* Owen Allemang (author), Affiliation, GitHub alias\n", "\n", "#### Modelling Codebase\n", "* Constantin Bône (author), UMR LOCEAN, Sorbonne Université, UMR ISIR, Sorbonne Université\n", "* Guillaume Gastineau (author), UMR LOCEAN, Sorbonne Université\n", "* Sylvie Thiria (author), UMR LOCEAN, Sorbonne Université\n", "* Patrick Gallinari (author), UMR ISIR, Sorbonne Université, Criteo AI Lab\n", "\n", "#### Modelling publications\n", "Bône, Constantin, Guillaume Gastineau, Sylvie Thiria, and Patrick Gallinari. \"Detection and attribution of climate change: A deep learning and variational approach.\" *Environmental Data Science* 1 (2022): e27.\n", "https://doi.org/10.1017/eds.2022.17\n", "\n", ":::{note}\n", "The notebook contributors acknowledge the authors of the paper for providing a reproducible and public code available at https://gitlab.com/ConstantinBone/detection-and-attribution-of-climate-change-a-deep-learning-and-variational-approach. The source codde of the paper was adapted to this notebook.\n", ":::" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Libraries" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "'''Nath & Data Libraries'''\n", "import os\n", "import numpy as np\n", "import random\n", "import pandas as pd\n", "\n", "import netCDF4 as nc4\n", "\n", "from scipy import signal\n", "import pooch" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "''' ML Libraries'''\n", "import torch\n", "import torch.nn as nn\n", "from torch.utils.data import Dataset, DataLoader\n", "\n", "from sklearn.metrics import mean_squared_error\n", "\n", "import pickle" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "''' Miscellaneous Libraries'''\n", "from tqdm import tqdm" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "'''Visualization Libraries'''\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "sns.set_style(\"whitegrid\", {\"grid.color\": \"0.5\", \"axes.edgecolor\": \"0.2\"})\n", "color_palette = [\"#FF8853\", \"#FFE174\", \"#007597\", \"#C1C36D\", \"#00A697\", \"#BC97E0\", \"#ffc0bf\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set project structure" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "notebook_folder = './notebook'\n", "if not os.path.exists(notebook_folder):\n", " os.makedirs(notebook_folder)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Variables" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Dictionary of dictionaries containing the number of simulations per forcing per model\n", "model_dict = {\n", "\"IPSL\" : {'hist-GHG' : 10,'hist-aer' : 10, 'hist-nat' : 10,'historical' : 32},\n", "\"ACCESS\" : {'hist-GHG' : 3,'hist-aer' : 3, 'hist-nat' : 3,'historical' : 30},\n", "\"CESM2\" : {'hist-GHG' : 3,'hist-aer' : 2, 'hist-nat' : 3,'historical' : 11},\n", "\"BCC\" : {'hist-GHG' : 3,'hist-aer' : 3, 'hist-nat' : 3,'historical' : 3},\n", "\"CanESM5\" : {'hist-GHG' : 50,'hist-aer' : 30, 'hist-nat' : 50,'historical' : 65},\n", "\"FGOALS\" : {'hist-GHG' : 3,'hist-aer' : 3, 'hist-nat' : 3,'historical' : 6},\n", "\"HadGEM3\" : {'hist-GHG' : 4,'hist-aer' : 4, 'hist-nat' : 4,'historical' : 5},\n", "\"MIRO\" : {'hist-GHG' : 3,'hist-aer' : 3, 'hist-nat' : 3,'historical' : 50},\n", "\"ESM2\" : {'hist-GHG' : 5,'hist-aer' : 5, 'hist-nat' : 5,'historical' : 7},\n", "\"NorESM2\" : {'hist-GHG' : 3,'hist-aer' : 3, 'hist-nat' : 3,'historical' : 3},\n", "\"CNRM\" : {'hist-GHG' : 9,'hist-aer' : 10, 'hist-nat' : 10,'historical' : 30},\n", "\"GISS\" : {'hist-GHG' : 10,'hist-aer' : 12, 'hist-nat' : 20,'historical' : 19}\n", "}" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "data_dir = 'notebook/data/data_pre_ind_2/' # Location of the data (Should be changed to something more logical as here it implicates that only the preindustrial data is there)\n", "model_list = ['CanESM5', 'CNRM', 'IPSL', 'ACCESS', 'BCC', 'FGOALS', 'HadGEM3', 'MIRO', 'ESM2','NorESM2','CESM2','GISS']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Classes" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "class CNN_Model(nn.Module):\n", " \"\"\"\n", " A class for a Convolutional Neural Network. \n", " The CNN consists of three convolutional layers, each with a padding of 5 \n", " and a kernel size of 11 that are non-linearly transformed using a hyperbolic tangent function. \n", " ---\n", " Parameters\n", " ----------\n", " size_channel : int\n", " length of the layer (number of neurons) (defaults to 10) \n", " bias: boolean\n", " whether to add a learnable bias to the input (defaults to True)\n", " \n", " Methods\n", " -------\n", " forward(X):\n", " Defines the computation performed at every call.\n", " \"\"\"\n", " def __init__(self, size_channel = 10, bias = True):\n", " super(CNN_Model, self).__init__()\n", " self.tanh = nn.Tanh()\n", " self.conv1 = nn.Conv1d(3, size_channel, kernel_size=11, bias=bias, padding=5) # The input layer has a size of 3 due to the three forcings [ghg, aer, nat]\n", " self.conv2 = nn.Conv1d(size_channel, size_channel, kernel_size=11, bias=bias, padding=5)\n", " self.conv3 = nn.Conv1d(size_channel, 1, kernel_size=11, bias=bias, padding=5) # The output layer has a size of 1 as the target [hist]\n", "\n", " def forward(self, x):\n", " \"\"\"\n", " Defines the computation performed at every call.\n", " The input goes through 2 convolutional and hyperbolic tangent layers before being \n", " transformed to float and transformed to a tensor of shape (batch_size, N_years)\n", " ---\n", " Parameters\n", " ----------\n", " x : torch.tensor of shape (batch_size, N_forcings, N_years), where the batch size defaults to 100, N_forcings equals 3 and represents the three forcings [ghg, aer, nat], and N_years equals 115 and represents the data from 1900-2014.\n", " input tensor containing the batch of data for the three forcings over the time span of interest.\n", " \n", " Returns\n", " -------\n", " Output of computation : torch.tensor of shape (batch_size, N_years)\n", " output tensor that tries to predict the historical simulations using all the external forcings as varying boundary conditions\n", " \"\"\"\n", " x = self.conv1(x)\n", " x = self.tanh(x)\n", " x = self.conv2(x)\n", " x = self.tanh(x)\n", " x = x.float()\n", " x = self.conv3(x)[:,0,:]\n", " return x\n", " \n", "class Linear_Model(nn.Module):\n", " \"\"\"\n", " A class for a Simple Linear Module used for comparison. \n", " ---\n", " Parameters\n", " ----------\n", " bias: boolean\n", " whether to add a learnable bias to the input (defaults to False)\n", " \n", " Methods\n", " -------\n", " forward(X):\n", " Defines the computation performed at every call.\n", " \"\"\"\n", " def __init__(self, bias = False):\n", " super(Linear_Model, self).__init__()\n", " self.linear = nn.Linear(3, 1, bias = bias)\n", "\n", " def forward(self, X):\n", " \"\"\"\n", " Defines the computation performed at every call.\n", " The input goes through a linear layer before being transformed to a tensor of shape [batch_size, N_years]\n", " ---\n", " Parameters\n", " ----------\n", " x : torch.tensor of size (batch_size, N_forcings, N_years), where the batch size defaults to 100, N_forcings equals 3 and represents the three forcings [ghg, aer, nat], and N_years equals 115 and represents the data from 1900-2014.\n", " input tensor containing the batch of data for the three forcings over the time span of interest.\n", " \n", " Returns\n", " -------\n", " Output of computation : torch.tensor of shape (batch_size, N_years)\n", " output tensor that tries to predict the historical simulations using all the external forcings as varying boundary conditions\n", " \"\"\"\n", " x = self.linear(X.transpose(1,2))\n", " return x[:,:,0]\n", "\n", "class MonDataset(Dataset):\n", " \"\"\"\n", " A pytorch Dataset class that is used as an input for the CNN DataLoader. \n", " ---\n", " Parameters\n", " ----------\n", " ghg: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 3 to 50, and N_years equals 115 and represents the data from 1900-2014 \n", " A list of tensors, containing the greenhouse gas (GHG) single forcing simulations for each model over the time span of interest.\n", " aer: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 3 to 50, and N_years equals 115 and represents the data from 1900-2014 \n", " A list of tensors, containing the aerosol (AER) single forcing simulations for each model over the time span of interest.\n", " nat: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 2 to 30, and N_years equals 115 and represents the data from 1900-2014 \n", " A list of tensors, containing the natural (NAT) single forcing simulations for each model over the time span of interest.\n", " historical: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 3 to 65, and N_years equals 115 and represents the data from 1900-2014 \n", " A list of tensors, containing the historical (HIST) simulations using all the external forcings as varying boundary conditions for each model over the time span of interest.\n", " model_of_interest: int\n", " The index of the model to exclude (include) when creating the train (test) dataset. Set to -1 in order to include all models.\n", " dataset_type: str, one of [\"train\", \"test\"]\n", " Whether to create a train or test dataset\n", "\n", " Methods\n", " -------\n", " len(N_samples):\n", " Defines the number of samples returned.\n", " __getitem__():\n", " Fetch a random data sample.\n", " \"\"\"\n", " def __init__(self, ghg, aer, nat, historical, model_of_interest=-1, dataset_type='train'):\n", " self.ghg = ghg\n", " self.aer = aer\n", " self.nat = nat\n", " self.historical = historical\n", " self.dataset_type = dataset_type\n", " self.model_of_interest = model_of_interest\n", "\n", " def __len__(self, N_samples = 50000):\n", " \"\"\"\n", " Defines the number of samples returned.\n", " ---\n", " Parameters\n", " ----------\n", " N_samples: int\n", " Number of samples to return. Defaults to 5e4.\n", " \n", " Returns\n", " -------\n", " Number of samples : int\n", " \"\"\"\n", " return N_samples\n", "\n", " def __getitem__(self, idx):\n", " \"\"\"\n", " Fetch a random data sample.\n", " If self.model_of_interest is -1, no models are excluded and in both the train and test sample we randomly choose a model and then randomly choose a simulation for each forcing to add to the dataset. \n", " Otherwise, if we want to exclude a specific model, within the train set we randomly choose a model that is not the model we want to exclude, while in the test set we only acquire data from that model. \n", " ---\n", " Returns\n", " -------\n", " X : torch.tensor of shape (N_forcings, N_years), where N_forcings equals 3 and represents the three forcings [ghg, aer, nat], and N_years equals 115 and represents the data from 1900-2014.\n", " a tensor containing a random sample of the simulation data for the three forcings over the time span of interest.\n", " y : torch.tensor of shape (N_years, ) where N_years equals 115 and represents the data from 1900-2014\n", " a tensor containing a random sample of the historical simulation data over the time span of interest.\n", " model_idx : int\n", " the index of the model used to acquire the random sample\n", " \"\"\"\n", " if(self.dataset_type == 'train'):\n", " # We sample a random index between 0 and 11 until we find one that is not the model we want to exclude. \n", " while True:\n", " model_idx = random.randint(0, len(self.ghg) - 1)\n", " if(model_idx != self.model_of_interest): \n", " break\n", "\n", " elif(self.dataset_type == 'test'):\n", " # We take the index of the model we want to include. \n", " model_idx = self.model_of_interest\n", " # If the model is -1, then all models can potentially be included, thus we randomly sample one of the 12 models\n", " if(model_idx==-1):\n", " model_idx = random.randint(0, len(self.ghg) - 1)\n", "\n", " #We sample a simulation of each forcing of the model\n", " ghg_sample = self.ghg[model_idx][random.randint(0, self.ghg[model_idx].shape[0] - 1)]\n", " aer_sample = self.aer[model_idx][random.randint(0, self.aer[model_idx].shape[0] - 1)]\n", " nat_sample = self.nat[model_idx][random.randint(0, self.nat[model_idx].shape[0] - 1)]\n", " hist_sample = self.historical[model_idx][random.randint(0, self.historical[model_idx].shape[0] - 1)]\n", " X = torch.stack((ghg_sample, aer_sample, nat_sample)).float()\n", " y = hist_sample.float()\n", "\n", " return X, y, model_idx" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Functions" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def calculate_spatial_mean(data):\n", " \"\"\"\n", " Calculate the spatially weighted mean over the globe. \n", " ---\n", " Parameters\n", " ----------\n", " data : np.array of shape (N_years, latitude, longitude)\n", " temporal data covering the entire globe\n", "\n", " Returns\n", " -------\n", " obs_data_mean : np.array of shape (N_years)\n", " Annual spatially averaged observation data from 1900 to 2020.\n", " \"\"\"\n", " data_mean = np.zeros((data.shape[0])) #Initialize np array to keep the results\n", " latitude = np.linspace(-87.5, 87.5, 36) #Initialize array that contains the latitude coordinates used in the spatial weighting\n", " div = 0 \n", "\n", " for j in range(36):\n", " for k in range(72):\n", " data_mean += data[:,j,k] * np.cos(np.radians(latitude[j])) \n", " div += np.cos(np.radians(latitude[j]))\n", " data_mean /= div\n", " return data_mean\n", "\n", "def get_observation_data():\n", " \"\"\"\n", " Get annual observation (OBS) data of the 2 m air temperature over the continent from HadCRUT4 (Morice et al., 2012) \n", " blended with sea surface temperature from HadISST4 (Rayner et al., 2003) over the time span of interest. The data is spatially averaged \n", " ---\n", " Returns\n", " -------\n", " obs_data_mean : np.array of shape (121, )\n", " Annual spatially averaged observation data from 1900 to 2020.\n", " \"\"\"\n", " obs_nc = nc4.Dataset(data_dir + 'obs.nc', 'r')\n", " obs_temperature_data = obs_nc.variables['temperature_anomaly'][:]\n", " return calculate_spatial_mean(obs_temperature_data)\n", "\n", "def calculate_preindustrial_average(forcing, model_name = 'IPSL', physics = 1):\n", " \"\"\"\n", " Calculate pre-industrial average between years 1850-1900 for a given forcing and model.\n", " ---\n", " Parameters\n", " ----------\n", " forcing : str: one of [\"hist-GHG\", \"hist-aer\", \"hist-nat\", \"historical\"]\n", " type of forcing used in the simulation\n", " model_name : str: one of the 12 models in the model_list\n", " model used in the simulation\n", " physics: int: one of [1, 2]\n", " parameter used for the GISS model\n", "\n", " Returns\n", " -------\n", " preindustrial_average : float\n", " The pre-industrial average between the years 1850-1900.\n", " \"\"\"\n", " # Since there are special rules for the GISS model it has to be done like this. Think of ways to make it simpler\n", "\n", " preindustrial_average = np.zeros((36,72))\n", " if(model_name==\"GISS\"):\n", " if(type=='hist-aer'):\n", " if(physics==1):\n", " for i in range(model_dict[model_name][forcing]):\n", " if(i<5 or i>9):\n", " simu_nc = nc4.Dataset(f\"{data_dir}{model_name}_{forcing}_{i+1}.nc\", 'r')\n", " simu_temperature_data = simu_nc.variables['tas'][0:50]\n", " preindustrial_average += np.mean(simu_temperature_data, axis=0)/7\n", " else: \n", " for i in range(model_dict[model_name][forcing]):\n", " if(i>=5 and i<=9):\n", " simu_nc = nc4.Dataset(f\"{data_dir}{model_name}_{forcing}_{i+1}.nc\", 'r')\n", " simu_temperature_data = simu_nc.variables['tas'][0:50]\n", " preindustrial_average += np.mean(simu_temperature_data, axis=0)/5\n", " if(type=='historical'):\n", " if(physics==1):\n", " for i in range(model_dict[model_name][forcing]):\n", " if(i<10):\n", " simu_nc = nc4.Dataset(f\"{data_dir}{model_name}_{forcing}_{i+1}.nc\", 'r')\n", " simu_temperature_data = simu_nc.variables['tas'][0:50]\n", " preindustrial_average += np.mean(simu_temperature_data, axis=0)/10\n", " else:\n", " for i in range(model_dict[model_name][forcing]):\n", " if (i>=10):\n", " simu_nc = nc4.Dataset(f\"{data_dir}{model_name}_{forcing}_{i+1}.nc\", 'r')\n", " simu_temperature_data = simu_nc.variables['tas'][0:50]\n", " preindustrial_average += np.mean(simu_temperature_data, axis=0)/9\n", " else:\n", " for i in range(model_dict[model_name][forcing]):\n", " if (i>=5 and i<=9):\n", " simu_nc = nc4.Dataset(f\"{data_dir}{model_name}_{forcing}_{i+1}.nc\", 'r')\n", " simu_temperature_data = simu_nc.variables['tas'][0:50]\n", " preindustrial_average += np.mean(simu_temperature_data, axis=0)/5\n", " else:\n", " for i in range(model_dict[model_name][forcing]):\n", " simu_nc = nc4.Dataset(f\"{data_dir}{model_name}_{forcing}_{i+1}.nc\", 'r')\n", " simu_temperature_data = simu_nc.variables['tas'][0:50]\n", " preindustrial_average += np.mean(simu_temperature_data, axis=0)/model_dict[model_name][forcing]\n", " return preindustrial_average\n", "\n", "def get_simulation(simulation_index, forcing, model_name = 'IPSL', filter = False):\n", " \"\"\"\n", " Get a simulation for a given forcing and model. \n", " ---\n", " Parameters\n", " ----------\n", " simulation_index : int\n", " the index of the requested simulation \n", " forcing : str: one of [\"hist-GHG\", \"hist-aer\", \"hist-nat\", \"historical\"]\n", " type of forcing used in the simulation\n", " model_name : str: one of the 12 models in the model_list\n", " model used in the simulation\n", " filter : boolean. Defaults to False.\n", " whether to apply a lowpass filter to the GHG and AER forcings \n", "\n", " Returns\n", " -------\n", " simulation : np.array of shape (N_years), where N_years equals 115\n", " The data from one simulation for a given forcing and climate model for the years 1900-2014, from which the pre-industrial average is excluded.\n", " \"\"\"\n", "\n", " # Calculate pre-industrial average\n", " physics = 1 \n", " if(model_name=='GISS'):\n", " if(forcing=='hist-aer' and (simulation_index>=6 and simulation_index<=10)):\n", " physics = 2\n", " elif(forcing=='historical' and simulation_index>10):\n", " physics = 2\n", " preindustrial_average = calculate_preindustrial_average(forcing, model_name = model_name, physics = physics)\n", "\n", " # Calculate post-industrial 1900-2015 average\n", " simu_nc = nc4.Dataset(f\"{data_dir}{model_name}_{forcing}_{simulation_index}.nc\", 'r')\n", " simu_temperature_data = simu_nc.variables['tas'][50:]\n", "\n", " # Subtract preindustrial average from the post-industrial data\n", " simu_temperature_data = simu_temperature_data - preindustrial_average\n", " simulation = calculate_spatial_mean(simu_temperature_data)\n", " \n", " if(filter):\n", " if(forcing=='hist-GHG' or forcing=='hist-aer'):\n", " b, a = signal.butter(20, 1/5, btype='lowpass') # Lowpass used in the filtrage of the data\n", " simulation = signal.filtfilt(b, a, simulation)\n", " return simulation\n", "\n", "def get_all_simulations(forcing, model_name = 'IPSL',filter = False):\n", " \"\"\"\n", " Get all simulations for a given forcing and model. \n", " ---\n", " Parameters\n", " ----------\n", " forcing : str: one of [\"hist-GHG\", \"hist-aer\", \"hist-nat\", \"historical\"]\n", " type of forcing used in the simulation\n", " model_name : str: one of the 12 models in the model_list\n", " model used in the simulation\n", " filter : boolean. Defaults to False.\n", " whether to apply a lowpass filter to the GHG and AER forcings \n", "\n", " Returns\n", " -------\n", " simulation_data : np.array of shape (N_simu, N_years), where N_simu is dependent on the model and ranges from 3 to 50, and N_years equals 115 and represents the data from 1900-2014 \n", " The data from all simulations for a given forcing and climate model for the years 1900-2014, from which the pre-industrial average is excluded.\n", " \"\"\"\n", "\n", " simulation_data = np.zeros((model_dict[model_name][forcing], 115))\n", " for i in range(model_dict[model_name][forcing]):\n", " simulation_data[i] = get_simulation(i+1, forcing = forcing, model_name = model_name, filter = filter)[0:115]\n", " return (simulation_data)\n", "\n", "def get_model_dataset(model_name = 'ALL', normalize = True, filter = False):\n", " \"\"\"\n", " Get the entire dataset (all simulations for all forcings) for a climate model or all climate models. \n", " ---\n", " Parameters\n", " ----------\n", " model_name : str: one of the 12 models in the model_list or \"ALL\" to acquire dataset for all climate models\n", " model used in the simulation\n", " normalize : boolean. Defaults to False.\n", " whether to normalize all simulations by the maximum historical value \n", " filter : boolean. Defaults to False.\n", " whether to apply a lowpass filter to the GHG and AER forcings \n", "\n", " Returns\n", " -------\n", " ghg: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 3 to 50, and N_years equals 115 and represents the data from 1900-2014 \n", " A list of tensors, containing the greenhouse gas (GHG) single forcing simulations for each model over the time span of interest.\n", " aer: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 3 to 50, and N_years equals 115 and represents the data from 1900-2014 \n", " A list of tensors, containing the aerosol (AER) single forcing simulations for each model over the time span of interest.\n", " nat: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 2 to 30, and N_years equals 115 and represents the data from 1900-2014 \n", " A list of tensors, containing the natural (NAT) single forcing simulations for each model over the time span of interest.\n", " historical: list of length 12, with one torch.tensor of shape (N_simu, N_years) for each model. N_simu is dependent on the model and ranges from 3 to 65, and N_years equals 115 and represents the data from 1900-2014 \n", " A list of tensors, containing the historical (HIST) simulations using all the external forcings as varying boundary conditions for each model over the time span of interest.\n", " maximum_historical_list: list of length 1 or length 12, dependent if model_name==\"ALL\" \n", " A list of maximum historical values per model \n", " \"\"\"\n", " maximum_historical_list = []\n", " \n", " if (model_name == 'ALL'):\n", " aer = []\n", " ghg = []\n", " nat = []\n", " historical = []\n", "\n", " for model_curr in tqdm(model_list):\n", " print(model_curr)\n", " aer_curr = torch.tensor(get_all_simulations('hist-aer', model_name = model_curr, filter = filter)[:, 0:115])\n", " ghg_curr = torch.tensor(get_all_simulations('hist-GHG', model_name = model_curr, filter = filter)[:, 0:115])\n", " nat_curr = torch.tensor(get_all_simulations('hist-nat', model_name = model_curr, filter = filter)[:, 0:115])\n", " historical_curr = torch.tensor(get_all_simulations('historical', model_name = model_curr, filter = filter)[:, 0:115])\n", " historical_max = torch.max(torch.mean(historical_curr, dim=0))\n", " maximum_historical_list.append(historical_max)\n", "\n", " if(normalize):\n", " aer_curr = aer_curr / historical_max\n", " ghg_curr = ghg_curr / historical_max\n", " nat_curr = nat_curr / historical_max\n", " historical_curr = historical_curr / historical_max\n", "\n", " aer.append(aer_curr)\n", " ghg.append(ghg_curr)\n", " nat.append(nat_curr)\n", " historical.append(historical_curr)\n", "\n", " else:\n", " aer = torch.tensor(get_all_simulations('hist-aer', model_name = model_name, filter = filter)[:,0:115])\n", " ghg = torch.tensor(get_all_simulations('hist-GHG', model_name = model_name, filter = filter)[:,0:115])\n", " nat = torch.tensor(get_all_simulations('hist-nat', model_name = model_name, filter = filter)[:,0:115])\n", " historical = torch.tensor(get_all_simulations('historical', model_name = model_name, filter = filter)[:,0:115])\n", " historical_max = torch.max(torch.mean(historical, dim=0))\n", " maximum_historical_list.append(historical_max)\n", "\n", " if(normalize):\n", " aer = aer /historical_max\n", " ghg = ghg / historical_max\n", " nat = nat / historical_max\n", " historical = historical/ historical_max\n", "\n", " return ghg, aer, nat, historical, np.array(maximum_historical_list)\n", " \n", "def train_models(train_dataloader, test_dataloader, lr = 0.001, N_epoch = 100, size_channel = 10, regularization = 0):\n", " \"\"\"\n", " Train the CNN and Linear model. \n", " ---\n", " Parameters\n", " ----------\n", " train_dataloader : pytorch Dataloader\n", " the data loader for the training set that consists of a sample of simulations from the three forcings for random climate models.\n", " test_dataloader : pytorch Dataloader\n", " the data loader for the test set that consists of a sample of simulations from the three forcings for random climate models.\n", " lr : int\n", " learning rate. Defaults to 1e-3.\n", " N_epoch : int\n", " the number of epochs used to train the model. Defaults to 1e2.\n", " size_channel : int\n", " length of the layer (number of neurons) (defaults to 10) \n", " regularization : float\n", " the amount of regularization used when training the model. Defaults to 0, representing no regularization. \n", "\n", " Returns\n", " model, Loss_tab,Loss_test_tab, model_linear, Loss_tab_lin,Loss_test_tab_lin\n", " -------\n", " model_CNN : CNN_Model\n", " a CNN model which takes data from the three single forcing models [ghg, aer, nat] and is trained to predict the historical (HIST) simulations using all the external forcings as varying boundary conditions\n", " loss_train_CNN: list of length N_epoch\n", " list that contains the MSE loss of the model on the training set after each epoch \n", " loss_test_CNN: list of length N_epoch\n", " list that contains the MSE loss of the model on the test set after each epoch \n", " model_linear : Linear_Model\n", " a benchmark linear model which takes data from the three single forcing models [ghg, aer, nat] and is trained to predict the historical (HIST) simulations using all the external forcings as varying boundary conditions\n", " loss_train_linear: list of length N_epoch\n", " list that contains the MSE loss of the model on the training set after each epoch \n", " loss_test_linear: list of length N_epoch\n", " list that contains the MSE loss of the model on the test set after each epoch \n", " \"\"\"\n", "\n", " model_CNN = CNN_Model(size_channel = size_channel, bias = True)\n", " model_linear = Linear_Model(bias = False)\n", "\n", " criterion_CNN = nn.MSELoss()\n", " criterion_linear = nn.MSELoss()\n", "\n", " optim_CNN = torch.optim.Adam(model_CNN.parameters(), lr=lr, weight_decay = regularization)\n", " optim_linear = torch.optim.Adam(model_linear.parameters(), lr=lr, weight_decay=regularization)\n", "\n", " loss_train_CNN = []\n", " loss_test_CNN = []\n", "\n", " loss_train_linear = []\n", " loss_test_linear = []\n", "\n", " for iter in tqdm(range(N_epoch)):\n", " loss_total_train_CNN = 0\n", " loss_total_test_CNN = 0\n", " length_train_CNN = 0\n", " length_test_CNN = 0\n", "\n", " loss_total_train_linear = 0\n", " loss_total_test_linear = 0\n", " length_train_linear = 0\n", " length_test_linear = 0\n", "\n", " with torch.no_grad():\n", " for(X_test, y_test, model_idx) in test_dataloader:\n", " y_hat_test_CNN = model_CNN(X_test)\n", " loss_test = criterion_CNN(y_hat_test_CNN.float(), y_test.float())\n", " loss_total_test_CNN += loss_test\n", " length_test_CNN += 1\n", "\n", " y_hat_test_linear = model_linear(X_test)\n", " loss_test = criterion_linear(y_hat_test_linear.float(),y_test.float())\n", " loss_total_test_linear += loss_test\n", " length_test_linear += 1\n", "\n", " for(X_train, y_train, model_idx) in train_dataloader:\n", " y_hat_train_CNN = model_CNN(X_train)\n", " loss = criterion_CNN(y_hat_train_CNN.float(), y_train.float())\n", " loss.backward()\n", " optim_CNN.step()\n", " loss_total_train_CNN += loss\n", " optim_CNN.zero_grad()\n", " length_train_CNN +=1\n", "\n", " y_hat_train_linear = model_linear(X_train)\n", " loss = criterion_linear(y_hat_train_linear.float(), y_train.float())\n", " loss.backward()\n", " optim_linear.step()\n", " loss_total_train_linear += loss\n", " optim_linear.zero_grad()\n", " length_train_linear += 1\n", "\n", " loss_total_train_CNN = loss_total_train_CNN.item() / length_train_CNN\n", " loss_total_test_CNN = loss_total_test_CNN.item() / length_test_CNN\n", " loss_total_train_linear = loss_total_train_linear.item() / length_train_linear\n", " loss_total_test_linear = loss_total_test_linear.item() / length_test_linear\n", "\n", " if(iter%10 == 0):\n", " print(f\"Iteration {iter}:\")\n", " print(f\"\\tCNN: training loss: {loss_total_train_CNN:.6f}, test loss {loss_total_test_CNN:.6f}\")\n", " print(f\"\\tLinear: training loss: {loss_total_train_linear:.6f}, test loss {loss_total_test_linear:.6f}\")\n", "\n", " loss_train_CNN.append(loss_total_train_CNN)\n", " loss_test_CNN.append(loss_total_test_CNN)\n", "\n", " loss_train_linear.append(loss_total_train_linear)\n", " loss_test_linear.append(loss_total_test_linear)\n", "\n", " return model_CNN, np.array(loss_train_CNN), np.array(loss_test_CNN), model_linear, np.array(loss_train_linear), np.array(loss_test_linear)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Pipeline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fetch data\n", "\n", "The data can be found in a compressed file `data_pre_ind_2` at https://gitlab.com/ConstantinBone/detection-and-attribution-of-climate-change-a-deep-learning-and-variational-approach. We use pooch to fetch and unzip them directly from the GitLab repository." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_16.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_58.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-GHG_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/obs.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-aer_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_19.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_28.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_historical_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_historical_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_historical_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-aer_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_19.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-aer_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_24.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_48.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_39.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_30.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_12.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_29.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-nat_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_14.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-GHG_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_20.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_historical_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-aer_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_18.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_historical_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-nat_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-nat_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_20.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_historical_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-nat_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_14.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_29.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_38.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-GHG_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_13.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-GHG_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_28.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_15.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-GHG_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_12.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_historical_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-GHG_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-aer_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_19.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-nat_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_21.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_15.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_28.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_17.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_59.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-aer_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_spe.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_18.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_11.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_29.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_historical_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-aer_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_historical_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-nat_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_historical_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-aer_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_11.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_18.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-aer_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_25.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_49.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_20.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_40.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_13.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_11.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_14.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_45.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_25.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_27.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_14.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_20.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_31.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_32.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_52.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-aer_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_37.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_27.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_13.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_42.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_22.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_21.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_30.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_35.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_44.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_15.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_16.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-aer_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-aer_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_50.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_30.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_23.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-nat_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_41.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_21.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_35.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_24.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_15.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_24.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_44.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_17.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-GHG_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_50.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-GHG_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_62.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_33.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_historical_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_18.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_56.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_46.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_17.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-GHG_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_23.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_11.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_12.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_40.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_34.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-nat_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_26.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_25.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_31.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_22.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_11.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_40.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_20.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_34.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_25.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_14.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_25.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_45.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_16.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_11.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-GHG_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-nat_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_63.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_32.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_19.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_57.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_47.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_16.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_22.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_13.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_41.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_35.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-GHG_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-nat_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_27.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_24.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-nat_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_30.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_50.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_21.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_41.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_12.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-aer_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_15.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_44.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_24.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_26.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_15.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_21.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_30.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_53.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-aer_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_36.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_26.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_historical_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_12.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_43.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_23.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_20.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_34.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_45.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_14.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_17.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-aer_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_31.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_26.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_37.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_43.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_23.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_21.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-nat_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_12.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_12.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-GHG_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_26.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_46.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_15.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_17.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_31.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_historical_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_60.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-nat_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_54.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-GHG_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_15.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_28.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_44.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_21.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-GHG_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_36.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_42.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_13.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_33.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_24.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_27.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-nat_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-nat_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-aer_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_16.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_13.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_22.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_42.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_11.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_33.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_30.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_22.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_25.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_16.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_18.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_47.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_27.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_50.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_64.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_35.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_historical_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_18.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_25.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_40.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_11.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_37.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_20.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_23.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_32.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-aer_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_17.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_14.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_46.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_17.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_11.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_12.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_23.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_43.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_32.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_31.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_23.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_24.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_17.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_46.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_26.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_19.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-aer_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_51.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_65.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_34.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_historical_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_19.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_24.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_41.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_36.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_21.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_22.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-aer_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_33.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-aer_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_16.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_15.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_47.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_27.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_36.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_42.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_22.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_20.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_13.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-nat_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_hist-GHG_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-GHG_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_13.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_27.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_47.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_14.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_16.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_30.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/BCC_historical_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_61.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-nat_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_55.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_hist-GHG_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_14.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_29.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_45.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_20.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_hist-GHG_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_37.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_43.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_12.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_11.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_30.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_32.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_historical_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_historical_25.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_hist-nat_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_26.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-GHG_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-GHG_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-nat_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_29.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_49.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_16.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_18.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_11.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_18.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-GHG_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_48.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_19.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_historical_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-GHG_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_historical_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_39.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_22.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-nat_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_16.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-nat_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_historical_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_14.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_19.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_48.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_28.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-GHG_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-aer_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_12.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_39.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_28.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-nat_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_29.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_historical_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_38.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-aer_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_12.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-aer_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-aer_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_26.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_15.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_18.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_49.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_29.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-GHG_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_13.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_38.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_29.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_28.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-nat_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_39.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-aer_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_13.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_historical_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_27.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_8.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-GHG_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-GHG_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_6.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-GHG_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_11.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-nat_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-nat_17.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_28.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_48.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_19.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-nat_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-nat_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-aer_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-aer_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-aer_10.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_historical_19.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_49.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_hist-GHG_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/MIRO_historical_18.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/NorESM2_hist-GHG_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_historical_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ESM2_hist-nat_1.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_historical_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CanESM5_hist-GHG_38.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CESM2_historical_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-aer_4.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_23.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/ACCESS_hist-nat_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-nat_5.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_hist-GHG_9.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/GISS_historical_7.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/IPSL_hist-aer_3.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/CNRM_historical_17.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/HadGEM3_hist-nat_2.nc',\n", " '/Users/acoca/repos/envdsbook/events/repro/repo/teams/CI2023-RC-team2/./notebook/data/data_pre_ind_2/FGOALS_historical_5.nc']" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pooch.retrieve(\n", " url=\"https://gitlab.com/ConstantinBone/detection-and-attribution-of-climate-change-a-deep-learning-and-variational-approach/-/raw/main/data_pre_ind_2.zip\",\n", " known_hash=None,\n", " processor=pooch.Unzip(extract_dir=os.path.join(notebook_folder,'data')),\n", " path=f\".\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We first start by acquiring the annual observation data (OBS) of the 2 m air temperature over the continent from HadCRUT4 blended with sea surface temperature from HadISST4. The data is spatially averaged over the globe and only the time span of interest (1900 - 2014) is acquired. To make OBS and HIST comparable, OBS is corrected of its blending effects using a 1.06 multiplier coefficient. Finally, the OBS data is normalized to a maximum of 1 by dividing the series with the OBS maximum.\n", "\n", "We then get the simulation data for all forcings (GHG, AER, NAT, HIST) of all 12 climate models. The simulation data is spatially averaged over the globe to create an annual mean from which the pre-industrial average is subtracted. The simulations are then also max-normalized by dividing with the historical maximum. " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\r", " 0%| | 0/12 [00:00, ?it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CanESM5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", " 8%|███████████▎ | 1/12 [01:11<13:01, 71.08s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CNRM\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", " 17%|██████████████████████▋ | 2/12 [01:21<05:55, 35.58s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "IPSL\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", " 25%|██████████████████████████████████ | 3/12 [01:32<03:37, 24.12s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "ACCESS\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", " 33%|█████████████████████████████████████████████▎ | 4/12 [01:39<02:20, 17.58s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "BCC\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", " 42%|████████████████████████████████████████████████████████▋ | 5/12 [01:40<01:21, 11.62s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "FGOALS\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", " 50%|████████████████████████████████████████████████████████████████████ | 6/12 [01:42<00:48, 8.12s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "HadGEM3\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", " 58%|███████████████████████████████████████████████████████████████████████████████▎ | 7/12 [01:43<00:30, 6.03s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "MIRO\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", " 67%|██████████████████████████████████████████████████████████████████████████████████████████▋ | 8/12 [02:01<00:38, 9.60s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "ESM2\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", " 75%|██████████████████████████████████████████████████████████████████████████████████████████████████████ | 9/12 [02:03<00:22, 7.38s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "NorESM2\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", " 83%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 10/12 [02:04<00:10, 5.49s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CESM2\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", " 92%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 11/12 [02:07<00:04, 4.49s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "GISS\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 12/12 [02:13<00:00, 11.09s/it]\n" ] } ], "source": [ "# Get observation data\n", "observation_data = torch.tensor(get_observation_data())[0:115] * 1.06\n", "observation_max = torch.max(observation_data)\n", "observation_data = observation_data /observation_max\n", "\n", "# Get the simulation data for all forcings and all climate models\n", "ghg, aer, nat, historical, maximum_historical_list = get_model_dataset(model_name = 'ALL', normalize = True, filter = False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following table shows the number of simulations per forcing per climate model (Table 1. of the paper). It should be noted that the paper lists a value of 50 AER simulations and 30 NAT simulations for the CanESM5 model, while the data show the opposite, thus the mistake is probably due to a manual labeling error. " ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
| \n", " | Model Name | \n", "#GHG | \n", "#AER | \n", "#NAT | \n", "#HIST | \n", "
|---|---|---|---|---|---|
| 0 | \n", "CanESM5 | \n", "50 | \n", "30 | \n", "50 | \n", "65 | \n", "
| 1 | \n", "CNRM | \n", "9 | \n", "10 | \n", "10 | \n", "30 | \n", "
| 2 | \n", "IPSL | \n", "10 | \n", "10 | \n", "10 | \n", "32 | \n", "
| 3 | \n", "ACCESS | \n", "3 | \n", "3 | \n", "3 | \n", "30 | \n", "
| 4 | \n", "BCC | \n", "3 | \n", "3 | \n", "3 | \n", "3 | \n", "
| 5 | \n", "FGOALS | \n", "3 | \n", "3 | \n", "3 | \n", "6 | \n", "
| 6 | \n", "HadGEM3 | \n", "4 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 7 | \n", "MIRO | \n", "3 | \n", "3 | \n", "3 | \n", "50 | \n", "
| 8 | \n", "ESM2 | \n", "5 | \n", "5 | \n", "5 | \n", "7 | \n", "
| 9 | \n", "NorESM2 | \n", "3 | \n", "3 | \n", "3 | \n", "3 | \n", "
| 10 | \n", "CESM2 | \n", "3 | \n", "2 | \n", "3 | \n", "11 | \n", "
| 11 | \n", "GISS | \n", "10 | \n", "12 | \n", "20 | \n", "19 | \n", "