From 71befc91614a6a3bfd0a73fbaafc27bbe73fcf1a Mon Sep 17 00:00:00 2001 From: Paul Heubel Date: Wed, 17 Jul 2024 19:25:31 +0200 Subject: [PATCH 01/12] FIX #75. Final addition of Bilibili links. --- .../Projects_GoodResearchPractices/Projects_Tutorial8.ipynb | 2 +- tutorials/W1D1_ClimateSystemOverview/W1D1_Tutorial5.ipynb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/Projects_GoodResearchPractices/Projects_Tutorial8.ipynb b/tutorials/Projects_GoodResearchPractices/Projects_Tutorial8.ipynb index d7e974053..c751055bd 100644 --- a/tutorials/Projects_GoodResearchPractices/Projects_Tutorial8.ipynb +++ b/tutorials/Projects_GoodResearchPractices/Projects_Tutorial8.ipynb @@ -99,7 +99,7 @@ " return tab_contents\n", "\n", "\n", - "video_ids = [('Youtube', 'HEsrjlyza5o'), ('Bilibili', 'BV1494y1B7qs')]\n", + "video_ids = [('Youtube', 'HEsrjlyza5o'), ('Bilibili', 'BV1NtbyeeEqA')]\n", "tab_contents = display_videos(video_ids, W=730, H=410)\n", "tabs = widgets.Tab()\n", "tabs.children = tab_contents\n", diff --git a/tutorials/W1D1_ClimateSystemOverview/W1D1_Tutorial5.ipynb b/tutorials/W1D1_ClimateSystemOverview/W1D1_Tutorial5.ipynb index 500f42b8d..facc1531c 100644 --- a/tutorials/W1D1_ClimateSystemOverview/W1D1_Tutorial5.ipynb +++ b/tutorials/W1D1_ClimateSystemOverview/W1D1_Tutorial5.ipynb @@ -216,7 +216,7 @@ " return tab_contents\n", "\n", "\n", - "video_ids = [('Youtube', 'SyvFyT3jVM8'), ('Bilibili', 'BV1ho4y1C7Eo')]\n", + "video_ids = [('Youtube', 'SyvFyT3jVM8'), ('Bilibili', 'BV1PhbyeaEMk')]\n", "tab_contents = display_videos(video_ids, W=730, H=410)\n", "tabs = widgets.Tab()\n", "tabs.children = tab_contents\n", From 798a714fcd0350b10f7ad19640a17cc71dccd1dd Mon Sep 17 00:00:00 2001 From: Paul Heubel Date: Fri, 19 Jul 2024 15:23:47 +0200 Subject: [PATCH 02/12] py version update to 3.9.18 --- .../W1D2_Tutorial6.ipynb | 80 +++++-------------- 1 file changed, 21 insertions(+), 59 deletions(-) diff --git a/tutorials/W1D2_Ocean-AtmosphereReanalysis/W1D2_Tutorial6.ipynb b/tutorials/W1D2_Ocean-AtmosphereReanalysis/W1D2_Tutorial6.ipynb index 3091a8933..4068e0475 100644 --- a/tutorials/W1D2_Ocean-AtmosphereReanalysis/W1D2_Tutorial6.ipynb +++ b/tutorials/W1D2_Ocean-AtmosphereReanalysis/W1D2_Tutorial6.ipynb @@ -66,7 +66,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "tags": [ "colab" ] @@ -82,9 +81,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "import xarray as xr\n", @@ -101,8 +98,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -130,8 +126,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -158,8 +153,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -177,7 +171,6 @@ "execution_count": null, "metadata": { "cellView": "form", - "execution": {}, "tags": [] }, "outputs": [], @@ -235,7 +228,6 @@ "execution_count": null, "metadata": { "cellView": "form", - "execution": {}, "pycharm": { "name": "#%%\n" }, @@ -271,9 +263,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# import preprocessed ECCO data. This data is full depth temperature data over 1992 to 2016 (annual mean)\n", @@ -301,9 +291,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# Quick plot of the ocean temperature in Kelvin\n", @@ -324,9 +312,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# take the temporal mean over the period 1992 to 1994\n", @@ -348,9 +334,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# plot the zonal mean section of this data\n", @@ -390,9 +374,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "theta_area_int = (\n", @@ -403,9 +385,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# define reference density of salt water and the specific heat capacity\n", @@ -460,9 +440,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "area_of_ocean = (\n", @@ -492,9 +470,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# to_remove explanation\n", @@ -508,8 +484,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -540,9 +515,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# this cell may take a while to run!\n", @@ -624,9 +597,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "fig, ax = plt.subplots()\n", @@ -667,9 +638,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# to_remove explanation\n", @@ -683,8 +652,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -713,9 +681,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# first let's plot where heat is stored in the mean\n", @@ -769,9 +735,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# we already defined an object that's the mean over years 1992 to 1994 (subset_theta)\n", @@ -799,9 +763,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# plot 2 maps to compare changes in heat content in those two layers\n", @@ -920,7 +882,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.19" + "version": "3.9.18" } }, "nbformat": 4, From fba26fce9c3c71e5349a307cec44b938122ef861 Mon Sep 17 00:00:00 2001 From: Paul Heubel Date: Sun, 21 Jul 2024 22:52:51 +0200 Subject: [PATCH 03/12] FIX #89. Removed last years T5 and T6 from /student and /instructor. --- .../instructor/W2D1_Tutorial5.ipynb | 716 ------------------ .../instructor/W2D1_Tutorial6.ipynb | 635 ---------------- .../student/W2D1_Tutorial5.ipynb | 606 --------------- .../student/W2D1_Tutorial6.ipynb | 585 -------------- 4 files changed, 2542 deletions(-) delete mode 100644 tutorials/W2D1_AnEnsembleofFutures/instructor/W2D1_Tutorial5.ipynb delete mode 100644 tutorials/W2D1_AnEnsembleofFutures/instructor/W2D1_Tutorial6.ipynb delete mode 100644 tutorials/W2D1_AnEnsembleofFutures/student/W2D1_Tutorial5.ipynb delete mode 100644 tutorials/W2D1_AnEnsembleofFutures/student/W2D1_Tutorial6.ipynb diff --git a/tutorials/W2D1_AnEnsembleofFutures/instructor/W2D1_Tutorial5.ipynb b/tutorials/W2D1_AnEnsembleofFutures/instructor/W2D1_Tutorial5.ipynb deleted file mode 100644 index 774e4a28d..000000000 --- a/tutorials/W2D1_AnEnsembleofFutures/instructor/W2D1_Tutorial5.ipynb +++ /dev/null @@ -1,716 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuromatch/climate-course-content/blob/main/tutorials/W2D1_FutureClimate-IPCCIPhysicalBasis/W2D1_Tutorial5.ipynb)   \"Open\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Tutorial 5: Internal Climate Variability\n", - "\n", - "**Week 2, Day 1, Future Climate: The Physical Basis**\n", - "\n", - "**Content creators:** Brodie Pearson, Julius Busecke, Tom Nicholas\n", - "\n", - "**Content reviewers:** Younkap Nina Duplex, Zahra Khodakaramimaghsoud, Sloane Garelick, Peter Ohue, Jenna Pearson, Derick Temfack, Peizhen Yang, Cheng Zhang, Chi Zhang, Ohad Zivan\n", - "\n", - "**Content editors:** Jenna Pearson, Ohad Zivan, Chi Zhang\n", - "\n", - "**Production editors:** Wesley Banfield, Jenna Pearson, Chi Zhang, Ohad Zivan\n", - "\n", - "**Our 2023 Sponsors:** NASA TOPS, Google DeepMind, and CMIP\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Tutorial Objectives\n", - "\n", - "In this tutorial, we will learn about the concept of internal climate variability, how it influences the predictability of climate phenomena and how it contributes to uncertainty in CMIP6 models. We will work with a _single-model ensemble_, which utilizes the _MPI-ESM1-2-LR_ model from CMIP6, to isolate and quantify internal climate variability.\n", - "\n", - "By the end of this tutorial, you would be able to:\n", - "\n", - "- Understand the importance of internal climate variability and its role in climate prediction and model uncertainty.\n", - "- Create and evaluate a single-model ensemble using IPCC uncertainty bands, providing a visual representation of model uncertainty.\n", - "- Contrast the uncertainty due to internal variability against the uncertainty within a multi-model ensemble (which includes internal variability _and_ the impacts of human/coding choices).\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Setup\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "executionInfo": { - "elapsed": 93464, - "status": "ok", - "timestamp": 1683413540687, - "user": { - "displayName": "Sloane Garelick", - "userId": "04706287370408131987" - }, - "user_tz": 240 - }, - "tags": [ - "colab" - ] - }, - "outputs": [], - "source": [ - "# installations ( uncomment and run this cell ONLY when using google colab or kaggle )\n", - "\n", - "# !pip install condacolab &> /dev/null\n", - "# import condacolab\n", - "# condacolab.install()\n", - "\n", - "# # Install all packages in one call (+ use mamba instead of conda), this must in one line or code will fail\n", - "# !mamba install xarray-datatree intake-esm gcsfs xmip aiohttp nc-time-axis cf_xarray xarrayutils &> /dev/null" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# imports\n", - "import time\n", - "\n", - "tic = time.time()\n", - "\n", - "import intake\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import xarray as xr\n", - "\n", - "from xmip.preprocessing import combined_preprocessing\n", - "from xarrayutils.plotting import shaded_line_plot\n", - "\n", - "from datatree import DataTree\n", - "from xmip.postprocessing import _parse_metric" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# @title Figure settings\n", - "import ipywidgets as widgets # interactive display\n", - "\n", - "plt.style.use(\n", - " \"https://raw.githubusercontent.com/ClimateMatchAcademy/course-content/main/cma.mplstyle\"\n", - ")\n", - "\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# @title Helper functions\n", - "\n", - "\n", - "def global_mean(ds: xr.Dataset) -> xr.Dataset:\n", - " \"\"\"Global average, weighted by the cell area\"\"\"\n", - " return ds.weighted(ds.areacello.fillna(0)).mean([\"x\", \"y\"], keep_attrs=True)\n", - "\n", - "\n", - "# Calculate anomaly to reference period\n", - "def datatree_anomaly(dt):\n", - " dt_out = DataTree()\n", - " for model, subtree in dt.items():\n", - " # for the coding exercise, ellipses will go after sel on the following line\n", - " ref = dt[model][\"historical\"].ds.sel(time=slice(\"1950\", \"1980\")).mean()\n", - " dt_out[model] = subtree - ref\n", - " return dt_out\n", - "\n", - "\n", - "def plot_historical_ssp126_combined(dt):\n", - " for model in dt.keys():\n", - " datasets = []\n", - " for experiment in [\"historical\", \"ssp126\"]:\n", - " datasets.append(dt[model][experiment].ds.tos)\n", - "\n", - " da_combined = xr.concat(datasets, dim=\"time\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# @title Video 1: Internal Climate Variability\n", - "\n", - "from ipywidgets import widgets\n", - "from IPython.display import YouTubeVideo\n", - "from IPython.display import IFrame\n", - "from IPython.display import display\n", - "\n", - "\n", - "class PlayVideo(IFrame):\n", - " def __init__(self, id, source, page=1, width=400, height=300, **kwargs):\n", - " self.id = id\n", - " if source == \"Bilibili\":\n", - " src = f\"https://player.bilibili.com/player.html?bvid={id}&page={page}\"\n", - " elif source == \"Osf\":\n", - " src = f\"https://mfr.ca-1.osf.io/render?url=https://osf.io/download/{id}/?direct%26mode=render\"\n", - " super(PlayVideo, self).__init__(src, width, height, **kwargs)\n", - "\n", - "\n", - "def display_videos(video_ids, W=400, H=300, fs=1):\n", - " tab_contents = []\n", - " for i, video_id in enumerate(video_ids):\n", - " out = widgets.Output()\n", - " with out:\n", - " if video_ids[i][0] == \"Youtube\":\n", - " video = YouTubeVideo(\n", - " id=video_ids[i][1], width=W, height=H, fs=fs, rel=0\n", - " )\n", - " print(\n", - " f\"Video available at https://youtube.com/watch?v={video.id}\")\n", - " else:\n", - " video = PlayVideo(\n", - " id=video_ids[i][1],\n", - " source=video_ids[i][0],\n", - " width=W,\n", - " height=H,\n", - " fs=fs,\n", - " autoplay=False,\n", - " )\n", - " if video_ids[i][0] == \"Bilibili\":\n", - " print(\n", - " f\"Video available at https://www.bilibili.com/video/{video.id}\"\n", - " )\n", - " elif video_ids[i][0] == \"Osf\":\n", - " print(f\"Video available at https://osf.io/{video.id}\")\n", - " display(video)\n", - " tab_contents.append(out)\n", - " return tab_contents\n", - "\n", - "\n", - "video_ids = [(\"Youtube\", \"YcIAaljLRh4\"), (\"Bilibili\", \"BV1HF41197qn\")]\n", - "tab_contents = display_videos(video_ids, W=730, H=410)\n", - "tabs = widgets.Tab()\n", - "tabs.children = tab_contents\n", - "for i in range(len(tab_contents)):\n", - " tabs.set_title(i, video_ids[i][0])\n", - "display(tabs)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "pycharm": { - "name": "#%%\n" - }, - "tags": [ - "remove-input" - ] - }, - "outputs": [], - "source": [ - "# @markdown\n", - "from ipywidgets import widgets\n", - "from IPython.display import IFrame\n", - "\n", - "link_id = \"cy5bh\"\n", - "\n", - "download_link = f\"https://osf.io/download/{link_id}/\"\n", - "render_link = f\"https://mfr.ca-1.osf.io/render?url=https://osf.io/{link_id}/?direct%26mode=render%26action=download%26mode=render\"\n", - "# @markdown\n", - "out = widgets.Output()\n", - "with out:\n", - " print(f\"If you want to download the slides: {download_link}\")\n", - " display(IFrame(src=f\"{render_link}\", width=730, height=410))\n", - "display(out)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Section 1: Internal Climate Variability & Single-model Ensembles\n", - "\n", - "One of the CMIP6 models we are using in today's tutorials, _MPI-ESM1-2-LR_, is part of single-model ensemble, where its modelling centre carried out multiple simulations of the model for many of the CMIP6 experiments. To create a single-model ensemble, the modelling centre will run a model using the same forcing data, but with small changes in the initial conditions. Due to the chaotic nature of the climate system, these small changes in initial conditions lead to differences in the modelled climate as time progresses. These differences are often referred to as internal variability. By running this single-model ensemble and comparing the results to simulations using different forcing datasets, it allows us to separate the internal variability from the externally-forced variability. If you are interested in learning more about large ensemble climate models, you can [read this paper](https://esd.copernicus.org/articles/12/401/2021/).\n", - "\n", - "Let's take advantage of this single-model ensemble to quantify the internal variability of this model's simulated climate, and contrast this against the multi-model uncertainty we diagnosed in the previous tutorial.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "## Coding Exercise 1.1\n", - "\n", - "Complete the following code to:\n", - "\n", - "1. Load 5 different _realizations_ of the _MPI-ESM1-2-LR_ experiments (_r1i1p1f1_ through _r5i1p1f1_). This numbering convention means they were each initialized using a different time-snapshot of the base/spin-up simulation.\n", - "2. Plot the _historical_ and _SSP1-2.6_ experiment data for each realization, using a distinct color for each realization, but keeping that color the same across both the historical period and future period for a given realization.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "execution": {}, - "executionInfo": { - "elapsed": 420, - "status": "error", - "timestamp": 1683413710306, - "user": { - "displayName": "Sloane Garelick", - "userId": "04706287370408131987" - }, - "user_tz": 240 - }, - "tags": [] - }, - "source": [ - "```python\n", - "col = intake.open_esm_datastore(\n", - " \"https://storage.googleapis.com/cmip6/pangeo-cmip6.json\"\n", - ") # open an intake catalog containing the Pangeo CMIP cloud data\n", - "\n", - "cat_ensemble = col.search(\n", - " source_id=\"MPI-ESM1-2-LR\",\n", - " variable_id=\"tos\",\n", - " table_id=\"Omon\",\n", - " # select the 5 ensemble members described above\n", - " member_id=[\"r1i1p1f1\", \"r2i1p1f1\", \"r3i1p1f1\", \"r4i1p1f1\", \"r5i1p1f1\"],\n", - " grid_label=\"gn\",\n", - " experiment_id=[\"historical\", \"ssp126\", \"ssp585\"],\n", - " require_all_on=[\"source_id\", \"member_id\"],\n", - ")\n", - "\n", - "# convert the sub-catalog into a datatree object, by opening each dataset into an xarray.Dataset (without loading the data)\n", - "kwargs = dict(\n", - " preprocess=combined_preprocessing, # apply xMIP fixes to each dataset\n", - " xarray_open_kwargs=dict(\n", - " use_cftime=True\n", - " ), # ensure all datasets use the same time index\n", - " storage_options={\n", - " \"token\": \"anon\"\n", - " }, # anonymous/public authentication to google cloud storage\n", - ")\n", - "# hopefully we can implement https://github.com/intake/intake-esm/issues/562 before the\n", - "# actual tutorial, so this would be a lot cleaner\n", - "cat_ensemble.esmcat.aggregation_control.groupby_attrs = [\"source_id\", \"experiment_id\"]\n", - "dt_ensemble = cat_ensemble.to_datatree(**kwargs)\n", - "\n", - "cat_area = col.search(\n", - " source_id=[\"MPI-ESM1-2-LR\"],\n", - " # for the coding exercise, ellipses will go after the equals on this line\n", - " variable_id=\"areacello\",\n", - " member_id=\"r1i1p1f1\",\n", - " table_id=\"Ofx\", # for the coding exercise, ellipses will go after the equals on this line\n", - " grid_label=\"gn\",\n", - " experiment_id=[\n", - " \"historical\"\n", - " ], # for the coding exercise, ellipses will go after the equals on this line\n", - " require_all_on=[\"source_id\"],\n", - ")\n", - "# hopefully we can implement https://github.com/intake/intake-esm/issues/562 before the\n", - "# actual tutorial, so this would be a lot cleaner\n", - "cat_area.esmcat.aggregation_control.groupby_attrs = [\"source_id\", \"experiment_id\"]\n", - "dt_area = cat_area.to_datatree(**kwargs)\n", - "\n", - "# add the area (we can reuse the area from before, since for a given model the horizontal are does not vary between members)\n", - "dt_ensemble_with_area = DataTree()\n", - "for model, subtree in dt_ensemble.items():\n", - " metric = dt_area[\"MPI-ESM1-2-LR\"][\"historical\"].ds[\"areacello\"].squeeze()\n", - " dt_ensemble_with_area[model] = subtree.map_over_subtree(_parse_metric, metric)\n", - "\n", - "# global average\n", - "# average every dataset in the tree globally\n", - "dt_ensemble_gm = dt_ensemble_with_area.map_over_subtree(global_mean)\n", - "\n", - "# calculate anomaly\n", - "dt_ensemble_gm_anomaly = datatree_anomaly(dt_ensemble_gm)\n", - "\n", - "\n", - "def plot_historical_ssp126_ensemble_combined(dt, ax):\n", - " for model in dt.keys():\n", - " datasets = []\n", - " for experiment in [\"historical\", \"ssp126\"]:\n", - " datasets.append(dt[model][experiment].ds.coarsen(time=12).mean().tos)\n", - "\n", - " # concatenate the historical and ssp126 timeseries for each ensemble member\n", - " da_combined = ...\n", - " # plot annual averages\n", - " da_combined.plot(hue=\"member_id\", ax=ax)\n", - "\n", - "\n", - "fig, ax = plt.subplots()\n", - "# Uncomment below after filling in above ellipses\n", - "# plot_historical_ssp126_ensemble_combined(dt_ensemble_gm_anomaly, ax)\n", - "\n", - "ax.set_title(\n", - " \"Global Mean SST Anomaly in SSP1-2.6 from a 5-member single-model ensemble\"\n", - ")\n", - "ax.set_ylabel(\"Global Mean SST Anomaly [$^\\circ$C]\")\n", - "ax.set_xlabel(\"Year\")\n", - "\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "executionInfo": { - "elapsed": 183867, - "status": "ok", - "timestamp": 1683413898135, - "user": { - "displayName": "Sloane Garelick", - "userId": "04706287370408131987" - }, - "user_tz": 240 - }, - "tags": [] - }, - "outputs": [], - "source": [ - "# to_remove solution\n", - "col = intake.open_esm_datastore(\n", - " \"https://storage.googleapis.com/cmip6/pangeo-cmip6.json\"\n", - ") # open an intake catalog containing the Pangeo CMIP cloud data\n", - "\n", - "cat_ensemble = col.search(\n", - " source_id=\"MPI-ESM1-2-LR\",\n", - " variable_id=\"tos\",\n", - " table_id=\"Omon\",\n", - " # select the 5 ensemble members described above\n", - " member_id=[\"r1i1p1f1\", \"r2i1p1f1\", \"r3i1p1f1\", \"r4i1p1f1\", \"r5i1p1f1\"],\n", - " grid_label=\"gn\",\n", - " experiment_id=[\"historical\", \"ssp126\", \"ssp585\"],\n", - " require_all_on=[\"source_id\", \"member_id\"],\n", - ")\n", - "\n", - "# convert the sub-catalog into a datatree object, by opening each dataset into an xarray.Dataset (without loading the data)\n", - "kwargs = dict(\n", - " preprocess=combined_preprocessing, # apply xMIP fixes to each dataset\n", - " xarray_open_kwargs=dict(\n", - " use_cftime=True\n", - " ), # ensure all datasets use the same time index\n", - " storage_options={\n", - " \"token\": \"anon\"\n", - " }, # anonymous/public authentication to google cloud storage\n", - ")\n", - "# hopefully we can implement https://github.com/intake/intake-esm/issues/562 before the\n", - "# actual tutorial, so this would be a lot cleaner\n", - "cat_ensemble.esmcat.aggregation_control.groupby_attrs = [\"source_id\", \"experiment_id\"]\n", - "dt_ensemble = cat_ensemble.to_datatree(**kwargs)\n", - "\n", - "cat_area = col.search(\n", - " source_id=[\"MPI-ESM1-2-LR\"],\n", - " # for the coding exercise, ellipses will go after the equals on this line\n", - " variable_id=\"areacello\",\n", - " member_id=\"r1i1p1f1\",\n", - " table_id=\"Ofx\", # for the coding exercise, ellipses will go after the equals on this line\n", - " grid_label=\"gn\",\n", - " experiment_id=[\n", - " \"historical\"\n", - " ], # for the coding exercise, ellipses will go after the equals on this line\n", - " require_all_on=[\"source_id\"],\n", - ")\n", - "# hopefully we can implement https://github.com/intake/intake-esm/issues/562 before the\n", - "# actual tutorial, so this would be a lot cleaner\n", - "cat_area.esmcat.aggregation_control.groupby_attrs = [\"source_id\", \"experiment_id\"]\n", - "dt_area = cat_area.to_datatree(**kwargs)\n", - "\n", - "# add the area (we can reuse the area from before, since for a given model the horizontal are does not vary between members)\n", - "dt_ensemble_with_area = DataTree()\n", - "for model, subtree in dt_ensemble.items():\n", - " metric = dt_area[\"MPI-ESM1-2-LR\"][\"historical\"].ds[\"areacello\"].squeeze()\n", - " dt_ensemble_with_area[model] = subtree.map_over_subtree(_parse_metric, metric)\n", - "\n", - "# global average\n", - "# average every dataset in the tree globally\n", - "dt_ensemble_gm = dt_ensemble_with_area.map_over_subtree(global_mean)\n", - "\n", - "# calculate anomaly\n", - "dt_ensemble_gm_anomaly = datatree_anomaly(dt_ensemble_gm)\n", - "\n", - "\n", - "def plot_historical_ssp126_ensemble_combined(dt, ax):\n", - " for model in dt.keys():\n", - " datasets = []\n", - " for experiment in [\"historical\", \"ssp126\"]:\n", - " datasets.append(dt[model][experiment].ds.coarsen(time=12).mean().tos)\n", - "\n", - " # concatenate the historical and ssp126 timeseries for each ensemble member\n", - " da_combined = xr.concat(datasets, dim=\"time\")\n", - " # plot annual averages\n", - " da_combined.plot(hue=\"member_id\", ax=ax)\n", - "\n", - "\n", - "fig, ax = plt.subplots()\n", - "# Uncomment below after filling in above ellipses\n", - "# plot_historical_ssp126_ensemble_combined(dt_ensemble_gm_anomaly, ax)\n", - "plot_historical_ssp126_ensemble_combined(dt_ensemble_gm_anomaly, ax)\n", - "\n", - "ax.set_title(\n", - " \"Global Mean SST Anomaly in SSP1-2.6 from a 5-member single-model ensemble\"\n", - ")\n", - "ax.set_ylabel(\"Global Mean SST Anomaly [$^\\circ$C]\")\n", - "ax.set_xlabel(\"Year\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "### **Coding Exercise 1.2**\n", - "\n", - "Complete the following code to:\n", - "\n", - "1. Repeat the final figure of the last tutorial, except now display means and uncertainty bands of the single-model ensemble that you just loaded, rather than the multi-model ensemble analyzed in the previous tutorial.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "execution": {}, - "executionInfo": { - "elapsed": 313, - "status": "error", - "timestamp": 1682795255008, - "user": { - "displayName": "Brodie Pearson", - "userId": "05269028596972519847" - }, - "user_tz": 420 - } - }, - "source": [ - "```python\n", - "fig, ax = plt.subplots()\n", - "for experiment, color in zip([\"historical\", \"ssp126\", \"ssp585\"], [\"C0\", \"C1\", \"C2\"]):\n", - " da = (\n", - " dt_ensemble_gm_anomaly[\"MPI-ESM1-2-LR\"][experiment]\n", - " .ds.tos.coarsen(time=12)\n", - " .mean()\n", - " .load()\n", - " )\n", - " # calculate the mean across ensemble members\n", - " da.mean(\"member_id\").plot(color=color, label=experiment, ax=ax)\n", - "\n", - " # shading representing spread between members\n", - " x = da.time.data\n", - " # diagnose the lower range of the likely bounds\n", - " da_lower = ...\n", - " # diagnose the upper range of the likely bounds\n", - " da_upper = ...\n", - " # Uncomment below after filling in above ellipses\n", - " # ax.fill_between(x, da_lower, da_upper, alpha=0.5, color=color)\n", - "\n", - "ax.set_title(\n", - " \"Global Mean SST Anomaly in SSP1-2.6 from a 5-member single-model ensemble\"\n", - ")\n", - "ax.set_ylabel(\"Global Mean SST Anomaly [$^\\circ$C]\")\n", - "ax.set_xlabel(\"Year\")\n", - "ax.legend()\n", - "\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "executionInfo": { - "elapsed": 206089, - "status": "ok", - "timestamp": 1683414257178, - "user": { - "displayName": "Sloane Garelick", - "userId": "04706287370408131987" - }, - "user_tz": 240 - }, - "tags": [] - }, - "outputs": [], - "source": [ - "# to_remove solution\n", - "fig, ax = plt.subplots()\n", - "for experiment, color in zip([\"historical\", \"ssp126\", \"ssp585\"], [\"C0\", \"C1\", \"C2\"]):\n", - " da = (\n", - " dt_ensemble_gm_anomaly[\"MPI-ESM1-2-LR\"][experiment]\n", - " .ds.tos.coarsen(time=12)\n", - " .mean()\n", - " .load()\n", - " )\n", - " # calculate the mean across ensemble members\n", - " da.mean(\"member_id\").plot(color=color, label=experiment, ax=ax)\n", - "\n", - " # shading representing spread between members\n", - " x = da.time.data\n", - " # diagnose the lower range of the likely bounds\n", - " da_lower = da.squeeze().quantile(0.17, dim=\"member_id\")\n", - " # diagnose the upper range of the likely bounds\n", - " da_upper = da.squeeze().quantile(0.83, dim=\"member_id\")\n", - " # Uncomment below after filling in above ellipses\n", - " # ax.fill_between(x, da_lower, da_upper, alpha=0.5, color=color)\n", - " ax.fill_between(x, da_lower, da_upper, alpha=0.5, color=color)\n", - "\n", - "ax.set_title(\n", - " \"Global Mean SST Anomaly in SSP1-2.6 from a 5-member single-model ensemble\"\n", - ")\n", - "ax.set_ylabel(\"Global Mean SST Anomaly [$^\\circ$C]\")\n", - "ax.set_xlabel(\"Year\")\n", - "ax.legend()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "### **Question 1.2: Climate Connection**\n", - "\n", - "1. How does this figure compare to the multi-model ensemble figure from the previous tutorial (included below)? Can you interpret differences using the science we have discussed today?\n", - "\n", - "![tutorial 4 solution](https://github.com/ClimateMatchAcademy/course-content/blob/main/tutorials/W2D1_FutureClimate-IPCCIPhysicalBasis/img/W2D1_Tutorial_5_Insert_Figure.png?raw=true)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {} - }, - "outputs": [], - "source": [ - "# to_remove explanation\n", - "\n", - "\"\"\"\n", - "1. The uncertainty of the single-model ensemble is much smaller than the uncertainty of the multi-model ensemble. The single-model ensemble variations are driven only by internal climate variability, whereas the multi-model ensemble includes inter-model differences (numerics, physics, discretization) in addition to internal climate variability. Comparing the two plots suggests that most of our uncertainty in future projections of global mean SST come from inter-model differences. Internal climate variability is a relatively small contributor to this uncertainty.\n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Summary\n", - "\n", - "In this tutorial, we explored the internal climate variability and its implications for climate modeling and prediction. We discussed the utility of single-model ensembles for isolating the effects of internal variability by contrasting simulations with identical physics, numerics, and discretization. We quantified the internal variability of _MPI-ESM1-2-LR_ model's simulated climate and compared it to the uncertainty introduced by multi-model ensembles. Through this tutorial, we better understand the boundaries of climate prediction and the different sources of uncertainty in CMIP6 models.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Resources\n", - "\n", - "This tutorial uses data from the simulations conducted as part of the [CMIP6](https://wcrp-cmip.org/) multi-model ensemble.\n", - "\n", - "For examples on how to access and analyze data, please visit the [Pangeo Cloud CMIP6 Gallery](https://gallery.pangeo.io/repos/pangeo-gallery/cmip6/index.html)\n", - "\n", - "For more information on what CMIP is and how to access the data, please see this [page](https://github.com/ClimateMatchAcademy/course-content/blob/main/tutorials/CMIP/CMIP_resource_bank.md).\n", - "\n", - "For more information about large ensemble climate modelling [see this paper](https://esd.copernicus.org/articles/12/401/2021/).\n" - ] - } - ], - "metadata": { - "colab": { - "collapsed_sections": [], - "include_colab_link": true, - "machine_shape": "hm", - "name": "W2D1_Tutorial5", - "provenance": [ - { - "file_id": "1WfT8oN22xywtecNriLptqi1SuGUSoIlc", - "timestamp": 1680298239014 - } - ], - "toc_visible": true - }, - "gpuClass": "standard", - "kernel": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.18" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/tutorials/W2D1_AnEnsembleofFutures/instructor/W2D1_Tutorial6.ipynb b/tutorials/W2D1_AnEnsembleofFutures/instructor/W2D1_Tutorial6.ipynb deleted file mode 100644 index b6eafb78f..000000000 --- a/tutorials/W2D1_AnEnsembleofFutures/instructor/W2D1_Tutorial6.ipynb +++ /dev/null @@ -1,635 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuromatch/climate-course-content/blob/main/tutorials/W2D1_FutureClimate-IPCCIPhysicalBasis/W2D1_Tutorial6.ipynb)   \"Open" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Tutorial 6: Synthesising & Interpreting Diverse Data Sources\n", - "\n", - "**Week 2, Day 1, Future Climate: The Physical Basis**\n", - "\n", - "**Content creators:** Brodie Pearson, Julius Busecke, Tom Nicholas\n", - "\n", - "**Content reviewers:** Younkap Nina Duplex, Zahra Khodakaramimaghsoud, Sloane Garelick, Peter Ohue, Jenna Pearson, Derick Temfack, Peizhen Yang, Cheng Zhang, Chi Zhang, Ohad Zivan\n", - "\n", - "**Content editors:** Jenna Pearson, Ohad Zivan, Chi Zhang\n", - "\n", - "**Production editors:** Wesley Banfield, Jenna Pearson, Chi Zhang, Ohad Zivan\n", - "\n", - "**Our 2023 Sponsors:** NASA TOPS, Google DeepMind, and CMIP" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Tutorial Objectives\n", - "In this tutorial, we will synthesize scientific knowledge from various sources and use this diverse information to validate and contextualize CMIP6 simulations. By the end of this tutorial, you will be able to \n", - "- Create a time series of global mean sea surface temperature from observations, models, and proxy data;\n", - "- Use this data to validate & contextualize climate models, and to provide a holistic picture of Earth's past and future climate evolution." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Setup\n", - "\n", - " \n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "executionInfo": { - "elapsed": 97497, - "status": "ok", - "timestamp": 1684265107976, - "user": { - "displayName": "Brodie Pearson", - "userId": "05269028596972519847" - }, - "user_tz": 420 - }, - "tags": [ - "colab" - ] - }, - "outputs": [], - "source": [ - "# installations ( uncomment and run this cell ONLY when using google colab or kaggle )\n", - "\n", - "# !pip install condacolab &> /dev/null\n", - "# import condacolab\n", - "# condacolab.install()\n", - "\n", - "# # Install all packages in one call (+ use mamba instead of conda), this must in one line or code will fail\n", - "# !mamba install xarray-datatree intake-esm gcsfs xmip aiohttp nc-time-axis cf_xarray xarrayutils &> /dev/null" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# imports\n", - "import time\n", - "\n", - "tic = time.time()\n", - "\n", - "import intake\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import xarray as xr\n", - "\n", - "from xmip.preprocessing import combined_preprocessing\n", - "from xarrayutils.plotting import shaded_line_plot\n", - "\n", - "from datatree import DataTree\n", - "from xmip.postprocessing import _parse_metric" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# @title Figure settings\n", - "import ipywidgets as widgets # interactive display\n", - "\n", - "plt.style.use(\n", - " \"https://raw.githubusercontent.com/ClimateMatchAcademy/course-content/main/cma.mplstyle\"\n", - ")\n", - "\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# @title Helper functions\n", - "\n", - "# If any helper functions you want to hide for clarity (that has been seen before\n", - "# or is simple/uniformative), add here\n", - "# If helper code depends on libraries that aren't used elsewhere,\n", - "# import those libaries here, rather than in the main import cell\n", - "\n", - "\n", - "def global_mean(ds: xr.Dataset) -> xr.Dataset:\n", - " \"\"\"Global average, weighted by the cell area\"\"\"\n", - " return ds.weighted(ds.areacello.fillna(0)).mean([\"x\", \"y\"], keep_attrs=True)\n", - "\n", - "\n", - "# calculate anomaly to reference period\n", - "def datatree_anomaly(dt):\n", - " dt_out = DataTree()\n", - " for model, subtree in dt.items():\n", - " # for the coding exercise, ellipses will go after sel on the following line\n", - " ref = dt[model][\"historical\"].ds.sel(time=slice(\"1950\", \"1980\")).mean()\n", - " dt_out[model] = subtree - ref\n", - " return dt_out\n", - "\n", - "\n", - "def plot_historical_ssp126_combined(dt):\n", - " for model in dt.keys():\n", - " datasets = []\n", - " for experiment in [\"historical\", \"ssp126\"]:\n", - " datasets.append(dt[model][experiment].ds.tos)\n", - "\n", - " da_combined = xr.concat(datasets, dim=\"time\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# @title Video 1: Historical Context for Future Projections\n", - "\n", - "from ipywidgets import widgets\n", - "from IPython.display import YouTubeVideo\n", - "from IPython.display import IFrame\n", - "from IPython.display import display\n", - "\n", - "\n", - "class PlayVideo(IFrame):\n", - " def __init__(self, id, source, page=1, width=400, height=300, **kwargs):\n", - " self.id = id\n", - " if source == 'Bilibili':\n", - " src = f'https://player.bilibili.com/player.html?bvid={id}&page={page}'\n", - " elif source == 'Osf':\n", - " src = f'https://mfr.ca-1.osf.io/render?url=https://osf.io/download/{id}/?direct%26mode=render'\n", - " super(PlayVideo, self).__init__(src, width, height, **kwargs)\n", - "\n", - "\n", - "def display_videos(video_ids, W=400, H=300, fs=1):\n", - " tab_contents = []\n", - " for i, video_id in enumerate(video_ids):\n", - " out = widgets.Output()\n", - " with out:\n", - " if video_ids[i][0] == 'Youtube':\n", - " video = YouTubeVideo(id=video_ids[i][1], width=W,\n", - " height=H, fs=fs, rel=0)\n", - " print(f'Video available at https://youtube.com/watch?v={video.id}')\n", - " else:\n", - " video = PlayVideo(id=video_ids[i][1], source=video_ids[i][0], width=W,\n", - " height=H, fs=fs, autoplay=False)\n", - " if video_ids[i][0] == 'Bilibili':\n", - " print(f'Video available at https://www.bilibili.com/video/{video.id}')\n", - " elif video_ids[i][0] == 'Osf':\n", - " print(f'Video available at https://osf.io/{video.id}')\n", - " display(video)\n", - " tab_contents.append(out)\n", - " return tab_contents\n", - "\n", - "\n", - "video_ids = [('Youtube', 'lodJMDN6lbg'), ('Bilibili', 'BV1Bu41157mn')]\n", - "tab_contents = display_videos(video_ids, W=730, H=410)\n", - "tabs = widgets.Tab()\n", - "tabs.children = tab_contents\n", - "for i in range(len(tab_contents)):\n", - " tabs.set_title(i, video_ids[i][0])\n", - "display(tabs)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "pycharm": { - "name": "#%%\n" - }, - "tags": [ - "remove-input" - ] - }, - "outputs": [], - "source": [ - "# @markdown\n", - "from ipywidgets import widgets\n", - "from IPython.display import IFrame\n", - "\n", - "link_id = \"b4fsp\"\n", - "\n", - "download_link = f\"https://osf.io/download/{link_id}/\"\n", - "render_link = f\"https://mfr.ca-1.osf.io/render?url=https://osf.io/{link_id}/?direct%26mode=render%26action=download%26mode=render\"\n", - "# @markdown\n", - "out = widgets.Output()\n", - "with out:\n", - " print(f\"If you want to download the slides: {download_link}\")\n", - " display(IFrame(src=f\"{render_link}\", width=730, height=410))\n", - "display(out)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Section 1: Reproduce Global SST for Historical and Future Scenario Experiments\n", - "\n", - "We are now going to reproduce the plot you created in Tutorial 4, which showed the likely range of CMIP6 simulated global mean sea surface temperature for historical and future scenario (*SSP1-2.6* and *SSP5-8.5*) experiments from a *multi-model ensemble*. However, now we will add some an additional dataset called *HadISST* which is an observational dataset spanning back to the 1870. Later in the tutorial, we will also include the paleo data you saw in the previous mini-lecture.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "## Section 1.1: Load CMIP6 SST Data from Several Models using `xarray`\n", - "\n", - "Let's load the five different CMIP6 models again for the three CMIP6 experiments.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "col = intake.open_esm_datastore(\n", - " \"https://storage.googleapis.com/cmip6/pangeo-cmip6.json\"\n", - ") # open an intake catalog containing the Pangeo CMIP cloud data\n", - "\n", - "# pick our five example models\n", - "# there are many more to test out! Try executing `col.df['source_id'].unique()` to get a list of all available models\n", - "source_ids = [\"IPSL-CM6A-LR\", \"GFDL-ESM4\", \"ACCESS-CM2\", \"MPI-ESM1-2-LR\", \"TaiESM1\"]\n", - "experiment_ids = [\"historical\", \"ssp126\", \"ssp585\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "executionInfo": { - "elapsed": 17912, - "status": "ok", - "timestamp": 1684265194265, - "user": { - "displayName": "Brodie Pearson", - "userId": "05269028596972519847" - }, - "user_tz": 420 - }, - "tags": [] - }, - "outputs": [], - "source": [ - "# from the full `col` object, create a subset using facet search\n", - "cat = col.search(\n", - " source_id=source_ids,\n", - " variable_id=\"tos\",\n", - " member_id=\"r1i1p1f1\",\n", - " table_id=\"Omon\",\n", - " grid_label=\"gn\",\n", - " experiment_id=experiment_ids,\n", - " require_all_on=[\n", - " \"source_id\"\n", - " ], # make sure that we only get models which have all of the above experiments\n", - ")\n", - "\n", - "# convert the sub-catalog into a datatree object, by opening each dataset into an xarray.Dataset (without loading the data)\n", - "kwargs = dict(\n", - " preprocess=combined_preprocessing, # apply xMIP fixes to each dataset\n", - " xarray_open_kwargs=dict(\n", - " use_cftime=True\n", - " ), # ensure all datasets use the same time index\n", - " storage_options={\n", - " \"token\": \"anon\"\n", - " }, # anonymous/public authentication to google cloud storage\n", - ")\n", - "\n", - "cat.esmcat.aggregation_control.groupby_attrs = [\"source_id\", \"experiment_id\"]\n", - "dt = cat.to_datatree(**kwargs)\n", - "\n", - "cat_area = col.search(\n", - " source_id=source_ids,\n", - " variable_id=\"areacello\", # for the coding exercise, ellipses will go after the equals on this line\n", - " member_id=\"r1i1p1f1\",\n", - " table_id=\"Ofx\", # for the coding exercise, ellipses will go after the equals on this line\n", - " grid_label=\"gn\",\n", - " experiment_id=[\n", - " \"historical\"\n", - " ], # for the coding exercise, ellipses will go after the equals on this line\n", - " require_all_on=[\"source_id\"],\n", - ")\n", - "\n", - "cat_area.esmcat.aggregation_control.groupby_attrs = [\"source_id\", \"experiment_id\"]\n", - "dt_area = cat_area.to_datatree(**kwargs)\n", - "\n", - "dt_with_area = DataTree()\n", - "\n", - "for model, subtree in dt.items():\n", - " metric = dt_area[model][\"historical\"].ds[\"areacello\"]\n", - " dt_with_area[model] = subtree.map_over_subtree(_parse_metric, metric)\n", - "\n", - "# average every dataset in the tree globally\n", - "dt_gm = dt_with_area.map_over_subtree(global_mean)\n", - "\n", - "dt_gm_anomaly = datatree_anomaly(dt_gm)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "\n", - "### Coding Exercise 1.1\n", - "\n", - "Complete the following code to:\n", - "\n", - "\n", - "1. Calculate a time series of the global mean sea surface temperature (GMSST) from the HadISST dataset\n", - "2. Subtract a base period from the HadISST GMSST time series. Use the same base period as the CMIP6 timeseries you are comparing against. " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "execution": {}, - "executionInfo": { - "elapsed": 114, - "status": "error", - "timestamp": 1684265198522, - "user": { - "displayName": "Brodie Pearson", - "userId": "05269028596972519847" - }, - "user_tz": 420 - } - }, - "source": [ - "```python\n", - "fig, ax = plt.subplots()\n", - "for experiment, color in zip([\"historical\", \"ssp126\", \"ssp585\"], [\"C0\", \"C1\", \"C2\"]):\n", - " datasets = []\n", - " for model in dt_gm_anomaly.keys():\n", - " annual_sst = (\n", - " dt_gm_anomaly[model][experiment]\n", - " .ds.tos.coarsen(time=12)\n", - " .mean()\n", - " .assign_coords(source_id=model)\n", - " .load()\n", - " )\n", - " datasets.append(\n", - " annual_sst.sel(time=slice(None, \"2100\")).load()\n", - " ) # the french model has a long running member for ssp 126 (we could change the model to keep this clean)\n", - " da = xr.concat(datasets, dim=\"source_id\", join=\"override\").squeeze()\n", - " da.mean(\"source_id\").plot(color=color, label=experiment, ax=ax)\n", - " x = da.time.data\n", - " da_lower = da.squeeze().quantile(0.17, dim=\"source_id\")\n", - " da_upper = da.squeeze().quantile(0.83, dim=\"source_id\")\n", - " ax.fill_between(x, da_lower, da_upper, alpha=0.5, color=color)\n", - "\n", - "# but now add observations (https://pangeo-forge.org/dashboard/feedstock/43)\n", - "store = \"https://ncsa.osn.xsede.org/Pangeo/pangeo-forge/HadISST-feedstock/hadisst.zarr\"\n", - "ds_obs = xr.open_dataset(store, engine=\"zarr\", chunks={}).convert_calendar(\n", - " \"standard\", use_cftime=True\n", - ")\n", - "# mask missing values\n", - "ds_obs = ds_obs.where(ds_obs > -1000)\n", - "weights = np.cos(\n", - " np.deg2rad(ds_obs.latitude)\n", - ") # In a regular lon/lat grid, area is ~cos(latitude)\n", - "# calculate weighted global mean for observations\n", - "sst_obs_gm = ...\n", - "# calculate anomaly for observations\n", - "sst_obs_gm_anomaly = ...\n", - "\n", - "# plot observations\n", - "# Uncomment below once you fill in the above ellipses\n", - "# sst_obs_gm_anomaly.coarsen(time=12, boundary=\"trim\").mean().plot(\n", - "# color=\"0.3\", label=\"Observations\", ax=ax\n", - "# )\n", - "ax.set_ylabel(\"Global Mean SST with respect to 1950-1980\")\n", - "ax.set_xlabel(\"Year\")\n", - "ax.legend()\n", - "\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "executionInfo": { - "elapsed": 66611, - "status": "ok", - "timestamp": 1684265266986, - "user": { - "displayName": "Brodie Pearson", - "userId": "05269028596972519847" - }, - "user_tz": 420 - }, - "tags": [] - }, - "outputs": [], - "source": [ - "# to_remove solution\n", - "fig, ax = plt.subplots()\n", - "for experiment, color in zip([\"historical\", \"ssp126\", \"ssp585\"], [\"C0\", \"C1\", \"C2\"]):\n", - " datasets = []\n", - " for model in dt_gm_anomaly.keys():\n", - " annual_sst = (\n", - " dt_gm_anomaly[model][experiment]\n", - " .ds.tos.coarsen(time=12)\n", - " .mean()\n", - " .assign_coords(source_id=model)\n", - " .load()\n", - " )\n", - " datasets.append(\n", - " annual_sst.sel(time=slice(None, \"2100\")).load()\n", - " ) # the french model has a long running member for ssp 126 (we could change the model to keep this clean)\n", - " da = xr.concat(datasets, dim=\"source_id\", join=\"override\").squeeze()\n", - " da.mean(\"source_id\").plot(color=color, label=experiment, ax=ax)\n", - " x = da.time.data\n", - " da_lower = da.squeeze().quantile(0.17, dim=\"source_id\")\n", - " da_upper = da.squeeze().quantile(0.83, dim=\"source_id\")\n", - " ax.fill_between(x, da_lower, da_upper, alpha=0.5, color=color)\n", - "\n", - "\n", - "# but now add observations (https://pangeo-forge.org/dashboard/feedstock/43)\n", - "store = \"https://ncsa.osn.xsede.org/Pangeo/pangeo-forge/HadISST-feedstock/hadisst.zarr\"\n", - "ds_obs = xr.open_dataset(store, engine=\"zarr\", chunks={}).convert_calendar(\n", - " \"standard\", use_cftime=True\n", - ")\n", - "# mask missing values\n", - "ds_obs = ds_obs.where(ds_obs > -1000)\n", - "weights = np.cos(\n", - " np.deg2rad(ds_obs.latitude)\n", - ") # In a regular lon/lat grid, area is ~cos(latitude)\n", - "# calculate weighted global mean for observations\n", - "sst_obs_gm = ds_obs.sst.weighted(weights).mean([\"longitude\", \"latitude\"])\n", - "# calculate anomaly for observations\n", - "sst_obs_gm_anomaly = sst_obs_gm - sst_obs_gm.sel(time=slice(\"1950\", \"1980\")).mean()\n", - "\n", - "# plot observations\n", - "# Uncomment below once you fill in the above ellipses\n", - "# sst_obs_gm_anomaly.coarsen(time=12, boundary=\"trim\").mean().plot(\n", - "# color=\"0.3\", label=\"Observations\", ax=ax\n", - "# )\n", - "sst_obs_gm_anomaly.coarsen(time=12, boundary=\"trim\").mean().plot(\n", - " color=\"0.3\", label=\"Observations\", ax=ax\n", - ")\n", - "ax.set_ylabel(\"Global Mean SST with respect to 1950-1980\")\n", - "ax.set_xlabel(\"Year\")\n", - "ax.legend()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "### Questions 1.1 Climate Connection\n", - "\n", - "Now that you have a modern and projected time series containing models and observations,\n", - "1. What context and/or validation of the simulations does this information provide?\n", - "2. What additional context/validation can you glean by also considering the paleo proxy information in the figure below? (This figure was shown in the last video)\n", - "\n", - "Note the paleo periods on this figure represent the Mid-Pleiocene Warm Period (MPWP), the Last Inter-glacial (LIG) ad the Last Glacial Maximum (LGM)\n", - "\n", - "![](https://github.com/ClimateMatchAcademy/course-content/blob/main/tutorials/W2D1_FutureClimate-IPCCIPhysicalBasis/img/W2D1_Tutorial_6_Insert_Figure.png?raw=true)\n", - "\n", - "This image shows part of panel a) from Figure 9.3 from the IPCC AR6 WG1 report. This figure has the following caption: **Figure 9.3** | Sea surface temperature (SST) and its changes with time. (a) Time series of global mean SST anomaly relative to 1950–1980 climatology. Shown are paleoclimate reconstructions and PMIP models, observational reanalyses (HadISST) and multi-model means from the Coupled Model Intercomparison Project (CMIP) historical simulations, CMIP projections, and HighResMIP experiment. (b) Map of observed SST (1995–2014 climatology HadISST). (c) Historical SST changes from observations. (d) CMIP 2005–2100 SST change rate. (e) Bias of CMIP. (f) CMIP change rate. (g) 2005–2050 change rate for SSP5-8.5 for the CMIP ensemble. (h) Bias of HighResMIP (bottom left) over 1995–2014. (i) HighResMIP change rate for 1950–2014. (j) 2005–2050 change rate for SSP5-8.5 for the HighResMIP ensemble. No overlay indicates regions with high model agreement, where ≥80% of models agree on sign of change. Diagonal lines indicate regions with low model agreement, where <80% of models agree on sign of change (see Cross-Chapter Box Atlas.1 for more information). Further details on data sources and processing are available in the chapter data table (Table 9.SM.9)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {} - }, - "outputs": [], - "source": [ - "# to_remove explanation\n", - "\n", - "\"\"\"\n", - "1. I will let you decide what you take away from synthesizing these figures and data!\n", - "\"\"\";" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Summary\n", - "\n", - "In the final tutorial of the day, we learned about the importance of synthesizing CMIP6 model data (future projections and historical simulations), alongside modern climate and palroclimate observations. This synthesis provides validation of CMIP6 simulation data, and it provides historical context for recent and projected rapid changes in Earth's climate, as many of these changes are unprecedented in human-recored history.\n", - "\n", - "In the upcoming tutorials, we will shift our focus towards the socio-economic aspects of future climate change. This exploration will take various forms, including the design of the Shared Socioeconomic Pathways (SSPs) we began using today. We'll contemplate the realism of different socio-economic future scenarios and examine their potential impacts on future climate forcings. Moreover, we'll delve into how a changing climate might affect society. As we proceed with the next tutorials, keep in mind the intricate connection between physical and socio-economic changes." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Resources\n", - "\n", - "This tutorial uses data from the simulations conducted as part of the [CMIP6](https://wcrp-cmip.org/) multi-model ensemble. \n", - "\n", - "For examples on how to access and analyze data, please visit the [Pangeo Cloud CMIP6 Gallery](https://gallery.pangeo.io/repos/pangeo-gallery/cmip6/index.html) \n", - "\n", - "For more information on what CMIP is and how to access the data, please see this [page](https://github.com/ClimateMatchAcademy/course-content/blob/main/tutorials/CMIP/CMIP_resource_bank.md)." - ] - } - ], - "metadata": { - "colab": { - "collapsed_sections": [], - "include_colab_link": true, - "machine_shape": "hm", - "name": "W2D1_Tutorial6", - "provenance": [ - { - "file_id": "1WfT8oN22xywtecNriLptqi1SuGUSoIlc", - "timestamp": 1680298239014 - } - ], - "toc_visible": true - }, - "gpuClass": "standard", - "kernel": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.18" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/tutorials/W2D1_AnEnsembleofFutures/student/W2D1_Tutorial5.ipynb b/tutorials/W2D1_AnEnsembleofFutures/student/W2D1_Tutorial5.ipynb deleted file mode 100644 index 344b3a796..000000000 --- a/tutorials/W2D1_AnEnsembleofFutures/student/W2D1_Tutorial5.ipynb +++ /dev/null @@ -1,606 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuromatch/climate-course-content/blob/main/tutorials/W2D1_FutureClimate-IPCCIPhysicalBasis/W2D1_Tutorial5.ipynb)   \"Open\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Tutorial 5: Internal Climate Variability\n", - "\n", - "**Week 2, Day 1, Future Climate: The Physical Basis**\n", - "\n", - "**Content creators:** Brodie Pearson, Julius Busecke, Tom Nicholas\n", - "\n", - "**Content reviewers:** Younkap Nina Duplex, Zahra Khodakaramimaghsoud, Sloane Garelick, Peter Ohue, Jenna Pearson, Derick Temfack, Peizhen Yang, Cheng Zhang, Chi Zhang, Ohad Zivan\n", - "\n", - "**Content editors:** Jenna Pearson, Ohad Zivan, Chi Zhang\n", - "\n", - "**Production editors:** Wesley Banfield, Jenna Pearson, Chi Zhang, Ohad Zivan\n", - "\n", - "**Our 2023 Sponsors:** NASA TOPS, Google DeepMind, and CMIP\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Tutorial Objectives\n", - "\n", - "In this tutorial, we will learn about the concept of internal climate variability, how it influences the predictability of climate phenomena and how it contributes to uncertainty in CMIP6 models. We will work with a _single-model ensemble_, which utilizes the _MPI-ESM1-2-LR_ model from CMIP6, to isolate and quantify internal climate variability.\n", - "\n", - "By the end of this tutorial, you would be able to:\n", - "\n", - "- Understand the importance of internal climate variability and its role in climate prediction and model uncertainty.\n", - "- Create and evaluate a single-model ensemble using IPCC uncertainty bands, providing a visual representation of model uncertainty.\n", - "- Contrast the uncertainty due to internal variability against the uncertainty within a multi-model ensemble (which includes internal variability _and_ the impacts of human/coding choices).\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Setup\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "executionInfo": { - "elapsed": 93464, - "status": "ok", - "timestamp": 1683413540687, - "user": { - "displayName": "Sloane Garelick", - "userId": "04706287370408131987" - }, - "user_tz": 240 - }, - "tags": [ - "colab" - ] - }, - "outputs": [], - "source": [ - "# installations ( uncomment and run this cell ONLY when using google colab or kaggle )\n", - "\n", - "# !pip install condacolab &> /dev/null\n", - "# import condacolab\n", - "# condacolab.install()\n", - "\n", - "# # Install all packages in one call (+ use mamba instead of conda), this must in one line or code will fail\n", - "# !mamba install xarray-datatree intake-esm gcsfs xmip aiohttp nc-time-axis cf_xarray xarrayutils &> /dev/null" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# imports\n", - "import time\n", - "\n", - "tic = time.time()\n", - "\n", - "import intake\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import xarray as xr\n", - "\n", - "from xmip.preprocessing import combined_preprocessing\n", - "from xarrayutils.plotting import shaded_line_plot\n", - "\n", - "from datatree import DataTree\n", - "from xmip.postprocessing import _parse_metric" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# @title Figure settings\n", - "import ipywidgets as widgets # interactive display\n", - "\n", - "plt.style.use(\n", - " \"https://raw.githubusercontent.com/ClimateMatchAcademy/course-content/main/cma.mplstyle\"\n", - ")\n", - "\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# @title Helper functions\n", - "\n", - "\n", - "def global_mean(ds: xr.Dataset) -> xr.Dataset:\n", - " \"\"\"Global average, weighted by the cell area\"\"\"\n", - " return ds.weighted(ds.areacello.fillna(0)).mean([\"x\", \"y\"], keep_attrs=True)\n", - "\n", - "\n", - "# Calculate anomaly to reference period\n", - "def datatree_anomaly(dt):\n", - " dt_out = DataTree()\n", - " for model, subtree in dt.items():\n", - " # for the coding exercise, ellipses will go after sel on the following line\n", - " ref = dt[model][\"historical\"].ds.sel(time=slice(\"1950\", \"1980\")).mean()\n", - " dt_out[model] = subtree - ref\n", - " return dt_out\n", - "\n", - "\n", - "def plot_historical_ssp126_combined(dt):\n", - " for model in dt.keys():\n", - " datasets = []\n", - " for experiment in [\"historical\", \"ssp126\"]:\n", - " datasets.append(dt[model][experiment].ds.tos)\n", - "\n", - " da_combined = xr.concat(datasets, dim=\"time\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# @title Video 1: Internal Climate Variability\n", - "\n", - "from ipywidgets import widgets\n", - "from IPython.display import YouTubeVideo\n", - "from IPython.display import IFrame\n", - "from IPython.display import display\n", - "\n", - "\n", - "class PlayVideo(IFrame):\n", - " def __init__(self, id, source, page=1, width=400, height=300, **kwargs):\n", - " self.id = id\n", - " if source == \"Bilibili\":\n", - " src = f\"https://player.bilibili.com/player.html?bvid={id}&page={page}\"\n", - " elif source == \"Osf\":\n", - " src = f\"https://mfr.ca-1.osf.io/render?url=https://osf.io/download/{id}/?direct%26mode=render\"\n", - " super(PlayVideo, self).__init__(src, width, height, **kwargs)\n", - "\n", - "\n", - "def display_videos(video_ids, W=400, H=300, fs=1):\n", - " tab_contents = []\n", - " for i, video_id in enumerate(video_ids):\n", - " out = widgets.Output()\n", - " with out:\n", - " if video_ids[i][0] == \"Youtube\":\n", - " video = YouTubeVideo(\n", - " id=video_ids[i][1], width=W, height=H, fs=fs, rel=0\n", - " )\n", - " print(\n", - " f\"Video available at https://youtube.com/watch?v={video.id}\")\n", - " else:\n", - " video = PlayVideo(\n", - " id=video_ids[i][1],\n", - " source=video_ids[i][0],\n", - " width=W,\n", - " height=H,\n", - " fs=fs,\n", - " autoplay=False,\n", - " )\n", - " if video_ids[i][0] == \"Bilibili\":\n", - " print(\n", - " f\"Video available at https://www.bilibili.com/video/{video.id}\"\n", - " )\n", - " elif video_ids[i][0] == \"Osf\":\n", - " print(f\"Video available at https://osf.io/{video.id}\")\n", - " display(video)\n", - " tab_contents.append(out)\n", - " return tab_contents\n", - "\n", - "\n", - "video_ids = [(\"Youtube\", \"YcIAaljLRh4\"), (\"Bilibili\", \"BV1HF41197qn\")]\n", - "tab_contents = display_videos(video_ids, W=730, H=410)\n", - "tabs = widgets.Tab()\n", - "tabs.children = tab_contents\n", - "for i in range(len(tab_contents)):\n", - " tabs.set_title(i, video_ids[i][0])\n", - "display(tabs)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "pycharm": { - "name": "#%%\n" - }, - "tags": [ - "remove-input" - ] - }, - "outputs": [], - "source": [ - "# @markdown\n", - "from ipywidgets import widgets\n", - "from IPython.display import IFrame\n", - "\n", - "link_id = \"cy5bh\"\n", - "\n", - "download_link = f\"https://osf.io/download/{link_id}/\"\n", - "render_link = f\"https://mfr.ca-1.osf.io/render?url=https://osf.io/{link_id}/?direct%26mode=render%26action=download%26mode=render\"\n", - "# @markdown\n", - "out = widgets.Output()\n", - "with out:\n", - " print(f\"If you want to download the slides: {download_link}\")\n", - " display(IFrame(src=f\"{render_link}\", width=730, height=410))\n", - "display(out)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Section 1: Internal Climate Variability & Single-model Ensembles\n", - "\n", - "One of the CMIP6 models we are using in today's tutorials, _MPI-ESM1-2-LR_, is part of single-model ensemble, where its modelling centre carried out multiple simulations of the model for many of the CMIP6 experiments. To create a single-model ensemble, the modelling centre will run a model using the same forcing data, but with small changes in the initial conditions. Due to the chaotic nature of the climate system, these small changes in initial conditions lead to differences in the modelled climate as time progresses. These differences are often referred to as internal variability. By running this single-model ensemble and comparing the results to simulations using different forcing datasets, it allows us to separate the internal variability from the externally-forced variability. If you are interested in learning more about large ensemble climate models, you can [read this paper](https://esd.copernicus.org/articles/12/401/2021/).\n", - "\n", - "Let's take advantage of this single-model ensemble to quantify the internal variability of this model's simulated climate, and contrast this against the multi-model uncertainty we diagnosed in the previous tutorial.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "## Coding Exercise 1.1\n", - "\n", - "Complete the following code to:\n", - "\n", - "1. Load 5 different _realizations_ of the _MPI-ESM1-2-LR_ experiments (_r1i1p1f1_ through _r5i1p1f1_). This numbering convention means they were each initialized using a different time-snapshot of the base/spin-up simulation.\n", - "2. Plot the _historical_ and _SSP1-2.6_ experiment data for each realization, using a distinct color for each realization, but keeping that color the same across both the historical period and future period for a given realization.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "executionInfo": { - "elapsed": 420, - "status": "error", - "timestamp": 1683413710306, - "user": { - "displayName": "Sloane Garelick", - "userId": "04706287370408131987" - }, - "user_tz": 240 - }, - "tags": [] - }, - "outputs": [], - "source": [ - "col = intake.open_esm_datastore(\n", - " \"https://storage.googleapis.com/cmip6/pangeo-cmip6.json\"\n", - ") # open an intake catalog containing the Pangeo CMIP cloud data\n", - "\n", - "cat_ensemble = col.search(\n", - " source_id=\"MPI-ESM1-2-LR\",\n", - " variable_id=\"tos\",\n", - " table_id=\"Omon\",\n", - " # select the 5 ensemble members described above\n", - " member_id=[\"r1i1p1f1\", \"r2i1p1f1\", \"r3i1p1f1\", \"r4i1p1f1\", \"r5i1p1f1\"],\n", - " grid_label=\"gn\",\n", - " experiment_id=[\"historical\", \"ssp126\", \"ssp585\"],\n", - " require_all_on=[\"source_id\", \"member_id\"],\n", - ")\n", - "\n", - "# convert the sub-catalog into a datatree object, by opening each dataset into an xarray.Dataset (without loading the data)\n", - "kwargs = dict(\n", - " preprocess=combined_preprocessing, # apply xMIP fixes to each dataset\n", - " xarray_open_kwargs=dict(\n", - " use_cftime=True\n", - " ), # ensure all datasets use the same time index\n", - " storage_options={\n", - " \"token\": \"anon\"\n", - " }, # anonymous/public authentication to google cloud storage\n", - ")\n", - "# hopefully we can implement https://github.com/intake/intake-esm/issues/562 before the\n", - "# actual tutorial, so this would be a lot cleaner\n", - "cat_ensemble.esmcat.aggregation_control.groupby_attrs = [\"source_id\", \"experiment_id\"]\n", - "dt_ensemble = cat_ensemble.to_datatree(**kwargs)\n", - "\n", - "cat_area = col.search(\n", - " source_id=[\"MPI-ESM1-2-LR\"],\n", - " # for the coding exercise, ellipses will go after the equals on this line\n", - " variable_id=\"areacello\",\n", - " member_id=\"r1i1p1f1\",\n", - " table_id=\"Ofx\", # for the coding exercise, ellipses will go after the equals on this line\n", - " grid_label=\"gn\",\n", - " experiment_id=[\n", - " \"historical\"\n", - " ], # for the coding exercise, ellipses will go after the equals on this line\n", - " require_all_on=[\"source_id\"],\n", - ")\n", - "# hopefully we can implement https://github.com/intake/intake-esm/issues/562 before the\n", - "# actual tutorial, so this would be a lot cleaner\n", - "cat_area.esmcat.aggregation_control.groupby_attrs = [\"source_id\", \"experiment_id\"]\n", - "dt_area = cat_area.to_datatree(**kwargs)\n", - "\n", - "# add the area (we can reuse the area from before, since for a given model the horizontal are does not vary between members)\n", - "dt_ensemble_with_area = DataTree()\n", - "for model, subtree in dt_ensemble.items():\n", - " metric = dt_area[\"MPI-ESM1-2-LR\"][\"historical\"].ds[\"areacello\"].squeeze()\n", - " dt_ensemble_with_area[model] = subtree.map_over_subtree(_parse_metric, metric)\n", - "\n", - "# global average\n", - "# average every dataset in the tree globally\n", - "dt_ensemble_gm = dt_ensemble_with_area.map_over_subtree(global_mean)\n", - "\n", - "# calculate anomaly\n", - "dt_ensemble_gm_anomaly = datatree_anomaly(dt_ensemble_gm)\n", - "\n", - "\n", - "def plot_historical_ssp126_ensemble_combined(dt, ax):\n", - " for model in dt.keys():\n", - " datasets = []\n", - " for experiment in [\"historical\", \"ssp126\"]:\n", - " datasets.append(dt[model][experiment].ds.coarsen(time=12).mean().tos)\n", - "\n", - " # concatenate the historical and ssp126 timeseries for each ensemble member\n", - " da_combined = ...\n", - " # plot annual averages\n", - " da_combined.plot(hue=\"member_id\", ax=ax)\n", - "\n", - "\n", - "fig, ax = plt.subplots()\n", - "# Uncomment below after filling in above ellipses\n", - "# plot_historical_ssp126_ensemble_combined(dt_ensemble_gm_anomaly, ax)\n", - "\n", - "ax.set_title(\n", - " \"Global Mean SST Anomaly in SSP1-2.6 from a 5-member single-model ensemble\"\n", - ")\n", - "ax.set_ylabel(\"Global Mean SST Anomaly [$^\\circ$C]\")\n", - "ax.set_xlabel(\"Year\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "execution": {}, - "executionInfo": { - "elapsed": 183867, - "status": "ok", - "timestamp": 1683413898135, - "user": { - "displayName": "Sloane Garelick", - "userId": "04706287370408131987" - }, - "user_tz": 240 - }, - "tags": [] - }, - "source": [ - "[*Click for solution*](https://github.com/neuromatch/climate-course-content/tree/main/tutorials/W2D1_FutureClimate-IPCCIPhysicalBasis/solutions/W2D1_Tutorial5_Solution_df9b548d.py)\n", - "\n", - "*Example output:*\n", - "\n", - "Solution hint\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "### **Coding Exercise 1.2**\n", - "\n", - "Complete the following code to:\n", - "\n", - "1. Repeat the final figure of the last tutorial, except now display means and uncertainty bands of the single-model ensemble that you just loaded, rather than the multi-model ensemble analyzed in the previous tutorial.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "executionInfo": { - "elapsed": 313, - "status": "error", - "timestamp": 1682795255008, - "user": { - "displayName": "Brodie Pearson", - "userId": "05269028596972519847" - }, - "user_tz": 420 - } - }, - "outputs": [], - "source": [ - "fig, ax = plt.subplots()\n", - "for experiment, color in zip([\"historical\", \"ssp126\", \"ssp585\"], [\"C0\", \"C1\", \"C2\"]):\n", - " da = (\n", - " dt_ensemble_gm_anomaly[\"MPI-ESM1-2-LR\"][experiment]\n", - " .ds.tos.coarsen(time=12)\n", - " .mean()\n", - " .load()\n", - " )\n", - " # calculate the mean across ensemble members\n", - " da.mean(\"member_id\").plot(color=color, label=experiment, ax=ax)\n", - "\n", - " # shading representing spread between members\n", - " x = da.time.data\n", - " # diagnose the lower range of the likely bounds\n", - " da_lower = ...\n", - " # diagnose the upper range of the likely bounds\n", - " da_upper = ...\n", - " # Uncomment below after filling in above ellipses\n", - " # ax.fill_between(x, da_lower, da_upper, alpha=0.5, color=color)\n", - "\n", - "ax.set_title(\n", - " \"Global Mean SST Anomaly in SSP1-2.6 from a 5-member single-model ensemble\"\n", - ")\n", - "ax.set_ylabel(\"Global Mean SST Anomaly [$^\\circ$C]\")\n", - "ax.set_xlabel(\"Year\")\n", - "ax.legend()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "execution": {}, - "executionInfo": { - "elapsed": 206089, - "status": "ok", - "timestamp": 1683414257178, - "user": { - "displayName": "Sloane Garelick", - "userId": "04706287370408131987" - }, - "user_tz": 240 - }, - "tags": [] - }, - "source": [ - "[*Click for solution*](https://github.com/neuromatch/climate-course-content/tree/main/tutorials/W2D1_FutureClimate-IPCCIPhysicalBasis/solutions/W2D1_Tutorial5_Solution_4f341bd8.py)\n", - "\n", - "*Example output:*\n", - "\n", - "Solution hint\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "### **Question 1.2: Climate Connection**\n", - "\n", - "1. How does this figure compare to the multi-model ensemble figure from the previous tutorial (included below)? Can you interpret differences using the science we have discussed today?\n", - "\n", - "![tutorial 4 solution](https://github.com/ClimateMatchAcademy/course-content/blob/main/tutorials/W2D1_FutureClimate-IPCCIPhysicalBasis/img/W2D1_Tutorial_5_Insert_Figure.png?raw=true)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "execution": {} - }, - "source": [ - "[*Click for solution*](https://github.com/neuromatch/climate-course-content/tree/main/tutorials/W2D1_FutureClimate-IPCCIPhysicalBasis/solutions/W2D1_Tutorial5_Solution_872e9265.py)\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Summary\n", - "\n", - "In this tutorial, we explored the internal climate variability and its implications for climate modeling and prediction. We discussed the utility of single-model ensembles for isolating the effects of internal variability by contrasting simulations with identical physics, numerics, and discretization. We quantified the internal variability of _MPI-ESM1-2-LR_ model's simulated climate and compared it to the uncertainty introduced by multi-model ensembles. Through this tutorial, we better understand the boundaries of climate prediction and the different sources of uncertainty in CMIP6 models.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Resources\n", - "\n", - "This tutorial uses data from the simulations conducted as part of the [CMIP6](https://wcrp-cmip.org/) multi-model ensemble.\n", - "\n", - "For examples on how to access and analyze data, please visit the [Pangeo Cloud CMIP6 Gallery](https://gallery.pangeo.io/repos/pangeo-gallery/cmip6/index.html)\n", - "\n", - "For more information on what CMIP is and how to access the data, please see this [page](https://github.com/ClimateMatchAcademy/course-content/blob/main/tutorials/CMIP/CMIP_resource_bank.md).\n", - "\n", - "For more information about large ensemble climate modelling [see this paper](https://esd.copernicus.org/articles/12/401/2021/).\n" - ] - } - ], - "metadata": { - "colab": { - "collapsed_sections": [], - "include_colab_link": true, - "machine_shape": "hm", - "name": "W2D1_Tutorial5", - "provenance": [ - { - "file_id": "1WfT8oN22xywtecNriLptqi1SuGUSoIlc", - "timestamp": 1680298239014 - } - ], - "toc_visible": true - }, - "gpuClass": "standard", - "kernel": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.18" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/tutorials/W2D1_AnEnsembleofFutures/student/W2D1_Tutorial6.ipynb b/tutorials/W2D1_AnEnsembleofFutures/student/W2D1_Tutorial6.ipynb deleted file mode 100644 index 60ef8c4b4..000000000 --- a/tutorials/W2D1_AnEnsembleofFutures/student/W2D1_Tutorial6.ipynb +++ /dev/null @@ -1,585 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuromatch/climate-course-content/blob/main/tutorials/W2D1_FutureClimate-IPCCIPhysicalBasis/W2D1_Tutorial6.ipynb)   \"Open" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Tutorial 6: Synthesising & Interpreting Diverse Data Sources\n", - "\n", - "**Week 2, Day 1, Future Climate: The Physical Basis**\n", - "\n", - "**Content creators:** Brodie Pearson, Julius Busecke, Tom Nicholas\n", - "\n", - "**Content reviewers:** Younkap Nina Duplex, Zahra Khodakaramimaghsoud, Sloane Garelick, Peter Ohue, Jenna Pearson, Derick Temfack, Peizhen Yang, Cheng Zhang, Chi Zhang, Ohad Zivan\n", - "\n", - "**Content editors:** Jenna Pearson, Ohad Zivan, Chi Zhang\n", - "\n", - "**Production editors:** Wesley Banfield, Jenna Pearson, Chi Zhang, Ohad Zivan\n", - "\n", - "**Our 2023 Sponsors:** NASA TOPS, Google DeepMind, and CMIP" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Tutorial Objectives\n", - "In this tutorial, we will synthesize scientific knowledge from various sources and use this diverse information to validate and contextualize CMIP6 simulations. By the end of this tutorial, you will be able to \n", - "- Create a time series of global mean sea surface temperature from observations, models, and proxy data;\n", - "- Use this data to validate & contextualize climate models, and to provide a holistic picture of Earth's past and future climate evolution." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Setup\n", - "\n", - " \n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "executionInfo": { - "elapsed": 97497, - "status": "ok", - "timestamp": 1684265107976, - "user": { - "displayName": "Brodie Pearson", - "userId": "05269028596972519847" - }, - "user_tz": 420 - }, - "tags": [ - "colab" - ] - }, - "outputs": [], - "source": [ - "# installations ( uncomment and run this cell ONLY when using google colab or kaggle )\n", - "\n", - "# !pip install condacolab &> /dev/null\n", - "# import condacolab\n", - "# condacolab.install()\n", - "\n", - "# # Install all packages in one call (+ use mamba instead of conda), this must in one line or code will fail\n", - "# !mamba install xarray-datatree intake-esm gcsfs xmip aiohttp nc-time-axis cf_xarray xarrayutils &> /dev/null" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# imports\n", - "import time\n", - "\n", - "tic = time.time()\n", - "\n", - "import intake\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import xarray as xr\n", - "\n", - "from xmip.preprocessing import combined_preprocessing\n", - "from xarrayutils.plotting import shaded_line_plot\n", - "\n", - "from datatree import DataTree\n", - "from xmip.postprocessing import _parse_metric" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# @title Figure settings\n", - "import ipywidgets as widgets # interactive display\n", - "\n", - "plt.style.use(\n", - " \"https://raw.githubusercontent.com/ClimateMatchAcademy/course-content/main/cma.mplstyle\"\n", - ")\n", - "\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# @title Helper functions\n", - "\n", - "# If any helper functions you want to hide for clarity (that has been seen before\n", - "# or is simple/uniformative), add here\n", - "# If helper code depends on libraries that aren't used elsewhere,\n", - "# import those libaries here, rather than in the main import cell\n", - "\n", - "\n", - "def global_mean(ds: xr.Dataset) -> xr.Dataset:\n", - " \"\"\"Global average, weighted by the cell area\"\"\"\n", - " return ds.weighted(ds.areacello.fillna(0)).mean([\"x\", \"y\"], keep_attrs=True)\n", - "\n", - "\n", - "# calculate anomaly to reference period\n", - "def datatree_anomaly(dt):\n", - " dt_out = DataTree()\n", - " for model, subtree in dt.items():\n", - " # for the coding exercise, ellipses will go after sel on the following line\n", - " ref = dt[model][\"historical\"].ds.sel(time=slice(\"1950\", \"1980\")).mean()\n", - " dt_out[model] = subtree - ref\n", - " return dt_out\n", - "\n", - "\n", - "def plot_historical_ssp126_combined(dt):\n", - " for model in dt.keys():\n", - " datasets = []\n", - " for experiment in [\"historical\", \"ssp126\"]:\n", - " datasets.append(dt[model][experiment].ds.tos)\n", - "\n", - " da_combined = xr.concat(datasets, dim=\"time\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "# @title Video 1: Historical Context for Future Projections\n", - "\n", - "from ipywidgets import widgets\n", - "from IPython.display import YouTubeVideo\n", - "from IPython.display import IFrame\n", - "from IPython.display import display\n", - "\n", - "\n", - "class PlayVideo(IFrame):\n", - " def __init__(self, id, source, page=1, width=400, height=300, **kwargs):\n", - " self.id = id\n", - " if source == 'Bilibili':\n", - " src = f'https://player.bilibili.com/player.html?bvid={id}&page={page}'\n", - " elif source == 'Osf':\n", - " src = f'https://mfr.ca-1.osf.io/render?url=https://osf.io/download/{id}/?direct%26mode=render'\n", - " super(PlayVideo, self).__init__(src, width, height, **kwargs)\n", - "\n", - "\n", - "def display_videos(video_ids, W=400, H=300, fs=1):\n", - " tab_contents = []\n", - " for i, video_id in enumerate(video_ids):\n", - " out = widgets.Output()\n", - " with out:\n", - " if video_ids[i][0] == 'Youtube':\n", - " video = YouTubeVideo(id=video_ids[i][1], width=W,\n", - " height=H, fs=fs, rel=0)\n", - " print(f'Video available at https://youtube.com/watch?v={video.id}')\n", - " else:\n", - " video = PlayVideo(id=video_ids[i][1], source=video_ids[i][0], width=W,\n", - " height=H, fs=fs, autoplay=False)\n", - " if video_ids[i][0] == 'Bilibili':\n", - " print(f'Video available at https://www.bilibili.com/video/{video.id}')\n", - " elif video_ids[i][0] == 'Osf':\n", - " print(f'Video available at https://osf.io/{video.id}')\n", - " display(video)\n", - " tab_contents.append(out)\n", - " return tab_contents\n", - "\n", - "\n", - "video_ids = [('Youtube', 'lodJMDN6lbg'), ('Bilibili', 'BV1Bu41157mn')]\n", - "tab_contents = display_videos(video_ids, W=730, H=410)\n", - "tabs = widgets.Tab()\n", - "tabs.children = tab_contents\n", - "for i in range(len(tab_contents)):\n", - " tabs.set_title(i, video_ids[i][0])\n", - "display(tabs)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "execution": {}, - "pycharm": { - "name": "#%%\n" - }, - "tags": [ - "remove-input" - ] - }, - "outputs": [], - "source": [ - "# @markdown\n", - "from ipywidgets import widgets\n", - "from IPython.display import IFrame\n", - "\n", - "link_id = \"b4fsp\"\n", - "\n", - "download_link = f\"https://osf.io/download/{link_id}/\"\n", - "render_link = f\"https://mfr.ca-1.osf.io/render?url=https://osf.io/{link_id}/?direct%26mode=render%26action=download%26mode=render\"\n", - "# @markdown\n", - "out = widgets.Output()\n", - "with out:\n", - " print(f\"If you want to download the slides: {download_link}\")\n", - " display(IFrame(src=f\"{render_link}\", width=730, height=410))\n", - "display(out)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Section 1: Reproduce Global SST for Historical and Future Scenario Experiments\n", - "\n", - "We are now going to reproduce the plot you created in Tutorial 4, which showed the likely range of CMIP6 simulated global mean sea surface temperature for historical and future scenario (*SSP1-2.6* and *SSP5-8.5*) experiments from a *multi-model ensemble*. However, now we will add some an additional dataset called *HadISST* which is an observational dataset spanning back to the 1870. Later in the tutorial, we will also include the paleo data you saw in the previous mini-lecture.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "## Section 1.1: Load CMIP6 SST Data from Several Models using `xarray`\n", - "\n", - "Let's load the five different CMIP6 models again for the three CMIP6 experiments.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "tags": [] - }, - "outputs": [], - "source": [ - "col = intake.open_esm_datastore(\n", - " \"https://storage.googleapis.com/cmip6/pangeo-cmip6.json\"\n", - ") # open an intake catalog containing the Pangeo CMIP cloud data\n", - "\n", - "# pick our five example models\n", - "# there are many more to test out! Try executing `col.df['source_id'].unique()` to get a list of all available models\n", - "source_ids = [\"IPSL-CM6A-LR\", \"GFDL-ESM4\", \"ACCESS-CM2\", \"MPI-ESM1-2-LR\", \"TaiESM1\"]\n", - "experiment_ids = [\"historical\", \"ssp126\", \"ssp585\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "executionInfo": { - "elapsed": 17912, - "status": "ok", - "timestamp": 1684265194265, - "user": { - "displayName": "Brodie Pearson", - "userId": "05269028596972519847" - }, - "user_tz": 420 - }, - "tags": [] - }, - "outputs": [], - "source": [ - "# from the full `col` object, create a subset using facet search\n", - "cat = col.search(\n", - " source_id=source_ids,\n", - " variable_id=\"tos\",\n", - " member_id=\"r1i1p1f1\",\n", - " table_id=\"Omon\",\n", - " grid_label=\"gn\",\n", - " experiment_id=experiment_ids,\n", - " require_all_on=[\n", - " \"source_id\"\n", - " ], # make sure that we only get models which have all of the above experiments\n", - ")\n", - "\n", - "# convert the sub-catalog into a datatree object, by opening each dataset into an xarray.Dataset (without loading the data)\n", - "kwargs = dict(\n", - " preprocess=combined_preprocessing, # apply xMIP fixes to each dataset\n", - " xarray_open_kwargs=dict(\n", - " use_cftime=True\n", - " ), # ensure all datasets use the same time index\n", - " storage_options={\n", - " \"token\": \"anon\"\n", - " }, # anonymous/public authentication to google cloud storage\n", - ")\n", - "\n", - "cat.esmcat.aggregation_control.groupby_attrs = [\"source_id\", \"experiment_id\"]\n", - "dt = cat.to_datatree(**kwargs)\n", - "\n", - "cat_area = col.search(\n", - " source_id=source_ids,\n", - " variable_id=\"areacello\", # for the coding exercise, ellipses will go after the equals on this line\n", - " member_id=\"r1i1p1f1\",\n", - " table_id=\"Ofx\", # for the coding exercise, ellipses will go after the equals on this line\n", - " grid_label=\"gn\",\n", - " experiment_id=[\n", - " \"historical\"\n", - " ], # for the coding exercise, ellipses will go after the equals on this line\n", - " require_all_on=[\"source_id\"],\n", - ")\n", - "\n", - "cat_area.esmcat.aggregation_control.groupby_attrs = [\"source_id\", \"experiment_id\"]\n", - "dt_area = cat_area.to_datatree(**kwargs)\n", - "\n", - "dt_with_area = DataTree()\n", - "\n", - "for model, subtree in dt.items():\n", - " metric = dt_area[model][\"historical\"].ds[\"areacello\"]\n", - " dt_with_area[model] = subtree.map_over_subtree(_parse_metric, metric)\n", - "\n", - "# average every dataset in the tree globally\n", - "dt_gm = dt_with_area.map_over_subtree(global_mean)\n", - "\n", - "dt_gm_anomaly = datatree_anomaly(dt_gm)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "\n", - "### Coding Exercise 1.1\n", - "\n", - "Complete the following code to:\n", - "\n", - "\n", - "1. Calculate a time series of the global mean sea surface temperature (GMSST) from the HadISST dataset\n", - "2. Subtract a base period from the HadISST GMSST time series. Use the same base period as the CMIP6 timeseries you are comparing against. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "execution": {}, - "executionInfo": { - "elapsed": 114, - "status": "error", - "timestamp": 1684265198522, - "user": { - "displayName": "Brodie Pearson", - "userId": "05269028596972519847" - }, - "user_tz": 420 - } - }, - "outputs": [], - "source": [ - "fig, ax = plt.subplots()\n", - "for experiment, color in zip([\"historical\", \"ssp126\", \"ssp585\"], [\"C0\", \"C1\", \"C2\"]):\n", - " datasets = []\n", - " for model in dt_gm_anomaly.keys():\n", - " annual_sst = (\n", - " dt_gm_anomaly[model][experiment]\n", - " .ds.tos.coarsen(time=12)\n", - " .mean()\n", - " .assign_coords(source_id=model)\n", - " .load()\n", - " )\n", - " datasets.append(\n", - " annual_sst.sel(time=slice(None, \"2100\")).load()\n", - " ) # the french model has a long running member for ssp 126 (we could change the model to keep this clean)\n", - " da = xr.concat(datasets, dim=\"source_id\", join=\"override\").squeeze()\n", - " da.mean(\"source_id\").plot(color=color, label=experiment, ax=ax)\n", - " x = da.time.data\n", - " da_lower = da.squeeze().quantile(0.17, dim=\"source_id\")\n", - " da_upper = da.squeeze().quantile(0.83, dim=\"source_id\")\n", - " ax.fill_between(x, da_lower, da_upper, alpha=0.5, color=color)\n", - "\n", - "# but now add observations (https://pangeo-forge.org/dashboard/feedstock/43)\n", - "store = \"https://ncsa.osn.xsede.org/Pangeo/pangeo-forge/HadISST-feedstock/hadisst.zarr\"\n", - "ds_obs = xr.open_dataset(store, engine=\"zarr\", chunks={}).convert_calendar(\n", - " \"standard\", use_cftime=True\n", - ")\n", - "# mask missing values\n", - "ds_obs = ds_obs.where(ds_obs > -1000)\n", - "weights = np.cos(\n", - " np.deg2rad(ds_obs.latitude)\n", - ") # In a regular lon/lat grid, area is ~cos(latitude)\n", - "# calculate weighted global mean for observations\n", - "sst_obs_gm = ...\n", - "# calculate anomaly for observations\n", - "sst_obs_gm_anomaly = ...\n", - "\n", - "# plot observations\n", - "# Uncomment below once you fill in the above ellipses\n", - "# sst_obs_gm_anomaly.coarsen(time=12, boundary=\"trim\").mean().plot(\n", - "# color=\"0.3\", label=\"Observations\", ax=ax\n", - "# )\n", - "ax.set_ylabel(\"Global Mean SST with respect to 1950-1980\")\n", - "ax.set_xlabel(\"Year\")\n", - "ax.legend()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "execution": {}, - "executionInfo": { - "elapsed": 66611, - "status": "ok", - "timestamp": 1684265266986, - "user": { - "displayName": "Brodie Pearson", - "userId": "05269028596972519847" - }, - "user_tz": 420 - }, - "tags": [] - }, - "source": [ - "[*Click for solution*](https://github.com/neuromatch/climate-course-content/tree/main/tutorials/W2D1_FutureClimate-IPCCIPhysicalBasis/solutions/W2D1_Tutorial6_Solution_970b7c15.py)\n", - "\n", - "*Example output:*\n", - "\n", - "Solution hint\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "### Questions 1.1 Climate Connection\n", - "\n", - "Now that you have a modern and projected time series containing models and observations,\n", - "1. What context and/or validation of the simulations does this information provide?\n", - "2. What additional context/validation can you glean by also considering the paleo proxy information in the figure below? (This figure was shown in the last video)\n", - "\n", - "Note the paleo periods on this figure represent the Mid-Pleiocene Warm Period (MPWP), the Last Inter-glacial (LIG) ad the Last Glacial Maximum (LGM)\n", - "\n", - "![](https://github.com/ClimateMatchAcademy/course-content/blob/main/tutorials/W2D1_FutureClimate-IPCCIPhysicalBasis/img/W2D1_Tutorial_6_Insert_Figure.png?raw=true)\n", - "\n", - "This image shows part of panel a) from Figure 9.3 from the IPCC AR6 WG1 report. This figure has the following caption: **Figure 9.3** | Sea surface temperature (SST) and its changes with time. (a) Time series of global mean SST anomaly relative to 1950–1980 climatology. Shown are paleoclimate reconstructions and PMIP models, observational reanalyses (HadISST) and multi-model means from the Coupled Model Intercomparison Project (CMIP) historical simulations, CMIP projections, and HighResMIP experiment. (b) Map of observed SST (1995–2014 climatology HadISST). (c) Historical SST changes from observations. (d) CMIP 2005–2100 SST change rate. (e) Bias of CMIP. (f) CMIP change rate. (g) 2005–2050 change rate for SSP5-8.5 for the CMIP ensemble. (h) Bias of HighResMIP (bottom left) over 1995–2014. (i) HighResMIP change rate for 1950–2014. (j) 2005–2050 change rate for SSP5-8.5 for the HighResMIP ensemble. No overlay indicates regions with high model agreement, where ≥80% of models agree on sign of change. Diagonal lines indicate regions with low model agreement, where <80% of models agree on sign of change (see Cross-Chapter Box Atlas.1 for more information). Further details on data sources and processing are available in the chapter data table (Table 9.SM.9)." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "execution": {} - }, - "source": [ - "[*Click for solution*](https://github.com/neuromatch/climate-course-content/tree/main/tutorials/W2D1_FutureClimate-IPCCIPhysicalBasis/solutions/W2D1_Tutorial6_Solution_7818edff.py)\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Summary\n", - "\n", - "In the final tutorial of the day, we learned about the importance of synthesizing CMIP6 model data (future projections and historical simulations), alongside modern climate and palroclimate observations. This synthesis provides validation of CMIP6 simulation data, and it provides historical context for recent and projected rapid changes in Earth's climate, as many of these changes are unprecedented in human-recored history.\n", - "\n", - "In the upcoming tutorials, we will shift our focus towards the socio-economic aspects of future climate change. This exploration will take various forms, including the design of the Shared Socioeconomic Pathways (SSPs) we began using today. We'll contemplate the realism of different socio-economic future scenarios and examine their potential impacts on future climate forcings. Moreover, we'll delve into how a changing climate might affect society. As we proceed with the next tutorials, keep in mind the intricate connection between physical and socio-economic changes." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "execution": {} - }, - "source": [ - "# Resources\n", - "\n", - "This tutorial uses data from the simulations conducted as part of the [CMIP6](https://wcrp-cmip.org/) multi-model ensemble. \n", - "\n", - "For examples on how to access and analyze data, please visit the [Pangeo Cloud CMIP6 Gallery](https://gallery.pangeo.io/repos/pangeo-gallery/cmip6/index.html) \n", - "\n", - "For more information on what CMIP is and how to access the data, please see this [page](https://github.com/ClimateMatchAcademy/course-content/blob/main/tutorials/CMIP/CMIP_resource_bank.md)." - ] - } - ], - "metadata": { - "colab": { - "collapsed_sections": [], - "include_colab_link": true, - "machine_shape": "hm", - "name": "W2D1_Tutorial6", - "provenance": [ - { - "file_id": "1WfT8oN22xywtecNriLptqi1SuGUSoIlc", - "timestamp": 1680298239014 - } - ], - "toc_visible": true - }, - "gpuClass": "standard", - "kernel": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.18" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} From edda4f4cbe074061ea2010fc800b1dd0958896ef Mon Sep 17 00:00:00 2001 From: Paul Heubel Date: Sun, 21 Jul 2024 23:27:37 +0200 Subject: [PATCH 04/12] FIX part 1 of #90. Month amount and time span update. Hyperlink still missing. --- projects/docs/continuing_your_project_after_the_course.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/docs/continuing_your_project_after_the_course.md b/projects/docs/continuing_your_project_after_the_course.md index 2da661e4a..1cec3573a 100644 --- a/projects/docs/continuing_your_project_after_the_course.md +++ b/projects/docs/continuing_your_project_after_the_course.md @@ -1,7 +1,7 @@ # Climatematch Impact Scholars program -Scientific discovery takes time. Recognizing this, Neuromatch and Climatematch Academy, in collaboration with the [**Learning the Earth with Artificial Intelligence and Physics (LEAP)**](https://leap.columbia.edu/), a National Science Foundation (NSF)-funded Science & Technology Center based at Columbia University, offer the Climate Impact Scholars program. This program provides selected student groups with access to computing resources for 10 months after the courses end, allowing scholars to further develop projects initiated during the courses or to explore new projects provided by the academies or our partners. -Scholars will benefit from the mentorship of experienced researchers who will provide guidance, constructive feedback, and professional insights over the course of 10 months, from October to July, enhancing the quality and impact of their work. +Scientific discovery takes time. Recognizing this, Neuromatch and Climatematch Academy, in collaboration with the [**Learning the Earth with Artificial Intelligence and Physics (LEAP)**](https://leap.columbia.edu/), a National Science Foundation (NSF)-funded Science & Technology Center based at Columbia University, offer the Climate Impact Scholars program. This program provides selected student groups with access to computing resources for 6 months after the courses end, allowing scholars to further develop projects initiated during the courses or to explore new projects provided by the academies or our partners. +Scholars will benefit from the mentorship of experienced researchers who will provide guidance, constructive feedback, and professional insights over the course of 10 months, from October 2024 to March 2025, enhancing the quality and impact of their work. Additionally, scholars will have the chance to present their research to seasoned experts, gaining valuable feedback and engaging with a broader scientific community. This program also includes the opportunity to showcase their projects at the Academies Open Ceremony, inspiring future scholars and demonstrating the significance of their research. From 7416ad5923fe5b27e473315d8867862c919342eb Mon Sep 17 00:00:00 2001 From: Paul Heubel Date: Sun, 21 Jul 2024 23:41:40 +0200 Subject: [PATCH 05/12] FIX #86. Corrected oxygen 18 (16O) to oxygen 18 (18O). --- tutorials/W1D4_Paleoclimate/W1D4_Tutorial2.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/W1D4_Paleoclimate/W1D4_Tutorial2.ipynb b/tutorials/W1D4_Paleoclimate/W1D4_Tutorial2.ipynb index 72200afc1..e09623e48 100644 --- a/tutorials/W1D4_Paleoclimate/W1D4_Tutorial2.ipynb +++ b/tutorials/W1D4_Paleoclimate/W1D4_Tutorial2.ipynb @@ -51,7 +51,7 @@ "\n", "### An Overview of Isotopes in Paleoclimate\n", "\n", - "In this tutorial, and many of the remaining tutorials on this day, you will be looking at data of hydrogen and oxygen isotopes (δD and δ18O). As you learned in the video, isotopes are forms of the same element that contain the same numbers of protons but different numbers of neutrons. The two oxygen isotopes that are most commonly used in paleoclimate are oxygen 16 (16O), which is the which is the **\"lighter\"** oxygen isotope, and oxygen 18 (16O), which is the **\"heavier\"** oxygen isotope. The two hydrogen isotopes that are most commonly used in paleoclimate are hydrogen (H), which is the **\"lighter\"** oxygen isotope, and deuterium (D), which is the **\"heavier\"** oxygen isotope. \n", + "In this tutorial, and many of the remaining tutorials on this day, you will be looking at data of hydrogen and oxygen isotopes (δD and δ18O). As you learned in the video, isotopes are forms of the same element that contain the same numbers of protons but different numbers of neutrons. The two oxygen isotopes that are most commonly used in paleoclimate are oxygen 16 (16O), which is the which is the **\"lighter\"** oxygen isotope, and oxygen 18 (18O), which is the **\"heavier\"** oxygen isotope. The two hydrogen isotopes that are most commonly used in paleoclimate are hydrogen (H), which is the **\"lighter\"** oxygen isotope, and deuterium (D), which is the **\"heavier\"** oxygen isotope. \n", "\n", "![image-1.png](https://github.com/neuromatch/climate-course-content/blob/main/tutorials/W1D4_Paleoclimate/images/t2_image1.png?raw=true)\n", "\n", From 9940386f237b2d9c680f67d27ed761216933b730 Mon Sep 17 00:00:00 2001 From: Paul Heubel Date: Mon, 22 Jul 2024 11:25:40 +0200 Subject: [PATCH 06/12] Python version from 3.9.19 to 3.9.18. --- .../W1D5_Tutorial7.ipynb | 58 ++++--------------- 1 file changed, 12 insertions(+), 46 deletions(-) diff --git a/tutorials/W1D5_IntroductiontoClimateModeling/W1D5_Tutorial7.ipynb b/tutorials/W1D5_IntroductiontoClimateModeling/W1D5_Tutorial7.ipynb index 8bde70873..06158082b 100644 --- a/tutorials/W1D5_IntroductiontoClimateModeling/W1D5_Tutorial7.ipynb +++ b/tutorials/W1D5_IntroductiontoClimateModeling/W1D5_Tutorial7.ipynb @@ -60,7 +60,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "tags": [ "colab" ] @@ -82,7 +81,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "executionInfo": { "elapsed": 2, "status": "ok", @@ -116,8 +114,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -146,7 +143,6 @@ "execution_count": null, "metadata": { "cellView": "form", - "execution": {}, "tags": [] }, "outputs": [], @@ -166,7 +162,6 @@ "execution_count": null, "metadata": { "cellView": "form", - "execution": {}, "tags": [] }, "outputs": [], @@ -223,8 +218,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -237,7 +231,6 @@ "execution_count": null, "metadata": { "cellView": "form", - "execution": {}, "pycharm": { "name": "#%%\n" }, @@ -261,8 +254,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -332,9 +324,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "col = intake.open_esm_datastore(\n", @@ -408,7 +398,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "executionInfo": { "elapsed": 6561, "status": "ok", @@ -458,9 +447,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "cat.keys()" @@ -485,7 +472,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "executionInfo": { "elapsed": 1011, "status": "ok", @@ -530,9 +516,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "ssp585 = dt[\"TaiESM1\"][\"ssp585\"].ds\n", @@ -551,9 +535,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "ssp585.tos" @@ -583,7 +565,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "executionInfo": { "elapsed": 11488, "status": "ok", @@ -645,7 +626,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "executionInfo": { "elapsed": 163, "status": "error", @@ -707,7 +687,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "executionInfo": { "elapsed": 36973, "status": "ok", @@ -798,8 +777,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -827,7 +805,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "tags": [] }, "outputs": [], @@ -845,8 +822,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -884,7 +860,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "executionInfo": { "elapsed": 1822, "status": "ok", @@ -925,7 +900,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "tags": [] }, "outputs": [], @@ -942,8 +916,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -968,7 +941,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "executionInfo": { "elapsed": 190, "status": "ok", @@ -997,7 +969,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "executionInfo": { "elapsed": 9588, "status": "ok", @@ -1023,7 +994,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "executionInfo": { "elapsed": 3184, "status": "ok", @@ -1050,7 +1020,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "executionInfo": { "elapsed": 191, "status": "ok", @@ -1084,7 +1053,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "executionInfo": { "elapsed": 21337, "status": "ok", @@ -1149,7 +1117,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "tags": [] }, "outputs": [], @@ -1165,8 +1132,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -1240,7 +1206,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.19" + "version": "3.9.18" } }, "nbformat": 4, From 3957c877cd79dcb46984a9775a03a1363dcc8d30 Mon Sep 17 00:00:00 2001 From: Paul Heubel Date: Mon, 22 Jul 2024 13:18:48 +0200 Subject: [PATCH 07/12] FIX part 2 of #90. Added hyperlink to impact scholars website. --- projects/docs/continuing_your_project_after_the_course.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/docs/continuing_your_project_after_the_course.md b/projects/docs/continuing_your_project_after_the_course.md index 1cec3573a..487aa7de1 100644 --- a/projects/docs/continuing_your_project_after_the_course.md +++ b/projects/docs/continuing_your_project_after_the_course.md @@ -5,4 +5,4 @@ Scholars will benefit from the mentorship of experienced researchers who will pr Additionally, scholars will have the chance to present their research to seasoned experts, gaining valuable feedback and engaging with a broader scientific community. This program also includes the opportunity to showcase their projects at the Academies Open Ceremony, inspiring future scholars and demonstrating the significance of their research. -Please refer to [this link](https://neuromatch.io/impact-scholars/) for a detailed outline and description of the Impact Scholars Program. +Please refer to [this link](https://impact-scholars.neuromatch.io/impact-scholars/intro.html) for a detailed outline and description of the Impact Scholars Program. From 798147857aa71ac370b973b38a7851f667f9741f Mon Sep 17 00:00:00 2001 From: Paul Heubel Date: Mon, 22 Jul 2024 16:32:16 +0200 Subject: [PATCH 08/12] Completed T5 and made minor changes to other nbs, corrections, references and more. --- .../W2D2_Intro.ipynb | 11 +- .../W2D2_Tutorial1.ipynb | 48 ++---- .../W2D2_Tutorial2.ipynb | 4 +- .../W2D2_Tutorial3.ipynb | 38 ++--- .../W2D2_Tutorial4.ipynb | 82 ++++------ .../W2D2_Tutorial5.ipynb | 141 ++++++++++++------ .../W2D2_Tutorial6.ipynb | 27 +++- 7 files changed, 182 insertions(+), 169 deletions(-) diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Intro.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Intro.ipynb index 7dc02673c..cb660f85e 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Intro.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Intro.ipynb @@ -37,7 +37,7 @@ "execution": {} }, "source": [ - "## TODO Day Learning Objectives" + "## Day Learning Objectives" ] }, { @@ -47,10 +47,9 @@ "execution": {} }, "source": [ - "1. Describe the logic behind the socioeconomic pathway framework, and explain how the pathways differ from one another in both climate and socioeconomic variables using CMIP6 data and integrated assessment modeling results, respectively (building off of W2D1).\n", - "2. Examine the strengths and weaknesses of integrated assessment modeling practice and compare models whose results are included in the IPCC reports and understand how these results impact the report’s conclusions.\n", - "3. Examine the socioeconomic factors at the origin of anthropogenic warming and a *Just Transition*.\n", - "\n" + "1. Describe the motivation behind the Shared Socioeconomic Pathway (SSP) framework, and explain how the 5 pathways differ from one another in both climate and socioeconomic aspects using CMIP6 data and integrated assessment modeling results, respectively.\n", + "2. Examine the strengths and weaknesses of SSP-focussed integrated assessment modeling practice and understand how these support and weaken the IPCC report’s conclusions, respectively.\n", + "3. Examine the socioeconomic factors at the origin of anthropogenic warming and a *Just Transition*." ] } ], @@ -81,7 +80,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.19" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial1.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial1.ipynb index ee54a8842..1c259f076 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial1.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial1.ipynb @@ -59,9 +59,7 @@ "cell_type": "code", "execution_count": null, "id": "368d0c90-ae7e-43d9-ada7-ad42c75f5f95", - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# import\n", @@ -73,8 +71,7 @@ "execution_count": null, "id": "f831d869-6072-44f2-8568-ddf04ace1abb", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -103,8 +100,7 @@ "execution_count": null, "id": "6db786f8-e5c4-42a9-9837-e41027b9ad4d", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -122,8 +118,7 @@ "execution_count": null, "id": "e11e3bbb-ce8f-4404-8d04-b6f86d4a9ea9", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -151,8 +146,7 @@ "execution_count": null, "id": "ea9d553f-c3eb-4723-a922-e81f97e1e3ba", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -210,8 +204,7 @@ "execution_count": null, "id": "e3fe59d0-0e89-48ec-b652-2ec007d4c6f3", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -224,8 +217,7 @@ "execution_count": null, "id": "52ca5582-816c-423c-9ed7-cda1c7319731", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -244,8 +236,7 @@ "execution_count": null, "id": "f9b620a1-41ec-4ded-a186-7f598ceaa045", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -280,8 +271,7 @@ "execution_count": null, "id": "9c6b2260-bdb0-4d7b-a07d-41551d5ccf92", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -362,9 +352,7 @@ "cell_type": "code", "execution_count": null, "id": "30a81fb8-c21b-490c-9297-a6705f114957", - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# to_remove explanation\n", @@ -391,8 +379,7 @@ "execution_count": null, "id": "2523a1bd-56cc-4594-b6d6-fa84288cadfb", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -405,8 +392,7 @@ "execution_count": null, "id": "05df13b5-14ce-4515-aaae-7cc9e3765445", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -418,7 +404,6 @@ "\n", "download_link = f\"https://img.climateinteractive.org/2019/09/EnROADS-one-page-guide-to-control-panel-v11-dec-2021.pdf\"\n", "render_link = f\"https://img.climateinteractive.org/2019/09/EnROADS-one-page-guide-to-control-panel-v11-dec-2021.pdf\"\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download a cheatsheet for the En-ROADS Control Panel:\\n{download_link}\")\n", @@ -447,9 +432,7 @@ "cell_type": "code", "execution_count": null, "id": "b17595a7-b326-4edb-9f80-b8e21f1d4e5e", - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# to_remove explanation\n", @@ -473,8 +456,7 @@ "execution_count": null, "id": "39410eaf-5020-4646-a821-b90df4c361f7", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -539,7 +521,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.19" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial2.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial2.ipynb index 6e1108064..6ceaa9c98 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial2.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial2.ipynb @@ -263,7 +263,7 @@ "\n", "You might already have clicked through the toggles at the top of the control panel of En-ROADS and tried the different *Views* (Main graphs, Kaya graphs, Miniature graphs). Select now the **Kaya graphs** view and reset the simulator (click on the anti-clockwise circular arrow to 'Reset all policies & assumptions' or just reload the page/model [here](https://en-roads.climateinteractive.org/)).\n", "\n", - "The Kaya graphs depict four drivers of growth in carbon dioxide emissions from energy use, which reflects about two-thirds of all greenhouse gas emissions (the remaining third of emissions are from land use changes and other gases, such as methane (CH4) and nitrous oxide (N2O), which are not considered here). The corresponding equation, the so-called [***Kaya identity***](https://en.wikipedia.org/wiki/Kaya_identity) below was developed by Yoichi Kaya:\n", + "The Kaya graphs depict four drivers of growth in carbon dioxide emissions from energy use, which reflects about two-thirds of all greenhouse gas emissions (the remaining third of emissions are from land use changes and other gases, such as methane (CH$_4$) and nitrous oxide (N$_2$O), which are not considered here). The corresponding equation, the so-called [***Kaya identity***](https://en.wikipedia.org/wiki/Kaya_identity) below was developed by Yoichi Kaya:\n", "\n", "***CO$_2$ Emissions from Energy = Global Population × GDP per Capita × Energy Intensity of GDP × Carbon Intensity of Energy***\n", "\n", @@ -608,7 +608,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.19" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial3.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial3.ipynb index c80f26fbd..2a3bf926a 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial3.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial3.ipynb @@ -43,7 +43,7 @@ "source": [ "# Tutorial Objectives\n", "\n", - "*Estimated timing of tutorial:* 15 minutes\n", + "*Estimated timing of tutorial:* 20 minutes\n", "\n", "The last tutorials covered the necessity for an energy transition to tackle the climate emergency and many solutions at once. As emissions accumulate, it becomes substantially harder to succeed the longer we take to make big changes. This tutorial explores the temporal dimension of action, here policies, by using the Climate Solution Simulator named [En-ROADS](https://www.climateinteractive.org/en-roads/).\n", "\n", @@ -56,9 +56,7 @@ "cell_type": "code", "execution_count": null, "id": "062c4b1a-6239-4644-a0dd-03fe1342fe99", - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# import\n", @@ -70,8 +68,7 @@ "execution_count": null, "id": "33ac31c0-ac52-447a-82d7-aec0b98dc6e6", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -100,8 +97,7 @@ "execution_count": null, "id": "8b4722fe-cbd5-484a-be6d-96ed7aafbf62", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -119,8 +115,7 @@ "execution_count": null, "id": "053ee0ea-d704-45c8-8b4b-aad17216710d", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -148,8 +143,7 @@ "execution_count": null, "id": "5b50c362", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -208,8 +202,7 @@ "execution_count": null, "id": "74b1c5e6-ed8f-4ca8-bbab-a0a6c417dced", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -222,8 +215,7 @@ "execution_count": null, "id": "703ee8f2", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -242,8 +234,7 @@ "execution_count": null, "id": "9fd96992-bab2-4494-aeb5-997cc8689746", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -297,9 +288,7 @@ "cell_type": "code", "execution_count": null, "id": "c97e6d3d-1718-479b-a19a-ffc6a082347b", - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# to_remove explanation\n", @@ -320,8 +309,7 @@ "execution_count": null, "id": "867fc0d6-6802-4d3d-888b-be960ffd54e8", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -338,7 +326,7 @@ "source": [ "# Summary\n", "\n", - "In this tutorial, we discussed the temporal dimension of the carbon price implementation in order to understand why no policy might be a silver bullet to solve all problems but comes with various ethical and political implications. At last, we discussed a few limitations of the En-ROADs model approach." + "In this tutorial, we discussed the temporal dimension of the carbon price implementation in order to understand why no policy might be a silver bullet to solve all problems but comes with various ethical and political implications. " ] }, { @@ -386,7 +374,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.19" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial4.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial4.ipynb index c0c11f540..7600707fe 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial4.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial4.ipynb @@ -38,6 +38,8 @@ "source": [ "# Tutorial Objectives\n", "\n", + "*Estimated timing of tutorial:* 35 minutes\n", + "\n", "In this tutorial, you will learn about Integrated Assessment Models (IAMs), a class of models that combine climatology, economics, and social science, reflecting the intertwined nature of these domains in addressing climate change. Based on these models the IPCC established the socioeconomic pathway framework. You are going to learn how these pathways differ from one another in both climate and socioeconomic variables as well as assumptions.\n", "\n", "After finishing this tutorial, you will know how to \n", @@ -60,9 +62,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# installations ( uncomment and run this cell ONLY when using google colab or kaggle )" @@ -72,7 +72,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": {}, "executionInfo": { "elapsed": 1460, "status": "ok", @@ -103,8 +102,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -132,8 +130,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -153,7 +150,6 @@ "code_folding": [ 0 ], - "execution": {}, "tags": [] }, "outputs": [], @@ -188,7 +184,6 @@ "execution_count": null, "metadata": { "cellView": "form", - "execution": {}, "tags": [] }, "outputs": [], @@ -246,8 +241,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -260,7 +254,6 @@ "execution_count": null, "metadata": { "cellView": "form", - "execution": {}, "pycharm": { "name": "#%%\n" }, @@ -284,8 +277,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -309,7 +301,7 @@ "jp-MarkdownHeadingCollapsed": true }, "source": [ - "In this, and subsequent, tutorials, you will explore Integrated Assessment Models (IAMs) which are the standard class of models used to make climate change projections. IAMs couple a climate model with an economic model, allowing us to evaluate the two-way coupling between economic productivity and climate change severity. IAMs can also account for changes that result from mitigation efforts, which lessen anthropogenic emissions.\n", + "In this, and the subsequent, tutorial, you will explore Integrated Assessment Models (IAMs) which are the standard class of models used to make climate change projections. IAMs couple a climate model with an economic model, allowing us to evaluate the two-way coupling between economic productivity and climate change severity. IAMs can also account for changes that result from mitigation efforts, which lessen anthropogenic emissions.\n", "\n", "Let's start by investigating some IAM model output.\n", "\n", @@ -332,9 +324,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# Load SSP data from .csv file\n", @@ -359,9 +349,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "print(df.SCENARIO.unique()) # print all scenarios\n", @@ -385,8 +373,8 @@ "- and **forcing** (`'Diagnostics|MAGICC6|Forcing'`).\n", "\n", "- As a `REGION`, we choose the `'World'`,\n", - "- and our `SCENARIO`s are called `'SSP1-26'` and `'SSP5-85'`.\n", - "- The model of choice for the former scenario is by convention `'IMAGE'` and `'REMIND-MAGPIE'` for the latter, respectively.\n", + "- and our `SCENARIO`s are called `'SSP1-Baseline'` and `'SSP5-Baseline'`.\n", + "- The model of choice for the former scenario is by convention `'IMAGE'` and `'REMIND-MAGPIE'` for the latter, respectively.\n", "\n", "A function named `get_SSPs_for_variable()` applies all this generally and is hidden in the next cell. Please execute it, such that the subsequent cells can make use of it. If you are interested in its procedure and want to adjust it, don't forget to save a copy beforehand." ] @@ -395,8 +383,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -447,9 +434,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# put variables of interest in a list\n", @@ -457,7 +442,7 @@ "# create new names for structured data series and axes labels\n", "val_name = ['GDP (billion US$/yr)', 'Emissions (Mt CO$_2$/yr)', 'Energy use (EJ/yr)', 'Forcing (W/m$^2$)']\n", "# choose scenarios of interest and a color for plotting\n", - "scenarios = ['SSP1-26', 'SSP5-Baseline']\n", + "scenarios = ['SSP1-Baseline', 'SSP5-Baseline']\n", "colors = ['darkblue','darkorange']\n", "\n", "# init figure and axis\n", @@ -496,7 +481,7 @@ "\n", "Our plots show that the SSP5-Baseline scenario exhibits very high levels of energy use, and emissions (due to fossil fuel exploitation), it marks the upper end of the scenarios in several dimensions (cf. [Kriegler et al. (2014)](https://doi.org/10.1016/j.gloenvcha.2016.05.015)). \n", "\n", - "The SSP1-26 scenario contrarily caps the increase of energy use by 2030, combined with other actions leading to decreasing emissions and subsequently a decreasing forcing for the second half of the century. However, economic growth continues with half the slope of SSP5-Baseline. In summary, it is the most optimistic projection: we transition to a global society of sustainability-focused growth." + "The SSP1-Baseline scenario contrarily caps the increase of energy use by 2030, combined with other actions leading to decreasing emissions and subsequently a decreasing forcing for the second half of the century. However, economic growth continues with half the slope of SSP5-Baseline. In summary, it is the most optimistic projection: we transition to a global society of sustainability-focused growth." ] }, { @@ -566,9 +551,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# put variables of interest in a list\n", @@ -576,7 +559,7 @@ "# create new names for structured data series and plot labels\n", "val_name = ['Population\\n(millions)', 'GDP (billion US$/yr)']\n", "# choose scenarios of interest and a color for plotting\n", - "scenarios = ['SSP1-26', 'SSP5-Baseline']\n", + "scenarios = ['SSP1-Baseline', 'SSP5-Baseline']\n", "colors = ['darkblue','darkorange']\n", "\n", "# init figure and axis\n", @@ -620,7 +603,7 @@ "execution": {} }, "source": [ - "# Section 1.3: Differences of SSP1 and SSP5\n", + "## Section 1.4: Differences of SSP1 and SSP5\n", "\n", "Major differences are visible when you contrast emissions and assume direct causation with ecosystem health. Increasing emissions then translate into decreasing ecosystem health." ] @@ -631,7 +614,7 @@ "execution": {} }, "source": [ - "## Coding exercise 1.3\n", + "## Coding exercise 1.4\n", "\n", "1. Choose two variables to emphasize ecosystem health differences in the SSP1 and SSP5 scenarios and assign them to `vars`. Then assign axis labels with the correct units for plotting to the `val_name` variable.\n", "2. Explain to your pod why the chosen variables emphasize a difference in the scenarios and describe this difference based on your current knowledge of the narratives." @@ -640,9 +623,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# put two variables of interest in a list\n", @@ -650,7 +631,7 @@ "# create new names for structured data series and plot labels\n", "val_name = ...\n", "# choose scenarios of interest and a color for plotting\n", - "scenarios = ['SSP1-26', 'SSP5-Baseline']\n", + "scenarios = ['SSP1-Baseline', 'SSP5-Baseline']\n", "colors = ['darkblue','darkorange']\n", "\n", "#################################################\n", @@ -691,9 +672,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# to_remove solution\n", @@ -703,7 +682,7 @@ "# create new names for structured data series and plot labels\n", "val_name = ['Emissions\\n(Mt CO$_2$/yr)','Land covered by\\nforest (million ha)']\n", "# choose scenarios of interest and a color for plotting\n", - "scenarios = ['SSP1-26', 'SSP5-Baseline']\n", + "scenarios = ['SSP1-Baseline', 'SSP5-Baseline']\n", "colors = ['darkblue','darkorange']\n", "\n", "\n", @@ -736,9 +715,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# to_remove explanation\n", @@ -758,13 +735,12 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ "# @title Submit your feedback\n", - "content_review(f\"{feedback_prefix}_Coding_Exercise_1_3\")" + "content_review(f\"{feedback_prefix}_Coding_Exercise_1_4\")" ] }, { @@ -789,7 +765,7 @@ "\n", "It is possible to download the SSP data used in this tutorial, when you provide an email address, from [this IIASA database](https://tntcat.iiasa.ac.at/SspDb/dsd), where all data from the main simulations of the IAMs used in the [IPCC reports](https://www.ipcc.ch/reports/) is freely available.\n", "\n", - "Find a summary of all SSP narratives in this paper by [Oneill et al. (2017)](https://doi.org/10.1016/j.gloenvcha.2015.01.004).\n", + "Find a summary of all SSP narratives in this paper by [O'Neill et al. (2017)](https://doi.org/10.1016/j.gloenvcha.2015.01.004).\n", "\n", "Find even more information in\n", "\n", @@ -825,7 +801,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.19" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial5.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial5.ipynb index 5c2577851..b505eb3ae 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial5.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial5.ipynb @@ -22,11 +22,11 @@ "\n", "**Content creators:** Paul Heubel, Maximilian Puelma Touzel\n", "\n", - "**Content reviewers:** Jenna Pearson, Chi Zhang, Ohad Zivan\n", + "**Content reviewers:** Jenna Pearson, Ohad Zivan\n", "\n", - "**Content editors:** Paul Heubel, Jenna Pearson, Chi Zhang, Ohad Zivan\n", + "**Content editors:** Paul Heubel, Jenna Pearson, Ohad Zivan\n", "\n", - "**Production editors:** Wesley Banfield, Jenna Pearson, Konstantine Tsafatinos, Chi Zhang, Ohad Zivan\n", + "**Production editors:** Jenna Pearson, Konstantine Tsafatinos, Chi Zhang, Ohad Zivan\n", "\n", "**Our 2024 Sponsors:** CMIP, NFDI4Earth" ] @@ -40,22 +40,25 @@ "source": [ "# Tutorial objectives\n", "\n", - "* " + "*Estimated timing of tutorial:* 25 minutes\n", + "\n", + "In this tutorial, you discuss the narratives of the SSP framework and step back to reflect on the framework's assumptions and their consequences for modeling socioeconomics and climate futures. It further emphasizes how equity aspects need to be thought of when solving the climate crisis.\n", + "\n", + "After working through this Tutorial you know how to \n", + "\n", + "* map Shared Socioeconomic Pathways in a feature space of equality and environmental health,\n", + "* reflect on narratives when discussing future scenarios and their socioeconomic implications." ] }, { "cell_type": "code", "execution_count": null, "id": "1af3e766-b9c3-4bf8-815c-4087e7811925", - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# import\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "#import dicelib # https://github.com/mptouzel/PyDICE" + "import matplotlib.pyplot as plt" ] }, { @@ -63,8 +66,7 @@ "execution_count": null, "id": "bf05ea3d-be91-4007-b4dd-210179c2f6f1", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -93,8 +95,7 @@ "execution_count": null, "id": "e7392de8-f946-453b-bedf-8a07c705ee7f", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -112,8 +113,7 @@ "execution_count": null, "id": "6c10210c-a3d9-4996-a3d3-4bafa4b72637", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -141,8 +141,7 @@ "execution_count": null, "id": "80412217-b5a7-4fed-b29e-b8751eb8c847", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -201,8 +200,7 @@ "execution_count": null, "id": "ddbb472a-a055-4f48-800b-ec9ac36cb3c6", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -215,8 +213,7 @@ "execution_count": null, "id": "2dc2f6c1-637b-4506-a667-45750dd7fbe5", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -230,6 +227,17 @@ "IFrame(src=f\"https://mfr.ca-1.osf.io/render?url=https://osf.io/{link_id}/?direct%26mode=render%26action=download%26mode=render\", width=854, height=480)" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "693f9f9c-c8c0-4118-99cd-a9ccf1f55766", + "metadata": {}, + "outputs": [], + "source": [ + "# @title Submit your feedback\n", + "content_review(f\"{feedback_prefix}_Mapping_the_Narrative_Space_Slides\")" + ] + }, { "cell_type": "markdown", "id": "c7ce6e92-a46d-437a-9e03-c5b80eb63474", @@ -243,14 +251,14 @@ "\n", "Let's begin with a brief recall of the IAM features:\n", "\n", - "- IAMs resolve the economy spatially, in contrast, the toy model En-ROADs for example, which we applied in Tutorial 1 to 3, aggregates all variables and is non-spatial.\n", + "- IAMs resolve the economy spatially, in contrast, the toy model En-ROADS for example, which we applied in Tutorial 1 to 3, aggregates all variables and is non-spatial.\n", "- Like En-ROADS, the world models used in IAMs usually have *exogeneous* (externally set) times series for variables, in addition to fixed world system parameters. These exogenous variables are assumed to be under our society's control (e.g. mitigation). \n", "- IAMs come equipped with an objective function (a formula that calculates the quantity to be optimized). This function returns the value of a projected future obtained from running the world model under a given climate policy. This value is defined by the time series of these exogenous variables. In this sense, the objective function is what defines \"good\" in \"good climate policy\". \n", "- The computation in an IAM is then an optimization of this objective as a function of the time series of these exogenous variables over some fixed time window.\n", "\n", "Most IAMs are based on *Neo-classical economics* (also referred to as \"establishment economics\"). This is an approach to economics that makes particular assumptions. For example, it is assumed that production, consumption, and valuation of goods and services are driven solely by the supply and demand model. One fundamental concept is *utility* (i.e. economic value), which is not only central to economics but also to decision theory as a whole, which is a research field that mathematically formalizes the activity of *planning* (planning here means selecting strategies based on how they are expected to play out given a model that takes those strategies and projects forward into the future).\n", "\n", - "As we want to discuss the background of IAM economics, you are going to reflect on these particular *Neo-classical* assumptions." + "Six of the most well-established IAMs have been chosen to represent a certain SSP narrative as discussed by Max in the video. Their simulations result in energy use and emissions characteristics for the respective SSP. These narratives try to describe broad socioeconomic trends that are plausible while reflecting worlds in which mitigation and adaptation challenges vary from low to very high.\n" ] }, { @@ -262,7 +270,7 @@ "source": [ "## Questions 1\n", "\n", - "As a follow-up to its presentation in the tutorial video, try now to place all 5 SSP narratives in the three-dimensional feature space yourself. You can use the SSP narrative names as a hint.\n", + "As a repetition and a follow-up of the tutorial video, try now to place all 5 SSP narratives in the three-dimensional feature space of ***Intra-nation equality***, ***Inter-nation equality***, and ***Environmental Health*** yourself. You can use the SSP narrative names as a hint.\n", "\n", "* SSP1: Sustainability\n", "* SSP2: Middle of the road\n", @@ -270,6 +278,8 @@ "* SSP4: A road divided\n", "* SSP5: Fossil Fueled development\n", "\n", + "As an additional hint, you might want to check out detailed SSP summaries in the 'SSP narratives' section in [this Carbon Brief article](https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/).\n", + "\n", "Which were easy to place? Which were harder? What made them easy or hard to place? Discuss with your pod.\n" ] }, @@ -277,17 +287,39 @@ "cell_type": "code", "execution_count": null, "id": "a7b00ec8-495f-4e07-ab13-989dd26b2c92", - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# to_remove explanation\n", "'''\n", - "Guidance for TAs: The solution is already given in the slides, to further discuss these slides, please read the detailed SSP summaries in the 'SSP narratives' section from the carbon brief website under https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/\n", + "The solution is already given in the slides, to further discuss these slides, please read the detailed SSP summaries in the 'SSP narratives' section from the carbon brief website under https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/\n", "'''" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "11591351-d85d-4737-835d-b1ca218f1354", + "metadata": {}, + "outputs": [], + "source": [ + "# @title Submit your feedback\n", + "content_review(f\"{feedback_prefix}_Questions_1\")" + ] + }, + { + "cell_type": "markdown", + "id": "97a7001b-1122-4f8c-9ef9-b42b03823f21", + "metadata": {}, + "source": [ + "This feature space is one way to dissect the narratives that underlie the SSPs. \n", + "\n", + "A consideration of the future socio-economic situation in the light of the resulting challenges is also fruitful. For example, low challenges to mitigation and adaptation due to rapid technological development, relative global equality of income and focus on environmental sustainability arise in SSP1. SSP4, on the other hand, features similarly low challenges to mitigation due to its rapid technological development, but high challenges to climate adaptation due to persistent inequality and poverty in many parts of the world (cf. [Carbon Brief Explainer, Hausfather, 2018](https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/)). \n", + "Note that mitigation and adaptation responses are not implemented in the SSPs, such that other studies can assess the effects of policies and of impacts by comparing outcomes to those in the reference SSPs. Hence, a large number of studies investigate a variety of policies and projected risks (cf. [O'Neill et al., 2020](https://www.nature.com/articles/s41558-020-00952-0)).\n", + "\n", + "Let us finally summarize a few advantages and disadvantages of the SSP framework in general." + ] + }, { "cell_type": "markdown", "id": "35fa283c-f214-45a4-9b45-bf263d989f74", @@ -297,26 +329,45 @@ "source": [ "## Questions 2\n", "\n", - "The SSP framework. Take a minute to list the strengths and weaknesses of the scenario approach to socio-economic climate projections. \n" + "The SSP framework. Take a minute to list the strengths and weaknesses of the scenario approach to socio-economic climate projections you can think of. \n" ] }, { "cell_type": "code", "execution_count": null, "id": "c8f40968-8d7a-487f-aeb3-b901ebfe53fd", - "metadata": { - "execution": {} - }, + "metadata": {}, "outputs": [], "source": [ "# to_remove explanation\n", "\n", "'''\n", - "Strength: SSPs are an approach that nicely balances (biased) expert opinion with more objective (but perhaps inaccurate) models.\n", - "Weakness: even larger set of assumptions/complexity gives over confidence?\n", + "Strengths: SSPs are an approach that nicely balances (biased) expert opinion with more objective (but perhaps inaccurate) models. The framework underlines the importance of baseline assumptions on resulting emissions and temperatures. \n", + "There is now more than one baseline/business-as-usual scenario, however, these scenarios result in at least 3.1°C warming (and up to 5.1°C) by 2100. \n", + "With the framework, one is easily able to model climate policies and compare them to the benchmark futures. It furthermore allows for climate change-related research globally across research communities and is extendable to other scales, sectors, and issue areas. \n", + "Global narrative extensions can be produced and applied in key sectors to support quantitative projections from e.g. energy and land-use models, and projections from IAMs. \n", + "\n", + "...\n", + "\n", + "Weaknesses: An even larger set of assumptions/complexity leads to overconfidence while complexity and uncertainty are increased. It is not easy to apply SSPs regionally. \n", + "Futures with non-neo-classical economics like no or limited growth in high-income countries or scenarios oriented around eco-communalism are not represented in the SSPs. \n", + "There might also be plausible futures that are under-represented including those driven by disruptive events, whether technological, social, political, or environmental, e.g. implications of violent conflicts, the crossing of biophysical and social tipping points or unexpectedly rapid technological innovation; for example, in artificial intelligence or energy efficiency.\n", + "...\n", + "cf. e.g https://www.nature.com/articles/s41558-020-00952-0\n", "'''" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "041ce3f4-15b5-48e5-b810-3194f27f5766", + "metadata": {}, + "outputs": [], + "source": [ + "# @title Submit your feedback\n", + "content_review(f\"{feedback_prefix}_Questions_2\")" + ] + }, { "cell_type": "markdown", "id": "28c0a077-c9a0-42d9-ada6-e8b835668c3b", @@ -324,17 +375,23 @@ "execution": {} }, "source": [ - "# Summary" + "# Summary\n", + "\n", + "In this tutorial, you discussed the narratives of the SSP framework and stepped back to reflect on the framework's assumptions and their consequences for modeling socioeconomics and climate futures. It helps to prepare a thoughtful development of your own climate scenario via En-ROADS in the next tutorial. Equality aspects, prerequisites and socioeconomic necessities as well as other implications need to be thought of when solving the climate crisis." ] }, { + "attachments": {}, "cell_type": "markdown", - "id": "9e904e57-b6b9-4ee8-aefb-140dce3c93c2", - "metadata": { - "execution": {} - }, + "id": "3469e417-cb2e-49a8-82bc-0b600337244c", + "metadata": {}, "source": [ - "# Resources" + "# Resources\n", + "\n", + "- [Carbon Brief Explainer: How ‘Shared Socioeconomic Pathways’ explore future climate change, Hausfather, 2018](https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/)\n", + "- [The Shared Socioeconomic Pathways and their energy, land use, and greenhouse gas emissions implications: An overview, Riahi et al., Global Environmental Change 42, 169-180 (2017). doi.org/10.1016/j.gloenvcha.2015.01.004](https://doi.org/10.1016/j.gloenvcha.2015.01.004)\n", + "- [O’Neill, B.C., Carter, T.R., Ebi, K. et al. Achievements and needs for the climate change scenario framework. Nat. Clim. Chang. 10, 1074–1084 (2020). doi.org/10.1038/s41558-020-00952-0](https://doi.org/10.1038/s41558-020-00952-0)\n", + "- [En-ROADS documentation](https://docs.climateinteractive.org/projects/en-roads/en/latest/index.html)" ] } ], @@ -365,7 +422,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.19" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial6.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial6.ipynb index abd0c7ff2..8b2c1e246 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial6.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial6.ipynb @@ -56,8 +56,7 @@ "execution_count": null, "id": "7550a995-8abf-45a7-83fe-4eb7565d43f4", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -86,8 +85,7 @@ "execution_count": null, "id": "b591486d-dff5-4dc6-b83b-1125977a7758", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -140,6 +138,18 @@ "display(tabs)" ] }, + { + "cell_type": "markdown", + "id": "8e98eb20-8e63-4a64-a9b3-47c2f0ee7383", + "metadata": {}, + "source": [ + "# Section 1: CO$_2$ Removal\n", + "\n", + "While substantial emissions mitigations are necessary to reduce future climate suffering, they can not make up for the hundreds of billions of tons of CO$_2$ that humans have already emitted. However, both natural and technological methods for removing CO$_2$ from the atmosphere exist. Although they are presently miniscule compared to the tens-of-gigatons scale of global emissions, some experts expect that CO$_2$ removal methods will play a key role in the future once major mitigation goals have been accomplished. \n", + "\n", + "Video 1 briefly explains how Carbon Removal is addressed in EN-ROADS. Keep its representation in mind for the following exercises." + ] + }, { "cell_type": "markdown", "id": "a516e969-8b67-4f8a-9d39-061770ffb4c9", @@ -174,8 +184,7 @@ "execution_count": null, "id": "d485bbc9-f179-4516-bc51-eb34211e8255", "metadata": { - "cellView": "form", - "execution": {} + "cellView": "form" }, "outputs": [], "source": [ @@ -211,7 +220,9 @@ "- [En-ROADS User Guide PDF](https://docs.climateinteractive.org/projects/en-roads/en/latest/en-roads-user-guide.pdf)\n", "- [Guided Assignment - Simulating Climate Futures in En-ROADS: Short Version](https://www.climateinteractive.org/guided-assignment/)\n", "\n", - "**A Planetary Crisis Planning Computer Game**\n", + "**Planetary Crisis Planning Computer Games**\n", + "Play the games listed below to explore alternative societal futures\n", + "- [The Climate Game](https://ig.ft.com/climate-game/)\n", "- [Half Earth Socialism](https://play.half.earth/).\n" ] } @@ -243,7 +254,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.19" + "version": "3.9.18" } }, "nbformat": 4, From 7156f6c538bc2d72542e637584d148913b9179b5 Mon Sep 17 00:00:00 2001 From: Paul Heubel Date: Mon, 22 Jul 2024 19:04:39 +0200 Subject: [PATCH 09/12] Added another important resource to the last section. --- .../W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial5.ipynb | 1 + 1 file changed, 1 insertion(+) diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial5.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial5.ipynb index b505eb3ae..a3b5509bf 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial5.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial5.ipynb @@ -389,6 +389,7 @@ "# Resources\n", "\n", "- [Carbon Brief Explainer: How ‘Shared Socioeconomic Pathways’ explore future climate change, Hausfather, 2018](https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/)\n", + "- [Hallegatte, S., Przyluski, V. & Vogt-Schilb, A. Building world narratives for climate change impact, adaptation and vulnerability analyses. Nature Clim Change 1, 151–155 (2011). doi.org/10.1038/nclimate1135](https://doi.org/10.1038/nclimate1135)\n", "- [The Shared Socioeconomic Pathways and their energy, land use, and greenhouse gas emissions implications: An overview, Riahi et al., Global Environmental Change 42, 169-180 (2017). doi.org/10.1016/j.gloenvcha.2015.01.004](https://doi.org/10.1016/j.gloenvcha.2015.01.004)\n", "- [O’Neill, B.C., Carter, T.R., Ebi, K. et al. Achievements and needs for the climate change scenario framework. Nat. Clim. Chang. 10, 1074–1084 (2020). doi.org/10.1038/s41558-020-00952-0](https://doi.org/10.1038/s41558-020-00952-0)\n", "- [En-ROADS documentation](https://docs.climateinteractive.org/projects/en-roads/en/latest/index.html)" From d2f84100fe91aceeecd4a06ff7f2e9131b1e6ad4 Mon Sep 17 00:00:00 2001 From: Paul Heubel Date: Mon, 22 Jul 2024 19:05:07 +0200 Subject: [PATCH 10/12] Grand 2024 update of project guidance. --- projects/docs/project_guidance.md | 296 ++++++++++++++++-------------- 1 file changed, 154 insertions(+), 142 deletions(-) diff --git a/projects/docs/project_guidance.md b/projects/docs/project_guidance.md index b90d3ee67..1d188fe54 100644 --- a/projects/docs/project_guidance.md +++ b/projects/docs/project_guidance.md @@ -5,249 +5,260 @@ The project component of Climatematch Academy is designed to guide you through the entire research process, providing a comprehensive journey from project ideation to outcome presentation, all within a condensed time frame of just two weeks. Within a dedicated three-hour time slot each day, you will collaborate with a group of 4-6 fellow students from your pod to collectively develop a single research project. -On Day 1, you will learn about good research practices by working on a ‘mock’ project through the lens of equity. You will then spend eight days applying those skills to a scientific question and a geographical region that interests you and your teammates. To familiarize yourselves with the datasets at hand, you will examine the spatial and temporal distribution of one climate variable on global and local scales, as well as its social and economic impact. After performing a brief literature review, you will develop a sense of interesting open questions in the field and will devise a specific testable hypothesis accordingly. On Day 4, your group will submit a project proposal that you will swap with other groups to practice giving and receiving feedback through a peer review process. For the rest of the course, you will focus on acquiring evidence for or against your hypothesis. Throughout this time, you will be supported by your pod’s Teaching Assistant and a dedicated Project Teaching Assistant. Finally, on the last two days of the course, you will prepare a short presentation showcasing the story of your project and meet with other groups in your megapod to discuss your findings with them. +On Day 1, you will learn about good research practices by working on a ‘mock’ project through the lens of equity. You will then spend eight days applying those skills to a scientific question and a geographical region that interests you and your teammates. To familiarize yourselves with the datasets at hand, you will examine the spatial and temporal distribution of one climate variable on global and local scales. After performing a brief literature review, you will develop a sense of interesting open questions in the field and will devise a specific testable hypothesis accordingly. On Day 4, your group will submit a project proposal that you will swap with other groups to practice giving and receiving feedback through a peer review process. For the rest of the course, you will focus on acquiring evidence for or against your hypothesis. Throughout this time, you will be supported by your pod’s Teaching Assistant and a dedicated Project Teaching Assistant. Finally, in the last two sessions of the course, you will prepare a short presentation showcasing the story of your project and meet with other groups in your megapod to discuss your findings with them. ## Submission Links - Day 4: Proposal Submission **[here](https://airtable.com/shrQ5CLEla3dDkKbk)** -- Day 9: Project Submission **[here](https://airtable.com/shr7EAY3x39x8swZu)** +- Day 10: Project Submission **[here](https://airtable.com/shr7EAY3x39x8swZu)** ## Project materials -You have been assigned one of seven research projects based on the preferences listed in your application. Each project comes with an introductory video, a template, and a data loading jupyter notebook. +You have been assigned a project based on the preferences listed in your application. Each project comes with an introductory video, a project template and a data loading jupyter notebook. -Student groups will define their own research question. Project templates are maps of research ideas developed by the Climatematch Academy team. They are composed of **_GREEN_**, **_YELLOW_**, and **_RED_** questions in accordance with their difficulty. Each difficulty level is further divided into questions relating to a physical climate phenomenon (borderless) and those relating to socio-economic issues (dashed border). +Student groups will define their own research question. Project templates are maps of research ideas developed by the Climatematch Academy team. They are composed of ***GREEN***, ***YELLOW***, and ***RED*** questions in accordance with their difficulty. Each difficulty level is further divided into questions relating to a physical climate phenomenon (borderless) and those relating to socio-economic issues (dashed border). Student groups should use this template as a guide and ideally come up with their own research question. The templates should be used in several ways: -* All teams **must** work through the **_GREEN_** questions on Day 2. This will let you familiarize yourselves with the relevant datasets and appreciate the global variability of your selected climate phenomenon before defining your research question. -* All teams **must** work on a research question related to a physical climate phenomenon, such as those found in borderless-boxes. -* In addition, all teams are **highly encouraged** to consider the socio-economic impact of their climate phenomenon of interest (dashed border). We advise you to support your conclusions with data if it is possible to find open-source socio-economic data, reports, or case studies from a trustworthy source relevant to your country or continent of interest. -* If you are new to climate science or do not have a lot of research experience, we strongly recommend that you use the research questions provided in the template extensively. The templates have been designed to give you enough structure to get started and enough options to keep going if you stick with the template. Comprehensively answering just one **_YELLOW_** or **_RED_** question from the template would be an achievement! You can pick the question that interests you the most right away without following the flow suggested by the template. -* If you are an experienced climate researcher, you are more than welcome to branch out beyond the template and define your own research questions! However, we do ask you to stick to the climate datasets. +* All teams **must** work through the ***GREEN*** questions on Day 2. This will let you familiarize yourselves with the relevant datasets and appreciate the global variability of your selected climate phenomenon before defining your research question. +* All teams **must** work on a research question related to a physical climate phenomenon, such as those proposed in the yellow and red boxes. +* All teams are **encouraged** to consider the socio-economic impact of their climate phenomenon of interest (dashed border). We advise you to support your conclusions with data if it is possible. +* If you are new to climate science or do not have a lot of research experience, we strongly recommend that you use the research questions provided in the template extensively. The templates have been designed to give you enough structure to get started and enough options to keep going if you stick with the template. Comprehensively answering just one ***YELLOW*** or ***RED*** question from the template would be an achievement! You can pick the question that interests you the most right away without following the flow suggested by arrows on the template. +* If you are an experienced climate researcher, you are more than welcome to branch out beyond the template and define your own research questions! However, we do ask you to stick to the climate datasets provided to you. ## Project Teaching Assistants Project Teaching Assistants are your friendly project experts to consult with on all issues related to your project topics and datasets. They can help with brainstorming project ideas, literature searches, and coding. You will meet with them on a regular basis. -They will visit your group on Day 1 to make introductions and will subsequently meet with you, on average, for 45-60 minutes every day or 1.5-2 hours every other day. As projects progress, Project Teaching Assistants might need to prioritize junior groups, but they can also be summoned to senior groups for meetings when needed. Since they can arrive unannounced at any time (busy schedules!), please stop what you were doing to have the meeting, and then resume your work when the Project Teaching Assistant leaves. Please also post questions on discord in the project-specific channels. All project Teaching Assistants have time set aside specifically to answer discord questions and to provide additional meetings when necessary. +They will visit your group on Day 1 to make introductions and will subsequently meet with you, on average, for 45-60 minutes every day or 1.5-2 hours every other day. As projects progress, Project Teaching Assistants might need to prioritize junior groups, but they can also be summoned to senior groups for meetings when needed. Since they can arrive unannounced at any time (busy schedules!), please stop what you were doing to have the meeting, and then resume your work when the Project Teaching Assistant leaves. Please also post questions on discord in the #project-specific channels. All project Teaching Assistants have time set aside specifically to answer discord questions and to provide additional meetings when necessary. ## Project Time -You will have 2.5-3 hours each day to work on projects. The goal during the **first week** is to learn about the research process and develop a project idea. To simplify logistics, we have already broken you into project groups. Among other reasons, you were (climate)matched with your pod and research group, because you share an interest in similar climate phenomena. We understand that specific interests and motivations will vary even within project groups and becoming part of the Climatematch community is as much about finding your role in the team as it is about pursuing a specific personal research interest. During the **second week**, which includes the Project Day (W2D2), you will implement the analyses, interpret your findings, and present them to your megapod peers on the last day of Climatematch Academy. +You will have 2.5-3 hours each day to work on projects. The goal during the **first week** is to learn about the research process and develop a project idea. To simplify logistics, we have already broken you into project groups. Among other reasons, you were (climate)matched with your pod and research group, because you share an interest in similar climate phenomena. We understand that specific interests and motivations will vary even within project groups and becoming part of the Climatematch community is as much about finding your role in the team as it is about pursuing a specific personal research interest. During the **second week**, which includes the Project Day (W2D5), you will implement the analyses, interpret your findings, and present them to your megapod peers on the last day of Climatematch Academy. -Embedded in the project time will also be a set of **professional development activities**: a series of Impact Talks, meetings with mentors, and career panels. +Embedded in the project time will also be a set of **professional development activities**: two hour-long meetings with mentors as well as one-hour Impact Talk activity of your choice from the following list: 1) climate justice, 2) equity in climate science, 3) open climate science, and 4) climate science communication.. +--- ### POD INTRODUCTIONS W1D1 -_Monday, 17th July (PM) for everyone_ +*Monday, 15th July (PM) for everyone* On W1D1, you will meet your pod 30 minutes before the regular start of the tutorial time for introductory activities. Your pod’s Teaching Assistant will also tell you the project group you have been assigned to and its project topic. In some pods, the two groups will work on the same topic while others might be assigned two different topics depending on student interests. If you wish to work in the other group, discuss it with your Teaching Assistant. -During the pod introduction on W1D1, your Teaching Assistant will also inform you about your project group’s schedule for watching and discussing the Impact Talks. One group will do this activity during the first 30 minutes of a project block, while the other will dedicate to it the last 30 minutes of a project block. The discussions following the Impact Talks will be facilitated by you - the students. Each discussion should have one student leading from the front and one student leading from behind, with every student in your project group taking on one of these leadership roles at least once. Your Teaching Assistant will help you appoint yourselves to these roles during the pod introductions. You can read more about the associated responsibilities [here](https://comptools.climatematch.io/projects/professional_development/impact_talks.html#guidance-for-discussions). +During the pod introduction on W1D1, your Teaching Assistant will also inform you about your project group’s schedule for watching and discussing the Impact Talks in the second week (W2D1). One group will do this activity during the first hour of the project block, while the other will dedicate the last hour of the project block to it. The discussions following the Impact Talk will be facilitated by you - the students. Your Teaching Assistant will help you appoint yourselves to the leading roles during the pod introductions. You can read more about this activity [here](https://github.com/neuromatch/climate-course-content/blob/main/projects/professional_development/impact_talks.ipynb). --- ### SESSION 1 -_Monday, 17th July (PM) for groups in timezone slots 2 and 5_ -_Tuesday, 18th July (AM) for groups in timezone slots 1, 3, and 4_ +*Monday, 15th July (PM) for groups in timezone slots 2 and 5* +*Tuesday, 16th July (AM) for groups in timezone slots 1, 3, and 4* -Work through the [tutorial on good research practices](https://comptools.climatematch.io/tutorials/W2D2_GoodResearchPractices/student/W2D2_Tutorial1.html) in your project groups. Your Project Teaching Assistant will come by at some point during this period to introduce themselves and facilitate your progression through the tutorial for 30-45 minutes. +**The goal of the day is to learn about the process of research design**. To this end you will work through the tutorials on [good research practices](https://comptools.climatematch.io/tutorials/Projects_GoodResearchPractices/chapter_title.html) in your project groups. Your Project Teaching Assistant will come by at some point during this period to introduce themselves and facilitate your progression through the tutorial for 30-45 minutes. --- ### SESSION 2 -_Tuesday, 18th July (PM) for groups in timezone slots 2 and 5_ -_Wednesday, 19th July (AM) for groups in timezone slots 1, 3, and 4_ +*Tuesday, 16th July (PM) for groups in timezone slots 2 and 5* +*Wednesday, 19th July (AM) for groups in timezone slots 1, 3, and 4* + +**The goal of the day is to get familiar with the dataset that you will work on your project.** Each project team will choose one of the predefined templates according to their research interests. This project session is structured as follows: ->**Professional Development:** Watch the interview about [Climate Justice](https://comptools.climatematch.io/projects/professional_development/impact_talks.html#climate-justice) and use the provided prompts to discuss the topic within your project group for 15 minutes As agreed during introductions on W1D1, one project group in the pod should do this during the first 30 minutes of the project block, while the other should leave this for the last 30 minutes of the block. Also as decided on W1D1, two students should practice their leadership skills by leading the discussion from the front and from behind. +- **Time zones 2 & 5:** + **(1h) Professional Development - Mentor meeting I:** During the first hour, your project group will be visited by mentors. In these meetings, they will share their professional path in a climate-related field, offer personalized career advice, and provide a networking opportunity. Make sure to familiarize yourself with the suggested meeting structure and tips for getting the most out of these meetings [here](https://comptools.climatematch.io/projects/professional_development/mentors.html). -The remaining 2.5 hours are time to get your hands dirty! Explore one of the provided climate datasets by working through the **_GREEN_** questions of your project template. Use the **data loading notebook** to get started and try to understand what is being done and why. Parts of this code might be reusable or adaptable later. Be on the lookout for interesting hypotheses and remember to work as a team! Ask for help, assist others, and discuss your findings throughout the day. +- **Everyone**: + **(2h)** Explore one of the provided climate datasets from your chosen project template by working through the ***GREEN*** questions. Use the **data loading notebook** to get started and try to understand what is being done and why. Parts of this code might be reusable or adaptable later. Be on the lookout for interesting hypotheses and remember to work as a team! Ask for help, assist others, and discuss your findings throughout the day. + - Apply the data wrangling skills you have acquired in tutorials thus far to generate the global maps suggested in **Q1**. Examine your plots. Do you notice any interesting patterns across the globe or over time? + - Plot the global mean of the variable(s) over the time period suggested in **Q2**. Do you observe any trends? Does the result align with your expectations? Why? Why not? + - As a group, agree on a geographical region to focus on and answer **Q3**. Depending on the variable you explore, choosing a continent, subcontinent, or small region might be appropriate choices. How does the result compare with your answer to **Q2**? Does this result align with your expectations? Why? Why not? -* Apply the data wrangling skills you have acquired in tutorials thus far to generate the global maps suggested in **Q1**. Examine your plots. Do you notice any interesting patterns across the globe or over time? -* Plot the global mean of the variable(s) over the time period suggested in **Q2**. Do you observe any trends? Does the result align with your expectations? Why? Why not? -* As a group, agree on a geographical region to focus on and answer **Q3**. Depending on the variable you explore, choosing a continent, subcontinent, or country might be appropriate choices. How does the result compare with your answer to Q2? Does _this_ result align with your expectations? Why? Why not? -* Consider the socio-economic impact of your climate phenomenon by addressing **Q4**. Depending on your project topic, you may or may not have additional numerical data provided specifically for this question. Feel free to seek information from reliable sources online to support your arguments. +- **Time zones 1, 3 & 4:** + Use the remaining hour to brainstorm and start reviewing literature. + - **(15 min)** Start by discussing your initial project ideas! As a group, try to come up with one or a few questions of interest, either by yourselves or directly from the project template. Was there anything weird or intriguing you noticed in the data yesterday? Are there any questions in the template you find particularly exciting? + - **(30 min)** Start doing literature review using search engines like Google or Baidu. Look only at abstracts to select 2-3 promising ones. Revisit Step 2 of the tutorial on [good research practices](https://comptools.climatematch.io//tutorials/Projects_GoodResearchPractices/student/Projects_Tutorial2.html) to review the literature more efficiently! + - **(15 min)** Report to the whole group what papers you found and pool them together. Assign one paper per person to read/skim. --- ### SESSION 3 -_Wednesday, 19th July (PM) for groups in timezone slots 2 and 5_ - -_Thursday, 20th July (AM) for groups in timezone slots 1, 3, and 4_ +*Wednesday, 17th July (PM) for groups in timezone slots 2 and 5* +*Thursday, 18th July (AM) for groups in timezone slots 1, 3, and 4* ->**Professional Development:** Watch the interview about, [Equity in Climate and Climate Science](https://comptools.climatematch.io/projects/professional_development/impact_talks.html#equity-in-climate-and-climate-science) and use the provided prompts to discuss the topic within your project group for 15 minutes. As agreed during introductions on W1D1, one project group in the pod should do this during the first 30 minutes of the project block, while the other should leave this for the last 30 minutes of the block. Also as decided on W1D1, two students should practice their leadership skills by leading the discussion from the front and from behind. +**The goal of the day is to complete the literature review and formulate the research questions**. The literature review aims to find out what is known or has been hypothesized about your climate phenomenon, determine what aspects are currently the most debated, and to help you define some keywords that you will use in your project proposal tomorrow. You do not need to come up with a completely original question! Do, however, situate your research within the relevant literature, and try to get hints/suggestions from other papers. ->**Professional Development:** On any two days between now and the end of the course, your project group will be visited by mentors. In 1-hour meetings, they will share their professional path in a climate-related field, offer personalized career advice, and provide a networking opportunity. Your pod’s Teaching Assistant can tell you the exact times of these meetings. Make sure to familiarize yourself with the suggested meeting structure and tips for getting the most out of these meetings [here](https://comptools.climatematch.io/projects/professional_development/mentors.html#suggested-meeting-structure-60-minutes). +- **Time zones 1, 3 & 4:** + **(1h)** Professional Development - Mentor meeting I: During the first hour, your project group will be visited by mentors. In these meetings, they will share their professional path in a climate-related field, offer personalized career advice, and provide a networking opportunity. Make sure to familiarize yourself with the suggested meeting structure and tips for getting the most out of these meetings [here](https://comptools.climatematch.io/professional_development/mentors.html). +- **Time zones 2 & 5:** + Use the first hour to brainstorm and start reviewing literature. + - **(15 min)** Start by discussing your initial project ideas! As a group, try to come up with one or a few questions of interest, either by yourselves or directly from the project template. Was there anything weird or intriguing you noticed in the data yesterday? Are there any questions in the template you find particularly exciting? + - **(30 min)** Start doing literature review using search engines like Google or Baidu. Look only at abstracts to select 2-3 promising ones. Revisit Step 2 of the tutorial on [good research practices](https://comptools.climatematch.io//tutorials/Projects_GoodResearchPractices/student/Projects_Tutorial2.html) to review the literature more efficiently! + - **(15 min)** Report to the whole group what papers you found and pool them together. Assign one paper per person to read/skim. -The remaining time will be dedicated to brainstorming and reviewing the literature! The goal of this literature review is to find out what is known or has been hypothesized about your climate phenomenon, to determine what aspects are currently the most debated, and to help you define some keywords that you will use in your project proposal tomorrow. You do not need to come up with a completely original question! Do, however, situate your research within the relevant literature, and try to get hints/suggestions from other papers. Revisit Step 2 of the [tutorial on good research practices](https://comptools.climatematch.io/tutorials/Projects_GoodResearchPractices/student/Projects_Tutorial2.html) to review the literature more efficiently! +- **Everyone:** + The remaining 2 hours will be used to conclude the literature review and define the research questions: + - **(1h)** On your own, read the paper that was assigned to you. Make notes in a common google doc shared with your group, and especially write down important keywords or concepts which you might use in your project proposal. If you are interested in a closed-access paper and are not connected to an .edu domain or a VPN, try to find full versions of papers on preprint servers like arXiv or bioRxiv. You could also ask your Teaching Assistants to get it for you (and they might in turn ask someone who has access to a university VPN). There might be other options too… + - **(30 min)** Report back to the group. In ~5 minutes, try to tell them as much as you understand about the paper. Get into details, but do not just read whole sections from the paper out loud. Ask the other students questions about the papers they are presenting to understand them better. + - **(30 min)** Discuss and synthesize information from the papers presented. Identify overlapping themes, concepts, or gaps in the research you have encountered. Based on these discussions, refine the initial questions the group came up with. Aim to narrow down to a primary research question that is specific, measurable, and relevant to the data and interests of the group. + - **(30 min)** Formulate the research question and devise a hypothesis. Discuss as a group what they expect to discover or what predictions they can make based on their literature review and understanding of the data. This hypothesis should guide your project's direction and the methods you will need to employ. +We encourage you to consider not only the physical science aspects of a climate phenomenon, but also its socio-economic impact. We understand that specific interests and motivations will vary even within project groups and becoming part of the Climatematch community is as much about finding your role in the team as it is about pursuing a specific personal research interest. Please consider your teammates interests and ideas with as much respect as your own. -* (**15 min**) Start by discussing your initial project ideas! As a group, try to come up with one or a few questions of interest, either by yourselves or directly from the project template. Was there anything weird or intriguing you noticed in the data yesterday? Are there any questions in the template you find particularly exciting? -* (**30 min**) On your own, start doing a literature review using search engines like Google or Baidu. Look only at abstracts to select 2-3 promising ones. -* (**15 min**) Report to the whole group what papers you found and pool them together. Assign one paper per person to read/skim in the next 1h. -* (**1 h**) On your own, read the paper that was assigned to you. Make notes in a common google doc shared with your group, and especially write down important keywords or concepts which you might use in your project proposal. If you are interested in a closed-access paper and are not connected to an .edu domain or a VPN, try to find full versions of papers on preprint servers like arXiv or bioRxiv. You could also ask your Teaching Assistants to get it for you (and they might in turn ask someone who has access to a university VPN). There might be other options too… -* (**30 min**) Report back to the group. In ~5 minutes, try to tell them as much as you understand about the paper. Get into details, but do not just read whole sections from the paper out loud. Ask the other students questions about the papers they are presenting to understand them better. - --- ### SESSION 4 -_Thursday, 20th July (PM) for groups in timezone slots 2 and 5_ - -_Friday, 21st July (AM) for groups in timezone slots 1, 3, and 4_ - -By the end of this project session, you should submit your project proposal via **[Airtable link](https://airtable.com/shrQ5CLEla3dDkKbk)**. -(**30 min**) Based on your observations on Day 2 and the literature review yesterday, try to converge on a research question and devise a hypothesis. Try to come up with one or a few questions of interest, either by yourselves or directly from the project template. We encourage you to consider not only the physical science aspects of a climate phenomenon, but also its socio-economic impact. Use the question boxes with dashed outlines for inspiration. We understand that specific interests and motivations will vary even within project groups and becoming part of the Climatematch community is as much about finding your role in the team as it is about pursuing a specific personal research interest. Please consider your teammates interests and ideas with as much respect as your own. +*Thursday, 18th July (PM) for groups in timezone slots 2 and 5* +*Friday, 19st July (AM) for groups in timezone slots 1, 3, and 4* -(**30 min**) By yourself, read the [Ten simple rules for structuring papers](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005619). Pay close attention to figure 1, and how it specifies the same overall structure for the abstract, for each paragraph in the paper, and for the paper as a whole. +**The goal of the day is to submit your project proposal via** **[Airtable link](https://airtable.com/shrQ5CLEla3dDkKbk)**. -(**1 h**) As a group, try to write a proposal for this project based on the way you understand it now, following the C-C-C scheme described in the _Ten simple rules_ paper. - - -* **Context**: scientific background and the knowledge gap your project will aim to fill. Include keywords and concepts that you identified in your literature review. -* **Content**: your hypothesis and a description of the analyses and the results (positive or negative) you would need to answer your question. -* **Conclusion**: the potential significance and societal impact of the work. - -The proposal can be a list of bullet points or a coherent paragraph; don’t worry about the structure too much. The goal is to structure your thoughts and ideas so that a person unfamiliar with the topic can understand the importance of your research question and approach.. - -(**30 min**) It is always revealing to present your research to someone who has never heard about it. Share your proposal with the other team in your pod and receive their proposal in return. In your group, read and discuss the other team’s abstract and write down some feedback. What do you understand about their project? What do you _not_ understand about it? When giving your feedback, keep in mind that the other research group has put a lot of effort into generating the proposal and may not have had time to polish the language or presentation of their ideas. We always aim to be direct and specific, but also polite, respectful, and kind in our communication with each other. - -(**30 min**) Work to address the feedback received from the other team. When done, submit the project proposal **[here](https://airtable.com/shrQ5CLEla3dDkKbk)**. Your proposal will not be graded, but its submission is required to receive a project badge on your Climatematch Academy certificate. +- **Everyone** + - **(30 min)** By yourself, read the Ten simple rules for structuring papers. Pay close attention to figure 1, and how it specifies the same overall structure for the abstract, for each paragraph in the paper, and for the paper as a whole. + - **(1.5 h)** As a group, try to write a proposal for this project based on the way you understand it now, following the C-C-C scheme described in the Ten simple rules paper. + - **Context:** scientific background and the knowledge gap your project will aim to fill. Include keywords and concepts that you identified in your literature review. + - **Content:** your hypothesis and a description of the analyses and the results (positive or negative) you would need to answer your question. + - **Conclusion:** the potential significance and societal impact of the work. +The proposal can be a list of bullet points or a coherent paragraph; do not worry about the structure too much. The goal is to structure your thoughts and ideas so that a person unfamiliar with the topic can understand the importance of your research question and approach. + - **(30 min)** It is always revealing to present your research to someone who has never heard about it. Share your proposal with the other team in your pod and receive their proposal in return. In your group, read and discuss the other team’s abstract and write down some feedback. What do you understand about their project? What do you not understand about it? When giving your feedback, keep in mind that the other research group has put a lot of effort into generating the proposal and may not have had time to polish the language or presentation of their ideas. We always aim to be direct and specific, but also polite, respectful, and kind in our communication with each other. + - **(30 min)** Work to address the feedback received from the other team. When done, submit the project proposal [here](https://airtable.com/shrQ5CLEla3dDkKbk). Your proposal will not be graded, but its submission is required to receive a project badge on your Climatematch Academy certificate. --- ### SESSION 5 -_Friday, 21st July (PM) for groups in timezone slots 2 and 5_ - -_Monday, 24th July (AM) for groups in timezone slots 1, 3, and 4_ -You should now have a sense of the data, and you have probably refined your hypothesis a little. Writing a proposal will have helped you get a rough idea of what tools you might use to tackle your research question, and what the answer could look like. You will use the remaining project time to implement the analyses you have planned and make progress towards an answer. Your group might not be able to complete their research plan, but don’t get discouraged: answering a research question usually takes months if not years of work and you should consider making meaningful progress towards that goal a great success! +*Friday, 19st July (PM) for groups in timezone slots 2 and 5* +*Monday, 22th July (AM) for groups in timezone slots 1, 3, and 4* -A few pieces of general advice: +**The goal of the day is to draft the analysis framework and allocate tasks**. You should now have a sense of the data, and you have probably refined your hypothesis a little. Writing a proposal will have helped you get a rough idea of what tools you might use to tackle your research question, and what the answer could look like. You will use the remaining project time to implement the analyses you have planned and make progress towards an answer. To this end, you should organize your time and plan accordingly. Keep in mind that your group might not be able to complete their research plan, but don’t get discouraged: answering a research question usually takes months if not years of work and you should consider making meaningful progress towards that goal a great success! +- **Time zones 1, 3 & 4:** + - **(1h)** **Professional Development - Impact Talk**: As agreed during introductions on W1D1, one project group in the pod should do this during the first hour of the project block, while the other should leave this for the last hour of the block. The talks cover topics such as 1) climate justice, 2) equity in climate science, 3) open climate science, and 4) communication in climate science. Each pod will select one topic to begin with, which will be followed by facilitated group discussions. Should there be additional time, students may opt to explore another topic. + +- **Everyone:** + - **(40 min)** Draft the analysis plan. Discuss the main methods and techniques to be used for analyzing the data. Consider different analytical approaches that could be applied and select the most appropriate ones for their specific data and questions. TAs are here to help you, if you know what analysis you need, but don’t know how to do it. They can point you to useful toolkits that may be difficult to find otherwise. + - **(20 min)** Divide the group into smaller teams or have them work individually based on their skills or areas of interest. Assign specific parts of the data analysis to each student or team, ensuring that everyone has a clear task that contributes to the overall project. Finally, create a timeline that includes specific dates for progress checks and integration points. Set specific goals for the remaining session. + - **(1h)** Start working on your project! A few pieces of general advice: + - Leverage existing tools: Try not to implement complicated analyses from scratch. Use existing toolkits, and learn how to use them well. This kind of knowledge is very helpful long-term. + - Focus on clear objectives: Keep your project goals clear and your activities aligned with achieving these goals. This helps in maintaining a direct path towards successful project outcomes. + - Maintain simplicity: Start with simple analyses and build complexity as needed. This approach helps in early detection of potential data issues and allows for easier troubleshooting. -* See if you can allocate tasks efficiently within the team! -* TAs are here to help you, if you know what analysis you need, but don’t know how to do it. They can point you to useful toolkits that may be difficult to find otherwise. -* Try not to implement complicated analyses from scratch. Use existing toolkits, and learn how to use them well. This kind of knowledge is very helpful long-term. - ---- -### SESSION 6 -_Monday, 24th July (PM) for groups in timezone slots 2 and 5_ - -_Tuesday, 25th July (AM) for groups in timezone slots 1, 3, and 4_ - ->**Professional Development:** Watch the interview about [Open Climate Science](https://comptools.climatematch.io/projects/professional_development/impact_talks.html#open-climate-science) and use the provided prompts to discuss the topic within your project group for 15 minutes. As agreed during introductions on W1D1, one project group in the pod should do this during the first 30 minutes of the project block, while the other should leave this for the last 30 minutes of the block. Also as decided on W1D1, two students should practice their leadership skills by leading the discussion from the front and from behind. - - -Continue working on your project! - - +- **Time zones 2 & 5:** + - **(1h)** Continuing working on your project. -* If you find a negative answer to your question, that is absolutely ok! Please do report that. Then go back and think about how this affects your initial hypothesis. Does it rule it out, or could there be limitations in this particular data that lead to the negative result? What other data could you seek out that would be more well-suited for answering this question? Try to design a new experiment in specific details and tell us about it. Who knows, somebody might run that experiment someday! -* If you find a positive result (i.e. the data matches your hypothesis), you should spend the rest of your time validating it to make absolutely sure it is a real effect. For example, if you created a proxy-based paleoclimate reconstruction of precipitation hydrogen isotopes (δD) to assess past changes in rainfall amount, there are a few factors you could consider to ensure that the climate signal in your data is real and reliable. Are the δD values in the part of your record closest to present similar to modern measurements of rainfall δD at your study site? Are there other factors in addition to your variable of interest (rainfall amount) that may be contributing to the δD signal in your data? Can you remove the effect of these other factors so that the dominant signal in your δD record is recording changes in rainfall amount? --- -### PROJECT DAY (W2D2) -_Tuesday, 25th July (AM) for groups in timezone slots 2 and 5_ - -_Tuesday, 25th July (PM) for groups in timezone slots 1, 3, and 4_ - -Watch the keynote talk _“Futures from the Frontiers of Climate Science”_ by Dr Paul Behrens. - - +### SESSION 6 -Continue working on your project for the rest of the day! Your pod’s Teaching Assistant will be around during the tutorial time block and your Project Teaching Assistant will be available during the project time block as usual. +*Monday, 23th July (PM) for groups in timezone slots 2 and 5* +*Tuesday, 24th July (AM) for groups in timezone slots 1, 3, and 4* -During the last hour of the tutorial block, there will be a **live** [career panel](https://comptools.climatematch.io/projects/professional_development/career_panels.html) with an opportunity to ask questions to the panelists: +**You set the goal of the day!** +- **Time zones 2 & 5:** + - **(1h)** **Professional Development - Impact Talk**: As agreed during introductions on W1D1, one project group in the pod should do this during the first hour of the project block, while the other should leave this for the last hour of the block. The talks cover topics such as 1) climate justice, 2) equity in climate science, 3) open climate science, and 4) communication in climate science. Each pod will select one topic to begin with, which will be followed by facilitated group discussions. Should there be additional time, students may opt to explore another topic. +- **Everyone:** +Continue working on your project! -* 8:00 - 9:00 UTC for groups in timezone slots 1 and 2 -* 14:30 - 15:30 UTC for groups in timezone slot 3 -* 20:30 - 21:30 UTC for groups in timezone slots 4 and 5 + - If you find a negative answer to your question, that is absolutely ok! Please do report that. Then go back and think about how this affects your initial hypothesis. Does it rule it out, or could there be limitations in this particular data that lead to the negative result? What other data could you seek out that would be more well-suited for answering this question? Try to design a new experiment in specific details and tell us about it. Who knows, somebody might run that experiment someday! + - If you find a positive result (i.e. the data matches your hypothesis), you should spend the rest of your time validating it to make absolutely sure it is a real effect. For example, if you created a proxy-based paleoclimate reconstruction of precipitation hydrogen isotopes (δD) to assess past changes in rainfall amount, there are a few factors you could consider to ensure that the climate signal in your data is real and reliable. Are the δD values in the part of your record closest to present similar to modern measurements of rainfall δD at your study site? Are there other factors in addition to your variable of interest (rainfall amount) that may be contributing to the δD signal in your data? Can you remove the effect of these other factors so that the dominant signal in your δD record is recording changes in rainfall amount? --- ### SESSION 7 -_Tuesday, 25th July (PM) for groups in timezone slots 2 and 5_ -_Wednesday, 26th July (AM) for groups in timezone slots 1, 3, and 4_ +*Tuesday, 23th July (PM) for groups in timezone slots 2 and 5* +*Wednesday, 24th July (AM) for groups in timezone slots 1, 3, and 4* + +**What is your goal for the day?** -Continue working on your project! Make sure to reconvene with your teammates every 1-1.5 hours to discuss your progress. If you are struggling with something, ask others for help right away! Use your Project Teaching Assistant and your pod’s Teaching Assistant as a resource when your group gets stuck. +- **Time zones 1, 3 & 4:** + - **(1h)** **Professional Development - Mentor meeting II:** During the first hour, your project group will be visited by mentors. In these meetings, they will share their professional path in a climate-related field, offer personalized career advice, and provide a networking opportunity. Make sure to familiarize yourself with the suggested meeting structure and tips for getting the most out of these meetings [here](https://comptools.climatematch.io/projects/professional_development/mentors.html). -On Day 7, the curriculum of the course will start shifting from topics surrounding physical climate phenomena to issues of socio-economic impact as well as mitigation and adaptation strategies. This is a good point to start thinking about the impact the research topic you are studying as part of your project has on ecosystems and communities. +- **Everyone:** + Continue working on your project! A couple of extra pieces of general advice: + - Collaborate effectively: Make sure to reconvene with your teammates every 1-1.5 hours to discuss your progress. If you are struggling with something, ask others for help right away! Use your Project Teaching Assistant and your pod’s Teaching Assistant as a resource when your group gets stuck. + - Document everything: Keep detailed records of your data analysis processes, decisions, and modifications. This practice is invaluable for revisiting your work and providing clear explanations during your project presentation. + - Think about the impact: On Day 7, the curriculum of the course will start shifting from topics surrounding physical climate phenomena to issues of socio-economic impact as well as mitigation and adaptation strategies. This is a good point to start thinking about the impact the research topic you are studying as part of your project has on ecosystems and communities. --- ### SESSION 8 -_Wednesday, 26th July (PM) for groups in timezone slots 2 and 5_ -_Thursday, 27th July (AM) for groups in timezone slots 1, 3, and 4_ +*Wednesday, 24th July (PM) for groups in timezone slots 2 and 5* +*Thursday, 25th July (AM) for groups in timezone slots 1, 3, and 4* + +**What is your goal for the day?** ->**Professional Development:** Watch the interview about [Psychology of the climate crisis and climate science communication](https://comptools.climatematch.io/projects/professional_development/impact_talks.html#psychology-of-the-climate-crisis-and-climate-science-communication) and use the provided prompts to discuss the topic within your project group for 15 minutes. As agreed during introductions on W1D1, one project group in the pod should do this during the first 30 minutes of the project block, while the other should leave this for the last 30 minutes of the block. Also as decided on W1D1, two students should practice their leadership skills by leading the discussion from the front and from behind. +- **Time zones 2 & 5:** + - **(1h)** **Professional Development - Mentor meeting II:** During the first hour, your project group will be visited by mentors. In these meetings, they will share their professional path in a climate-related field, offer personalized career advice, and provide a networking opportunity. Make sure to familiarize yourself with the suggested meeting structure and tips for getting the most out of these meetings [here](https://comptools.climatematch.io/projects/professional_development/mentors.html). -Continue working on your project and start thinking about your conclusions. +- **Everyone:** + Continue working on your project and start thinking about what are your main findings. It is okay to feel short of time but do not feel discouraged. Below, some final advice for the last part of your project implementation: + - Prioritize key tasks: Focus on the **essential** elements of your project that directly contribute to answering your research questions. + - Prepare for contingencies: If something isn’t working as planned due to time constraints, focus on alternatives that can achieve similar outcomes within the available time. -The project submission form you will complete tomorrow also includes a question about your interest in potentially **continuing your project after the course** as a Climatematch Impact Scholar. Please take a moment to [read about this opportunity](https://comptools.climatematch.io/projects/docs/continuing_your_project_after_the_course.html) and discuss it with your teammates and Teaching Assistants. + The project submission form you will complete tomorrow also includes a question about your interest in potentially **continuing your project after the course** as a Climatematch Impact Scholar. Please take a moment to [read about this opportunity](https://comptools.climatematch.io/projects/docs/continuing_your_project_after_the_course.html) and discuss it with your teammates and Teaching Assistants. --- ### SESSION 9 -_Thursday, 27th July (PM) for groups in timezone slots 2 and 5_ - -_Friday, 28th July (AM) for groups in timezone slots 1, 3, and 4_ - -Tie up loose ends and prepare a short slideshow about your project! - -At the end of this project block, you should submit your slides via **[this Airtable link](https://airtable.com/shr7EAY3x39x8swZu)**. - -Keep in mind that you will be giving a live presentation of your project to your megapod peers after the final tutorial block on 28th July. - -Use [this presentation template](https://docs.google.com/presentation/d/13sSzoXhTq7R5YKznbPXH2Fo7IboMDaFKEhWQOOchT14/edit?usp=sharing). Make a copy for your team to edit! - -You can add your group name and project title to the bottom panel of non-title slides through **Slide** -> **Edit theme**. +*Thursday, 25th July (PM) for groups in timezone slots 2 and 5* +*Friday, 26th July (AM) for groups in timezone slots 1, 3, and 4* -#### **Content** +**The goal of the day is to interpret your results and identify conclusions.** -The 1 minute - 1 slide rule might seem like an impossible limit. However, it is one of the most useful formats you can learn, often referred to as a “one minute elevator pitch”. If you can become an expert at giving short pitches about your work, it will help you get the interest of a lot of people, for example when presenting posters at scientific conferences or when advocating for policy changes with your local government. Or when you accidentally find yourself in an elevator with a potential investor: this could be your chance to secure a million dollars in research funds! +Use this session to wrap up your main findings: +- You can list these in bullet points and emphasize how they address the research questions or contribute to understanding the underlying problem. In case of any unexpected results, discuss with your pod and theorize why they might have occurred. All results are valid! +- Link your results to literature. Compare your findings with your reviewed literature. How do your results support, contradict or expand the current knowledge? +- Based on the findings and their implications, draft your conclusions. -The key to a good presentation is to practice it by yourself many times. It is no different from other performing arts (acting, playing a musical instrument etc), where rehearsals are crucial to a good performance. +--- +### W2D5: Project day and final presentations -If something in your presentation does not sound good or does not make sense, you WILL get annoyed by it when you say it the tenth time, and that will make you want to change it. (Secret: this how professors prepare all of their presentations and it is why they always sound like they know what they are talking about) +*Friday, 26th July (AM) for groups in timezone slots 2 and 5* +*Friday, 26th July (PM) for groups in timezone slots 1, 3, and 4* -Always have an introduction slide and a conclusion slide. If your group is relatively large (>=5 people), then someone should be assigned to each of the intro and conclusion slides. If your group is small, then the same person can present the intro + next slide, or conclusion slide + previous slide. +**The goal of the day is to communicate your results in the final presentation.** +Tie up loose ends and prepare a short slideshow about your project! Your pod’s Teaching Assistant will be around during the tutorial time block and your Project Teaching Assistant will be available during the project time block as usual +“Project day” will be dedicated to preparing your presentation and rehearsing. In this block you will have 4 hours: -Short anecdotes can work like magic for engaging your audience. As a rule, most listeners are passive, bored, not paying attention. You can grab their attention with that smart elevator pitch, or with a short anecdote about something that happened to your group while working on projects. +- **(1h)** Finalize visuals: Complete any graphs, charts, or visual aids that will be used in your presentation. +- **(2h)** Use this [presentation template](https://docs.google.com/presentation/d/1OuL12zI0_hEfS_C_t_Lhc4n7vFVnLp7omtWZoTWLqWg/edit#slide=id.p). Make a copy for your team to edit! You can add your group name and project title to the bottom panel of non-title slides through **Slide -> Edit theme**. + Consider these suggestions: + - Content : The 1 minute - 1 slide rule might seem like an impossible limit. However, it is one of the most useful formats you can learn, often referred to as a “one minute elevator pitch”. + - Always have an introduction slide and a conclusion slide. If your group is relatively large (>=5 people), then someone should be assigned to each of the intro and conclusion slides. If your group is small, then the same person can present the intro + next slide, or conclusion slide + previous slide. + - It's completely normal if your group doesn't achieve expected results. If this is true for your group, the main goal will be to explain the logic behind your project proposal. For instance, if you designed a project to compare climate datasets to analyze the impact of El Niño Southern Oscillation (ENSO) on global temperatures, but couldn't find the appropriate data to get answers, this is still valuable. In the case of this example, the takeaways from your project could potentially highlight the need for more temperature data from specific regions or time periods in order to assess ENSO variability. What got you excited about this particular project? What could your project evolve into if given more time and resources? + Once your slides are finished, you should submit the file via [this Airtable link](https://airtable.com/shr7EAY3x39x8swZu). +- **(1h)** The key to a good presentation is to practice it by yourself many times. It is no different from other performing arts (acting, playing a musical instrument etc), where rehearsals are crucial to a good performance. -Most groups will not have a result and this is absolutely normal. If this is true for your group, the main goal will be to communicate the logic of your project proposal. For example, did you design an innovative comparison of climate datasets to assess the impact of El Niño Southern Oscillation (ENSO) on global temperature, but then did not find the appropriate data to get answers (e.g., the spatial and temporal resolution of the data available was not sufficient to answer your question)? That can also be very interesting for others to hear about! Furthermore it will make it clear that research never stops. It continues as a series of questions and answers, not just within your own project, but at the level of the entire research field. In the case of this example, the takeaways from your project could potentially highlight the need for more temperature data from specific regions or time periods in order to assess ENSO variability. Tell us what got you excited about this particular project, and try to dream big. What could your project evolve into if given more time and resources? --- -### W2D5: FINAL PRESENTATIONS -_Friday, 28th July (PM) for everyone!_ - -This is the day you present your project to other groups in your megapod. You can invite your Project Teaching Assistant too, but they might not make it if they are busy. Groups will take turns to share their screens. You can use figures and other graphics to highlight specific aspects of your research, but your presentation is meant to be told as a story, and everyone from your group should take their turn in telling a part of that story. Tell us about the different hypotheses you have had at different points and how you refined them using some of the tools you learned during the course. - +### Final Presentations -#### **Schedule** +This is the time you present your project to other groups in your megapod. You can invite your Project Teaching Assistant too, but they might not make it if they are busy. Groups will take turns to share their screens. Keep in mind that your presentation is meant to be told as a story, and everyone from your group should take their turn in telling a part of that story. Tell us about the different hypotheses you have had at different points and how you refined them using some of the tools you learned during the course. -* **10 minutes of meet & greet**. Do a round of introductions (one Teaching Assistant calls out names from the zoom list). Everyone says their name, pod name, position, institution or other area of work, and subject of study, as well as one interesting fact about themselves. “Hi, I’m Jonny from the wiggly caterpillars and I am a PhD student at University of Notre Dame in Paris. I study the relationship between moisture and storms, and in my free time I like to go on long bike rides”. -* **30-40 minutes of presentations**, including questions. Each group should speak for approximately 5 minutes (depending on group size), and then take questions for 1-2 minutes. The Lead Teaching Assistant of your megapod will determine the order of presentations. -* **10-20 minutes of general discussion**. Use the following questions to guide the group discussion. Spend a few minutes on each question. It’s ok not to use all these questions, especially if you have your own questions to ask! - * What was missing in the dataset that you would have really liked to have? - * Does anyone plan to continue working on this project in the future? Climatematch Academy will be able to support selected groups with the computing resources required to take projects to the next level. Read more about the opportunity to become a Climatematch Impact Scholar [here](https://comptools.climatematch.io/projects/docs/continuing_your_project_after_the_course.html). - * Which one of the 8 steps of good research practices was hardest and why? - * Based on your experience with the project, what project would you most like to do next? Make up your own, or pick from the other projects available in the course. - * What surprised you the most about the process of working on a project? In what way was this project most different from other projects you have worked on in the past? - * What technique did you learn in the course that you think you can immediately apply to your own project (if you are currently doing research)? - - -#### **Logistics** +--- +#### Schedule +- **10 minutes of meet & greet.** Do a round of introductions (one Teaching Assistant calls out names from the zoom list). Everyone says their name, pod name, position, institution or other area of work, and subject of study, as well as one interesting fact about themselves. “Hi, I’m Jonny from the wiggly caterpillars and I am a PhD student at University of Notre Dame in Paris. I study the relationship between moisture and storms, and in my free time I like to go on long bike rides''. + +- **30-40 minutes of presentations, including questions.** Each group should speak for approximately 5 minutes (depending on group size), and then take questions for 1-2 minutes. The Lead Teaching Assistant of your megapod will determine the order of presentations. + +- **10-20 minutes of general discussion.** Use the following questions to guide the group discussion. Spend a few minutes on each question. It’s ok not to use all these questions, especially if you have your own questions to ask! + - What was missing in the dataset that you would have really liked to have? + - Does anyone plan to continue working on this project in the future? Climatematch Academy will be able to support selected groups with the computing resources required to take projects to the next level. Read more about the opportunity to become a Climatematch Impact Scholar [here](https://comptools.climatematch.io/projects/docs/continuing_your_project_after_the_course.html ). + - Which one of the 8 steps of good research practices was hardest and why? + - Based on your experience with the project, what project would you most like to do next? Make up your own, or pick from the other projects available in the course. + - What surprised you the most about the process of working on a project? In what way was this project most different from other projects you have worked on in the past? + - What technique did you learn in the course that you think you can immediately apply to your own project (if you are currently doing research)? + +--- +#### Logistics -Presentations will take place 1.5 hours after the end of your W2D5 tutorials. **For groups in timezone slots 1, 3, 4, this will fall outside of their regular course hours.** +Presentations will take place right after the block of the preparation on W2D5 (AM for Time Zones 2 & 5, PM for Time zones 1, 3 & 4). You will present to other groups (3-5 groups per room). An email will be sent with the zoom room of one of the pods and all groups will meet there for one hour. There is a hard cutoff at the one hour mark, and it will be the Teaching Assistants’ responsibility to ensure everyone gets a turn to present. @@ -257,11 +268,12 @@ Do not introduce yourselves again, just present the material directly. When you are done presenting, leave the last slide up (with conclusions), and open the floor for questions. - -#### **Questions** +--- +#### Questions If your presentation was short enough, there is time for questions from the audience. These are a great way to get feedback on your project! Before you ask a question, consider whether others might be interested in that topic too. This usually means asking big picture questions, as opposed to detailed, technical questions, but there are exceptions. If you are answering the question, try to be short and concise. Your audience will notice if you start rambling, and it can seem as if you are avoiding the question. Answering concisely is another very useful skill in “real life”. It also means that you can take more questions given our time constraints. + From 787745da63eeec500cbf8f3c21664c2740057af0 Mon Sep 17 00:00:00 2001 From: Paul Heubel Date: Mon, 22 Jul 2024 20:04:27 +0200 Subject: [PATCH 11/12] FIX #87: past project links for CMA. Repo link update and widget cell improvement. All tested. --- projects/docs/past_projects_overview.md | 16 ++- projects/past-projects/ENSO.ipynb | 81 +++++++------- projects/past-projects/albedo.ipynb | 56 +++++----- projects/past-projects/heatwaves.ipynb | 57 ++++++---- .../past-projects/ocean_acidification.ipynb | 29 +++-- projects/past-projects/precipitation.ipynb | 105 ++++++++++-------- projects/past-projects/sea_level_rise.ipynb | 51 +++++---- projects/past-projects/wildfires.ipynb | 51 +++++---- 8 files changed, 258 insertions(+), 188 deletions(-) diff --git a/projects/docs/past_projects_overview.md b/projects/docs/past_projects_overview.md index bc6adc7b2..b44d64a2b 100644 --- a/projects/docs/past_projects_overview.md +++ b/projects/docs/past_projects_overview.md @@ -3,12 +3,10 @@ We are proud to showcase the project presentations our students prepared in previous iterations of *Computational Tools for Climate Science*. You can browse their presentation slides by project topic: -- [Sea level rise](projects/past-projects/Sea_level_rise.ipynb) -- [Regional precipitation variability and extreme events](projects/past-projects/precipitation.ipynb) -- [Changes in land cover: Albedo and carbon sequestration](projects/past-projects/albedo.ipynb) -- [Monitoring and mapping wildfires using satellite data](projects/past-projects/wildfires.ipynb) -- [Ocean acidification](projects/past-projects/ocean_acidification.ipynb) -- [The impact of ENSO on precipitation and temperature](projects/past-projects/ENSO.ipynb) -- [Heatwaves: Assessing the dynamic interactions of the atmosphere and land](projects/past-projects/heatwaves.ipynb) - - +- [Sea level rise](https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/sea_level_rise.ipynb) +- [Regional precipitation variability and extreme events](https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/precipitation.ipynb) +- [Changes in land cover: Albedo and carbon sequestration](https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/albedo.ipynb) +- [Monitoring and mapping wildfires using satellite data](https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/wildfires.ipynb) +- [The impact of ENSO on precipitation and temperature](https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/ENSO.ipynb) +- [Heatwaves: Assessing the dynamic interactions of the atmosphere and land](https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/heatwaves.ipynb) +- [Ocean Acidification](https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/ocean_acidification.ipynb) \ No newline at end of file diff --git a/projects/past-projects/ENSO.ipynb b/projects/past-projects/ENSO.ipynb index 8c31d62cf..d9f3b98c9 100644 --- a/projects/past-projects/ENSO.ipynb +++ b/projects/past-projects/ENSO.ipynb @@ -25,10 +25,9 @@ "\n", "filename = \"2023ENSO_Effects_of_ENSO_related_precipitation_on_East_Africa\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -59,10 +58,9 @@ "\n", "filename = \"2023ENSO_Environmental_impacts_of_ENSO_flavours_along_the_California_Current_system\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -92,10 +90,9 @@ "\n", "filename = \"2023ENSO_ENSO_impacts_on_the_precipitation_at_the_US_East_coast\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -126,10 +123,9 @@ "\n", "filename = \"2023ENSO_Impact_of_SST_variations_due_to_ENSO_in_rainfall_index_and_possible_social_impacts_in_Southern_Brazil\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -159,10 +155,9 @@ "\n", "filename = \"2023ENSO_Impact_of_El_Nino_events_on_rainfall_temperature_and_vegetation_in_Indonesia\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -192,10 +187,9 @@ "\n", "filename = \"2023ENSO_Coastal_El_Nino_index_impact_on_air_temperature_and_precipitation_anomalies_and_future_projections\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -225,10 +219,9 @@ "\n", "filename = \"2023ENSO_The_impact_of_different_phases_of_ENSO_on_the_precipitation_intensity_in_West_Africa\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -258,10 +251,9 @@ "\n", "filename = \"2023ENSO_Extraordinary_ENSO_El_Nino_1997_98_on_East_Africa\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -292,10 +284,9 @@ "\n", "filename = \"2023ENSO_The_impact_of_ENSO_on_coastal_ocean_productivity\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -325,10 +316,9 @@ "\n", "filename = \"2023ENSO_Effects_of_ENSO_on_sugarcane_production_in_Brazil\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -358,10 +348,9 @@ "\n", "filename = \"2023ENSO_The_impact_of_ENSO_on_precipitation_in_the_Philippines\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -391,10 +380,9 @@ "\n", "filename = \"2023ENSO_Impact_of_ENSO_on_Monsoon_onset_and_the_total_precipitation_in_the_Maritime_Continent_during_wet_seasons\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -404,11 +392,24 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, - "orig_nbformat": 4 + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/projects/past-projects/albedo.ipynb b/projects/past-projects/albedo.ipynb index ba2c1204b..9469e99ee 100644 --- a/projects/past-projects/albedo.ipynb +++ b/projects/past-projects/albedo.ipynb @@ -25,10 +25,9 @@ "\n", "filename = \"2023ALB_Albedo_and_deforestation_in_protected_areas_in_Myanmar\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -58,10 +57,9 @@ "\n", "filename = \"2023ALB_Changes_in_land_cover_Albedo_and_carbon_sequestration\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -91,10 +89,9 @@ "\n", "filename = \"2023ALB_Changes_in_land_cover_Albedo_and_temperature_in_Mato_Grosso\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -124,10 +121,9 @@ "\n", "filename = \"2023ALB_Effects_of_land_use_change_on_albedo_in_Lake_Chad_Basin\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -157,10 +153,9 @@ "\n", "filename = \"2023ALB_Impact_of_albedo_changes_due_to_tropical_deforestation_in_Bolivia_on_regional_meteorological_variables_and_building_a_model_to_estimate_GPP\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -190,10 +185,9 @@ "\n", "filename = \"2023ALB_Mangrove_land_use_changes_and_its_impact_on_climate_variables_in_Indonesia\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -223,10 +217,9 @@ "\n", "filename = \"2023ALB_Modeling_albedo_variation_in_Mozambique_due_to_the_2010_wildfire_event\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -236,11 +229,24 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, - "orig_nbformat": 4 + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/projects/past-projects/heatwaves.ipynb b/projects/past-projects/heatwaves.ipynb index 9cb621204..d930bc505 100644 --- a/projects/past-projects/heatwaves.ipynb +++ b/projects/past-projects/heatwaves.ipynb @@ -26,10 +26,10 @@ "\n", "filename = \"2023HW_Automated_heatwave_detection_using_historical_stimulations_from_CMIP6\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -59,10 +59,10 @@ "\n", "filename = \"2023HW_The_occurrence_of_heatwaves_in_connection_to_global_warming_in_the_Mediterranean_region\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -92,10 +92,10 @@ "\n", "filename = \"2023HW_Heatwaves_and_land_surface_albedo_urbanization_in_China\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -125,10 +125,10 @@ "\n", "filename = \"2023HW_Heatwave_scenario_in_Asia_region\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -158,10 +158,10 @@ "\n", "filename = \"2023HW_Heatwave_characterization_in_humid_prone_areas_India\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -191,10 +191,10 @@ "\n", "filename = \"2023HW_Temporal_variations_in_heatwave_in_West_Africa_during_1950_2014\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -204,11 +204,24 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, - "orig_nbformat": 4 + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/projects/past-projects/ocean_acidification.ipynb b/projects/past-projects/ocean_acidification.ipynb index e72190472..0085cf56e 100644 --- a/projects/past-projects/ocean_acidification.ipynb +++ b/projects/past-projects/ocean_acidification.ipynb @@ -25,8 +25,8 @@ "\n", "filename = \"2023OA_The_relationship_between_sea_surface_temperature_and_ocean_acidification_in_Shanghai_during_1990_and_2010\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", "# @markdown\n", "out = widgets.Output()\n", @@ -58,8 +58,8 @@ "\n", "filename = \"2023OA_The_effect_of_ocean_acidification_on_marine_species_population_and_coastal_industry_community_health\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", "\n", "# @markdown\n", "out = widgets.Output()\n", @@ -71,11 +71,24 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, - "orig_nbformat": 4 + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/projects/past-projects/precipitation.ipynb b/projects/past-projects/precipitation.ipynb index 99a843b43..4c4341ab3 100644 --- a/projects/past-projects/precipitation.ipynb +++ b/projects/past-projects/precipitation.ipynb @@ -25,10 +25,10 @@ "\n", "filename = \"2023RPV_Assessing_spatiotemporal_precipitation_variability_and_extreme_events_in_India\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -58,10 +58,10 @@ "\n", "filename = \"2023RPV_A_spatiotemporal_assessment_of_the_high_resolution_CHIRPS_rainfall_dataset_over_the_vegetation_in_Nepal_and_Sri_Lanka_Region\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -91,10 +91,10 @@ "\n", "filename = \"2023RPV_Using_global_climate_model_and_remote_sensing_data_to_identify_extreme_precipitation_climatological_and_NDVI_trends_in_the_Deccan_region_of_India\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -124,10 +124,10 @@ "\n", "filename = \"2023RPV_ENSO_impact_on_Amazon_basin_Assessing_the_relationship_between_climate_anomalies_and_regional_precipitation_variability\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -157,10 +157,10 @@ "\n", "filename = \"2023RPV_How_extreme_precipitation_influences_vegetation_greenness_in_the_center_region_of_Cameroon_between_2001_and_2020\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -190,10 +190,10 @@ "\n", "filename = \"2023RPV_Assessment_of_the_extreme_precipitation_event_frequency_and_its_impact_on_the_Yucatan_Peninsula_vegetation_coverage\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -223,10 +223,10 @@ "\n", "filename = \"2023RPV_Impact_of_extreme_precipitation_on_vegetation_cover_in_Indonesia\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -256,10 +256,10 @@ "\n", "filename = \"2023RPV_Impact_of_La_Nina_on_vegetation_and_precipitation_in_the_Greater_Horn_of_Africa\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -289,10 +289,10 @@ "\n", "filename = \"2023RPV_Impact_of_deforestation_and_ENSO_on_precipitation_patterns_and_cereal_production_in_Congo_River_Basin\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -322,10 +322,10 @@ "\n", "filename = \"2023RPV_Relationship_between_extreme_precipitation_events_and_vegetation_cover_in_the_Amazon_basin\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -355,10 +355,10 @@ "\n", "filename = \"2023RPV_Relationship_between_precipitation_extremes_and_cereal_productivity_in_West_Africa_over_30_years\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -388,10 +388,10 @@ "\n", "filename = \"2023RPV_Effects_of_precipitation_extreme_events_on_maize_yield_in_Maracaju_Brazil\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -421,10 +421,10 @@ "\n", "filename = \"2023RPV_Assessment_of_rainfall_variability_on_cereal_yield_and_food_security_in_Australia\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -454,10 +454,10 @@ "\n", "filename = \"2023RPV_Impact_of_drought_conditions_on_food_security_in_the_Sahelian_region_of_West_Africa\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -467,11 +467,24 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, - "orig_nbformat": 4 + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/projects/past-projects/sea_level_rise.ipynb b/projects/past-projects/sea_level_rise.ipynb index 257dca74a..cc6a78a13 100644 --- a/projects/past-projects/sea_level_rise.ipynb +++ b/projects/past-projects/sea_level_rise.ipynb @@ -25,10 +25,10 @@ "\n", "filename = \"2023SLR_Investigating_the_relationship_between_sea_level_rise_and_extreme_events_in_Indonesia\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -58,10 +58,10 @@ "\n", "filename = \"2023SLR_Rapa_Nui_A_world_heritage_site_threatened_by_sea_level_rise\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -91,10 +91,10 @@ "\n", "filename = \"2023SLR_After_during_and_before_the_storm_Comparing_SSH_data_systems\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -124,10 +124,10 @@ "\n", "filename = \"2023SLR_Sea_level_rise_and_seagrass_distribution\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -157,10 +157,10 @@ "\n", "filename = \"2023SLR_Sea_level_rise_model_variability_and_community_impact\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -170,11 +170,24 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, - "orig_nbformat": 4 + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/projects/past-projects/wildfires.ipynb b/projects/past-projects/wildfires.ipynb index 7a79ca74f..5ec9fdc90 100644 --- a/projects/past-projects/wildfires.ipynb +++ b/projects/past-projects/wildfires.ipynb @@ -25,10 +25,10 @@ "\n", "filename = \"2023WF_Assessing_wildfire_impact_and_ecological_recovery_in_Mozambique_through_remote_sensing_analysis\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -59,10 +59,10 @@ "\n", "filename = \"2023WF_Effect_of_ENSO_on_wildfire_frequency_and_burnt_area\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -92,10 +92,10 @@ "\n", "filename = \"2023WF_Trends_in_fire_regimes_in_South_America\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -125,10 +125,10 @@ "\n", "filename = \"2023WF_Wildfires_in_Angola_Burn_areas_and_vegetation_index\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -158,10 +158,10 @@ "\n", "filename = \"2023WF_Wildfires_in_Asia\"\n", "\n", - "download_link = f\"https://github.com/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", - "render_link = f\"https://nbviewer.org/github/ClimateMatchAcademy/course-content/blob/main/projects/past-projects/{filename}.pdf\"\n", + "download_link = f\"https://github.com/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "render_link = f\"https://nbviewer.org/github/neuromatch/climate-course-content/blob/main/projects/past-projects/project-presentations/{filename}.pdf\"\n", + "\n", "\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download the slides: {download_link}\")\n", @@ -171,11 +171,24 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, - "orig_nbformat": 4 + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } From 26f8c2d5383a12218f74c2b895dee2c5d81d9a5b Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 22 Jul 2024 23:14:37 +0000 Subject: [PATCH 12/12] Process tutorial notebooks --- projects/past-projects/ENSO.ipynb | 325 +++++++++++++-- projects/past-projects/albedo.ipynb | 195 ++++++++- projects/past-projects/heatwaves.ipynb | 169 +++++++- .../past-projects/ocean_acidification.ipynb | 65 ++- projects/past-projects/precipitation.ipynb | 377 ++++++++++++++++-- projects/past-projects/sea_level_rise.ipynb | 143 ++++++- projects/past-projects/wildfires.ipynb | 143 ++++++- .../instructor/Projects_Tutorial8.ipynb | 2 +- .../student/Projects_Tutorial8.ipynb | 2 +- .../instructor/W1D1_Tutorial5.ipynb | 2 +- .../student/W1D1_Tutorial5.ipynb | 2 +- .../W1D2_Tutorial6.ipynb | 80 +++- .../instructor/W1D4_Tutorial2.ipynb | 2 +- .../student/W1D4_Tutorial2.ipynb | 2 +- .../W1D5_Tutorial7.ipynb | 58 ++- .../W2D2_Intro.ipynb | 2 +- .../W2D2_Tutorial1.ipynb | 47 ++- .../W2D2_Tutorial2.ipynb | 2 +- .../W2D2_Tutorial3.ipynb | 34 +- .../W2D2_Tutorial4.ipynb | 56 ++- .../W2D2_Tutorial5.ipynb | 67 +++- .../W2D2_Tutorial6.ipynb | 15 +- .../instructor/W2D2_Intro.ipynb | 9 +- .../instructor/W2D2_Tutorial1.ipynb | 1 - .../instructor/W2D2_Tutorial2.ipynb | 2 +- .../instructor/W2D2_Tutorial3.ipynb | 4 +- .../instructor/W2D2_Tutorial4.ipynb | 26 +- .../instructor/W2D2_Tutorial5.ipynb | 117 +++++- .../instructor/W2D2_Tutorial6.ipynb | 18 +- ...py => W2D2_Tutorial4_Solution_26753443.py} | 2 +- .../W2D2_Tutorial5_Solution_43d884d4.py | 3 + .../W2D2_Tutorial5_Solution_5bbc738b.py | 5 - .../W2D2_Tutorial5_Solution_7bbe3e60.py | 15 + .../W2D2_Tutorial5_Solution_ce79f0aa.py | 3 - .../W2D2_Tutorial4_Solution_26753443_0.png | Bin 0 -> 64049 bytes .../W2D2_Tutorial4_Solution_a4ef74b1_0.png | Bin 66004 -> 0 bytes .../student/W2D2_Intro.ipynb | 9 +- .../student/W2D2_Tutorial1.ipynb | 1 - .../student/W2D2_Tutorial2.ipynb | 2 +- .../student/W2D2_Tutorial3.ipynb | 4 +- .../student/W2D2_Tutorial4.ipynb | 28 +- .../student/W2D2_Tutorial5.ipynb | 105 ++++- .../student/W2D2_Tutorial6.ipynb | 18 +- 43 files changed, 1807 insertions(+), 355 deletions(-) rename tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/{W2D2_Tutorial4_Solution_a4ef74b1.py => W2D2_Tutorial4_Solution_26753443.py} (96%) create mode 100644 tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_43d884d4.py delete mode 100644 tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_5bbc738b.py create mode 100644 tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_7bbe3e60.py delete mode 100644 tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_ce79f0aa.py create mode 100644 tutorials/W2D2_TheSocioeconomicsofClimateChange/static/W2D2_Tutorial4_Solution_26753443_0.png delete mode 100644 tutorials/W2D2_TheSocioeconomicsofClimateChange/static/W2D2_Tutorial4_Solution_a4ef74b1_0.png diff --git a/projects/past-projects/ENSO.ipynb b/projects/past-projects/ENSO.ipynb index d9f3b98c9..d0b4634eb 100644 --- a/projects/past-projects/ENSO.ipynb +++ b/projects/past-projects/ENSO.ipynb @@ -2,7 +2,9 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "# The impact of ENSO on precipitation and temperature\n", "## 2023\n", @@ -16,8 +18,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "179b4fa22e42487e8a8f7a8bcbf4754d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -37,7 +57,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Environmental impacts of ENSO flavours along the California Current system\n", "**Authors**: Po Cheng Chen, Joseph C. Smith, Paulina Cetina-Heredia\n", @@ -49,8 +71,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ae6332b700884dce97744f88d01fc814", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -70,7 +110,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### ENSO impacts on the precipitation at the US East coast\n", "**Authors**: Adeyemi Fagbade, Nicolás Peñaranda, Romeo Saldívar-Lucio\n", @@ -81,8 +123,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "482f9ccb3582434c9fd4ee4f8ed2e366", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -102,7 +162,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Impact of SST variations due to ENSO in rainfall index and possible social impacts in Southern Brazil\n", "**Authors**: Ana Belén Arroyo, Camile Chiodini, Flavio Provitina, Gabriel Soares, Lívia Sancho, Natália Rossi, Travessia Leal\n", @@ -114,8 +176,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e7ba823ae7374269817d8d80aaccf1f0", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -135,7 +215,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Impact of El Niño events on rainfall, temperature, and vegetation in Indonesia\n", "**Authors**: Steven Jerjian, Christian Riveros Lizana, Laurel DiSera, Elisa Passos, Ninibeth Sarmiento, Lakhvinder Kaur, Santiago Munevar\n", @@ -146,8 +228,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "97fe5a9ccb414bd9867f7392096f2628", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -167,7 +267,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Coastal El Niño Index impact on air temperature and precipitation anomalies and future projections\n", "**Authors**: Daphne Arenas, Selyn Acuña\n", @@ -178,8 +280,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "3d3391ebc789440c986375dc328017a1", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -199,7 +319,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### The impact of different phases of El Niño-Southern Oscillation (ENSO) on the precipitation intensity in West Africa\n", "**Authors**: Daria Proklova, Emmanuel Mashonjowa, Joana Dopp, Ludovica Vissat, Obiageri Mbah\n", @@ -210,8 +332,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e0db7413f81c4363a33bdf03cfc82a91", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -231,7 +371,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Extraordinary ENSO El Niño (1997-98) on East Africa\n", "**Authors**: Ximena Miranda, Sergei Nabatov, Abdus Samad, Jesús Pozo T., Alethia Kielbasa\n", @@ -242,8 +384,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "cd43b6d731634ee9bac08e774fa5c55d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -263,7 +423,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### The impact of ENSO on coastal ocean productivity\n", "**Authors**: Elizaveta Baranova-Parfenova, Andrea A. Cabrera, Vanni Consumi, Diana Guzmán, Sthitapragya Ray\n", @@ -275,8 +437,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "62ef0ea275b2423b8b3b45ecbec68a91", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -296,7 +476,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Effects of ENSO on sugarcane production in Brazil\n", "**Authors**: Tomas Alegre, Katherine Wood, Maria Perez, María Fernanda De Los Ríos\n", @@ -307,8 +489,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8b0e32c7f0b64cbd9fd06cde3f243371", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -328,7 +528,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### The Impact of ENSO on precipitation in the Philippines\n", "**Authors**: Neil Marc Sordilla, Kirtana Phatnani, Kimia Marvi, Anjana Shree\n", @@ -339,8 +541,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ab1d171b0aa04c7f8274922a22f76666", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -360,7 +580,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Impact of ENSO on Monsoon onset and the total precipitation in the Maritime Continent during wet seasons\n", "**Authors**: Zhixian Yang, Rosmery Lidez Condori Huanca, Tejaswini Machhindra Pawase, Naomi Nafisa Rahman, Md. Aminul Haque Laskor\n", @@ -371,8 +593,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1c71a65f63ce483eaea044839c772021", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -392,6 +632,17 @@ } ], "metadata": { + "colab": { + "collapsed_sections": [], + "include_colab_link": true, + "name": "ENSO", + "toc_visible": true + }, + "kernel": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", @@ -407,7 +658,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/projects/past-projects/albedo.ipynb b/projects/past-projects/albedo.ipynb index 9469e99ee..19b5bf018 100644 --- a/projects/past-projects/albedo.ipynb +++ b/projects/past-projects/albedo.ipynb @@ -2,7 +2,9 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "# Changes in land cover: Albedo and carbon sequestration\n", "## 2023\n", @@ -16,8 +18,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "30e816a1b0364d9c8e67c9688e973365", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -37,7 +57,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Changes in land cover: Albedo and carbon sequestration\n", "**Authors**: Seyed Farhad Saberali, Sattiki Ganguly, Lobat Kosari Moghaddam, Sandeep Gawdiya\n", @@ -48,8 +70,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7376693829e24fbd9ba2b5543086652b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -69,7 +109,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Changes in land cover: Albedo and temperature in Mato Grosso\n", "**Authors**: Manojna Polisetty, Andres Fernando Figueroa Curo, Carla Balcazar, Astrid Yusara, Daniela Velásquez Gushiken, Magnolia Song, Min Yee Chin\n", @@ -80,8 +122,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "21b475d84fbe4c7f84317ca2e4203519", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -101,7 +161,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Effects of land use change on albedo in Lake Chad Basin\n", "**Authors**: Gregori de Arruda Moreira, Kamil Vlcek, Amadou Toure, Djidjoho Renaud Roméo Koukoui, Tatiana Shevel, Marek Miltner, Rebekka Steene\n", @@ -112,8 +174,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ec0edd037b2c4fa38655c5c4dfb19454", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -133,7 +213,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Impact of albedo changes due to tropical deforestation in Bolivia on regional meteorological variables and building a model to estimate GPP\n", "**Authors**: Svetlana Travova, Carlos Cárdenas, Abdelrahman Saleh, Sébastien Saelens, Constantin Drabo, Daniel T. Quaye\n", @@ -144,8 +226,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "36c17e0599ee499db5372f89027e4c87", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -165,7 +265,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Mangrove land use changes and its impact on climate variables in Indonesia\n", "**Authors**: Lucas Bretschneider, Ivonne Roa, Ali Barmaki, Samar Nikfarjad\n", @@ -176,8 +278,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4677f9908ab6455d8c1a3de735280ab3", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -197,7 +317,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Modeling albedo variation in Mozambique due to the 2010 wildfire event\n", "**Authors**: Sofia Corradi, Marcela Olguin, Jack Smith, Amin Azimi, Solomon Osheidu\n", @@ -208,8 +330,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "bfcac4e12056477eb7fa42904e78d943", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -229,6 +369,17 @@ } ], "metadata": { + "colab": { + "collapsed_sections": [], + "include_colab_link": true, + "name": "albedo", + "toc_visible": true + }, + "kernel": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", @@ -244,7 +395,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/projects/past-projects/heatwaves.ipynb b/projects/past-projects/heatwaves.ipynb index d930bc505..5c96cfba5 100644 --- a/projects/past-projects/heatwaves.ipynb +++ b/projects/past-projects/heatwaves.ipynb @@ -2,7 +2,9 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "# Heatwaves: Assessing the dynamic interactions of the atmosphere and land\n", "\n", @@ -17,8 +19,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7e6186d38db84fe4aa1853a66c34b8f2", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -39,7 +59,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### The occurrence of heat waves in connection to global warming in the Mediterranean region\n", "**Authors**: Alba Monistrol, Farukcan Sağlam, Lana Flanjak, Natalia Gabdrakhmanova \n", @@ -50,8 +72,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "56352b9840584a0ebb0419016589c514", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -72,7 +112,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Heatwaves and land surface albedo / urbanization in China\n", "**Authors**: Abolfazl Ghadimi, Manuela Vanegas Ferro, Matteo Alleman, Rebecca Roycroft\n", @@ -83,8 +125,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4fc4ef99bae148e99081c7e120ff0ac0", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -105,7 +165,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Heatwave scenario in Asia region\n", "**Authors**: Ahmad Rashiq, Seyed Mehdi Mirbazel, Arihant Jain, Ruchir Patidar\n", @@ -116,8 +178,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8127d3b986b0417b943b22f0400b81e8", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -138,7 +218,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Heatwave Characterization in Humid Prone Areas: India\n", "**Authors**: Zeus Gracia Tabuenca, Weiling Shao, Saema Miftah, Zoe Harrington\n", @@ -149,8 +231,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d6077972dd8245fc8c540b3d6d5f4cf1", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -171,7 +271,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Temporal variations in Heatwave in West Africa during 1950-2014\n", "**Authors**: Ara Lee, Saidat Rasaq-Balogun, Idrees Muhammad, Kelvin Fiati\n", @@ -182,8 +284,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f67ca90e26454dfda847ec9892adcce2", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -204,6 +324,17 @@ } ], "metadata": { + "colab": { + "collapsed_sections": [], + "include_colab_link": true, + "name": "heatwaves", + "toc_visible": true + }, + "kernel": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", @@ -219,7 +350,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/projects/past-projects/ocean_acidification.ipynb b/projects/past-projects/ocean_acidification.ipynb index 0085cf56e..8f4dab8c1 100644 --- a/projects/past-projects/ocean_acidification.ipynb +++ b/projects/past-projects/ocean_acidification.ipynb @@ -2,7 +2,9 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "# Ocean acidification\n", "## 2023\n", @@ -16,8 +18,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d271d43ec66b4475bac9919e6a33739a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -38,7 +58,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### The effect of ocean acidification on marine species population and coastal industry/community health\n", "**Authors**: Prani Nalluri, Ali Haydaroglu, Trilce Loayza, Archana Panway, Mohamed Elhadary\n", @@ -49,8 +71,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e086bbc9dae14594b906b5b163f5988e", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -71,6 +111,17 @@ } ], "metadata": { + "colab": { + "collapsed_sections": [], + "include_colab_link": true, + "name": "ocean_acidification", + "toc_visible": true + }, + "kernel": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", @@ -86,7 +137,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/projects/past-projects/precipitation.ipynb b/projects/past-projects/precipitation.ipynb index 4c4341ab3..f08084752 100644 --- a/projects/past-projects/precipitation.ipynb +++ b/projects/past-projects/precipitation.ipynb @@ -2,7 +2,9 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "# Regional precipitation variability and extreme events\n", "## 2023\n", @@ -16,8 +18,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d0e418de3c654fcf820fb8bc357a6b63", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -38,7 +58,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### A spatiotemporal assessment of the high-resolution CHIRPS rainfall dataset over the vegetation in Nepal and Sri Lanka Region\n", "**Authors**: Akanksha Soni, Zhujun Shao, Swarnadeep Mukherjee, Terezia Klasova​, Aanchal Goel\n", @@ -49,8 +71,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "715053c0b8734475b5b3fd016aeae4b5", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -71,7 +111,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Using global climate model and remote sensing data to identify extreme precipitation, climatological, and NDVI trends in the Deccan region of India\n", "**Authors**: Ila Gupta, Ghadi El Hasbani, Lynn Maalouf\n", @@ -82,8 +124,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "148e5b1203e348cea4dc90756a143d2f", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -104,7 +164,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### ENSO's impact on Amazon Basin: Assessing the relationship between climate anomalies and regional precipitation variability\n", "**Authors**: Luciana Rojas, Ricardo Rengifo, Franco Barrionuevo, Cristian Farfán\n", @@ -115,8 +177,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a6646b71da264c578b0b9e9ff339eb58", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -137,7 +217,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### How extreme precipitation influence vegetation greenness in the center region of Cameroon between 2001 and 2020?\n", "**Authors**: Sarth Dubey, Himanshu Ahuja, Aboudi MANA SUZANNE CHRISTINE, Juan Barrios, Bijay Bagale, Foulna Carmel TCHEOBE\n", @@ -148,8 +230,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d55cbf88b29c4bf08ad00458f38d00bb", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -170,7 +270,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Assessment of the extreme precipitation events frequency and its impact on the Yucatan Peninsula vegetation coverage\n", "**Authors**: Elisa Ortiz Melchor, Ricardo Adolfo Hidalgo Rodriguez, Jean-Claude Jim Kevin Schwarzens, María Elena Velázquez Ferrera\n", @@ -181,8 +283,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "00d9c0f556da4a15b54f017d7aab2278", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -203,7 +323,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Impact of extreme precipitation on vegetation cover in Indonesia\n", "**Authors**: Livinia Saputra, Jazmín Moreno, Moon Limb\n", @@ -214,8 +336,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "fc34236025df49b49cd4bc33a77fdcad", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -236,7 +376,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Impact of La Niña on vegetation and precipitation in the Greater Horn of Africa\n", "**Authors**: Adewale Olabintan, Arnaz Khan, Hailun Xie, Franklin Njaiwo Ngalim, Kenechi Omeke, Olabanji Aladejana, João Martins, Mame Balla Ndiaye\n", @@ -247,8 +389,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "88546fd7885143f985ca6c35e6450ead", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -269,7 +429,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Impact of deforestation and ENSO on precipitation patterns and cereal production in Congo River Basin\n", "**Authors**: Pratik Bhandari, Lorenzo Pierini, Magda Altman, James Hartzell, Pelin Cansu Çavuş Gürcan, Masoumeh Bahri, Rajiv Srivastava, Eriola ADENIDJI\n", @@ -280,8 +442,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "990e17b7ddb3487f981165dfd01e07b2", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -302,7 +482,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Relationship between extreme precipitation events and vegetation cover in the Amazon basin\n", "**Authors**: Botetano Bastidas, Gianella Campos Sanchéz, Kevin Cardona Barrero, Salvador Diez, Francisco Peña, Manuel Romero Arrieta, Sebastián Sanchez, Juan Manuel \n", @@ -313,8 +495,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b4b430db341f42d3ad55347e1facab7d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -335,7 +535,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Relationship between precipitation extremes and cereal productivity in West Africa over 30years\n", "**Authors**: Joshua Fafanyo, Emmanuel Agbo, Kayode Florence, Janet Osie, Taiwo Ewulo, Ismailia Elimane, Amadou Ndiaye\n", @@ -346,8 +548,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "0a8521e50387439ab334ef2fc41bc16b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -368,7 +588,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Effects of precipitation extreme events on maize yield in Maracaju (Brazil)\n", "**Authors**: Lucia Chamlian Munari, Eduardo Gelcer, Hamanda Cavalheri, Chioma Aliku, ANNADASANKAR ROY, Astrid Helena Huechacona Ruiz, Lindsay Barbieri, Arash Nabizadeh Haghighi, Attai Aabubakar, Weld Lucas Cunha, Domenico BOVIENZO\n", @@ -379,8 +601,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "3595c83e0e954bd49d172f5321e57ce0", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -401,7 +641,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Assessment of rainfall variability on cereal yield and food security in Australia.\n", "**Authors**: Felicia Dogbey, Krishna Kanhaiya Tiwari, Femi Akinduyite, Harold Cotacallapa Mamani\n", @@ -412,8 +654,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "571060d08368441f8db109bdd672e3b0", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -434,7 +694,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Impact of drought conditions on food security in the Sahelian region of West Africa\n", "**Authors**: Abimbola Sekinat Abimbola, Adam Muhhamed Adam, Ingrid Ubeda Trujillo, Opeyemi Hammed Rasaq, Khushi Dani\n", @@ -445,8 +707,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "add7dc0fcd3a4e6db5fc62508a12b9eb", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -467,6 +747,17 @@ } ], "metadata": { + "colab": { + "collapsed_sections": [], + "include_colab_link": true, + "name": "precipitation", + "toc_visible": true + }, + "kernel": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", @@ -482,7 +773,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/projects/past-projects/sea_level_rise.ipynb b/projects/past-projects/sea_level_rise.ipynb index cc6a78a13..720c554ea 100644 --- a/projects/past-projects/sea_level_rise.ipynb +++ b/projects/past-projects/sea_level_rise.ipynb @@ -2,7 +2,9 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "# Sea level rise\n", "## 2023\n", @@ -16,8 +18,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8f37aaa103f74bb98c7a65b43d3021c8", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -38,7 +58,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Rapa Nui: A world heritage site threatened by sea level rise\n", "**Authors**: Julieta Millan, Emma Poirier, Mitzy Quinto-Cortes, Carlos Vivar Rios, Yang Zhang\n", @@ -49,8 +71,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4543460d683340499051059ee8344ce5", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -71,7 +111,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### After (during and before) the storm: Comparing SSH data systems\n", "**Authors**: James Milward, Ruben Espeleta Bolivar, Abdul Aizat Nazmi Bin A Azmi, Faith Hunja, Ayman Said, Hannah Krohn, Franck Porteous\n", @@ -82,8 +124,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "90d8275cba784b98af2cce67ad814793", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -104,7 +164,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Sea level rise and seagrass distribution\n", "**Authors**: Sanket Riswadkar, Vanessa Nakonecnij, Donia Waffa, FERDINARD OBENG-FORSON, Erik Zhivkoplias, Dkawlma Tora\n", @@ -115,8 +177,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "bbb6fda443da4b4b828a7de035b95a5c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -137,7 +217,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Sea level rise: model variability and community impact\n", "**Authors**: Carlo Peiffer, Gaia Buccino, Elena Corona, Arpit Ayang Doley, Ben Arnon\n", @@ -148,8 +230,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "49886ad1579a4a838e7300834f9bf6fb", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -170,6 +270,17 @@ } ], "metadata": { + "colab": { + "collapsed_sections": [], + "include_colab_link": true, + "name": "sea_level_rise", + "toc_visible": true + }, + "kernel": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", @@ -185,7 +296,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/projects/past-projects/wildfires.ipynb b/projects/past-projects/wildfires.ipynb index 5ec9fdc90..4d06eaa8d 100644 --- a/projects/past-projects/wildfires.ipynb +++ b/projects/past-projects/wildfires.ipynb @@ -2,7 +2,9 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "# Monitoring and mapping wildfires Using satellite data\n", "## 2023\n", @@ -16,8 +18,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "2483f5c97bf3467f8dbc4b005ee4b8df", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -38,7 +58,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Effect of ENSO on wildfire frequency and burnt area\n", "**Authors**: Pallaw Mishra, Lida Khosrosereshki, Krishna katyal, Mary Nathalie Dela Cruz, Saroj Kandel, Janvi Chhabra, Alfiya Orazkhanova, Anthony Jeanpier Fow Esteves\n", @@ -50,8 +72,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "2dd7693cf5b74e3989d67b7439d02da4", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -72,7 +112,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Trends in fire regimes in South America\n", "**Authors**: Anahita Abravan, Lydia Farnham, Gülara Uysal, Farhan Saleem, Zhanna Osipova \n", @@ -83,8 +125,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "df255e445e464ef0a3ae8f787e2983c1", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -105,7 +165,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Wildfires in Angola: Burn areas and vegetation index \n", "**Authors**: Agnessa Karapetian, Sedem Buabassah, Gilad Shreibshtein, Alkis Kalisoras, Jan Bendyk, Ana Carolina Filipe\n", @@ -116,8 +178,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "566d98b69cb24583a02660a0b3d82c9c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -138,7 +218,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "### Wildfires in Asia\n", "**Authors**: Zahra Heidaifar, Tanishq Prasad, Sayyed Mohammad Reza Mousavi, Mahdieh Goli\n", @@ -149,8 +231,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "12b5de61a6c24222941b452d66bd4260", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# @markdown\n", "from ipywidgets import widgets\n", @@ -171,6 +271,17 @@ } ], "metadata": { + "colab": { + "collapsed_sections": [], + "include_colab_link": true, + "name": "wildfires", + "toc_visible": true + }, + "kernel": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", @@ -186,7 +297,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/tutorials/Projects_GoodResearchPractices/instructor/Projects_Tutorial8.ipynb b/tutorials/Projects_GoodResearchPractices/instructor/Projects_Tutorial8.ipynb index d7e974053..c751055bd 100644 --- a/tutorials/Projects_GoodResearchPractices/instructor/Projects_Tutorial8.ipynb +++ b/tutorials/Projects_GoodResearchPractices/instructor/Projects_Tutorial8.ipynb @@ -99,7 +99,7 @@ " return tab_contents\n", "\n", "\n", - "video_ids = [('Youtube', 'HEsrjlyza5o'), ('Bilibili', 'BV1494y1B7qs')]\n", + "video_ids = [('Youtube', 'HEsrjlyza5o'), ('Bilibili', 'BV1NtbyeeEqA')]\n", "tab_contents = display_videos(video_ids, W=730, H=410)\n", "tabs = widgets.Tab()\n", "tabs.children = tab_contents\n", diff --git a/tutorials/Projects_GoodResearchPractices/student/Projects_Tutorial8.ipynb b/tutorials/Projects_GoodResearchPractices/student/Projects_Tutorial8.ipynb index d7e974053..c751055bd 100644 --- a/tutorials/Projects_GoodResearchPractices/student/Projects_Tutorial8.ipynb +++ b/tutorials/Projects_GoodResearchPractices/student/Projects_Tutorial8.ipynb @@ -99,7 +99,7 @@ " return tab_contents\n", "\n", "\n", - "video_ids = [('Youtube', 'HEsrjlyza5o'), ('Bilibili', 'BV1494y1B7qs')]\n", + "video_ids = [('Youtube', 'HEsrjlyza5o'), ('Bilibili', 'BV1NtbyeeEqA')]\n", "tab_contents = display_videos(video_ids, W=730, H=410)\n", "tabs = widgets.Tab()\n", "tabs.children = tab_contents\n", diff --git a/tutorials/W1D1_ClimateSystemOverview/instructor/W1D1_Tutorial5.ipynb b/tutorials/W1D1_ClimateSystemOverview/instructor/W1D1_Tutorial5.ipynb index 500f42b8d..facc1531c 100644 --- a/tutorials/W1D1_ClimateSystemOverview/instructor/W1D1_Tutorial5.ipynb +++ b/tutorials/W1D1_ClimateSystemOverview/instructor/W1D1_Tutorial5.ipynb @@ -216,7 +216,7 @@ " return tab_contents\n", "\n", "\n", - "video_ids = [('Youtube', 'SyvFyT3jVM8'), ('Bilibili', 'BV1ho4y1C7Eo')]\n", + "video_ids = [('Youtube', 'SyvFyT3jVM8'), ('Bilibili', 'BV1PhbyeaEMk')]\n", "tab_contents = display_videos(video_ids, W=730, H=410)\n", "tabs = widgets.Tab()\n", "tabs.children = tab_contents\n", diff --git a/tutorials/W1D1_ClimateSystemOverview/student/W1D1_Tutorial5.ipynb b/tutorials/W1D1_ClimateSystemOverview/student/W1D1_Tutorial5.ipynb index c20f35f26..bca51f436 100644 --- a/tutorials/W1D1_ClimateSystemOverview/student/W1D1_Tutorial5.ipynb +++ b/tutorials/W1D1_ClimateSystemOverview/student/W1D1_Tutorial5.ipynb @@ -216,7 +216,7 @@ " return tab_contents\n", "\n", "\n", - "video_ids = [('Youtube', 'SyvFyT3jVM8'), ('Bilibili', 'BV1ho4y1C7Eo')]\n", + "video_ids = [('Youtube', 'SyvFyT3jVM8'), ('Bilibili', 'BV1PhbyeaEMk')]\n", "tab_contents = display_videos(video_ids, W=730, H=410)\n", "tabs = widgets.Tab()\n", "tabs.children = tab_contents\n", diff --git a/tutorials/W1D2_Ocean-AtmosphereReanalysis/W1D2_Tutorial6.ipynb b/tutorials/W1D2_Ocean-AtmosphereReanalysis/W1D2_Tutorial6.ipynb index 4068e0475..3091a8933 100644 --- a/tutorials/W1D2_Ocean-AtmosphereReanalysis/W1D2_Tutorial6.ipynb +++ b/tutorials/W1D2_Ocean-AtmosphereReanalysis/W1D2_Tutorial6.ipynb @@ -66,6 +66,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "tags": [ "colab" ] @@ -81,7 +82,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "import xarray as xr\n", @@ -98,7 +101,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -126,7 +130,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -153,7 +158,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -171,6 +177,7 @@ "execution_count": null, "metadata": { "cellView": "form", + "execution": {}, "tags": [] }, "outputs": [], @@ -228,6 +235,7 @@ "execution_count": null, "metadata": { "cellView": "form", + "execution": {}, "pycharm": { "name": "#%%\n" }, @@ -263,7 +271,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# import preprocessed ECCO data. This data is full depth temperature data over 1992 to 2016 (annual mean)\n", @@ -291,7 +301,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# Quick plot of the ocean temperature in Kelvin\n", @@ -312,7 +324,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# take the temporal mean over the period 1992 to 1994\n", @@ -334,7 +348,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# plot the zonal mean section of this data\n", @@ -374,7 +390,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "theta_area_int = (\n", @@ -385,7 +403,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# define reference density of salt water and the specific heat capacity\n", @@ -440,7 +460,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "area_of_ocean = (\n", @@ -470,7 +492,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# to_remove explanation\n", @@ -484,7 +508,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -515,7 +540,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# this cell may take a while to run!\n", @@ -597,7 +624,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "fig, ax = plt.subplots()\n", @@ -638,7 +667,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# to_remove explanation\n", @@ -652,7 +683,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -681,7 +713,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# first let's plot where heat is stored in the mean\n", @@ -735,7 +769,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# we already defined an object that's the mean over years 1992 to 1994 (subset_theta)\n", @@ -763,7 +799,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# plot 2 maps to compare changes in heat content in those two layers\n", @@ -882,7 +920,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/tutorials/W1D4_Paleoclimate/instructor/W1D4_Tutorial2.ipynb b/tutorials/W1D4_Paleoclimate/instructor/W1D4_Tutorial2.ipynb index b2d8fb751..cb59f9473 100644 --- a/tutorials/W1D4_Paleoclimate/instructor/W1D4_Tutorial2.ipynb +++ b/tutorials/W1D4_Paleoclimate/instructor/W1D4_Tutorial2.ipynb @@ -51,7 +51,7 @@ "\n", "### An Overview of Isotopes in Paleoclimate\n", "\n", - "In this tutorial, and many of the remaining tutorials on this day, you will be looking at data of hydrogen and oxygen isotopes (δD and δ18O). As you learned in the video, isotopes are forms of the same element that contain the same numbers of protons but different numbers of neutrons. The two oxygen isotopes that are most commonly used in paleoclimate are oxygen 16 (16O), which is the which is the **\"lighter\"** oxygen isotope, and oxygen 18 (16O), which is the **\"heavier\"** oxygen isotope. The two hydrogen isotopes that are most commonly used in paleoclimate are hydrogen (H), which is the **\"lighter\"** oxygen isotope, and deuterium (D), which is the **\"heavier\"** oxygen isotope. \n", + "In this tutorial, and many of the remaining tutorials on this day, you will be looking at data of hydrogen and oxygen isotopes (δD and δ18O). As you learned in the video, isotopes are forms of the same element that contain the same numbers of protons but different numbers of neutrons. The two oxygen isotopes that are most commonly used in paleoclimate are oxygen 16 (16O), which is the which is the **\"lighter\"** oxygen isotope, and oxygen 18 (18O), which is the **\"heavier\"** oxygen isotope. The two hydrogen isotopes that are most commonly used in paleoclimate are hydrogen (H), which is the **\"lighter\"** oxygen isotope, and deuterium (D), which is the **\"heavier\"** oxygen isotope. \n", "\n", "![image-1.png](https://github.com/neuromatch/climate-course-content/blob/main/tutorials/W1D4_Paleoclimate/images/t2_image1.png?raw=true)\n", "\n", diff --git a/tutorials/W1D4_Paleoclimate/student/W1D4_Tutorial2.ipynb b/tutorials/W1D4_Paleoclimate/student/W1D4_Tutorial2.ipynb index 52cbf420c..7c465f050 100644 --- a/tutorials/W1D4_Paleoclimate/student/W1D4_Tutorial2.ipynb +++ b/tutorials/W1D4_Paleoclimate/student/W1D4_Tutorial2.ipynb @@ -51,7 +51,7 @@ "\n", "### An Overview of Isotopes in Paleoclimate\n", "\n", - "In this tutorial, and many of the remaining tutorials on this day, you will be looking at data of hydrogen and oxygen isotopes (δD and δ18O). As you learned in the video, isotopes are forms of the same element that contain the same numbers of protons but different numbers of neutrons. The two oxygen isotopes that are most commonly used in paleoclimate are oxygen 16 (16O), which is the which is the **\"lighter\"** oxygen isotope, and oxygen 18 (16O), which is the **\"heavier\"** oxygen isotope. The two hydrogen isotopes that are most commonly used in paleoclimate are hydrogen (H), which is the **\"lighter\"** oxygen isotope, and deuterium (D), which is the **\"heavier\"** oxygen isotope. \n", + "In this tutorial, and many of the remaining tutorials on this day, you will be looking at data of hydrogen and oxygen isotopes (δD and δ18O). As you learned in the video, isotopes are forms of the same element that contain the same numbers of protons but different numbers of neutrons. The two oxygen isotopes that are most commonly used in paleoclimate are oxygen 16 (16O), which is the which is the **\"lighter\"** oxygen isotope, and oxygen 18 (18O), which is the **\"heavier\"** oxygen isotope. The two hydrogen isotopes that are most commonly used in paleoclimate are hydrogen (H), which is the **\"lighter\"** oxygen isotope, and deuterium (D), which is the **\"heavier\"** oxygen isotope. \n", "\n", "![image-1.png](https://github.com/neuromatch/climate-course-content/blob/main/tutorials/W1D4_Paleoclimate/images/t2_image1.png?raw=true)\n", "\n", diff --git a/tutorials/W1D5_IntroductiontoClimateModeling/W1D5_Tutorial7.ipynb b/tutorials/W1D5_IntroductiontoClimateModeling/W1D5_Tutorial7.ipynb index 06158082b..8bde70873 100644 --- a/tutorials/W1D5_IntroductiontoClimateModeling/W1D5_Tutorial7.ipynb +++ b/tutorials/W1D5_IntroductiontoClimateModeling/W1D5_Tutorial7.ipynb @@ -60,6 +60,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "tags": [ "colab" ] @@ -81,6 +82,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "executionInfo": { "elapsed": 2, "status": "ok", @@ -114,7 +116,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -143,6 +146,7 @@ "execution_count": null, "metadata": { "cellView": "form", + "execution": {}, "tags": [] }, "outputs": [], @@ -162,6 +166,7 @@ "execution_count": null, "metadata": { "cellView": "form", + "execution": {}, "tags": [] }, "outputs": [], @@ -218,7 +223,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -231,6 +237,7 @@ "execution_count": null, "metadata": { "cellView": "form", + "execution": {}, "pycharm": { "name": "#%%\n" }, @@ -254,7 +261,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -324,7 +332,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "col = intake.open_esm_datastore(\n", @@ -398,6 +408,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "executionInfo": { "elapsed": 6561, "status": "ok", @@ -447,7 +458,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "cat.keys()" @@ -472,6 +485,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "executionInfo": { "elapsed": 1011, "status": "ok", @@ -516,7 +530,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "ssp585 = dt[\"TaiESM1\"][\"ssp585\"].ds\n", @@ -535,7 +551,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "ssp585.tos" @@ -565,6 +583,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "executionInfo": { "elapsed": 11488, "status": "ok", @@ -626,6 +645,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "executionInfo": { "elapsed": 163, "status": "error", @@ -687,6 +707,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "executionInfo": { "elapsed": 36973, "status": "ok", @@ -777,7 +798,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -805,6 +827,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "tags": [] }, "outputs": [], @@ -822,7 +845,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -860,6 +884,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "executionInfo": { "elapsed": 1822, "status": "ok", @@ -900,6 +925,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "tags": [] }, "outputs": [], @@ -916,7 +942,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -941,6 +968,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "executionInfo": { "elapsed": 190, "status": "ok", @@ -969,6 +997,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "executionInfo": { "elapsed": 9588, "status": "ok", @@ -994,6 +1023,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "executionInfo": { "elapsed": 3184, "status": "ok", @@ -1020,6 +1050,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "executionInfo": { "elapsed": 191, "status": "ok", @@ -1053,6 +1084,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "executionInfo": { "elapsed": 21337, "status": "ok", @@ -1117,6 +1149,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "tags": [] }, "outputs": [], @@ -1132,7 +1165,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -1206,7 +1240,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Intro.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Intro.ipynb index cb660f85e..63d1d6b3e 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Intro.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Intro.ipynb @@ -80,7 +80,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial1.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial1.ipynb index 1c259f076..225efa222 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial1.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial1.ipynb @@ -59,7 +59,9 @@ "cell_type": "code", "execution_count": null, "id": "368d0c90-ae7e-43d9-ada7-ad42c75f5f95", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# import\n", @@ -71,7 +73,8 @@ "execution_count": null, "id": "f831d869-6072-44f2-8568-ddf04ace1abb", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -100,7 +103,8 @@ "execution_count": null, "id": "6db786f8-e5c4-42a9-9837-e41027b9ad4d", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -118,7 +122,8 @@ "execution_count": null, "id": "e11e3bbb-ce8f-4404-8d04-b6f86d4a9ea9", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -146,7 +151,8 @@ "execution_count": null, "id": "ea9d553f-c3eb-4723-a922-e81f97e1e3ba", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -204,7 +210,8 @@ "execution_count": null, "id": "e3fe59d0-0e89-48ec-b652-2ec007d4c6f3", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -217,7 +224,8 @@ "execution_count": null, "id": "52ca5582-816c-423c-9ed7-cda1c7319731", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -236,7 +244,8 @@ "execution_count": null, "id": "f9b620a1-41ec-4ded-a186-7f598ceaa045", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -271,7 +280,8 @@ "execution_count": null, "id": "9c6b2260-bdb0-4d7b-a07d-41551d5ccf92", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -352,7 +362,9 @@ "cell_type": "code", "execution_count": null, "id": "30a81fb8-c21b-490c-9297-a6705f114957", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# to_remove explanation\n", @@ -379,7 +391,8 @@ "execution_count": null, "id": "2523a1bd-56cc-4594-b6d6-fa84288cadfb", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -392,7 +405,8 @@ "execution_count": null, "id": "05df13b5-14ce-4515-aaae-7cc9e3765445", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -432,7 +446,9 @@ "cell_type": "code", "execution_count": null, "id": "b17595a7-b326-4edb-9f80-b8e21f1d4e5e", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# to_remove explanation\n", @@ -456,7 +472,8 @@ "execution_count": null, "id": "39410eaf-5020-4646-a821-b90df4c361f7", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -521,7 +538,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial2.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial2.ipynb index 6ceaa9c98..6dcc7fffe 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial2.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial2.ipynb @@ -608,7 +608,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial3.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial3.ipynb index 2a3bf926a..25cac34fa 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial3.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial3.ipynb @@ -56,7 +56,9 @@ "cell_type": "code", "execution_count": null, "id": "062c4b1a-6239-4644-a0dd-03fe1342fe99", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# import\n", @@ -68,7 +70,8 @@ "execution_count": null, "id": "33ac31c0-ac52-447a-82d7-aec0b98dc6e6", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -97,7 +100,8 @@ "execution_count": null, "id": "8b4722fe-cbd5-484a-be6d-96ed7aafbf62", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -115,7 +119,8 @@ "execution_count": null, "id": "053ee0ea-d704-45c8-8b4b-aad17216710d", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -143,7 +148,8 @@ "execution_count": null, "id": "5b50c362", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -202,7 +208,8 @@ "execution_count": null, "id": "74b1c5e6-ed8f-4ca8-bbab-a0a6c417dced", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -215,7 +222,8 @@ "execution_count": null, "id": "703ee8f2", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -234,7 +242,8 @@ "execution_count": null, "id": "9fd96992-bab2-4494-aeb5-997cc8689746", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -288,7 +297,9 @@ "cell_type": "code", "execution_count": null, "id": "c97e6d3d-1718-479b-a19a-ffc6a082347b", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# to_remove explanation\n", @@ -309,7 +320,8 @@ "execution_count": null, "id": "867fc0d6-6802-4d3d-888b-be960ffd54e8", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -374,7 +386,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial4.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial4.ipynb index 7600707fe..5a05dafb6 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial4.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial4.ipynb @@ -62,7 +62,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# installations ( uncomment and run this cell ONLY when using google colab or kaggle )" @@ -72,6 +74,7 @@ "cell_type": "code", "execution_count": null, "metadata": { + "execution": {}, "executionInfo": { "elapsed": 1460, "status": "ok", @@ -102,7 +105,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -130,7 +134,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -150,6 +155,7 @@ "code_folding": [ 0 ], + "execution": {}, "tags": [] }, "outputs": [], @@ -184,6 +190,7 @@ "execution_count": null, "metadata": { "cellView": "form", + "execution": {}, "tags": [] }, "outputs": [], @@ -241,7 +248,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -254,6 +262,7 @@ "execution_count": null, "metadata": { "cellView": "form", + "execution": {}, "pycharm": { "name": "#%%\n" }, @@ -277,7 +286,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -324,7 +334,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# Load SSP data from .csv file\n", @@ -349,7 +361,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "print(df.SCENARIO.unique()) # print all scenarios\n", @@ -383,7 +397,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -434,7 +449,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# put variables of interest in a list\n", @@ -551,7 +568,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# put variables of interest in a list\n", @@ -623,7 +642,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# put two variables of interest in a list\n", @@ -672,7 +693,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# to_remove solution\n", @@ -715,7 +738,9 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# to_remove explanation\n", @@ -735,7 +760,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -801,7 +827,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial5.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial5.ipynb index a3b5509bf..b09e35eb1 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial5.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial5.ipynb @@ -54,7 +54,9 @@ "cell_type": "code", "execution_count": null, "id": "1af3e766-b9c3-4bf8-815c-4087e7811925", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# import\n", @@ -66,7 +68,8 @@ "execution_count": null, "id": "bf05ea3d-be91-4007-b4dd-210179c2f6f1", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -95,7 +98,8 @@ "execution_count": null, "id": "e7392de8-f946-453b-bedf-8a07c705ee7f", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -113,7 +117,8 @@ "execution_count": null, "id": "6c10210c-a3d9-4996-a3d3-4bafa4b72637", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -141,7 +146,8 @@ "execution_count": null, "id": "80412217-b5a7-4fed-b29e-b8751eb8c847", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -200,7 +206,8 @@ "execution_count": null, "id": "ddbb472a-a055-4f48-800b-ec9ac36cb3c6", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -213,7 +220,8 @@ "execution_count": null, "id": "2dc2f6c1-637b-4506-a667-45750dd7fbe5", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -231,7 +239,10 @@ "cell_type": "code", "execution_count": null, "id": "693f9f9c-c8c0-4118-99cd-a9ccf1f55766", - "metadata": {}, + "metadata": { + "cellView": "form", + "execution": {} + }, "outputs": [], "source": [ "# @title Submit your feedback\n", @@ -287,7 +298,9 @@ "cell_type": "code", "execution_count": null, "id": "a7b00ec8-495f-4e07-ab13-989dd26b2c92", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# to_remove explanation\n", @@ -300,7 +313,10 @@ "cell_type": "code", "execution_count": null, "id": "11591351-d85d-4737-835d-b1ca218f1354", - "metadata": {}, + "metadata": { + "cellView": "form", + "execution": {} + }, "outputs": [], "source": [ "# @title Submit your feedback\n", @@ -310,7 +326,9 @@ { "cell_type": "markdown", "id": "97a7001b-1122-4f8c-9ef9-b42b03823f21", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "This feature space is one way to dissect the narratives that underlie the SSPs. \n", "\n", @@ -336,21 +354,23 @@ "cell_type": "code", "execution_count": null, "id": "c8f40968-8d7a-487f-aeb3-b901ebfe53fd", - "metadata": {}, + "metadata": { + "execution": {} + }, "outputs": [], "source": [ "# to_remove explanation\n", "\n", "'''\n", - "Strengths: SSPs are an approach that nicely balances (biased) expert opinion with more objective (but perhaps inaccurate) models. The framework underlines the importance of baseline assumptions on resulting emissions and temperatures. \n", - "There is now more than one baseline/business-as-usual scenario, however, these scenarios result in at least 3.1°C warming (and up to 5.1°C) by 2100. \n", - "With the framework, one is easily able to model climate policies and compare them to the benchmark futures. It furthermore allows for climate change-related research globally across research communities and is extendable to other scales, sectors, and issue areas. \n", - "Global narrative extensions can be produced and applied in key sectors to support quantitative projections from e.g. energy and land-use models, and projections from IAMs. \n", + "Strengths: SSPs are an approach that nicely balances (biased) expert opinion with more objective (but perhaps inaccurate) models. The framework underlines the importance of baseline assumptions on resulting emissions and temperatures.\n", + "There is now more than one baseline/business-as-usual scenario, however, these scenarios result in at least 3.1°C warming (and up to 5.1°C) by 2100.\n", + "With the framework, one is easily able to model climate policies and compare them to the benchmark futures. It furthermore allows for climate change-related research globally across research communities and is extendable to other scales, sectors, and issue areas.\n", + "Global narrative extensions can be produced and applied in key sectors to support quantitative projections from e.g. energy and land-use models, and projections from IAMs.\n", "\n", "...\n", "\n", - "Weaknesses: An even larger set of assumptions/complexity leads to overconfidence while complexity and uncertainty are increased. It is not easy to apply SSPs regionally. \n", - "Futures with non-neo-classical economics like no or limited growth in high-income countries or scenarios oriented around eco-communalism are not represented in the SSPs. \n", + "Weaknesses: An even larger set of assumptions/complexity leads to overconfidence while complexity and uncertainty are increased. It is not easy to apply SSPs regionally.\n", + "Futures with non-neo-classical economics like no or limited growth in high-income countries or scenarios oriented around eco-communalism are not represented in the SSPs.\n", "There might also be plausible futures that are under-represented including those driven by disruptive events, whether technological, social, political, or environmental, e.g. implications of violent conflicts, the crossing of biophysical and social tipping points or unexpectedly rapid technological innovation; for example, in artificial intelligence or energy efficiency.\n", "...\n", "cf. e.g https://www.nature.com/articles/s41558-020-00952-0\n", @@ -361,7 +381,10 @@ "cell_type": "code", "execution_count": null, "id": "041ce3f4-15b5-48e5-b810-3194f27f5766", - "metadata": {}, + "metadata": { + "cellView": "form", + "execution": {} + }, "outputs": [], "source": [ "# @title Submit your feedback\n", @@ -384,7 +407,9 @@ "attachments": {}, "cell_type": "markdown", "id": "3469e417-cb2e-49a8-82bc-0b600337244c", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "# Resources\n", "\n", @@ -423,7 +448,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial6.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial6.ipynb index 8b2c1e246..5d286466a 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial6.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/W2D2_Tutorial6.ipynb @@ -56,7 +56,8 @@ "execution_count": null, "id": "7550a995-8abf-45a7-83fe-4eb7565d43f4", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -85,7 +86,8 @@ "execution_count": null, "id": "b591486d-dff5-4dc6-b83b-1125977a7758", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -141,7 +143,9 @@ { "cell_type": "markdown", "id": "8e98eb20-8e63-4a64-a9b3-47c2f0ee7383", - "metadata": {}, + "metadata": { + "execution": {} + }, "source": [ "# Section 1: CO$_2$ Removal\n", "\n", @@ -184,7 +188,8 @@ "execution_count": null, "id": "d485bbc9-f179-4516-bc51-eb34211e8255", "metadata": { - "cellView": "form" + "cellView": "form", + "execution": {} }, "outputs": [], "source": [ @@ -254,7 +259,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Intro.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Intro.ipynb index 7dc02673c..63d1d6b3e 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Intro.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Intro.ipynb @@ -37,7 +37,7 @@ "execution": {} }, "source": [ - "## TODO Day Learning Objectives" + "## Day Learning Objectives" ] }, { @@ -47,10 +47,9 @@ "execution": {} }, "source": [ - "1. Describe the logic behind the socioeconomic pathway framework, and explain how the pathways differ from one another in both climate and socioeconomic variables using CMIP6 data and integrated assessment modeling results, respectively (building off of W2D1).\n", - "2. Examine the strengths and weaknesses of integrated assessment modeling practice and compare models whose results are included in the IPCC reports and understand how these results impact the report’s conclusions.\n", - "3. Examine the socioeconomic factors at the origin of anthropogenic warming and a *Just Transition*.\n", - "\n" + "1. Describe the motivation behind the Shared Socioeconomic Pathway (SSP) framework, and explain how the 5 pathways differ from one another in both climate and socioeconomic aspects using CMIP6 data and integrated assessment modeling results, respectively.\n", + "2. Examine the strengths and weaknesses of SSP-focussed integrated assessment modeling practice and understand how these support and weaken the IPCC report’s conclusions, respectively.\n", + "3. Examine the socioeconomic factors at the origin of anthropogenic warming and a *Just Transition*." ] } ], diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial1.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial1.ipynb index c76e79c79..b65458825 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial1.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial1.ipynb @@ -418,7 +418,6 @@ "\n", "download_link = f\"https://img.climateinteractive.org/2019/09/EnROADS-one-page-guide-to-control-panel-v11-dec-2021.pdf\"\n", "render_link = f\"https://img.climateinteractive.org/2019/09/EnROADS-one-page-guide-to-control-panel-v11-dec-2021.pdf\"\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download a cheatsheet for the En-ROADS Control Panel:\\n{download_link}\")\n", diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial2.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial2.ipynb index 3bb255222..3aaaf1b48 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial2.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial2.ipynb @@ -263,7 +263,7 @@ "\n", "You might already have clicked through the toggles at the top of the control panel of En-ROADS and tried the different *Views* (Main graphs, Kaya graphs, Miniature graphs). Select now the **Kaya graphs** view and reset the simulator (click on the anti-clockwise circular arrow to 'Reset all policies & assumptions' or just reload the page/model [here](https://en-roads.climateinteractive.org/)).\n", "\n", - "The Kaya graphs depict four drivers of growth in carbon dioxide emissions from energy use, which reflects about two-thirds of all greenhouse gas emissions (the remaining third of emissions are from land use changes and other gases, such as methane (CH4) and nitrous oxide (N2O), which are not considered here). The corresponding equation, the so-called [***Kaya identity***](https://en.wikipedia.org/wiki/Kaya_identity) below was developed by Yoichi Kaya:\n", + "The Kaya graphs depict four drivers of growth in carbon dioxide emissions from energy use, which reflects about two-thirds of all greenhouse gas emissions (the remaining third of emissions are from land use changes and other gases, such as methane (CH$_4$) and nitrous oxide (N$_2$O), which are not considered here). The corresponding equation, the so-called [***Kaya identity***](https://en.wikipedia.org/wiki/Kaya_identity) below was developed by Yoichi Kaya:\n", "\n", "***CO$_2$ Emissions from Energy = Global Population × GDP per Capita × Energy Intensity of GDP × Carbon Intensity of Energy***\n", "\n", diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial3.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial3.ipynb index 0667708f3..227664d5a 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial3.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial3.ipynb @@ -43,7 +43,7 @@ "source": [ "# Tutorial Objectives\n", "\n", - "*Estimated timing of tutorial:* 15 minutes\n", + "*Estimated timing of tutorial:* 20 minutes\n", "\n", "The last tutorials covered the necessity for an energy transition to tackle the climate emergency and many solutions at once. As emissions accumulate, it becomes substantially harder to succeed the longer we take to make big changes. This tutorial explores the temporal dimension of action, here policies, by using the Climate Solution Simulator named [En-ROADS](https://www.climateinteractive.org/en-roads/).\n", "\n", @@ -338,7 +338,7 @@ "source": [ "# Summary\n", "\n", - "In this tutorial, we discussed the temporal dimension of the carbon price implementation in order to understand why no policy might be a silver bullet to solve all problems but comes with various ethical and political implications. At last, we discussed a few limitations of the En-ROADs model approach." + "In this tutorial, we discussed the temporal dimension of the carbon price implementation in order to understand why no policy might be a silver bullet to solve all problems but comes with various ethical and political implications. " ] }, { diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial4.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial4.ipynb index 914691600..f4fa9fbd0 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial4.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial4.ipynb @@ -38,6 +38,8 @@ "source": [ "# Tutorial Objectives\n", "\n", + "*Estimated timing of tutorial:* 35 minutes\n", + "\n", "In this tutorial, you will learn about Integrated Assessment Models (IAMs), a class of models that combine climatology, economics, and social science, reflecting the intertwined nature of these domains in addressing climate change. Based on these models the IPCC established the socioeconomic pathway framework. You are going to learn how these pathways differ from one another in both climate and socioeconomic variables as well as assumptions.\n", "\n", "After finishing this tutorial, you will know how to \n", @@ -309,7 +311,7 @@ "jp-MarkdownHeadingCollapsed": true }, "source": [ - "In this, and subsequent, tutorials, you will explore Integrated Assessment Models (IAMs) which are the standard class of models used to make climate change projections. IAMs couple a climate model with an economic model, allowing us to evaluate the two-way coupling between economic productivity and climate change severity. IAMs can also account for changes that result from mitigation efforts, which lessen anthropogenic emissions.\n", + "In this, and the subsequent, tutorial, you will explore Integrated Assessment Models (IAMs) which are the standard class of models used to make climate change projections. IAMs couple a climate model with an economic model, allowing us to evaluate the two-way coupling between economic productivity and climate change severity. IAMs can also account for changes that result from mitigation efforts, which lessen anthropogenic emissions.\n", "\n", "Let's start by investigating some IAM model output.\n", "\n", @@ -385,8 +387,8 @@ "- and **forcing** (`'Diagnostics|MAGICC6|Forcing'`).\n", "\n", "- As a `REGION`, we choose the `'World'`,\n", - "- and our `SCENARIO`s are called `'SSP1-26'` and `'SSP5-85'`.\n", - "- The model of choice for the former scenario is by convention `'IMAGE'` and `'REMIND-MAGPIE'` for the latter, respectively.\n", + "- and our `SCENARIO`s are called `'SSP1-Baseline'` and `'SSP5-Baseline'`.\n", + "- The model of choice for the former scenario is by convention `'IMAGE'` and `'REMIND-MAGPIE'` for the latter, respectively.\n", "\n", "A function named `get_SSPs_for_variable()` applies all this generally and is hidden in the next cell. Please execute it, such that the subsequent cells can make use of it. If you are interested in its procedure and want to adjust it, don't forget to save a copy beforehand." ] @@ -457,7 +459,7 @@ "# create new names for structured data series and axes labels\n", "val_name = ['GDP (billion US$/yr)', 'Emissions (Mt CO$_2$/yr)', 'Energy use (EJ/yr)', 'Forcing (W/m$^2$)']\n", "# choose scenarios of interest and a color for plotting\n", - "scenarios = ['SSP1-26', 'SSP5-Baseline']\n", + "scenarios = ['SSP1-Baseline', 'SSP5-Baseline']\n", "colors = ['darkblue','darkorange']\n", "\n", "# init figure and axis\n", @@ -496,7 +498,7 @@ "\n", "Our plots show that the SSP5-Baseline scenario exhibits very high levels of energy use, and emissions (due to fossil fuel exploitation), it marks the upper end of the scenarios in several dimensions (cf. [Kriegler et al. (2014)](https://doi.org/10.1016/j.gloenvcha.2016.05.015)). \n", "\n", - "The SSP1-26 scenario contrarily caps the increase of energy use by 2030, combined with other actions leading to decreasing emissions and subsequently a decreasing forcing for the second half of the century. However, economic growth continues with half the slope of SSP5-Baseline. In summary, it is the most optimistic projection: we transition to a global society of sustainability-focused growth." + "The SSP1-Baseline scenario contrarily caps the increase of energy use by 2030, combined with other actions leading to decreasing emissions and subsequently a decreasing forcing for the second half of the century. However, economic growth continues with half the slope of SSP5-Baseline. In summary, it is the most optimistic projection: we transition to a global society of sustainability-focused growth." ] }, { @@ -576,7 +578,7 @@ "# create new names for structured data series and plot labels\n", "val_name = ['Population\\n(millions)', 'GDP (billion US$/yr)']\n", "# choose scenarios of interest and a color for plotting\n", - "scenarios = ['SSP1-26', 'SSP5-Baseline']\n", + "scenarios = ['SSP1-Baseline', 'SSP5-Baseline']\n", "colors = ['darkblue','darkorange']\n", "\n", "# init figure and axis\n", @@ -620,7 +622,7 @@ "execution": {} }, "source": [ - "# Section 1.3: Differences of SSP1 and SSP5\n", + "## Section 1.4: Differences of SSP1 and SSP5\n", "\n", "Major differences are visible when you contrast emissions and assume direct causation with ecosystem health. Increasing emissions then translate into decreasing ecosystem health." ] @@ -631,7 +633,7 @@ "execution": {} }, "source": [ - "## Coding exercise 1.3\n", + "## Coding exercise 1.4\n", "\n", "1. Choose two variables to emphasize ecosystem health differences in the SSP1 and SSP5 scenarios and assign them to `vars`. Then assign axis labels with the correct units for plotting to the `val_name` variable.\n", "2. Explain to your pod why the chosen variables emphasize a difference in the scenarios and describe this difference based on your current knowledge of the narratives." @@ -650,7 +652,7 @@ "# create new names for structured data series and plot labels\n", "val_name = ...\n", "# choose scenarios of interest and a color for plotting\n", - "scenarios = ['SSP1-26', 'SSP5-Baseline']\n", + "scenarios = ['SSP1-Baseline', 'SSP5-Baseline']\n", "colors = ['darkblue','darkorange']\n", "\n", "#################################################\n", @@ -705,7 +707,7 @@ "# create new names for structured data series and plot labels\n", "val_name = ['Emissions\\n(Mt CO$_2$/yr)','Land covered by\\nforest (million ha)']\n", "# choose scenarios of interest and a color for plotting\n", - "scenarios = ['SSP1-26', 'SSP5-Baseline']\n", + "scenarios = ['SSP1-Baseline', 'SSP5-Baseline']\n", "colors = ['darkblue','darkorange']\n", "\n", "\n", @@ -766,7 +768,7 @@ "outputs": [], "source": [ "# @title Submit your feedback\n", - "content_review(f\"{feedback_prefix}_Coding_Exercise_1_3\")" + "content_review(f\"{feedback_prefix}_Coding_Exercise_1_4\")" ] }, { @@ -791,7 +793,7 @@ "\n", "It is possible to download the SSP data used in this tutorial, when you provide an email address, from [this IIASA database](https://tntcat.iiasa.ac.at/SspDb/dsd), where all data from the main simulations of the IAMs used in the [IPCC reports](https://www.ipcc.ch/reports/) is freely available.\n", "\n", - "Find a summary of all SSP narratives in this paper by [Oneill et al. (2017)](https://doi.org/10.1016/j.gloenvcha.2015.01.004).\n", + "Find a summary of all SSP narratives in this paper by [O'Neill et al. (2017)](https://doi.org/10.1016/j.gloenvcha.2015.01.004).\n", "\n", "Find even more information in\n", "\n", diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial5.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial5.ipynb index 1e17155b4..0abec282a 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial5.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial5.ipynb @@ -22,11 +22,11 @@ "\n", "**Content creators:** Paul Heubel, Maximilian Puelma Touzel\n", "\n", - "**Content reviewers:** Jenna Pearson, Chi Zhang, Ohad Zivan\n", + "**Content reviewers:** Jenna Pearson, Ohad Zivan\n", "\n", - "**Content editors:** Paul Heubel, Jenna Pearson, Chi Zhang, Ohad Zivan\n", + "**Content editors:** Paul Heubel, Jenna Pearson, Ohad Zivan\n", "\n", - "**Production editors:** Wesley Banfield, Jenna Pearson, Konstantine Tsafatinos, Chi Zhang, Ohad Zivan\n", + "**Production editors:** Jenna Pearson, Konstantine Tsafatinos, Chi Zhang, Ohad Zivan\n", "\n", "**Our 2024 Sponsors:** CMIP, NFDI4Earth" ] @@ -40,7 +40,14 @@ "source": [ "# Tutorial objectives\n", "\n", - "* " + "*Estimated timing of tutorial:* 25 minutes\n", + "\n", + "In this tutorial, you discuss the narratives of the SSP framework and step back to reflect on the framework's assumptions and their consequences for modeling socioeconomics and climate futures. It further emphasizes how equity aspects need to be thought of when solving the climate crisis.\n", + "\n", + "After working through this Tutorial you know how to \n", + "\n", + "* map Shared Socioeconomic Pathways in a feature space of equality and environmental health,\n", + "* reflect on narratives when discussing future scenarios and their socioeconomic implications." ] }, { @@ -53,9 +60,7 @@ "outputs": [], "source": [ "# import\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "#import dicelib # https://github.com/mptouzel/PyDICE" + "import matplotlib.pyplot as plt" ] }, { @@ -230,6 +235,20 @@ "IFrame(src=f\"https://mfr.ca-1.osf.io/render?url=https://osf.io/{link_id}/?direct%26mode=render%26action=download%26mode=render\", width=854, height=480)" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "693f9f9c-c8c0-4118-99cd-a9ccf1f55766", + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [], + "source": [ + "# @title Submit your feedback\n", + "content_review(f\"{feedback_prefix}_Mapping_the_Narrative_Space_Slides\")" + ] + }, { "cell_type": "markdown", "id": "c7ce6e92-a46d-437a-9e03-c5b80eb63474", @@ -243,14 +262,14 @@ "\n", "Let's begin with a brief recall of the IAM features:\n", "\n", - "- IAMs resolve the economy spatially, in contrast, the toy model En-ROADs for example, which we applied in Tutorial 1 to 3, aggregates all variables and is non-spatial.\n", + "- IAMs resolve the economy spatially, in contrast, the toy model En-ROADS for example, which we applied in Tutorial 1 to 3, aggregates all variables and is non-spatial.\n", "- Like En-ROADS, the world models used in IAMs usually have *exogeneous* (externally set) times series for variables, in addition to fixed world system parameters. These exogenous variables are assumed to be under our society's control (e.g. mitigation). \n", "- IAMs come equipped with an objective function (a formula that calculates the quantity to be optimized). This function returns the value of a projected future obtained from running the world model under a given climate policy. This value is defined by the time series of these exogenous variables. In this sense, the objective function is what defines \"good\" in \"good climate policy\". \n", "- The computation in an IAM is then an optimization of this objective as a function of the time series of these exogenous variables over some fixed time window.\n", "\n", "Most IAMs are based on *Neo-classical economics* (also referred to as \"establishment economics\"). This is an approach to economics that makes particular assumptions. For example, it is assumed that production, consumption, and valuation of goods and services are driven solely by the supply and demand model. One fundamental concept is *utility* (i.e. economic value), which is not only central to economics but also to decision theory as a whole, which is a research field that mathematically formalizes the activity of *planning* (planning here means selecting strategies based on how they are expected to play out given a model that takes those strategies and projects forward into the future).\n", "\n", - "As we want to discuss the background of IAM economics, you are going to reflect on these particular *Neo-classical* assumptions." + "Six of the most well-established IAMs have been chosen to represent a certain SSP narrative as discussed by Max in the video. Their simulations result in energy use and emissions characteristics for the respective SSP. These narratives try to describe broad socioeconomic trends that are plausible while reflecting worlds in which mitigation and adaptation challenges vary from low to very high.\n" ] }, { @@ -262,7 +281,7 @@ "source": [ "## Questions 1\n", "\n", - "As a follow-up to its presentation in the tutorial video, try now to place all 5 SSP narratives in the three-dimensional feature space yourself. You can use the SSP narrative names as a hint.\n", + "As a repetition and a follow-up of the tutorial video, try now to place all 5 SSP narratives in the three-dimensional feature space of ***Intra-nation equality***, ***Inter-nation equality***, and ***Environmental Health*** yourself. You can use the SSP narrative names as a hint.\n", "\n", "* SSP1: Sustainability\n", "* SSP2: Middle of the road\n", @@ -270,6 +289,8 @@ "* SSP4: A road divided\n", "* SSP5: Fossil Fueled development\n", "\n", + "As an additional hint, you might want to check out detailed SSP summaries in the 'SSP narratives' section in [this Carbon Brief article](https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/).\n", + "\n", "Which were easy to place? Which were harder? What made them easy or hard to place? Discuss with your pod.\n" ] }, @@ -284,10 +305,39 @@ "source": [ "# to_remove explanation\n", "'''\n", - "Guidance for TAs: The solution is already given in the slides, to further discuss these slides, please read the detailed SSP summaries in the 'SSP narratives' section from the carbon brief website under https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/\n", + "The solution is already given in the slides, to further discuss these slides, please read the detailed SSP summaries in the 'SSP narratives' section from the carbon brief website under https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/\n", "'''" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "11591351-d85d-4737-835d-b1ca218f1354", + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [], + "source": [ + "# @title Submit your feedback\n", + "content_review(f\"{feedback_prefix}_Questions_1\")" + ] + }, + { + "cell_type": "markdown", + "id": "97a7001b-1122-4f8c-9ef9-b42b03823f21", + "metadata": { + "execution": {} + }, + "source": [ + "This feature space is one way to dissect the narratives that underlie the SSPs. \n", + "\n", + "A consideration of the future socio-economic situation in the light of the resulting challenges is also fruitful. For example, low challenges to mitigation and adaptation due to rapid technological development, relative global equality of income and focus on environmental sustainability arise in SSP1. SSP4, on the other hand, features similarly low challenges to mitigation due to its rapid technological development, but high challenges to climate adaptation due to persistent inequality and poverty in many parts of the world (cf. [Carbon Brief Explainer, Hausfather, 2018](https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/)). \n", + "Note that mitigation and adaptation responses are not implemented in the SSPs, such that other studies can assess the effects of policies and of impacts by comparing outcomes to those in the reference SSPs. Hence, a large number of studies investigate a variety of policies and projected risks (cf. [O'Neill et al., 2020](https://www.nature.com/articles/s41558-020-00952-0)).\n", + "\n", + "Let us finally summarize a few advantages and disadvantages of the SSP framework in general." + ] + }, { "cell_type": "markdown", "id": "35fa283c-f214-45a4-9b45-bf263d989f74", @@ -297,7 +347,7 @@ "source": [ "## Questions 2\n", "\n", - "The SSP framework. Take a minute to list the strengths and weaknesses of the scenario approach to socio-economic climate projections. \n" + "The SSP framework. Take a minute to list the strengths and weaknesses of the scenario approach to socio-economic climate projections you can think of. \n" ] }, { @@ -312,11 +362,35 @@ "# to_remove explanation\n", "\n", "'''\n", - "Strength: SSPs are an approach that nicely balances (biased) expert opinion with more objective (but perhaps inaccurate) models.\n", - "Weakness: even larger set of assumptions/complexity gives over confidence?\n", + "Strengths: SSPs are an approach that nicely balances (biased) expert opinion with more objective (but perhaps inaccurate) models. The framework underlines the importance of baseline assumptions on resulting emissions and temperatures.\n", + "There is now more than one baseline/business-as-usual scenario, however, these scenarios result in at least 3.1°C warming (and up to 5.1°C) by 2100.\n", + "With the framework, one is easily able to model climate policies and compare them to the benchmark futures. It furthermore allows for climate change-related research globally across research communities and is extendable to other scales, sectors, and issue areas.\n", + "Global narrative extensions can be produced and applied in key sectors to support quantitative projections from e.g. energy and land-use models, and projections from IAMs.\n", + "\n", + "...\n", + "\n", + "Weaknesses: An even larger set of assumptions/complexity leads to overconfidence while complexity and uncertainty are increased. It is not easy to apply SSPs regionally.\n", + "Futures with non-neo-classical economics like no or limited growth in high-income countries or scenarios oriented around eco-communalism are not represented in the SSPs.\n", + "There might also be plausible futures that are under-represented including those driven by disruptive events, whether technological, social, political, or environmental, e.g. implications of violent conflicts, the crossing of biophysical and social tipping points or unexpectedly rapid technological innovation; for example, in artificial intelligence or energy efficiency.\n", + "...\n", + "cf. e.g https://www.nature.com/articles/s41558-020-00952-0\n", "'''" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "041ce3f4-15b5-48e5-b810-3194f27f5766", + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [], + "source": [ + "# @title Submit your feedback\n", + "content_review(f\"{feedback_prefix}_Questions_2\")" + ] + }, { "cell_type": "markdown", "id": "28c0a077-c9a0-42d9-ada6-e8b835668c3b", @@ -324,17 +398,26 @@ "execution": {} }, "source": [ - "# Summary" + "# Summary\n", + "\n", + "In this tutorial, you discussed the narratives of the SSP framework and stepped back to reflect on the framework's assumptions and their consequences for modeling socioeconomics and climate futures. It helps to prepare a thoughtful development of your own climate scenario via En-ROADS in the next tutorial. Equality aspects, prerequisites and socioeconomic necessities as well as other implications need to be thought of when solving the climate crisis." ] }, { + "attachments": {}, "cell_type": "markdown", - "id": "9e904e57-b6b9-4ee8-aefb-140dce3c93c2", + "id": "3469e417-cb2e-49a8-82bc-0b600337244c", "metadata": { "execution": {} }, "source": [ - "# Resources" + "# Resources\n", + "\n", + "- [Carbon Brief Explainer: How ‘Shared Socioeconomic Pathways’ explore future climate change, Hausfather, 2018](https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/)\n", + "- [Hallegatte, S., Przyluski, V. & Vogt-Schilb, A. Building world narratives for climate change impact, adaptation and vulnerability analyses. Nature Clim Change 1, 151–155 (2011). doi.org/10.1038/nclimate1135](https://doi.org/10.1038/nclimate1135)\n", + "- [The Shared Socioeconomic Pathways and their energy, land use, and greenhouse gas emissions implications: An overview, Riahi et al., Global Environmental Change 42, 169-180 (2017). doi.org/10.1016/j.gloenvcha.2015.01.004](https://doi.org/10.1016/j.gloenvcha.2015.01.004)\n", + "- [O’Neill, B.C., Carter, T.R., Ebi, K. et al. Achievements and needs for the climate change scenario framework. Nat. Clim. Chang. 10, 1074–1084 (2020). doi.org/10.1038/s41558-020-00952-0](https://doi.org/10.1038/s41558-020-00952-0)\n", + "- [En-ROADS documentation](https://docs.climateinteractive.org/projects/en-roads/en/latest/index.html)" ] } ], diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial6.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial6.ipynb index 3c9d37ab4..6c4a3a7f7 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial6.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/instructor/W2D2_Tutorial6.ipynb @@ -140,6 +140,20 @@ "display(tabs)" ] }, + { + "cell_type": "markdown", + "id": "8e98eb20-8e63-4a64-a9b3-47c2f0ee7383", + "metadata": { + "execution": {} + }, + "source": [ + "# Section 1: CO$_2$ Removal\n", + "\n", + "While substantial emissions mitigations are necessary to reduce future climate suffering, they can not make up for the hundreds of billions of tons of CO$_2$ that humans have already emitted. However, both natural and technological methods for removing CO$_2$ from the atmosphere exist. Although they are presently miniscule compared to the tens-of-gigatons scale of global emissions, some experts expect that CO$_2$ removal methods will play a key role in the future once major mitigation goals have been accomplished. \n", + "\n", + "Video 1 briefly explains how Carbon Removal is addressed in EN-ROADS. Keep its representation in mind for the following exercises." + ] + }, { "cell_type": "markdown", "id": "a516e969-8b67-4f8a-9d39-061770ffb4c9", @@ -211,7 +225,9 @@ "- [En-ROADS User Guide PDF](https://docs.climateinteractive.org/projects/en-roads/en/latest/en-roads-user-guide.pdf)\n", "- [Guided Assignment - Simulating Climate Futures in En-ROADS: Short Version](https://www.climateinteractive.org/guided-assignment/)\n", "\n", - "**A Planetary Crisis Planning Computer Game**\n", + "**Planetary Crisis Planning Computer Games**\n", + "Play the games listed below to explore alternative societal futures\n", + "- [The Climate Game](https://ig.ft.com/climate-game/)\n", "- [Half Earth Socialism](https://play.half.earth/).\n" ] } diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial4_Solution_a4ef74b1.py b/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial4_Solution_26753443.py similarity index 96% rename from tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial4_Solution_a4ef74b1.py rename to tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial4_Solution_26753443.py index f6f1f4a52..269cd087d 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial4_Solution_a4ef74b1.py +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial4_Solution_26753443.py @@ -4,7 +4,7 @@ # create new names for structured data series and plot labels val_name = ['Emissions\n(Mt CO$_2$/yr)','Land covered by\nforest (million ha)'] # choose scenarios of interest and a color for plotting -scenarios = ['SSP1-26', 'SSP5-Baseline'] +scenarios = ['SSP1-Baseline', 'SSP5-Baseline'] colors = ['darkblue','darkorange'] diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_43d884d4.py b/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_43d884d4.py new file mode 100644 index 000000000..eade21286 --- /dev/null +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_43d884d4.py @@ -0,0 +1,3 @@ +''' +The solution is already given in the slides, to further discuss these slides, please read the detailed SSP summaries in the 'SSP narratives' section from the carbon brief website under https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/ +''' \ No newline at end of file diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_5bbc738b.py b/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_5bbc738b.py deleted file mode 100644 index f0c945f05..000000000 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_5bbc738b.py +++ /dev/null @@ -1,5 +0,0 @@ - -''' -Strength: SSPs are an approach that nicely balances (biased) expert opinion with more objective (but perhaps inaccurate) models. -Weakness: even larger set of assumptions/complexity gives over confidence? -''' \ No newline at end of file diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_7bbe3e60.py b/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_7bbe3e60.py new file mode 100644 index 000000000..9d8e83ce4 --- /dev/null +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_7bbe3e60.py @@ -0,0 +1,15 @@ + +''' +Strengths: SSPs are an approach that nicely balances (biased) expert opinion with more objective (but perhaps inaccurate) models. The framework underlines the importance of baseline assumptions on resulting emissions and temperatures. +There is now more than one baseline/business-as-usual scenario, however, these scenarios result in at least 3.1°C warming (and up to 5.1°C) by 2100. +With the framework, one is easily able to model climate policies and compare them to the benchmark futures. It furthermore allows for climate change-related research globally across research communities and is extendable to other scales, sectors, and issue areas. +Global narrative extensions can be produced and applied in key sectors to support quantitative projections from e.g. energy and land-use models, and projections from IAMs. + +... + +Weaknesses: An even larger set of assumptions/complexity leads to overconfidence while complexity and uncertainty are increased. It is not easy to apply SSPs regionally. +Futures with non-neo-classical economics like no or limited growth in high-income countries or scenarios oriented around eco-communalism are not represented in the SSPs. +There might also be plausible futures that are under-represented including those driven by disruptive events, whether technological, social, political, or environmental, e.g. implications of violent conflicts, the crossing of biophysical and social tipping points or unexpectedly rapid technological innovation; for example, in artificial intelligence or energy efficiency. +... +cf. e.g https://www.nature.com/articles/s41558-020-00952-0 +''' \ No newline at end of file diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_ce79f0aa.py b/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_ce79f0aa.py deleted file mode 100644 index ce92bc586..000000000 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_ce79f0aa.py +++ /dev/null @@ -1,3 +0,0 @@ -''' -Guidance for TAs: The solution is already given in the slides, to further discuss these slides, please read the detailed SSP summaries in the 'SSP narratives' section from the carbon brief website under https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/ -''' \ No newline at end of file diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/static/W2D2_Tutorial4_Solution_26753443_0.png b/tutorials/W2D2_TheSocioeconomicsofClimateChange/static/W2D2_Tutorial4_Solution_26753443_0.png new file mode 100644 index 0000000000000000000000000000000000000000..90c1de8e4fdc98432a288801bd665b1f21418d21 GIT binary patch literal 64049 zcmbrmc{r78`#-$QGLtEhAu42wN-~8?C^D4FOc_!rLK&7hL!k^!#z@GNiX;|gNCSyd z8J00rh>W4%=iYmNkN5cg^B%wVcsus)*^gx1_jRAwd48trjy5^8pPfaBg+wB;AJEq` zC6VZuNF-VU8TV?{u@^Eh?Wl?Dffdo)STp;Fz-!-&LzsOz)umdCgQ%`sVol z?(>rxQK#zzCyxm`#)WX{FpGzCnf_d3ZcX~b_~haL`C}UGIvVLsje^&%U*B{38#nQT%r$t06C4g4 zI1rMRC2neJDl-(o6HU*=xglInB0pg!e{I3;&gWHGRYzN^=sKURn)?T!^Gf9@JbonlN8e>K*ZuAt&{fQg2@BdnMI% zVFwyn#U9hxIsMg4yD!AR^v{nNmQ&`wtj<);%xJ?%x2BaeWv%*yhFaEQaBrIsNt20u zP>UpVoE);&Zir2ARXF;}`kgX42Xalf+Efd!-+5Ng$w~6Z&!0+e9a{qa{H)+& ziEv9zC2r`X-Yxd(r;SW>3ZWqtpJ+C{{`zhW&G&l=U!FAHEv>k3{aQpPghaZO5l<5r zI90NBGVttD({#ai+~KQp4->gpc-7i1J$K#IUf#HB!6ouKpe|I|Zs?kT_UJLQLfv)Q zRFby4`__?nX{@JDpH?~BEx7-x@S@AA&GU;{9(^?|uEoX028%U|BkPw}|4a&M2B;o? z6C3$CxSXqkLpDJwDHY*vBJsN%3lSKLQMX1E)d1z6Q+_`h-#Fk!0m7ndYnwp>g z>yrLwe$uh0%IAivm&B1`t2HFS?QXnmY;2_$XWin~DKpNFcbeUUI zv82(O+RC2&wBuVCP1M!pT1Jin>Ab47F$?Q2Zu}Nn;k=1-pns7z>YG1}-ZZQBEryp` zBeo3h%bEpLE4MImUEI+zK1IXALAu=F(DmgD|LKglI5rab$&(8qUwtRK*E9-lGERSx zpy@yD^x*homS-1!UhBJ2sB1&)l7LW2_RH!SpVYYiXnQ@2%2aJTu=~nJB)S zZ*4ot(s*TkUcxv0Ui#>fxzJtI8$By4Yj>rWZqYOkK6Qw0oAlHK2gj*kZtQH`sF1dfoQI{uuswC9qwrs@?!I9HG zT;|Vz-R2eM4bv9Wj^Yq$d*y@;E8|tWIT5jP56)A49Bn&ZS8!`9eb3zCb2Nk{|Cxz^ zV*cw|P080ZrnVu5EKJwx>!hN7OHG&-^Wp74hDjn~s z(ci1jl{52gUCPY8dbB#vXbLn5Iu2W<7)bfP*|Vpdk55k~Is4%49hK*XS<*EFSp)eR>fL?e2l?vNLs?(fh=(V% zXiFZ9^k34r;oKeJzhpf+q9^O#%0DV`8 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

3|-N)x6_v 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%0DAb998YfuA{(6E2bckdCHz?KjPL8N&QCPNTW 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%0D?d+3ihf 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 diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Intro.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Intro.ipynb index 7dc02673c..63d1d6b3e 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Intro.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Intro.ipynb @@ -37,7 +37,7 @@ "execution": {} }, "source": [ - "## TODO Day Learning Objectives" + "## Day Learning Objectives" ] }, { @@ -47,10 +47,9 @@ "execution": {} }, "source": [ - "1. Describe the logic behind the socioeconomic pathway framework, and explain how the pathways differ from one another in both climate and socioeconomic variables using CMIP6 data and integrated assessment modeling results, respectively (building off of W2D1).\n", - "2. Examine the strengths and weaknesses of integrated assessment modeling practice and compare models whose results are included in the IPCC reports and understand how these results impact the report’s conclusions.\n", - "3. Examine the socioeconomic factors at the origin of anthropogenic warming and a *Just Transition*.\n", - "\n" + "1. Describe the motivation behind the Shared Socioeconomic Pathway (SSP) framework, and explain how the 5 pathways differ from one another in both climate and socioeconomic aspects using CMIP6 data and integrated assessment modeling results, respectively.\n", + "2. Examine the strengths and weaknesses of SSP-focussed integrated assessment modeling practice and understand how these support and weaken the IPCC report’s conclusions, respectively.\n", + "3. Examine the socioeconomic factors at the origin of anthropogenic warming and a *Just Transition*." ] } ], diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial1.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial1.ipynb index daad3076e..3114b8be3 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial1.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial1.ipynb @@ -402,7 +402,6 @@ "\n", "download_link = f\"https://img.climateinteractive.org/2019/09/EnROADS-one-page-guide-to-control-panel-v11-dec-2021.pdf\"\n", "render_link = f\"https://img.climateinteractive.org/2019/09/EnROADS-one-page-guide-to-control-panel-v11-dec-2021.pdf\"\n", - "# @markdown\n", "out = widgets.Output()\n", "with out:\n", " print(f\"If you want to download a cheatsheet for the En-ROADS Control Panel:\\n{download_link}\")\n", diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial2.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial2.ipynb index a9faf0351..c3de0aad3 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial2.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial2.ipynb @@ -263,7 +263,7 @@ "\n", "You might already have clicked through the toggles at the top of the control panel of En-ROADS and tried the different *Views* (Main graphs, Kaya graphs, Miniature graphs). Select now the **Kaya graphs** view and reset the simulator (click on the anti-clockwise circular arrow to 'Reset all policies & assumptions' or just reload the page/model [here](https://en-roads.climateinteractive.org/)).\n", "\n", - "The Kaya graphs depict four drivers of growth in carbon dioxide emissions from energy use, which reflects about two-thirds of all greenhouse gas emissions (the remaining third of emissions are from land use changes and other gases, such as methane (CH4) and nitrous oxide (N2O), which are not considered here). The corresponding equation, the so-called [***Kaya identity***](https://en.wikipedia.org/wiki/Kaya_identity) below was developed by Yoichi Kaya:\n", + "The Kaya graphs depict four drivers of growth in carbon dioxide emissions from energy use, which reflects about two-thirds of all greenhouse gas emissions (the remaining third of emissions are from land use changes and other gases, such as methane (CH$_4$) and nitrous oxide (N$_2$O), which are not considered here). The corresponding equation, the so-called [***Kaya identity***](https://en.wikipedia.org/wiki/Kaya_identity) below was developed by Yoichi Kaya:\n", "\n", "***CO$_2$ Emissions from Energy = Global Population × GDP per Capita × Energy Intensity of GDP × Carbon Intensity of Energy***\n", "\n", diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial3.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial3.ipynb index 86fde4d5d..b459f4e8f 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial3.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial3.ipynb @@ -43,7 +43,7 @@ "source": [ "# Tutorial Objectives\n", "\n", - "*Estimated timing of tutorial:* 15 minutes\n", + "*Estimated timing of tutorial:* 20 minutes\n", "\n", "The last tutorials covered the necessity for an energy transition to tackle the climate emergency and many solutions at once. As emissions accumulate, it becomes substantially harder to succeed the longer we take to make big changes. This tutorial explores the temporal dimension of action, here policies, by using the Climate Solution Simulator named [En-ROADS](https://www.climateinteractive.org/en-roads/).\n", "\n", @@ -328,7 +328,7 @@ "source": [ "# Summary\n", "\n", - "In this tutorial, we discussed the temporal dimension of the carbon price implementation in order to understand why no policy might be a silver bullet to solve all problems but comes with various ethical and political implications. At last, we discussed a few limitations of the En-ROADs model approach." + "In this tutorial, we discussed the temporal dimension of the carbon price implementation in order to understand why no policy might be a silver bullet to solve all problems but comes with various ethical and political implications. " ] }, { diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial4.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial4.ipynb index d4c99cd26..6c1a1856c 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial4.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial4.ipynb @@ -38,6 +38,8 @@ "source": [ "# Tutorial Objectives\n", "\n", + "*Estimated timing of tutorial:* 35 minutes\n", + "\n", "In this tutorial, you will learn about Integrated Assessment Models (IAMs), a class of models that combine climatology, economics, and social science, reflecting the intertwined nature of these domains in addressing climate change. Based on these models the IPCC established the socioeconomic pathway framework. You are going to learn how these pathways differ from one another in both climate and socioeconomic variables as well as assumptions.\n", "\n", "After finishing this tutorial, you will know how to \n", @@ -309,7 +311,7 @@ "jp-MarkdownHeadingCollapsed": true }, "source": [ - "In this, and subsequent, tutorials, you will explore Integrated Assessment Models (IAMs) which are the standard class of models used to make climate change projections. IAMs couple a climate model with an economic model, allowing us to evaluate the two-way coupling between economic productivity and climate change severity. IAMs can also account for changes that result from mitigation efforts, which lessen anthropogenic emissions.\n", + "In this, and the subsequent, tutorial, you will explore Integrated Assessment Models (IAMs) which are the standard class of models used to make climate change projections. IAMs couple a climate model with an economic model, allowing us to evaluate the two-way coupling between economic productivity and climate change severity. IAMs can also account for changes that result from mitigation efforts, which lessen anthropogenic emissions.\n", "\n", "Let's start by investigating some IAM model output.\n", "\n", @@ -385,8 +387,8 @@ "- and **forcing** (`'Diagnostics|MAGICC6|Forcing'`).\n", "\n", "- As a `REGION`, we choose the `'World'`,\n", - "- and our `SCENARIO`s are called `'SSP1-26'` and `'SSP5-85'`.\n", - "- The model of choice for the former scenario is by convention `'IMAGE'` and `'REMIND-MAGPIE'` for the latter, respectively.\n", + "- and our `SCENARIO`s are called `'SSP1-Baseline'` and `'SSP5-Baseline'`.\n", + "- The model of choice for the former scenario is by convention `'IMAGE'` and `'REMIND-MAGPIE'` for the latter, respectively.\n", "\n", "A function named `get_SSPs_for_variable()` applies all this generally and is hidden in the next cell. Please execute it, such that the subsequent cells can make use of it. If you are interested in its procedure and want to adjust it, don't forget to save a copy beforehand." ] @@ -457,7 +459,7 @@ "# create new names for structured data series and axes labels\n", "val_name = ['GDP (billion US$/yr)', 'Emissions (Mt CO$_2$/yr)', 'Energy use (EJ/yr)', 'Forcing (W/m$^2$)']\n", "# choose scenarios of interest and a color for plotting\n", - "scenarios = ['SSP1-26', 'SSP5-Baseline']\n", + "scenarios = ['SSP1-Baseline', 'SSP5-Baseline']\n", "colors = ['darkblue','darkorange']\n", "\n", "# init figure and axis\n", @@ -496,7 +498,7 @@ "\n", "Our plots show that the SSP5-Baseline scenario exhibits very high levels of energy use, and emissions (due to fossil fuel exploitation), it marks the upper end of the scenarios in several dimensions (cf. [Kriegler et al. (2014)](https://doi.org/10.1016/j.gloenvcha.2016.05.015)). \n", "\n", - "The SSP1-26 scenario contrarily caps the increase of energy use by 2030, combined with other actions leading to decreasing emissions and subsequently a decreasing forcing for the second half of the century. However, economic growth continues with half the slope of SSP5-Baseline. In summary, it is the most optimistic projection: we transition to a global society of sustainability-focused growth." + "The SSP1-Baseline scenario contrarily caps the increase of energy use by 2030, combined with other actions leading to decreasing emissions and subsequently a decreasing forcing for the second half of the century. However, economic growth continues with half the slope of SSP5-Baseline. In summary, it is the most optimistic projection: we transition to a global society of sustainability-focused growth." ] }, { @@ -576,7 +578,7 @@ "# create new names for structured data series and plot labels\n", "val_name = ['Population\\n(millions)', 'GDP (billion US$/yr)']\n", "# choose scenarios of interest and a color for plotting\n", - "scenarios = ['SSP1-26', 'SSP5-Baseline']\n", + "scenarios = ['SSP1-Baseline', 'SSP5-Baseline']\n", "colors = ['darkblue','darkorange']\n", "\n", "# init figure and axis\n", @@ -620,7 +622,7 @@ "execution": {} }, "source": [ - "# Section 1.3: Differences of SSP1 and SSP5\n", + "## Section 1.4: Differences of SSP1 and SSP5\n", "\n", "Major differences are visible when you contrast emissions and assume direct causation with ecosystem health. Increasing emissions then translate into decreasing ecosystem health." ] @@ -631,7 +633,7 @@ "execution": {} }, "source": [ - "## Coding exercise 1.3\n", + "## Coding exercise 1.4\n", "\n", "1. Choose two variables to emphasize ecosystem health differences in the SSP1 and SSP5 scenarios and assign them to `vars`. Then assign axis labels with the correct units for plotting to the `val_name` variable.\n", "2. Explain to your pod why the chosen variables emphasize a difference in the scenarios and describe this difference based on your current knowledge of the narratives." @@ -650,7 +652,7 @@ "# create new names for structured data series and plot labels\n", "val_name = ...\n", "# choose scenarios of interest and a color for plotting\n", - "scenarios = ['SSP1-26', 'SSP5-Baseline']\n", + "scenarios = ['SSP1-Baseline', 'SSP5-Baseline']\n", "colors = ['darkblue','darkorange']\n", "\n", "#################################################\n", @@ -695,11 +697,11 @@ "execution": {} }, "source": [ - "[*Click for solution*](https://github.com/neuromatch/climate-course-content/tree/main/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial4_Solution_a4ef74b1.py)\n", + "[*Click for solution*](https://github.com/neuromatch/climate-course-content/tree/main/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial4_Solution_26753443.py)\n", "\n", "*Example output:*\n", "\n", - "Solution hint\n", + "Solution hint\n", "\n" ] }, @@ -724,7 +726,7 @@ "outputs": [], "source": [ "# @title Submit your feedback\n", - "content_review(f\"{feedback_prefix}_Coding_Exercise_1_3\")" + "content_review(f\"{feedback_prefix}_Coding_Exercise_1_4\")" ] }, { @@ -749,7 +751,7 @@ "\n", "It is possible to download the SSP data used in this tutorial, when you provide an email address, from [this IIASA database](https://tntcat.iiasa.ac.at/SspDb/dsd), where all data from the main simulations of the IAMs used in the [IPCC reports](https://www.ipcc.ch/reports/) is freely available.\n", "\n", - "Find a summary of all SSP narratives in this paper by [Oneill et al. (2017)](https://doi.org/10.1016/j.gloenvcha.2015.01.004).\n", + "Find a summary of all SSP narratives in this paper by [O'Neill et al. (2017)](https://doi.org/10.1016/j.gloenvcha.2015.01.004).\n", "\n", "Find even more information in\n", "\n", diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial5.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial5.ipynb index 34d55728a..ab515b21c 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial5.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial5.ipynb @@ -22,11 +22,11 @@ "\n", "**Content creators:** Paul Heubel, Maximilian Puelma Touzel\n", "\n", - "**Content reviewers:** Jenna Pearson, Chi Zhang, Ohad Zivan\n", + "**Content reviewers:** Jenna Pearson, Ohad Zivan\n", "\n", - "**Content editors:** Paul Heubel, Jenna Pearson, Chi Zhang, Ohad Zivan\n", + "**Content editors:** Paul Heubel, Jenna Pearson, Ohad Zivan\n", "\n", - "**Production editors:** Wesley Banfield, Jenna Pearson, Konstantine Tsafatinos, Chi Zhang, Ohad Zivan\n", + "**Production editors:** Jenna Pearson, Konstantine Tsafatinos, Chi Zhang, Ohad Zivan\n", "\n", "**Our 2024 Sponsors:** CMIP, NFDI4Earth" ] @@ -40,7 +40,14 @@ "source": [ "# Tutorial objectives\n", "\n", - "* " + "*Estimated timing of tutorial:* 25 minutes\n", + "\n", + "In this tutorial, you discuss the narratives of the SSP framework and step back to reflect on the framework's assumptions and their consequences for modeling socioeconomics and climate futures. It further emphasizes how equity aspects need to be thought of when solving the climate crisis.\n", + "\n", + "After working through this Tutorial you know how to \n", + "\n", + "* map Shared Socioeconomic Pathways in a feature space of equality and environmental health,\n", + "* reflect on narratives when discussing future scenarios and their socioeconomic implications." ] }, { @@ -53,9 +60,7 @@ "outputs": [], "source": [ "# import\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "#import dicelib # https://github.com/mptouzel/PyDICE" + "import matplotlib.pyplot as plt" ] }, { @@ -230,6 +235,20 @@ "IFrame(src=f\"https://mfr.ca-1.osf.io/render?url=https://osf.io/{link_id}/?direct%26mode=render%26action=download%26mode=render\", width=854, height=480)" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "693f9f9c-c8c0-4118-99cd-a9ccf1f55766", + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [], + "source": [ + "# @title Submit your feedback\n", + "content_review(f\"{feedback_prefix}_Mapping_the_Narrative_Space_Slides\")" + ] + }, { "cell_type": "markdown", "id": "c7ce6e92-a46d-437a-9e03-c5b80eb63474", @@ -243,14 +262,14 @@ "\n", "Let's begin with a brief recall of the IAM features:\n", "\n", - "- IAMs resolve the economy spatially, in contrast, the toy model En-ROADs for example, which we applied in Tutorial 1 to 3, aggregates all variables and is non-spatial.\n", + "- IAMs resolve the economy spatially, in contrast, the toy model En-ROADS for example, which we applied in Tutorial 1 to 3, aggregates all variables and is non-spatial.\n", "- Like En-ROADS, the world models used in IAMs usually have *exogeneous* (externally set) times series for variables, in addition to fixed world system parameters. These exogenous variables are assumed to be under our society's control (e.g. mitigation). \n", "- IAMs come equipped with an objective function (a formula that calculates the quantity to be optimized). This function returns the value of a projected future obtained from running the world model under a given climate policy. This value is defined by the time series of these exogenous variables. In this sense, the objective function is what defines \"good\" in \"good climate policy\". \n", "- The computation in an IAM is then an optimization of this objective as a function of the time series of these exogenous variables over some fixed time window.\n", "\n", "Most IAMs are based on *Neo-classical economics* (also referred to as \"establishment economics\"). This is an approach to economics that makes particular assumptions. For example, it is assumed that production, consumption, and valuation of goods and services are driven solely by the supply and demand model. One fundamental concept is *utility* (i.e. economic value), which is not only central to economics but also to decision theory as a whole, which is a research field that mathematically formalizes the activity of *planning* (planning here means selecting strategies based on how they are expected to play out given a model that takes those strategies and projects forward into the future).\n", "\n", - "As we want to discuss the background of IAM economics, you are going to reflect on these particular *Neo-classical* assumptions." + "Six of the most well-established IAMs have been chosen to represent a certain SSP narrative as discussed by Max in the video. Their simulations result in energy use and emissions characteristics for the respective SSP. These narratives try to describe broad socioeconomic trends that are plausible while reflecting worlds in which mitigation and adaptation challenges vary from low to very high.\n" ] }, { @@ -262,7 +281,7 @@ "source": [ "## Questions 1\n", "\n", - "As a follow-up to its presentation in the tutorial video, try now to place all 5 SSP narratives in the three-dimensional feature space yourself. You can use the SSP narrative names as a hint.\n", + "As a repetition and a follow-up of the tutorial video, try now to place all 5 SSP narratives in the three-dimensional feature space of ***Intra-nation equality***, ***Inter-nation equality***, and ***Environmental Health*** yourself. You can use the SSP narrative names as a hint.\n", "\n", "* SSP1: Sustainability\n", "* SSP2: Middle of the road\n", @@ -270,6 +289,8 @@ "* SSP4: A road divided\n", "* SSP5: Fossil Fueled development\n", "\n", + "As an additional hint, you might want to check out detailed SSP summaries in the 'SSP narratives' section in [this Carbon Brief article](https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/).\n", + "\n", "Which were easy to place? Which were harder? What made them easy or hard to place? Discuss with your pod.\n" ] }, @@ -281,10 +302,39 @@ "execution": {} }, "source": [ - "[*Click for solution*](https://github.com/neuromatch/climate-course-content/tree/main/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_ce79f0aa.py)\n", + "[*Click for solution*](https://github.com/neuromatch/climate-course-content/tree/main/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_43d884d4.py)\n", "\n" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "11591351-d85d-4737-835d-b1ca218f1354", + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [], + "source": [ + "# @title Submit your feedback\n", + "content_review(f\"{feedback_prefix}_Questions_1\")" + ] + }, + { + "cell_type": "markdown", + "id": "97a7001b-1122-4f8c-9ef9-b42b03823f21", + "metadata": { + "execution": {} + }, + "source": [ + "This feature space is one way to dissect the narratives that underlie the SSPs. \n", + "\n", + "A consideration of the future socio-economic situation in the light of the resulting challenges is also fruitful. For example, low challenges to mitigation and adaptation due to rapid technological development, relative global equality of income and focus on environmental sustainability arise in SSP1. SSP4, on the other hand, features similarly low challenges to mitigation due to its rapid technological development, but high challenges to climate adaptation due to persistent inequality and poverty in many parts of the world (cf. [Carbon Brief Explainer, Hausfather, 2018](https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/)). \n", + "Note that mitigation and adaptation responses are not implemented in the SSPs, such that other studies can assess the effects of policies and of impacts by comparing outcomes to those in the reference SSPs. Hence, a large number of studies investigate a variety of policies and projected risks (cf. [O'Neill et al., 2020](https://www.nature.com/articles/s41558-020-00952-0)).\n", + "\n", + "Let us finally summarize a few advantages and disadvantages of the SSP framework in general." + ] + }, { "cell_type": "markdown", "id": "35fa283c-f214-45a4-9b45-bf263d989f74", @@ -294,7 +344,7 @@ "source": [ "## Questions 2\n", "\n", - "The SSP framework. Take a minute to list the strengths and weaknesses of the scenario approach to socio-economic climate projections. \n" + "The SSP framework. Take a minute to list the strengths and weaknesses of the scenario approach to socio-economic climate projections you can think of. \n" ] }, { @@ -305,10 +355,24 @@ "execution": {} }, "source": [ - "[*Click for solution*](https://github.com/neuromatch/climate-course-content/tree/main/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_5bbc738b.py)\n", + "[*Click for solution*](https://github.com/neuromatch/climate-course-content/tree/main/tutorials/W2D2_TheSocioeconomicsofClimateChange/solutions/W2D2_Tutorial5_Solution_7bbe3e60.py)\n", "\n" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "041ce3f4-15b5-48e5-b810-3194f27f5766", + "metadata": { + "cellView": "form", + "execution": {} + }, + "outputs": [], + "source": [ + "# @title Submit your feedback\n", + "content_review(f\"{feedback_prefix}_Questions_2\")" + ] + }, { "cell_type": "markdown", "id": "28c0a077-c9a0-42d9-ada6-e8b835668c3b", @@ -316,17 +380,26 @@ "execution": {} }, "source": [ - "# Summary" + "# Summary\n", + "\n", + "In this tutorial, you discussed the narratives of the SSP framework and stepped back to reflect on the framework's assumptions and their consequences for modeling socioeconomics and climate futures. It helps to prepare a thoughtful development of your own climate scenario via En-ROADS in the next tutorial. Equality aspects, prerequisites and socioeconomic necessities as well as other implications need to be thought of when solving the climate crisis." ] }, { + "attachments": {}, "cell_type": "markdown", - "id": "9e904e57-b6b9-4ee8-aefb-140dce3c93c2", + "id": "3469e417-cb2e-49a8-82bc-0b600337244c", "metadata": { "execution": {} }, "source": [ - "# Resources" + "# Resources\n", + "\n", + "- [Carbon Brief Explainer: How ‘Shared Socioeconomic Pathways’ explore future climate change, Hausfather, 2018](https://www.carbonbrief.org/explainer-how-shared-socioeconomic-pathways-explore-future-climate-change/)\n", + "- [Hallegatte, S., Przyluski, V. & Vogt-Schilb, A. Building world narratives for climate change impact, adaptation and vulnerability analyses. Nature Clim Change 1, 151–155 (2011). doi.org/10.1038/nclimate1135](https://doi.org/10.1038/nclimate1135)\n", + "- [The Shared Socioeconomic Pathways and their energy, land use, and greenhouse gas emissions implications: An overview, Riahi et al., Global Environmental Change 42, 169-180 (2017). doi.org/10.1016/j.gloenvcha.2015.01.004](https://doi.org/10.1016/j.gloenvcha.2015.01.004)\n", + "- [O’Neill, B.C., Carter, T.R., Ebi, K. et al. Achievements and needs for the climate change scenario framework. Nat. Clim. Chang. 10, 1074–1084 (2020). doi.org/10.1038/s41558-020-00952-0](https://doi.org/10.1038/s41558-020-00952-0)\n", + "- [En-ROADS documentation](https://docs.climateinteractive.org/projects/en-roads/en/latest/index.html)" ] } ], diff --git a/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial6.ipynb b/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial6.ipynb index bbafc1faa..8fedc1b4f 100644 --- a/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial6.ipynb +++ b/tutorials/W2D2_TheSocioeconomicsofClimateChange/student/W2D2_Tutorial6.ipynb @@ -140,6 +140,20 @@ "display(tabs)" ] }, + { + "cell_type": "markdown", + "id": "8e98eb20-8e63-4a64-a9b3-47c2f0ee7383", + "metadata": { + "execution": {} + }, + "source": [ + "# Section 1: CO$_2$ Removal\n", + "\n", + "While substantial emissions mitigations are necessary to reduce future climate suffering, they can not make up for the hundreds of billions of tons of CO$_2$ that humans have already emitted. However, both natural and technological methods for removing CO$_2$ from the atmosphere exist. Although they are presently miniscule compared to the tens-of-gigatons scale of global emissions, some experts expect that CO$_2$ removal methods will play a key role in the future once major mitigation goals have been accomplished. \n", + "\n", + "Video 1 briefly explains how Carbon Removal is addressed in EN-ROADS. Keep its representation in mind for the following exercises." + ] + }, { "cell_type": "markdown", "id": "a516e969-8b67-4f8a-9d39-061770ffb4c9", @@ -211,7 +225,9 @@ "- [En-ROADS User Guide PDF](https://docs.climateinteractive.org/projects/en-roads/en/latest/en-roads-user-guide.pdf)\n", "- [Guided Assignment - Simulating Climate Futures in En-ROADS: Short Version](https://www.climateinteractive.org/guided-assignment/)\n", "\n", - "**A Planetary Crisis Planning Computer Game**\n", + "**Planetary Crisis Planning Computer Games**\n", + "Play the games listed below to explore alternative societal futures\n", + "- [The Climate Game](https://ig.ft.com/climate-game/)\n", "- [Half Earth Socialism](https://play.half.earth/).\n" ] }