{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "da56ec81-5de4-4afc-858e-d1b25e4da7f5", "metadata": {}, "source": [ "# Basic Operations" ] }, { "attachments": {}, "cell_type": "markdown", "id": "1a0c616a-9a81-4fa0-9920-668e37e85f6c", "metadata": {}, "source": [ "In this section, we introduce the basic operations of a `cfr.ClimateField`.\n", "\n", "Required data to complete this tutorial:\n", "\n", "- GISTEMP surface temperature: [gistemp1200_GHCNv4_ERSSTv5.nc](https://data.giss.nasa.gov/pub/gistemp/gistemp1200_GHCNv4_ERSSTv5.nc.gz)\n", "\n", "Due to the new data fetching feature, the above datasets are not required to be downloaded manually." ] }, { "cell_type": "code", "execution_count": 1, "id": "89ac122e-4ed4-47e8-88ce-d55c27e49d3d", "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", "\n", "import cfr\n", "print(cfr.__version__)\n", "import numpy as np" ] }, { "attachments": {}, "cell_type": "markdown", "id": "9cb5dba5", "metadata": {}, "source": [ "## Load the test netCDF file as a `ClimateField`" ] }, { "cell_type": "code", "execution_count": 5, "id": "4a178f5f", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Fetching data: 100%|██████████| 24.1M/24.1M [00:26<00:00, 960kiB/s] \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[32m\u001b[1m>>> Downloaded file saved at: ./data/gistemp1200_GHCNv4_ERSSTv5.nc.gz\n", "\u001b[0m" ] }, { "data": { "text/html": [ "
<xarray.DataArray 'tempanomaly' (time: 1720, lat: 90, lon: 180)>\n", "[27864000 values with dtype=float32]\n", "Coordinates:\n", " * lat (lat) float32 -89.0 -87.0 -85.0 -83.0 -81.0 ... 83.0 85.0 87.0 89.0\n", " * lon (lon) float32 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0\n", " * time (time) object 1880-01-15 00:00:00 ... 2023-04-15 00:00:00\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean
<xarray.DataArray 'tempanomaly' (time: 1720, lat: 90, lon: 180)>\n", "[27864000 values with dtype=float32]\n", "Coordinates:\n", " * lat (lat) float32 -89.0 -87.0 -85.0 -83.0 -81.0 ... 83.0 85.0 87.0 89.0\n", " * lon (lon) float32 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0\n", " * time (time) object 1880-01-15 00:00:00 ... 2023-04-15 00:00:00\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean
<xarray.DataArray 'tas' (lat: 90, lon: 180)>\n", "[16200 values with dtype=float32]\n", "Coordinates:\n", " * lat (lat) float32 -89.0 -87.0 -85.0 -83.0 -81.0 ... 83.0 85.0 87.0 89.0\n", " * lon (lon) float32 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0\n", " time object 1880-01-15 00:00:00\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean
<xarray.DataArray 'tas' (time: 5, lat: 90, lon: 180)>\n", "[81000 values with dtype=float32]\n", "Coordinates:\n", " * lat (lat) float32 -89.0 -87.0 -85.0 -83.0 -81.0 ... 83.0 85.0 87.0 89.0\n", " * lon (lon) float32 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0\n", " * time (time) object 1880-01-15 00:00:00 ... 1880-05-15 00:00:00\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean
<xarray.DataArray 'tas' (time: 2, lat: 90, lon: 180)>\n", "[32400 values with dtype=float32]\n", "Coordinates:\n", " * lat (lat) float32 -89.0 -87.0 -85.0 -83.0 -81.0 ... 83.0 85.0 87.0 89.0\n", " * lon (lon) float32 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0\n", " * time (time) object 1880-02-15 00:00:00 1880-06-15 00:00:00\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean
<xarray.DataArray 'tas' (time: 12, lat: 90, lon: 180)>\n", "[194400 values with dtype=float32]\n", "Coordinates:\n", " * lat (lat) float32 -89.0 -87.0 -85.0 -83.0 -81.0 ... 83.0 85.0 87.0 89.0\n", " * lon (lon) float32 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0\n", " * time (time) object 1990-01-15 00:00:00 ... 1990-12-15 00:00:00\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean
<xarray.DataArray 'tas' (time: 24, lat: 90, lon: 180)>\n", "array([[[ 0.35 , 0.35 , 0.35 , ..., 0.35 ,\n", " 0.35 , 0.35 ],\n", " [ 0.35 , 0.35 , 0.35 , ..., 0.35 ,\n", " 0.35 , 0.35 ],\n", " [ 0.35 , 0.35 , 0.35 , ..., 0.35 ,\n", " 0.35 , 0.35 ],\n", " ...,\n", " [ 3.56 , 3.56 , 3.56 , ..., 3.56 ,\n", " 3.56 , 3.56 ],\n", " [ 3.56 , 3.56 , 3.56 , ..., 3.56 ,\n", " 3.56 , 3.56 ],\n", " [ 3.56 , 3.56 , 3.56 , ..., 3.56 ,\n", " 3.56 , 3.56 ]],\n", "\n", " [[-0.69 , -0.69 , -0.69 , ..., -0.69 ,\n", " -0.69 , -0.69 ],\n", " [-0.69 , -0.69 , -0.69 , ..., -0.69 ,\n", " -0.69 , -0.69 ],\n", " [-0.69 , -0.69 , -0.69 , ..., -0.69 ,\n", " -0.69 , -0.69 ],\n", "...\n", " [ 0.5 , 0.5 , 0.5 , ..., 0.5 ,\n", " 0.5 , 0.5 ],\n", " [ 0.5 , 0.5 , 0.5 , ..., 0.5 ,\n", " 0.5 , 0.5 ],\n", " [ 0.5 , 0.5 , 0.5 , ..., 0.5 ,\n", " 0.5 , 0.5 ]],\n", "\n", " [[ 0.97999996, 0.97999996, 0.97999996, ..., 0.97999996,\n", " 0.97999996, 0.97999996],\n", " [ 0.97999996, 0.97999996, 0.97999996, ..., 0.97999996,\n", " 0.97999996, 0.97999996],\n", " [ 0.97999996, 0.97999996, 0.97999996, ..., 0.97999996,\n", " 0.97999996, 0.97999996],\n", " ...,\n", " [-2.98 , -2.98 , -2.98 , ..., -2.98 ,\n", " -2.98 , -2.98 ],\n", " [-2.98 , -2.98 , -2.98 , ..., -2.98 ,\n", " -2.98 , -2.98 ],\n", " [-2.98 , -2.98 , -2.98 , ..., -2.98 ,\n", " -2.98 , -2.98 ]]], dtype=float32)\n", "Coordinates:\n", " * lat (lat) float32 -89.0 -87.0 -85.0 -83.0 -81.0 ... 83.0 85.0 87.0 89.0\n", " * lon (lon) float32 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0\n", " * time (time) object 1990-01-15 00:00:00 ... 1995-12-15 00:00:00\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean
<xarray.DataArray 'tas' (time: 120, lat: 90, lon: 180)>\n", "[1944000 values with dtype=float32]\n", "Coordinates:\n", " * lat (lat) float32 -89.0 -87.0 -85.0 -83.0 -81.0 ... 83.0 85.0 87.0 89.0\n", " * lon (lon) float32 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0\n", " * time (time) object 1990-01-15 00:00:00 ... 1999-12-15 00:00:00\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean
<xarray.DataArray 'tas' (time: 24, lat: 90, lon: 180)>\n", "[388800 values with dtype=float32]\n", "Coordinates:\n", " * lat (lat) float32 -89.0 -87.0 -85.0 -83.0 -81.0 ... 83.0 85.0 87.0 89.0\n", " * lon (lon) float32 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0\n", " * time (time) object 1990-01-15 00:00:00 ... 1999-08-15 00:00:00\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean
<xarray.DataArray 'tas' (time: 3, lat: 90, lon: 180)>\n", "[48600 values with dtype=float32]\n", "Coordinates:\n", " * lat (lat) float32 -89.0 -87.0 -85.0 -83.0 -81.0 ... 83.0 85.0 87.0 89.0\n", " * lon (lon) float32 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0\n", " * time (time) object 1990-01-15 00:00:00 ... 2000-01-15 00:00:00\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean
<xarray.DataArray 'tas' (time: 1720, lat: 90, lon: 180)>\n", "[27864000 values with dtype=float32]\n", "Coordinates:\n", " * lat (lat) float32 -89.0 -87.0 -85.0 -83.0 -81.0 ... 83.0 85.0 87.0 89.0\n", " * lon (lon) float32 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0\n", " * time (time) object 1880-01-15 00:00:00 ... 2023-04-15 00:00:00\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean
<xarray.DataArray 'tas' (time: 1, lat: 90, lon: 180)>\n", "array([[[nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " ...,\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan],\n", " [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n", "Coordinates:\n", " * lat (lat) float32 -89.0 -87.0 -85.0 -83.0 -81.0 ... 83.0 85.0 87.0 89.0\n", " * lon (lon) float32 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0\n", " * time (time) int64 1881\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean\n", " annualized: 1
<xarray.DataArray 'tas' (lat: 90, lon: 180)>\n", "array([[-1.8566667, -1.8566667, -1.8566667, ..., -1.8566667, -1.8566667,\n", " -1.8566667],\n", " [-1.8566667, -1.8566667, -1.8566667, ..., -1.8566667, -1.8566667,\n", " -1.8566667],\n", " [-1.8566667, -1.8566667, -1.8566667, ..., -1.8566667, -1.8566667,\n", " -1.8566667],\n", " ...,\n", " [ 5.4666667, 5.4666667, 5.4666667, ..., 5.4666667, 5.4666667,\n", " 5.4666667],\n", " [ 5.4666667, 5.4666667, 5.4666667, ..., 5.4666667, 5.4666667,\n", " 5.4666667],\n", " [ 5.4666667, 5.4666667, 5.4666667, ..., 5.4666667, 5.4666667,\n", " 5.4666667]], dtype=float32)\n", "Coordinates:\n", " * lat (lat) float32 -89.0 -87.0 -85.0 -83.0 -81.0 ... 83.0 85.0 87.0 89.0\n", " * lon (lon) float32 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0\n", " time int64 2023\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean\n", " annualized: 1
<xarray.DataArray 'tas' (time: 1720, lat: 41, lon: 81)>\n", "array([[[ nan, nan, nan, ..., nan,\n", " nan, nan],\n", " [ nan, nan, nan, ..., nan,\n", " nan, nan],\n", " [ nan, nan, nan, ..., nan,\n", " nan, nan],\n", " ...,\n", " [ nan, nan, nan, ..., nan,\n", " nan, nan],\n", " [ nan, nan, nan, ..., nan,\n", " nan, nan],\n", " [ nan, nan, nan, ..., nan,\n", " nan, nan]],\n", "\n", " [[ nan, nan, nan, ..., nan,\n", " nan, nan],\n", " [ nan, nan, nan, ..., nan,\n", " nan, nan],\n", " [ nan, nan, nan, ..., nan,\n", " nan, nan],\n", "...\n", " [ nan, 1.33999991, 1.24000001, ..., 1.30999994,\n", " 1.33999991, nan],\n", " [ nan, 4.13999987, 4.13999987, ..., 4.13999987,\n", " 4.13999987, nan],\n", " [ nan, nan, nan, ..., nan,\n", " nan, nan]],\n", "\n", " [[ nan, nan, nan, ..., nan,\n", " nan, nan],\n", " [ nan, 1.56999993, 1.56999993, ..., 1.56999993,\n", " 1.56999993, nan],\n", " [ nan, 3.11999989, 2.74000001, ..., 4.02999973,\n", " 3.75 , nan],\n", " ...,\n", " [ nan, 4.80999994, 4.82999992, ..., 4.46999979,\n", " 4.5999999 , nan],\n", " [ nan, 3. , 3. , ..., 3. ,\n", " 3. , nan],\n", " [ nan, nan, nan, ..., nan,\n", " nan, nan]]])\n", "Coordinates:\n", " * time (time) object 1880-01-15 00:00:00 ... 2023-04-15 00:00:00\n", " * lat (lat) float64 -90.0 -85.5 -81.0 -76.5 -72.0 ... 76.5 81.0 85.5 90.0\n", " * lon (lon) float64 0.0 4.5 9.0 13.5 18.0 ... 346.5 351.0 355.5 360.0\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean
<xarray.DataArray 'tas' (time: 1720, lat: 36, lon: 180)>\n", "[11145600 values with dtype=float32]\n", "Coordinates:\n", " * lat (lat) float32 -35.0 -33.0 -31.0 -29.0 -27.0 ... 29.0 31.0 33.0 35.0\n", " * lon (lon) float32 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0\n", " * time (time) object 1880-01-15 00:00:00 ... 2023-04-15 00:00:00\n", "Attributes:\n", " long_name: Surface temperature anomaly\n", " units: K\n", " cell_methods: time: mean