{ "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/W1D3_RemoteSensing/student/W1D3_Tutorial6.ipynb)   \"Open" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "# Tutorial 6: Large Scale Climate Variability - ENSO\n", "\n", "**Week 1, Day 3, Remote Sensing**\n", "\n", "**Content creators:** Douglas Rao\n", "\n", "**Content reviewers:** Katrina Dobson, Younkap Nina Duplex, Maria Gonzalez, Will Gregory, Nahid Hasan, Paul Heubel, Sherry Mi, Beatriz Cosenza Muralles, Jenna Pearson, Agustina Pesce, Chi Zhang, Ohad Zivan\n", "\n", "**Content editors:** Paul Heubel, Jenna Pearson, Chi Zhang, Ohad Zivan\n", "\n", "**Production editors:** Wesley Banfield, Paul Heubel, Jenna Pearson, Konstantine Tsafatinos, Chi Zhang, Ohad Zivan\n", "\n", "**Our 2024 Sponsors:** CMIP, NFDI4Earth" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "# Tutorial Objectives\n", "\n", "*Estimated timing of tutorial:* 25 minutes\n", "\n", "In this tutorial, you will build upon the introduction to El Niño-Southern Oscillation (ENSO) from Day 1 and 2. ENSO is recognized as one of the most influential large-scale climate variabilities that impact weather and climate patterns.\n", "\n", "By the end of this tutorial, you will:\n", "\n", "- Enhance your comprehension of the concept of ENSO and the three distinct phases associated with it.\n", "- Utilize satellite-derived sea surface temperature (SST) data to compute an index for monitoring ENSO.\n" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "# Setup" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {}, "tags": [ "colab" ] }, "outputs": [], "source": [ "# installations ( uncomment and run this cell ONLY when using google colab or kaggle )\n", "\n", "# # properly install cartopy in colab to avoid session crash\n", "# !apt-get install libproj-dev proj-data proj-bin --quiet\n", "# !apt-get install libgeos-dev --quiet\n", "# !pip install cython --quiet\n", "# !pip install cartopy --quiet\n", "# !pip install geoviews\n", "\n", "# !apt-get -qq install python-cartopy python3-cartopy --quiet\n", "# !pip uninstall -y shapely --quiet\n", "# !pip install shapely --no-binary shapely --quiet\n", "\n", "# !pip install boto3 --quiet\n", "\n", "# you may need to restart the runtime after running this cell and that is ok" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {}, "tags": [] }, "outputs": [], "source": [ "# imports\n", "import xarray as xr\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import cartopy\n", "import cartopy.crs as ccrs\n", "import os\n", "import pooch\n", "import tempfile\n", "import holoviews\n", "from geoviews import Dataset as gvDataset\n", "import geoviews.feature as gf\n", "from geoviews import Image as gvImage" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Install and import feedback gadget\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "execution": {}, "tags": [ "hide-input" ] }, "outputs": [], "source": [ "# @title Install and import feedback gadget\n", "\n", "!pip3 install vibecheck datatops --quiet\n", "\n", "from vibecheck import DatatopsContentReviewContainer\n", "def content_review(notebook_section: str):\n", " return DatatopsContentReviewContainer(\n", " \"\", # No text prompt\n", " notebook_section,\n", " {\n", " \"url\": \"https://pmyvdlilci.execute-api.us-east-1.amazonaws.com/klab\",\n", " \"name\": \"comptools_4clim\",\n", " \"user_key\": \"l5jpxuee\",\n", " },\n", " ).render()\n", "\n", "\n", "feedback_prefix = \"W1D3_T6\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Figure settings\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "execution": {}, "tags": [ "hide-input" ] }, "outputs": [], "source": [ "# @title Figure settings\n", "import ipywidgets as widgets # interactive display\n", "\n", "%config InlineBackend.figure_format = 'retina'\n", "plt.style.use(\n", " \"https://raw.githubusercontent.com/neuromatch/climate-course-content/main/cma.mplstyle\"\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Helper functions\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "execution": {}, "tags": [ "hide-input" ] }, "outputs": [], "source": [ "# @title Helper functions\n", "\n", "def pooch_load(filelocation=None, filename=None, processor=None):\n", " shared_location = \"/home/jovyan/shared/data/tutorials/W1D3_RemoteSensing\" # this is different for each day\n", " user_temp_cache = tempfile.gettempdir()\n", "\n", " if os.path.exists(os.path.join(shared_location, filename)):\n", " file = os.path.join(shared_location, filename)\n", " else:\n", " file = pooch.retrieve(\n", " filelocation,\n", " known_hash=None,\n", " fname=os.path.join(user_temp_cache, filename),\n", " processor=processor,\n", " )\n", "\n", " return file" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Video 1: Satellite Data and Climate Variability\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "execution": {}, "tags": [ "remove-input" ] }, "outputs": [], "source": [ "# @title Video 1: Satellite Data and 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(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', 'mP33aFGYQeA'), ('Bilibili', 'BV1ru411j71h')]\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": "markdown", "metadata": {}, "source": [ "## Submit your feedback\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "execution": {}, "tags": [ "hide-input" ] }, "outputs": [], "source": [ "# @title Submit your feedback\n", "content_review(f\"{feedback_prefix}_Satellite_Data_Climate_Variability_Video\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n" ] }, { "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 = \"zkbaf\"\n", "\n", "print(f\"If you want to download the slides: https://osf.io/download/{link_id}/\")\n", "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": "markdown", "metadata": {}, "source": [ "## Submit your feedback\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "execution": {}, "tags": [ "hide-input" ] }, "outputs": [], "source": [ "# @title Submit your feedback\n", "content_review(f\"{feedback_prefix}_Satellite_Data_Climate_Variability_Slides\")" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "# Section 1: El Niño-Southern Oscillation (ENSO)\n" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "As you learned in Day 1 and 2, one of the most significant large-scale climate variabilities is El Niño-Southern Oscillation (ENSO). ENSO can change the global atmospheric circulation, which in turn, influences temperature and precipitation across the globe.\n", "\n", "Despite being a single climate phenomenon, ENSO exhibits three distinct phases:\n", "\n", "- El Niño: A warming of the ocean surface, or above-average sea surface temperatures, in the central and eastern tropical Pacific Ocean.\n", "- La Niña: A cooling of the ocean surface, or below-average sea surface temperatures, in the central and eastern tropical Pacific Ocean.\n", "- Neutral: Neither El Niño or La Niña. Often tropical Pacific SSTs are generally close to average. \n", "\n", "In Day 2, you practiced utilizing a variety of Xarray tools to examine variations in sea surface temperature (SST) during El Niño and La Niña events by calculating the [Oceanic Niño Index (ONI)](https://climatedataguide.ucar.edu/climate-data/nino-sst-indices-nino-12-3-34-4-oni-and-tni) from reanalysis data over the time period 2000-2014.\n", "\n", "In contrast to previous days, in this tutorial, you will use satellite-based SST data to monitor ENSO over a longer time period starting in 1981." ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "## Section 1.1: Calculate SST Anomaly\n", "\n", "[Optimum Interpolation Sea Surface Temperature (OISST)](https://www.ncei.noaa.gov/products/optimum-interpolation-sst) is a long-term Climate Data Record that incorporates observations from different platforms (satellites, ships, buoys, and Argo floats) into a regular global grid. OISST data is originally produced at daily and 1/4° spatial resolution. To avoid the large amount of data processing of daily data, we use the monthly aggregated OISST SST data provided by [NOAA Physical Systems Laboratory](https://psl.noaa.gov/). " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {}, "tags": [] }, "outputs": [], "source": [ "# download the monthly sea surface temperature data from NOAA Physical System\n", "# Laboratory. The data is processed using the OISST SST Climate Data Records\n", "# from the NOAA CDR program.\n", "# the data downloading may take 2-3 minutes to complete.\n", "# filename=sst.mon.mean.nc\n", "url_sst = \"https://osf.io/6pgc2/download/\"\n", "filename = \"sst.mon.mean.nc\"\n", "\n", "# we divide the data into small chunks to allow for easier memory manangement. this is all done automatically, no need for you to do anything\n", "ds = xr.open_dataset(\n", " pooch_load(filelocation=url_sst, filename=filename),\n", " chunks={\"time\": 25, \"latitude\": 200, \"longitude\": 200},\n", ")\n", "ds" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "The monthly OISST data is available starting from September of 1981. We will use the Niño 3.4 (5N-5S, 170W-120W) region to monitor the ENSO as identified in the map below provided by the NOAA Climate portal.\n", "\n", "![Location of four different nino regions ](https://www.climate.gov/sites/default/files/Fig3_ENSOindices_SST_large.png)\n", "\n", "Credit: [NOAA](https://www.climate.gov/sites/default/files/Fig3_ENSOindices_SST_large.png)\n", "\n", "The data is only available in full years starting 1982, so we will use 1982-2011 as the climatology period." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {}, "tags": [] }, "outputs": [], "source": [ "# get 30-year climatology from 1982-2011\n", "sst_30yr = ds.sst.sel(time=slice(\"1982-01-01\", \"2011-12-01\"))\n", "\n", "# calculate monthly climatology\n", "sst_clim = sst_30yr.groupby(\"time.month\").mean()\n", "sst_clim" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {}, "tags": [] }, "outputs": [], "source": [ "# calculate monthly anomaly\n", "sst_anom = ds.sst.groupby(\"time.month\") - sst_clim\n", "sst_anom" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "Now, we can take a look at the SST anomaly of a given month. We use January of 1998 to show the specific change of SST during that time period." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {}, "tags": [] }, "outputs": [], "source": [ "sst = sst_anom.sel(time=\"1998-01-01\")\n", "\n", "# initiate plot\n", "fig, ax = plt.subplots(\n", " subplot_kw={\"projection\": ccrs.Robinson(central_longitude=180)},\n", " #figsize=(9, 6)\n", ")\n", "\n", "# focus on the ocean with the central_longitude=180\n", "ax.coastlines()\n", "ax.gridlines()\n", "sst.plot(\n", " ax=ax,\n", " transform=ccrs.PlateCarree(),\n", " vmin=-3,\n", " vmax=3,\n", " cmap=\"RdBu_r\",\n", " cbar_kwargs=dict(shrink=0.5, label=\"OISST Anomaly (degC)\"),\n", ")" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "### Interactive Demo 1.1\n", "\n", "Use the slider bar below to explore maps of the anomalies through the year in 1998." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {}, "tags": [] }, "outputs": [], "source": [ "# note this code takes a while to load. probably an hour\n", "# holoviews.extension('bokeh')\n", "\n", "# dataset_plot = gvDataset(sst_anom.sel(time=slice('1998-01-01','1998-12-01'))) # taking only 12 months\n", "# images = dataset_plot.to(gvImage, ['lon', 'lat'], ['sst'], 'time')\n", "# images.opts(cmap='RdBu_r', colorbar=True, width=600, height=400,projection=ccrs.Robinson(),\n", "# clim=(-3,3),clabel ='OISST Anomaly (degC)') * gf.coastline" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "## Section 1.2: Monitoring ENSO with Oceanic Niño Index\n", "\n", "As you learned in Day 2, the [Oceanic Niño Index (ONI)](https://climatedataguide.ucar.edu/climate-data/nino-sst-indices-nino-12-3-34-4-oni-and-tni) is a common index used to monitor ENSO. It is calculated using the Niño 3.4 region (5N-5S, 170W-120W) and by applying a 3-month rolling mean to the mean SST anomalies in that region." ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "You may have noticed that the `lon` for the SST data from [NOAA Physical Systems Laboratory](https://psl.noaa.gov/) is organized between 0°–360°E. Just as in Tutorial 1 of Day 2, we find that the region to subset with our dataset is (-5° to 5°, 190 to 240°)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {}, "tags": [] }, "outputs": [], "source": [ "# extract SST data from the Nino 3.4 region\n", "sst_nino34 = sst_anom.sel(lat=slice(-5, 5), lon=slice(190, 240))\n", "sst_nino34" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {}, "tags": [] }, "outputs": [], "source": [ "# calculate the mean values for the Nino 3.4 region\n", "nino34 = sst_nino34.mean(dim=[\"lat\", \"lon\"])" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "You might have realized the block-like visualizations and tables that appeared once you called a dataset like `sst_nino34` or `sst_anom`. They refer to some advanced built-in data structuring called [***Dask array***]() that is used to handle large datasets in `xarray` via [parallelization](https://docs.xarray.dev/en/stable/user-guide/dask.html#parallel-computing-with-dask). We do not cover this topic here, however, took advantage of its capabilities before to fasten our computations. Be aware that you might have to dive deeper into this optimization procedures the larger your project data sets are going to be. The following cell is a work-around to improve the following time series calculations. It saves our `sst` anomaly time series to a file and opens it again. You do not have to understand why this is necessary but feel free to explore [this resource on optimization](https://docs.xarray.dev/en/stable/user-guide/dask.html#optimization-tips) if you became curious." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {} }, "outputs": [], "source": [ "nino34.to_netcdf('nino34_timeseries.nc')\n", "nino34_ds = xr.open_dataset('nino34_timeseries.nc')\n", "nino34 = nino34_ds.sst" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {} }, "outputs": [], "source": [ "nino34" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {}, "tags": [] }, "outputs": [], "source": [ "# plot time series for Nino 3.4 mean anomaly\n", "fig, ax = plt.subplots()\n", "nino34.plot(ax=ax)\n", "# aesthetics\n", "ax.set_xlabel(\"Time (months)\")\n", "ax.set_ylabel(\"Nino3.4 Anomaly (degC)\")\n", "ax.axhline(y=0, color=\"k\", linestyle=\"dashed\")" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "The ONI is defined as the 3-month rolling mean of the monthly regional average of the SST anomaly for the Nino 3.4 region. We can use `.rolling()` to calculate the ONI value for each month from the OISST monthly anomaly." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {}, "tags": [] }, "outputs": [], "source": [ "# calculate 3-month rolling mean of Nino 3.4 anomaly for the ONI\n", "oni = nino34.rolling(time=3, center=True).mean()\n", "\n", "# generate time series plot\n", "fig, ax = plt.subplots()\n", "nino34.plot(label=\"Nino 3.4\", ax=ax)\n", "oni.plot(color=\"k\", label=\"ONI\", ax=ax)\n", "# aesthetics\n", "ax.set_xlabel(\"Time (months)\")\n", "ax.set_ylabel(\"Anomaly (degC)\")\n", "ax.axhline(y=0, color=\"k\", linestyle=\"dashed\")\n", "ax.legend()" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "The different phases of ENSO are nominally defined based on a threshold of $\\pm$ 0.5 with the ONI index. \n", "\n", "- [El Niño](https://glossary.ametsoc.org/wiki/El_niño) [ONI values higher than 0.5]: surface waters in the east-central tropical Pacific are at least 0.5 degrees Celsius *warmer than normal*.\n", "- [La Niña](https://glossary.ametsoc.org/wiki/La_niña) [ONI values lower than -0.5]: surface waters in the west tropical Pacific are at least 0.5 degrees Celsius *cooler than normal*.\n", "\n", "The neutral phase is when ONI values are in between these two thresholds. Let's create the ONI plot that is used by NOAA and other organizations to monitor ENSO phases." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {}, "tags": [] }, "outputs": [], "source": [ "# set up the plot size\n", "fig, ax = plt.subplots()\n", "\n", "# create the filled area when ONI values are above 0.5 for El Nino\n", "ax.fill_between(\n", " oni.time.data,\n", " oni.where(oni >= 0.5).data,\n", " 0.5,\n", " color=\"red\",\n", " alpha=0.9,\n", ")\n", "\n", "# create the filled area when ONI values are below -0.5 for La Nina\n", "ax.fill_between(\n", " oni.time.data,\n", " oni.where(oni <= -0.5).data,\n", " -0.5,\n", " color=\"blue\",\n", " alpha=0.9,\n", ")\n", "\n", "# create the time series of ONI\n", "oni.plot(color=\"black\", ax=ax)\n", "\n", "# add the threshold lines on the plot\n", "ax.axhline(0, color=\"black\", lw=0.5)\n", "ax.axhline(0.5, color=\"red\", linewidth=0.5, linestyle=\"dotted\")\n", "ax.axhline(-0.5, color=\"blue\", linewidth=0.5, linestyle=\"dotted\")\n", "# aesthetics\n", "ax.set_title(\"Oceanic Niño Index\")\n", "ax.set_xlabel('Time (months)')\n", "ax.set_ylabel('ONI')" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "From the plot, we can see the historical ENSO phases swing from El Niño to La Niña events. The major ENSO events like 1997-1998 show up very clearly on the ONI plot. \n", "\n", "We will use the ONI data to perform analysis to understand the impact of ENSO on precipitation. So you can export the ONI time series into a netCDF file for future use via [`.to_netcdf()`](https://docs.xarray.dev/en/latest/generated/xarray.Dataset.to_netcdf.html). For our purposes, we will download a dataset that has been previously saved in the next tutorial. If you wanted to save the data when working on your own computer, this is the code you could use." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {}, "tags": [] }, "outputs": [], "source": [ "# oni.to_netcdf('t6_oceanic-nino-index.nc')" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "### Coding Exercises 1.2\n", "\n", "As we learned here, ENSO is monitored using the anomaly of SST data for a specific region (e.g., Nino 3.4). We also learned previously that the reference periods used to calculate climatolgies are updated regularly to reflect the most up to date 'normal'.\n", "\n", "1. Compare the ONI time series calculated using two different climatology reference periods (1982-2011 v.s. 1991-2020). " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "execution": {}, "tags": [] }, "outputs": [], "source": [ "# select data from 1991-2020.\n", "sst_30yr_later = ...\n", "\n", "# calculate climatology\n", "sst_clim_later = ...\n", "\n", "# calculate anomaly\n", "sst_anom_later = ...\n", "\n", "# calculate mean over Nino 3.4 region\n", "nino34_later = ...\n", "\n", "# compute 3 month rolling mean\n", "oni_later = ...\n", "\n", "# compare the two ONI time series and visualize the difference as a time series plot\n", "fig, ax = plt.subplots()\n", "# ONI (1982-2011)\n", "_ = oni.plot(color=\"k\", label=\"ONI (1982-2011)\", ax=ax)\n", "# ONI (1991-2020)\n", "_ = ...\n", "\n", "# aesthetics\n", "ax.set_xlabel('Time (months)')\n", "ax.set_ylabel(\"Anomaly (degC)\")\n", "ax.axhline(y=0, color=\"k\", linestyle=\"dashed\")\n", "ax.legend()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "execution": {}, "tags": [] }, "source": [ "[*Click for solution*](https://github.com/neuromatch/climate-course-content/tree/main/tutorials/W1D3_RemoteSensing/solutions/W1D3_Tutorial6_Solution_3efa1010.py)\n", "\n", "*Example output:*\n", "\n", "Solution hint\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Submit your feedback\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "execution": {}, "tags": [ "hide-input" ] }, "outputs": [], "source": [ "# @title Submit your feedback\n", "content_review(f\"{feedback_prefix}_Coding_Exercise_1_2\")" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "### Questions 1.2: Climate Connection\n", "\n", "1. What is the main difference you note about this plot?\n", "2. What does this tell you about the climatology calculated from 1982-2011 versus 1991-2020?\n", "3. Why is it important to use appropriate climatologies when finding anomalies?" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "execution": {}, "tags": [] }, "source": [ "[*Click for solution*](https://github.com/neuromatch/climate-course-content/tree/main/tutorials/W1D3_RemoteSensing/solutions/W1D3_Tutorial6_Solution_52e2ab81.py)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Submit your feedback\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "cellView": "form", "execution": {}, "tags": [ "hide-input" ] }, "outputs": [], "source": [ "# @title Submit your feedback\n", "content_review(f\"{feedback_prefix}_Questions_1_2\")" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "# Summary\n", "\n", "In this tutorial, you revisted the foundational principles of ENSO and explored how satellite data can be employed to track this phenomenon. \n", "- As one of the most potent climate influences on Earth, ENSO has the capacity to alter global atmospheric circulation with impacts around the world.\n", "- You observed the three phases of ENSO by utilizing SST data gathered from satellites and calculating the Oceanic Niño Index.\n", "\n", "In the forthcoming tutorial, we will utilize the ONI, calculated in this session, to evaluate the influence of ENSO on precipitation in select regions. \n" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "# Resources" ] }, { "cell_type": "markdown", "metadata": { "execution": {} }, "source": [ "Data from this tutorial can be accessed [here](https://www.ncei.noaa.gov/products/optimum-interpolation-sst)." ] } ], "metadata": { "colab": { "collapsed_sections": [], "include_colab_link": true, "name": "W1D3_Tutorial6", "provenance": [], "toc_visible": true }, "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.19" } }, "nbformat": 4, "nbformat_minor": 4 }