{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# `Xarray` 数据处理(2)\n", "--------------------------\n", "\n", "主讲人:李显祥\n", "\n", "大气科学学院" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "import xarray as xr\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "#xr.set_options(display_style=\"html\")\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "#air_temp = xr.tutorial.load_dataset('air_temperature')\n", "air_temp = xr.open_dataset('air_temperature.nc')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 7. 广播和对齐" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "\n", "* 可以直接在 `Dataset` 和 `DataArray` 对象上进行算术运算。\n", "* 标签会被保留,在运算中 dataArray 的维度会自动对齐。" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 广播\n", "\n", " " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "jupyter": { "outputs_hidden": false }, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray (time: 3, space: 4)>\n",
       "array([[0, 1, 2, 3],\n",
       "       [1, 2, 3, 4],\n",
       "       [2, 3, 4, 5]])\n",
       "Coordinates:\n",
       "  * time     (time) int64 0 1 2\n",
       "  * space    (space) int64 0 1 2 3
" ], "text/plain": [ "\n", "array([[0, 1, 2, 3],\n", " [1, 2, 3, 4],\n", " [2, 3, 4, 5]])\n", "Coordinates:\n", " * time (time) int64 0 1 2\n", " * space (space) int64 0 1 2 3" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "import xarray as xr\n", "\n", "a = xr.DataArray(np.arange(3), dims='time', \n", " coords={'time':np.arange(3)})\n", "b = xr.DataArray(np.arange(4), dims='space', \n", " coords={'space':np.arange(4)})\n", "a + b" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "思考题 1:\n", "\n", "b + a = ?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "思考题 2:\n", "\n", "```python\n", "anomaly = air_temp.air - air_temp.air.mean(dim='time')\n", "```\n", "\n", "这里使用了广播吗?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "### 对齐\n", "\n", " " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "jupyter": { "outputs_hidden": false }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "(array([0, 1, 2]), array([1, 2, 3, 4, 5]))" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "atime = np.arange(3)\n", "btime = np.arange(5) + 1\n", "atime, btime" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "jupyter": { "outputs_hidden": false }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray (time: 2)>\n",
       "array([1, 3])\n",
       "Coordinates:\n",
       "  * time     (time) int64 1 2
" ], "text/plain": [ "\n", "array([1, 3])\n", "Coordinates:\n", " * time (time) int64 1 2" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = xr.DataArray(np.arange(3), dims='time', \n", " coords={'time':atime})\n", "b = xr.DataArray(np.arange(5), dims='time', \n", " coords={'time':btime})\n", "a + b" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "如果我们要保留所有坐标,怎么办呢?" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "array([nan, 1., 3., nan, nan, nan])\n", "Coordinates:\n", " * time (time) int64 0 1 2 3 4 5\n" ] } ], "source": [ "# 也可以保留所有坐标\n", "with xr.set_options(arithmetic_join=\"outer\"):\n", " print(a + b)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "注意:没有对应坐标的点被设置为 `nan` " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 使用 `.where()` 进行屏蔽" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "jupyter": { "outputs_hidden": false }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "means = air_temp.air.mean(dim=['time'])\n", "means.where(means > 273.15).plot()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 8. 分组 Groupby" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "\n", "xarray 支持和 pandas 类似的分组(“group by”)操作来实现拆散-应用-合并: \n", "\n", "- 将数据根据一定的规则拆散为独立的组\n", "- 对每个组应用某种函数\n", "- 将这些组合并成一个单一的数据对象\n", "\n", "分组操作对于 Dataset 和 DataArray 对象都适用。 " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "\"split\"" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "jupyter": { "outputs_hidden": false }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'air' (season: 4)>\n",
       "array([273.6497 , 289.2049 , 278.9914 , 283.02814], dtype=float32)\n",
       "Coordinates:\n",
       "  * season   (season) object 'DJF' 'JJA' 'MAM' 'SON'
" ], "text/plain": [ "\n", "array([273.6497 , 289.2049 , 278.9914 , 283.02814], dtype=float32)\n", "Coordinates:\n", " * season (season) object 'DJF' 'JJA' 'MAM' 'SON'" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "air_temp.air.mean(dim=['lat','lon']).groupby('time.season').mean()\n", "# air_temp.air.groupby('time.season').mean().mean(dim=['lat','lon'])" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "clim = air_temp.air.groupby('time.month').mean('time')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'air' (month: 12, lat: 25, lon: 53)>\n",
       "array([[[246.34987, 246.38608, 246.21518, ..., 243.06113, 244.08795,\n",
       "         245.6467 ],\n",
       "        [248.8576 , 248.90733, 248.7104 , ..., 241.52866, 243.50865,\n",
       "         246.75471],\n",
       "        [251.57712, 251.19661, 250.71463, ..., 243.39891, 246.78462,\n",
       "         251.56572],\n",
       "        ...,\n",
       "        [295.85028, 295.24405, 295.22684, ..., 295.18625, 294.65707,\n",
       "         294.0485 ],\n",
       "        [296.5446 , 296.46982, 296.15994, ..., 295.35593, 295.0812 ,\n",
       "         294.53006],\n",
       "        [297.15417, 297.2383 , 297.04892, ..., 296.01797, 295.77554,\n",
       "         295.63647]],\n",
       "\n",
       "       [[246.67715, 246.40576, 245.9484 , ..., 241.85838, 243.0021 ,\n",
       "         244.44383],\n",
       "        [247.8001 , 247.75992, 247.47757, ..., 240.64706, 242.26633,\n",
       "         245.06662],\n",
       "        [249.07079, 248.57234, 247.94254, ..., 242.42874, 245.33348,\n",
       "         249.72273],\n",
       "...\n",
       "        [297.8426 , 297.1406 , 296.98773, ..., 297.96884, 297.56888,\n",
       "         297.1611 ],\n",
       "        [298.58783, 298.42026, 297.96896, ..., 298.16412, 298.19397,\n",
       "         297.9083 ],\n",
       "        [298.81143, 298.8566 , 298.62103, ..., 298.72955, 298.7519 ,\n",
       "         298.8189 ]],\n",
       "\n",
       "       [[247.971  , 248.02118, 247.91302, ..., 239.7719 , 241.02383,\n",
       "         242.62823],\n",
       "        [249.73361, 250.16037, 250.48581, ..., 238.78964, 240.96469,\n",
       "         244.11626],\n",
       "        [252.0296 , 251.53136, 251.36629, ..., 238.07542, 241.91293,\n",
       "         247.06987],\n",
       "        ...,\n",
       "        [296.76508, 295.97668, 295.88922, ..., 296.45605, 296.09137,\n",
       "         295.65756],\n",
       "        [297.46814, 297.38025, 297.04428, ..., 296.8556 , 296.84668,\n",
       "         296.52133],\n",
       "        [297.8809 , 297.9868 , 297.77554, ..., 297.60034, 297.5655 ,\n",
       "         297.53763]]], dtype=float32)\n",
       "Coordinates:\n",
       "  * lat      (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0\n",
       "  * lon      (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0\n",
       "  * month    (month) int64 1 2 3 4 5 6 7 8 9 10 11 12
" ], "text/plain": [ "\n", "array([[[246.34987, 246.38608, 246.21518, ..., 243.06113, 244.08795,\n", " 245.6467 ],\n", " [248.8576 , 248.90733, 248.7104 , ..., 241.52866, 243.50865,\n", " 246.75471],\n", " [251.57712, 251.19661, 250.71463, ..., 243.39891, 246.78462,\n", " 251.56572],\n", " ...,\n", " [295.85028, 295.24405, 295.22684, ..., 295.18625, 294.65707,\n", " 294.0485 ],\n", " [296.5446 , 296.46982, 296.15994, ..., 295.35593, 295.0812 ,\n", " 294.53006],\n", " [297.15417, 297.2383 , 297.04892, ..., 296.01797, 295.77554,\n", " 295.63647]],\n", "\n", " [[246.67715, 246.40576, 245.9484 , ..., 241.85838, 243.0021 ,\n", " 244.44383],\n", " [247.8001 , 247.75992, 247.47757, ..., 240.64706, 242.26633,\n", " 245.06662],\n", " [249.07079, 248.57234, 247.94254, ..., 242.42874, 245.33348,\n", " 249.72273],\n", "...\n", " [297.8426 , 297.1406 , 296.98773, ..., 297.96884, 297.56888,\n", " 297.1611 ],\n", " [298.58783, 298.42026, 297.96896, ..., 298.16412, 298.19397,\n", " 297.9083 ],\n", " [298.81143, 298.8566 , 298.62103, ..., 298.72955, 298.7519 ,\n", " 298.8189 ]],\n", "\n", " [[247.971 , 248.02118, 247.91302, ..., 239.7719 , 241.02383,\n", " 242.62823],\n", " [249.73361, 250.16037, 250.48581, ..., 238.78964, 240.96469,\n", " 244.11626],\n", " [252.0296 , 251.53136, 251.36629, ..., 238.07542, 241.91293,\n", " 247.06987],\n", " ...,\n", " [296.76508, 295.97668, 295.88922, ..., 296.45605, 296.09137,\n", " 295.65756],\n", " [297.46814, 297.38025, 297.04428, ..., 296.8556 , 296.84668,\n", " 296.52133],\n", " [297.8809 , 297.9868 , 297.77554, ..., 297.60034, 297.5655 ,\n", " 297.53763]]], dtype=float32)\n", "Coordinates:\n", " * lat (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0\n", " * lon (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0\n", " * month (month) int64 1 2 3 4 5 6 7 8 9 10 11 12" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clim" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "我们也可以对拆分的组应用算术运算" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "anomalies = air_temp.air.groupby('time.month') - clim" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": false, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'air' (time: 2920, lat: 25, lon: 53)>\n",
       "array([[[ -5.149872  ,  -3.886078  ,  -2.7151794 , ..., -10.261139  ,\n",
       "          -8.587952  ,  -7.046707  ],\n",
       "        [ -5.057617  ,  -4.4073334 ,  -4.0104065 , ...,  -8.728668  ,\n",
       "          -8.208664  ,  -7.454727  ],\n",
       "        [ -1.5771179 ,  -1.3966217 ,  -1.8246307 , ..., -10.198914  ,\n",
       "         -10.394623  ,  -9.865723  ],\n",
       "        ...,\n",
       "        [  0.74972534,   0.9559326 ,   1.1731567 , ...,   0.21374512,\n",
       "           0.44293213,   0.65148926],\n",
       "        [ -0.6445923 ,  -0.26983643,   0.6300659 , ...,   0.5440674 ,\n",
       "           0.8187866 ,   0.6699219 ],\n",
       "        [ -0.86416626,  -0.44830322,   0.05108643, ...,   0.88201904,\n",
       "           1.0144653 ,   0.9635315 ]],\n",
       "\n",
       "       [[ -4.249878  ,  -3.686081  ,  -3.1151886 , ..., -11.061127  ,\n",
       "         -10.487961  ,  -9.84671   ],\n",
       "        [ -5.257614  ,  -4.8073425 ,  -4.5104065 , ..., -10.528656  ,\n",
       "         -11.008652  , -11.054718  ],\n",
       "        [  1.622879  ,   1.6933899 ,   1.3853607 , ..., -12.598923  ,\n",
       "         -13.394623  , -13.06572   ],\n",
       "...\n",
       "        [ -3.0750732 ,  -2.0867004 ,  -0.49923706, ...,  -1.3660583 ,\n",
       "          -1.4013672 ,  -1.3675537 ],\n",
       "        [ -1.1781311 ,  -0.19024658,   0.54571533, ...,  -1.5655823 ,\n",
       "          -1.7566833 ,  -2.1313477 ],\n",
       "        [ -0.09088135,   0.40319824,   0.714447  , ...,  -1.9103394 ,\n",
       "          -2.0755005 ,  -2.3476257 ]],\n",
       "\n",
       "       [[ -2.8809967 ,  -3.731186  ,  -4.6230316 , ...,   1.9180908 ,\n",
       "           0.466156  ,  -0.8382416 ],\n",
       "        [  0.15638733,  -0.8703766 ,  -2.09581   , ...,   0.800354  ,\n",
       "          -0.6746979 ,  -2.4262695 ],\n",
       "        [ 10.960388  ,  10.658646  ,  10.023697  , ...,   1.8145752 ,\n",
       "           0.677063  ,  -0.7798767 ],\n",
       "        ...,\n",
       "        [ -2.9750671 ,  -2.2866821 ,  -0.79922485, ...,  -1.1660461 ,\n",
       "          -1.0013733 ,  -0.9675598 ],\n",
       "        [ -1.3781433 ,  -0.4902649 ,   0.14572144, ...,  -1.1655884 ,\n",
       "          -1.1566772 ,  -1.3313293 ],\n",
       "        [ -0.19088745,   0.10321045,   0.31445312, ...,  -1.1103516 ,\n",
       "          -1.3754883 ,  -1.8476257 ]]], dtype=float32)\n",
       "Coordinates:\n",
       "  * lat      (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0\n",
       "  * lon      (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0\n",
       "  * time     (time) datetime64[ns] 2013-01-01 ... 2014-12-31T18:00:00\n",
       "    month    (time) int64 1 1 1 1 1 1 1 1 1 1 ... 12 12 12 12 12 12 12 12 12 12
" ], "text/plain": [ "\n", "array([[[ -5.149872 , -3.886078 , -2.7151794 , ..., -10.261139 ,\n", " -8.587952 , -7.046707 ],\n", " [ -5.057617 , -4.4073334 , -4.0104065 , ..., -8.728668 ,\n", " -8.208664 , -7.454727 ],\n", " [ -1.5771179 , -1.3966217 , -1.8246307 , ..., -10.198914 ,\n", " -10.394623 , -9.865723 ],\n", " ...,\n", " [ 0.74972534, 0.9559326 , 1.1731567 , ..., 0.21374512,\n", " 0.44293213, 0.65148926],\n", " [ -0.6445923 , -0.26983643, 0.6300659 , ..., 0.5440674 ,\n", " 0.8187866 , 0.6699219 ],\n", " [ -0.86416626, -0.44830322, 0.05108643, ..., 0.88201904,\n", " 1.0144653 , 0.9635315 ]],\n", "\n", " [[ -4.249878 , -3.686081 , -3.1151886 , ..., -11.061127 ,\n", " -10.487961 , -9.84671 ],\n", " [ -5.257614 , -4.8073425 , -4.5104065 , ..., -10.528656 ,\n", " -11.008652 , -11.054718 ],\n", " [ 1.622879 , 1.6933899 , 1.3853607 , ..., -12.598923 ,\n", " -13.394623 , -13.06572 ],\n", "...\n", " [ -3.0750732 , -2.0867004 , -0.49923706, ..., -1.3660583 ,\n", " -1.4013672 , -1.3675537 ],\n", " [ -1.1781311 , -0.19024658, 0.54571533, ..., -1.5655823 ,\n", " -1.7566833 , -2.1313477 ],\n", " [ -0.09088135, 0.40319824, 0.714447 , ..., -1.9103394 ,\n", " -2.0755005 , -2.3476257 ]],\n", "\n", " [[ -2.8809967 , -3.731186 , -4.6230316 , ..., 1.9180908 ,\n", " 0.466156 , -0.8382416 ],\n", " [ 0.15638733, -0.8703766 , -2.09581 , ..., 0.800354 ,\n", " -0.6746979 , -2.4262695 ],\n", " [ 10.960388 , 10.658646 , 10.023697 , ..., 1.8145752 ,\n", " 0.677063 , -0.7798767 ],\n", " ...,\n", " [ -2.9750671 , -2.2866821 , -0.79922485, ..., -1.1660461 ,\n", " -1.0013733 , -0.9675598 ],\n", " [ -1.3781433 , -0.4902649 , 0.14572144, ..., -1.1655884 ,\n", " -1.1566772 , -1.3313293 ],\n", " [ -0.19088745, 0.10321045, 0.31445312, ..., -1.1103516 ,\n", " -1.3754883 , -1.8476257 ]]], dtype=float32)\n", "Coordinates:\n", " * lat (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0\n", " * lon (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0\n", " * time (time) datetime64[ns] 2013-01-01 ... 2014-12-31T18:00:00\n", " month (time) int64 1 1 1 1 1 1 1 1 1 1 ... 12 12 12 12 12 12 12 12 12 12" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "anomalies" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "注意 xarray 自动改变了 clim 的 month 维度以适应 air 的 time 维度。这也是 xarray 的“广播”功能的优势之一:它会自动根据维度的名字来匹配,我们也不需要像 numpy 那样使用 reshape 来改变数组的形状或者插入一个长度为1的维度 。" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "(array([8.400000e+01, 9.000000e+02, 1.145500e+04, 9.761600e+04,\n", " 5.205310e+05, 2.676686e+06, 4.679230e+05, 8.459900e+04,\n", " 8.757000e+03, 4.490000e+02]),\n", " array([-33.740555 , -27.573364 , -21.406174 , -15.238983 , -9.071793 ,\n", " -2.904602 , 3.2625885, 9.429779 , 15.59697 , 21.76416 ,\n", " 27.93135 ], dtype=float32),\n", " )" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "anomalies.plot()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "(array([5.0000e+01, 7.0800e+02, 4.2130e+03, 1.4026e+04, 3.8860e+04,\n", " 8.7334e+04, 1.4104e+04, 3.9360e+03, 9.3300e+02, 1.3600e+02]),\n", " array([-27.580475 , -22.353567 , -17.12666 , -11.899753 , -6.6728454,\n", " -1.4459381, 3.7809691, 9.007876 , 14.234784 , 19.46169 ,\n", " 24.688599 ], dtype=float32),\n", " )" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "anomalies.sel(time='2013-12').plot()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "anomalies.sel(time='2014-12-01T00:00:00').plot(center=0)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "注意这里 `anomalies`和上节课的 `anomalies` 的不同。" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### 重采样 Resample\n", "\n", "重采样将时间序列改变为新的时间间隔" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "tmin = air_temp.air.resample(time='1D').min() # Resample to one day '1D\n", "tmax = air_temp.air.resample(time='1D').max()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEXCAYAAACgUUN5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAA2z0lEQVR4nO2debxkVXXvv7879XC7m6bpgZapkQAKRgEBjSYGBRWUgFE0mmAwmg9xiEFfHDAYE03MQ8kzw/ORpBMHEhDFIIpGVCSAcWBUQGYQGmhpGhroue9Y6/1x9qWr715177m3q27VrVrfz+d8qmrVPvuss+tUrTp7799eMjOCIAiCzqWr2Q4EQRAEzSUCQRAEQYcTgSAIgqDDiUAQBEHQ4UQgCIIg6HAiEARBEHQ4EQg6CEn7S9oqqbvZvgRB0DpEIGhjJK2RdMLYazN72MwWmNloM/2qhaQ5kj4n6SFJWyT9TNJJ48ocL+luSdslXS3pgKr3Xp5smyStceq/WtITkjZLulXSqZP4syrtsz0d84Rx779X0oOpvpsk/fok9f1uOrdtkr4uaUnVe2+S9ON0rGsmbqkgqC8RCIJWogd4BPhNYA/gz4FLJK0CkLQU+FqyLwFuAr5Stf824PPAB2vUfxaw0swWAWcCF0paOYE/FwM/A/YCzgH+U9Ky5MuLgHOB05KvnwMuq3W3Jelw4F+AtwIrgO3A+VVFngL+PtUZBDOLmcXWhhvwH0AF2AFsBT4ErAIM6EllrgH+GvhxKvNNih+9i4DNwI3Aqqo6nwNcSfGjdQ/wphk4j9uAN6TnZwI/rnqvP53fc8btcwKwZpJ6jwUGgGNrvH8IMAgsrLL9D/DO9Px3gBvG+WIUgcar72+AL1W9PggYqq4/2f8QuKbZ109snbXFHUGbYmZvBR4GfsuK7qBP1yj6Zop/qftQ/Dj9BPgCxT/uu4C/AJDUTxEEvgQsB94CnJ/+6WZIOl/SxhrbbWXOQdIKih/kO5LpcODWqnPcBvwi2Ush6VuSBoDrKQLhTTWKHg48YGZbqmy3Vh3rCqBb0ovSXcDbgVuAxyaor9r3X1AEgkPK+h4EjaKn2Q4ETecL6UcJSVcAh5nZ99PrrwJ/lcqdTPEv+wvp9U8lXUrRNXLHuDoxs3cD756uU5J6Ke5MLjCzu5N5AfDEuKKbgIVl6zWzk1PdJ1DcSVRqFF2Q6h5/rH3S8y3ApcAPAQEbgZPMrNbiXbXqK+17EDSKuCMI1lc93+G8XpCeHwC8qPqfPfB7wN71dkhSF0XX1hDwx1VvbQUWjSu+iOJHuTRmNmxmVwCvlnRKOuYdaUbVVkm/UeJYf0hxF3A40AecDnxL0rMk/UZVXWNBsi6+B0EjiDuC9qaeS8s+AlxrZq8sU1jSP1P8OHo8ZGa1upREMfC6AniNmQ1XvX0HcEZV2X6K7qzsjqQkPWl/xvsj6RDg2ZIWVnUPvYCia2zs+TfN7N70+juS1gEvMbP/ZGcArfb9BVX1PxuYA9xLEDSZuCNob9YDz65TXd8CDpH0Vkm9aTtG0nO9wmb2zjQ24W0T9en/E/BcirGNHePeuwx4nqQ3SJoLfAy4bazrSFJXsvcWLzVXUl967zmSTpI0L/l+OvAy4Noa/t9L0ef/F6me3waeT9EdBMVA+mslPVsFr6To77+9xnldBPxWulvoBz4BfG0syEjqTr73AF3pmL0TtFMQ1I9mj1bH1rgNOJViwHgj8AH8WUN/WFX+r4EvVr0+Abi/6vWhwH9R9NM/Cfw3cEQd/T0g+TdA0ZUytv3eOJ/upui2uoZdZzUdl/av3q5J7z2XYoB4S2qPG4HfnsSfVekYOyhmSZ1Q9Z4ofswfTnXeBbx1kvp+N5XfBnwDWFL13tsc379Ypt1ii213N5lFYpogCIJOJrqGgiAIOpwIBEEQBB1OBIIgCIIOJwJBEARBhzNrdARLly61/ffff8IytYa9Xbtj9Mp5Y+nNGl5X2XJOQXdfx9jlGOU2Vi1BrkPpsp7jJc9a+X8ac+oz51zKfp6eJ3LbyznfitcGXruW9KZWu3jt4KyDV3GOM+q6U+f2Kvl5ep9T2e8swJ233bLBzJaVOpjDfppnA97n6LCBoe+a2YnTPVYrMGsCwf77788PfvijZ157F8Boxb8svAvcK+uVG/bKObZ6Bwfv69LlfIm63d/O3Njr3Pv1dOXl5vbkBbsrw5mN0dymykheDmBkyLePp8txsiu/RM2x0Z1PuR/tym1lP0/XPaet+7qd9hoZyGwa3p7bvHYpGwi6/JQSlTnjdWww2js/s20dylci3zac//ANOl8Krw09ep0G6/MuWAf/c8rL1Wqu5z1rj4dKHagGA1R4AxMtTLuTf+GhpbtzrFZg1gSCIAiCmUL4f7Jc2mAGfgSCIAiCcQjo824BPVoyzdPUiEAQBEEwjuKOoOwtwewnAkEQBMF4NIWuoTYgAkEQBME44o4gCIKgw5nSYHEbEIEgCIIgQ3FH0IqoMkLf9id3vnZESuaIaQB/frpX1puz3us0kTOHu+LMYx8cyX0ccuZluzZnHrVXzrtW+5wp5nOdNpjfndfXNbg5P8bgttzmzZWvpRfwREm9c3JbX39u8zQDTvt7n73fNo7RsZXVinjCrK6e/Nw8UZ1Gc92FRgfzfUfzdvX2BdBgnvCsu7svsy2ek7f1ovl7ZLbto3nbbHf0BjtGyukNnt6RT7EZHC037abXuYb7vYu9DgjojUAQBEHQuSgGi4MgCILoGgqCIOhgYrA4CIKgw4npo0EQBEHcEQRBEHQy0hTWGmoDIhAEQRCMI8YIWpXBbXDf9c+8rAzm89hrrXtvblKQHPXNzWzdCxfn5foX5Ts787J7nbnyOHO6zdEgWE9ejl7H5uHMO+/ammsBunZsymyVLU/ltq0bc9uwk6MA0BynDffYKy/Xv2de55yFmc1652U2L8+AR1cln5/eNbwjLzicX0s9Tm4F7zOxnvx8vdwI5mgLPO2Jm+fB0xE4Phdlnf2H8lwI3Y42xLseFszPP6euvvz6H3C0ABsHcl+e2pG3q6fF2GNO/tO01/xcM7BifmN+whSCsiCYHl4QCILZSifdETQ0Z7GkQyXdUrVtlvQ+SUskXSnpvvSY/+0IgiBoEoWgTKW2dqChgcDM7jGzI8zsCOCFwHbgMuBs4CozOxi4Kr0OgiBoCcYS05TZ2oGGBoJxHA/8wsweAk4FLkj2C4DXzaAfQRAEEzI2WFxmawdmcozgzcDF6fkKM1sHYGbrJC33dpB0JnAmwP4rZn1+6CAIZhHt0u1Thhm5I5DUB5wCfHUq+5nZajM72syOXrqnM1MnCIKgAUjQJZXa2oGZuiM4Cfipma1Pr9dLWpnuBlYCj8+QH0EQBCUQapd+nxLM1BjBW9jZLQRwOXBGen4G8I0Z8iMIgmByBF3dKrW1Aw2/I5A0H3gl8EdV5nOBSyS9A3gYeONk9Yxs2cKT1/z3M69HB3KRTWWoRrKO7jzedc/NxUG9/fk8+N7+XNDU45TrcsRopXGET6VxkrR4iXjkiNHUkwuaND/vgnNFdXs5XXVzc0EY1EhC4wjr5Ii4cEROPV6iIQcvUY5G8sQvnmALL1lKt5MQxxUIlhMN4gnUvORITn1eohuodX6O+M9ray95jpMsqHtO/uPX68yeWTIvP+e95ue2Bb15uy6Zl9t6Nj+W2bqeyAWQ9UCCrgYlvWlFGh4IzGw7sNc425MUs4iCIAhaD7XPv/0yhLI4CILAQSXvPNuBCARBEATjUBoj6BQiEARBEDjErKEgCIJORkLdXaW2yavSfpKulnSXpDsknZXsLbPmWgSCIAiCcUjQ3dtVaivBCPCnZvZc4MXAeyQdRgutuRZdQ0EQBBmiq8S//TKk5XTGltTZIukuYB+KNdeOS8UuAK4BPlyXg06RCARBEATj0ZTGCJZKuqnq9WozW+1WK60CjgSup+SaazPBrAkEI9sH2XDbgxOW6XaEKeALQ2w0F8/YaJ4pyaO3PxdI9S7KhTc9jmitq7dck3v+ef2R3jH6HF96F87PbG7msF5HZOYlnHEysnmCKwAN5yKnrm25EGh005OZzbZszCv0BHiesG5e7qPmOn575TwRHI4IDke0NuRkQfPEWo7N5PwLdYR/1Mi6JycDW8VrV6cNu5fsnZfrzq/X0Ur+PZnXk/9oLpvviDY3/TKz6eFf5Md4Ii83OpRnZat4n2cd0NQCwQYzO3ryOrUAuBR4n5ltVgutUzRrAkEQBMFMUq+uIQBJvRRB4CIz+1oyt8yaazFYHARBMA5JdRssVvHX/3PAXWb2maq3WmbNtbgjCIIgGI/8rthp8lLgrcDPJd2SbH/GNNZcaxQRCIIgCBzqpSw2sx9SJD3zaIk11yIQBEEQjEedlY8gAkEQBME4VN+uoZYnAkEQBIFDLDo3C+jtd5J1AH3OfHlvXr2XmKbsnPy+vfL5912LnDn5zvx727Ets404c6a3P5bP/R7els+jHh3OE4yMDuWJSHqceecVxxdzynk+q39jZgM/2Y2N5P7Yts2ZzdMRVAa25/s6Govu/gWZrad339w/Ryfh6RIqm3OdQ2XAaa/B/DPBSYjjtWtXf57Ip2vB4ty2cEl+DKDiaTksn+PvaQY8bYFHd0+up5i/KP+nnH/roHt9nkhm9JG7M9vwYw/n/jmaAVf34hy3HhSzhiIxzazECwLBzOEFgaAxuEEgqB9TE5TNetoqEARBENSFGCMIgiDodBQZyoIgCDqZIkNZBIIgCIIORtE1NIak15eoY8DMvl0nf4IgCJqPVHql4HZgsjP9V4qFkCYaPn8ZEIEgCIL2QaAay6q3I5MFgivM7O0TFZB0YR39CYIgaDqKrqGdmNnpk1VQpkw96Jk/h+VHHvTM676F5URitXCFU45Qybs9VF8uFOvqX1SqXMU5rpykKp4vFUc81uV8hKMDuaBp4MlNma27NxdreW3Yu2eeU7vLSwTjJbDBF115QjGPbkd05bWr5uft37NyVX7c+fm5aNjxb9P9mW3k4Xsz2+BTebuODucCum5HyDZn+dLM1pPnhqHLSZxD37zcBpiTUMdLOONdc56IyzaszevbkYsBXVGeIxq0wTxxjius88RjM6lTEXTFrKEcSS8BVlXvY2b/3gCfgiAImk7cEYxD0n8ABwG3AGOh34BJA4GkxcC/Ac9L+7wduAf4CkVgWQO8ycyenorjQRAEjUIxWOxyNHCYmbOQyeT8A/AdMztNUh/FsiR/BlxlZudKOhs4G/jwNOoOgiCoP+qsMYKyZ3o74PReToykRRSzij4HYGZDZrYROBW4IBW7AHjdVOsOgiBoGGmJiTJbOzCZjuCbFN05C4E7Jd0ADI69b2anTFL/s4EngC9IegFwM3AWsMLM1qU61klaXuP4ZwJnAuy7OF9dMgiCoFGEsngnf1uH+o8C3mtm10v6B4puoFKY2WpgNcAL9l0+nW6pIAiCKSPFWkPPYGbXAkj6lJnt0ocv6VPAtZPUvxZYa2bXp9f/SREI1ktame4GVgKPT8v7IAiCBtEu3T5lKHumr3RsJ022k5k9Bjwi6dBkOh64E7gcOCPZzqBQLwdBELQGadZQma0dmGyM4F3Au4GDJN1W9dZC4Eclj/Fe4KI0Y+gB4A8oAtAlkt4BPAy8cbJKunp6mLdspxioq88RetW4lfOEWJ7oanhbLnZhc56VanDjlvzYDzxQ6hhuRjGnXFlxW2+/I65y/sl49Q1sy8+j2zmG19ZeJi08kRm4YiMvixeO2I5eRyToHcepb9gRgMmtL28vL4PX0Ka8vQaca8Fray/7XdfGjSX9y8+322srAC9hjfLz61q4OC+3Jfenst05P6dtyrar5vhCuOwYXlY773tSqx12E0l0xRITz/Al4Argf7Nr3/4WM8tz+TmY2S0U00/Hc3yZ/YMgCJpBJ3UNTTZGsEnSFuBXzeyhGfIpCIKguUSGsl0xs4qkWyXtb2Z5lukgCIK2I2YNeawE7kg6gmc6zUvoCIIgCGYdijsCl4831IsgCIJWItYayjGzayWtAI5JphvMLOb+B0HQnkjuUt3tSql7H0lvAm6gmOb5JuB6Sac10rEgCIKm0tVdbpsESZ+X9Lik26tsSyRdKem+9JgnyphBynaCnQMcY2ZnmNnvA8cCf944t4IgCJqJCh1EmW1yvgicOM52NsUKzAcDVzGFpXcaQdlOsK5xXUFPUj6I1AezXYRXQ1tyoZeXBQpqCKIcWy+52GVkYDCzeYIhb4aBN9g0sjHPAuUJ1IY25+K2inPc3v48I1XfolxU5AmaPIadY4w4Qp5+x9a7eLFfqSMO8sRZXlv3zM3Pr8cR0XU52asqznHLMrIt/5x2OFnehjfnmda8z92zeQJGdW3IbF6mr9H1NSbw9eSfszv7xSnn4gn/HDzhmXtc7x90yS4YVzzmiRXrQR1zFpvZDyStGmc+FTguPb8AuIYmLsVfNhB8R9J3gYvT698hEtYHQdCuSOWD5fQotQLzTFF2sPiDkt4AvBQQsNrMLmuoZ0EQBE1CU9MRLJV0U9Xr1Wnl5FlD6flRZnYpcGkDfQmCIGgNROkuK2CDmXnL6ExES63AXHbW0OvT6PYmSZslbZGUd1wGQRC0BarbrKEatNQKzGXvCD4N/JaZ3dVIZ4IgCFqFei0xIeliioHhpZLWAn8BnMsUV2BuJGUDwfoIAkEQdAzS7vzb3wUze0uNt1pmBeaygeAmSV8Bvs6uOYu/1gingiAImork51hoU8oGgkXAduBVVTYDZi4QaNe5/2WTr4A/X7tW2eywznE8vYJXrmdePgfeW79kd9Y0KZuspm/h/MzW7WgLvCQ+Q85c+c0PrstsPf1Puz56/lSG8uN4egXv2N2OBqRnfn6M7j5fVzIe71rwrhlPW1BW+1A2EbqbzMixsXFrqfoAKqP5XHtvTv6cxQszW/ec/Fw8fcbg07mOwLuWPI1L7wInmY6jC3ETFzVKRzAmKOsQyk4f/YOJ3pf0ETP73/VxKQiCoMlMbdbQrKdeIa+pAx1BEAT1pVh0rszWDtRrnVXVqZ4gCILWILqGpozVqZ4gCILmoy7U2CUmWoq4IwiCIBiPiDuCafDVOtUTBEHQdITqtvrobKDsEhOflrRIUq+kqyRtkHT62Ptm9jeNczEIgmCGGZs11LglJlqKsvc+rzKzzcDJwFrgEOCDDfMqCIKgqTR8raGWomzX0Ji64zXAxWb2lDTDwwLmi5BK7eoIhjyxi5f4pazwzEv84gm2XCHPngvy+ubl+/YtzIU3XoIdTww17IihyjK8Pd93+7qnMpu6/Wti4f4rMtuCfZZltjl75oKmsmLALuc2vrTYq3SSIkfs5V1Hzmfstf/Ijrw+77r0jlsLTzjoXUvete4J1zyRmceIc42U/T55n7H3Oc009VpraDZQNhB8U9LdwA7g3ZKWAdP/ZQmCIGhlJOgup0xvB8oqi8+W9Clgs5mNStpOkWptUiStAbYAo8CImR0taQnwFWAVsAZ4k5n56xMEQRDMOAJ1zh1B2cHi+cB7gH9KpmcBU0nE8HIzO6IqeUNLJW4OgiAYj6mr1NYOlD2LLwBDwEvS67XAX+/GcU+lSNhMenzdbtQVBEFQX0RxR1BmawPKnsVBZvZpYBjAzHZQXkRmwPck3SzpzGTbJXEz4CZulnSmpJsk3bRha74KZRAEQWNQMU5QZmsDyg4WD0maR1pKQtJBVOUlmISXmtmjkpYDV6ZB51KkBNCrAY48YGUsYxEEwcwRs4Yy/gL4DrCfpIuAlwJvK7OjmT2aHh+XdBlwLC2WuDkIgqAak7Cuei280PqUCnlmdiXweoof/4uBo83smsn2k9QvaeHYc4rENrfTYombgyAIMjpojKBUyFOhHjsJeLaZfULS/pKONbMbJtl1BXBZEp/1AF8ys+9IupEpJm6uDI+w/fGdM0w9YdbuUlbs4q1BUvGygpU8ric8W3jgfqX2HXp6Y2bzzmPQyWjllfOyiXU7WdA88djA0760ZHTo0czmiaT6916S2bwMbJ7fQ1u2ZbayoqmyGeI8sVdZwaEnhvSy2nmMOsK4oc35dQkwuDHPFOZmHnM/09wfTwjnCiVLtsPwkHON5B8dQ93NHhPsrOmjZe99zgcqwCuAT1DoAi4FjploJzN7AHiBY3+SFkrcHARBMJ52mRpahrKB4EVmdpSknwGY2dOSOmex7iAIOo8IBBnDkrrZOWtoGcUdQhAEQfshtc2CcmUoGwj+EbgMWC7pk8BpwEcb5lUQBEGTia6hKiR1AQ8CH6Lo1xfwOjO7q8G+BUEQNAmFjqAaM6tI+j9m9mtAaTFYEATBrGVsiYkOoeyZfk/SGzTjSQiCIAiagUJH4PC/gH5gRNIARbw0M1vUMM/GMTo4zKZf5PPR64k3N35kwJn/3ZWXm7MoT2TiJlDx5sU7moiKM9+6qy+f4+/V17/vyszmzRHfeO8jmW1ocz6pe/7yPTPb0ucflNnAn2u/8f5fZrYNP1+b2bY8/ERm6997cWbr6svXia8MDbv+1BNPg+BpFbqdRDeV4dy/bif5ije/v6zOAWDHhnz+/ciO/NiDm8slu+mZ5/jjfE+6e/OB1e65+efktY13bXpJYfzvyfSSVZViFv3Ipz/p+5pZ/qUuQdl8BOXSFAUdjRcEgmBWMsuWmDAzk/R14IXT2b+ssvgox7wJeMjM4tsfBEH7UceecEknAv8AdAP/Zmbn1q3ynVwn6Rgzu3GqO05FWXwU8PP0+leBW4G9JL3TzL431QMHQRC0LvVbYiJpsP4f8EqKXC43SrrczO6sywF28nLgjyQ9RLFwx1gX/vMn27FsIFgDvMPM7gCQdBjwQeCvgK8BEQiCIGgr6qgjOBa4Py25g6QvUyTnqncgOGm6O5YNBM8ZCwIAZnanpCPN7IGYSBQEQVtSPhAslXRT1evVKZfKGPsA1YO4a4EX7aZ3zyBpkZltplgDblqUDQT3SPon4Mvp9e8A90qaQ8paFgRB0C6YhJX/k7uhKh+7h1dRPRNtfQk4Gbh5XL1Kr589WQVlA8HbgHcD70uV/xD4AEUQeHlZb4MgCGYFZoxW6vZbvRaoXld+X6Buc+HN7OT0eKCkJcDBQD7XfALKTh/dIel84Ftmds+4t/OF7oMgCGY5dfzLfiNwsKQDgV8CbwZ+t37VF0j6Q+AsikBzC/Bi4MeUWPK/7PTRU4DzKHKtHCjpCOATZnbK9FyeOqMjFbY+7mSwmCa9cx3Rz2j+0Y8Oj2a2kR35jNk5i3KBzvC2PKHInD37M1vfwtwGubjKExbN3WuPvFx/Lvvombsxsw08nbfnhnueymy9c3NfVh6TJ85Z8txVmQ1g4f4rMtv2x/P/D1vX5/5s35AnYBnamrd1d18uaJq3pyPAc8p5wj+vPo/Rofz68Pb1rhnveutbkIuwPAFjzSRAw/m5bFqbdx0Pbs6vTc9H71z6+nMf+1fk1/Bcp/29fT28djXnH7pXrh4YUK8bAjMbkfTHwHcppo9+vnrMtY6cRZEj5joze7mk5wAfL7PjVHIWHwtcA2Bmt0haNXU/gyAIZgdm9bsnMLNvA9+uW4U+A2Y2IAlJc8zsbkmHltmxbCAYMbNNMUMoCIJOoJ53BDPIWkmLga8DV0p6mpJjEWUDwe2SfhfolnQw8CcUfU9BEATth4HTc9fSmNlvp6d/KelqYA/gO2X2LTtR9r3A4cAgcDGwmWIGURAEQVtiZqW2VsTMrjWzy82s1OqCZWcNbQfOSVsQBEFbY3RWLt4JA4GkbzLBLKqZnDUUBEEwk7Ton/2GMNkdwd+mx9cDewMXptdvoVh/KAiCoC2ZhYPF02bCQGBm1wJI+isze1nVW9+U9IOGehYEQdAkzOo7fbTVKTtraJmkZ1etnncgsKxxbuVUhkfZ5giOymDO8L8nLPIyL7nCFqc+L5OZJ0bz8LIseVmb5u6VJ4Qb2eYJi9ZnFj/zWC5GW+ycx9MPbMxs627MEyHVSkzjZeLyxFSVobxXdtjJ7OWJzDyhkieG6ikpGuwtec0MbXOyfz2ai+UGNuafk5eFyxPBDTufiScIAxjcko8N7nAEc0PO391uZ3p492B+7H5HeOZl9/NsFef75J2f973rcr4TjWS2zRraHcoGgvcD10h6IL1eBZxZ9iBpPe6bgF+a2clpPYyvpHrWAG8ys6fL1hcEQdBICh1B50SCUiHWzL5DsZDRWWk7dIrJaM4C7qp6fTZwlZkdDFyVXgdBELQMVnJrByYMBNUpKs1s0MxuTdugV6ZGHfsCrwX+rcp8KnBBen4B8Lop+h0EQdBQKlZuawcm6xr6gqTj8NfTHuNzwJETvP/3wIeA6pXQVpjZOgAzWydp+aSeBkEQzCAd1DM0aSDYgyLZwUSBIF+aMiHpZOBxM7s5BZQpIelM0ljEit6+qe4eBEEwLQyj0jYdP5Mz2fTRVbtZ/0uBUyS9hiJRwiJJFwLrJa1MdwMrgcdrHH81sBrg0Pn9nfOpBEHQXAycyVZtS0PnY5nZR8xs3xRQ3gz8t5mdDlwOnJGKnQF8o5F+BEEQTAVjTEsw+dYOlJ0+Wm/OBS6R9A7gYeCNk+1QGbVdknF489DB1wLUKjuesslIys6Z9vQG3px1DeRzv715/16CF6/cjic3ZbZtv8x78LY9nics2bZ+e2Yb3Fxq3Soe+dFD7H1E7uOwo3XwEqtUnL9gXnKTHiepkNfWHt78e1dn4iSD8a4jT9uycV2uI9jkJIxxLhmG1uWfiSOvcHUAAKPOL1Ofcy6ebZ5z+Xvagm0j+TVceSxvB09j4ekkunvzA3vfE6/9u3sb9182uoYagJldw87ENk9SIn3aVPGCQDBzeEEgCGYr7fJvvwylwqkKTpf0sfR6f0nHNta1IAiC5jAmKCuztQNl7wjOp1iV9RXAJ4AtwKUU+TGDIAjaCjMY7qA1JsoGgheZ2VGSfgZgZk9LivmcQRC0KeaOt7QrZQPBcFovyAAkLaOz8jYEQdBBdNpaQ2UDwT8ClwHLJX0SOA34aMO8CoIgaCYdpiMom6ryIkk3U8z0EfA6M7trkt2CIAhmJXFHUEVaLnqMxykS1z/znpk91SjHgiAImkmMEezkZorgKGB/4On0fDGFEOzARjpXjVWMgaoEFrs7oO9JDrxkJJ5QbM6iPNGKZ/OET56ttz8X2Xh44rG5e+XJZQae3JzZhrflQipPPPbQPU9mtvu35oKyw7bm57v4gNwX8BOPeMluNjsionlO+/c5AiRPQ+Ilkul12n/e0nmZreIItrY/ngvFvDZ8ykmqUlYUtnUkLzhQ8cRovmbGmw/uiceWOG3jlfPw/N4xmp9znyMaXOAkzpm3OL+WyorMRpzkPvUgZg1VYWYHAkj6Z+ByM/t2en0ScELj3QuCIJh5jPbRCJShbDg9ZiwIAJjZFcBvNsalIAiC5jNq5bZ2oOysoQ2SPgpcSNFVdDqQ9yEEQRC0AZ02WFz2juAtFMnqLwO+DixPtiAIgvbDYLRipbbdQdIbJd0hqSLp6HHvfUTS/ZLukfTq3TrQJJSdPvoURd7hIAiCtseA4ZnJQ3k78HrgX6qNkg6jWLr/cOBZwPclHWJm+Yh5HSgVCCRdjZOn2cxeUXePgiAImsxMdQ2N6bGUzwI7Ffhyyg//oKT7gWOBnzTCj7JjBB+oej4XeAOQzwkMgiBoB8zcKcQzyD7AdVWv1yZbQyjbNXTzONOPJF3bAH+CIAiajjGlGUFLJd1U9Xp1SrMLgKTvA3s7+51jZrWyM3qijoZFprJdQ9UK4y7ghfgn1jCMXYUstTI0efhCmdzW65TqmZc3Ud+CvKSXecnbt2wmLXXngpqhzbl4qbc/F0MtPmS/zNa3aL5zjIcy28aH8uxmw1tyMdo9jjCo+7pfZjaAXkf0s2Zbvv/6wfwm0/uc+7vz+soKpDyB2nJH8OYJ1B57Im//JwY98Vi5z9i7FLY5C9x49XXLP8Y8p21qic/KHMfz0SvntbVXzhPbzXtyR2br78k/z+6+/NzKZh+cDlPoGtpgZkfXetPMpqO5WgtUf5H3BR6dRj2lKNs1VK0wHgEeBN7RKKeCIAiaSXFH0NSuocuBL0n6DMVg8cHADY06WNlA8Fwz20UvLinXhQdBELQBM7XEhKTfBv4vxfT8/5J0i5m92szukHQJcCfFn+/3NGrGEJQPBD8Gjhpn+4ljC4IgaAtmaNbQZRT6LO+9TwKfbLgTTL766N4UI9XzJB3Jzo71RUDe6RwEQdAGWGQo24VXA2+jGKj4TJV9C/BnDfIpCIKguSRlcacw2eqjFwAXSHqDmV06Qz4FQRA0FSMCwTNIOt3MLgRWSfpf4983s884uwVBEMxqLO4IdqE/PS5w3uucVgqCoKMwjCEnSVC7MlnX0NhCSN83sx9VvyfppQ3zymHEjE3DE38wC3r8xVRdkY1T1hWP9efiMTd7kiOU8bKbeYwM5OKqrt7cl1Gn3LZ1+Wrgnnhs3rI9M9scZ98lB+flDtkxnNke3JbbagmpFu6Vi+2WjZQTYnm2gZJCpWFnsM+rb88duaDME6jtcKYTbnZ+LHxh1vT/N3lirVqXVq8jHvP2LysUK4sveiu376bhcpnaFow0JhuZS4fdEZRt2f9b0rYLkuZKukHSrWmp1Y8n+xJJV0q6Lz3mvz5BEARNYmyMoNHLULcKk40R/BrwEmDZuDGCRUD+lylnEHiFmW2V1Av8UNIVFMuuXmVm50o6Gzgb+PC0ziAIgqDOxBjBrvRRjA/0AAur7JuB0yar3MwMGMv43Zs2o1hi9bhkvwC4hggEQRC0EBEIEmZ2LXCtpC+aWb5CWQkkdVOsVfQrwP8zs+slrTCzdekY6yQtr7HvmcCZAEtUVgQdBEGwe1TMGIzB4oztks6jyJbzzMhfmcQ0aX2MIyQtBi6T9LyyzqWlXFcDHNAzt3PCcxAETaeT7gjKDhZfBNwNHAh8HFgD3DiVA5nZRoouoBOB9ZJWAqTHx6dSVxAEQSMZGyPolMHisoFgLzP7HDBsZtea2duBF0+2k6Rl6U4ASfOAEygCyuXAGanYGUCt5AxBEARNYdSs1NYOlO0aGps0vk7SaykSJOxbYr+VFEtUdFMEnUvM7FuSfgJcIukdwMPAGyeryGzXucqeZqDWvOUuZ261l3jEPa4z4briJQ9x5tWXRV35vpWhLZmtt99JBjO3L7MNbsz33fLw+szm6RK6HM3FHo5uYklf3gYr9t8jswGsPGplZuu/P9cwcPsTmclL/DJQUjPgzUX3VxbO6/Pn7nvz8ctpFcrOqfeO4SdWqrV/bvN89DQRo1YukY93jCGnO91vh+nX5+mIptI2U8Fon3/7ZSgbCP5a0h7An1LoBxYB75tsJzO7DTjSsT8JHF/ezSAIgpkjpo86mNm30tNNwMsBJL2vQT4FQRA0FQOGHPV7u7I7mu1sEbogCIK2wMoNFLfLXcPuTM5vTOdcEARBk4llqMvTOa0UBEFHYQYjEQgKJG3B/8EXMK8hHgVBEDSZuCOowswWTvR+EARBWxKzhoIgCDqbSEwzS/DEKrXEJcOV/APtdiZMVTyhklNfl5O0xBNiDW7OBVujjijGE615x/CEbGzekZmGHXGblzjH82Vw82DuiyMC8tp/wyObc//wBWX7vuRXMpvn94OOyMyjbEIWz29PXPXoQJ6sZlGNxEfj8QRSnpDKw/PZO7ep7F82MY1n89pmd/CVuJ7PeamybVgPQkcQBEEQYBEIgiAIOhczqEQgCIIg6GQMa5MF5coQgSAIgmA8BqMxWBwEQdC5GGCdEwciEARBEHh0UtfQ7iw6FwRB0J6kweIy2+4g6TxJd0u6TdJlY4m80nsfkXS/pHskvXp3T2kiIhAEQRBkGFYpt+0mVwLPM7PnA/cCHwGQdBjwZoo88ScC56cEXw1hVnUNVWtbygpnatblpEDqdlQsnthreFsuFPPEaD3z8uaVozYadmy9mQWsZGa04a25bcjx2RW8lTwPtuTCs9sdMRrAs+7ZkNt+/fmZbf/hXMR1xz1PZbYNzrl4n32/I/Lr6yonKNvhtLUnhprnHqNcdjOPqYjHyuKJ6Dyd2O5kZSurOyubQW2okhdc4FyGjctQNjM6AjP7XtXL64DT0vNTgS+b2SDwoKT7gWOBnzTCj1kVCIIgCGYEg1FPye+zVNJNVa9Xm9nqaRz17cBX0vN9KALDGGuTrSFEIAiCIHCYwh3BBjM7utabkr4P7O28dY6ZfSOVOQcYAS4a281zqaxDUyUCQRAEwTjMdn8guKquEyZ6X9IZwMnA8bZzqtJaYL+qYvsCj9bFIYcYLA6CIHAws1Lb7iDpRODDwClmtr3qrcuBN0uaI+lA4GDght062ATEHUEQBIHDDAnKPgvMAa5UMTB/nZm908zukHQJcCdFl9F7zCyfyVEnIhAEQRCMY6YWnTOzfD32ne99Evhkw50gAkEQBEGOQSXWGmo9pF3nDO/R68zf7vX1Ft7iUQPO1LC+wfwfQHePM2famWvf3ZfXN+wkN+l2fPTm6XuaATlz1kd25MfwkssMDec+e/Pntzpt5c1D92xzu8RmZ//19zyZ2VbcfHdmW7jfisz2whc/K7M9ce3DmW2b014LevK29vzrVvkkR+Px9Abevns616vHgDvn37kua+kNnM4Db+6+hyOtcfHbptw10teVt0NZ/+qcI2cSjEoHLTExawJB0Pp4P7JBMBuZKUFZq9DQWUOS9pN0taS7JN0h6axkXyLpSkn3pcc9G+lHEATBlDBmaomJlqDR00dHgD81s+cCLwbek9bQOBu4yswOBq5Kr4MgCFqGmVh0rlVoaNeQma0D1qXnWyTdRSGTPhU4LhW7ALiGYi5tEARB0zEzKuWXmJj1zNgYgaRVwJHA9cCKFCQws3WSltfY50zgTIAliuGMIAhmjnb5t1+GGfl1lbQAuBR4n5ltVskVFtPCTasBDuiZ2zmfShAETccqDdNvtRwNDwSSeimCwEVm9rVkXi9pZbobWAk83mg/giAISmPWUYGg0bOGBHwOuMvMPlP11uXAGen5GcA3GulHEATBVDCKQFBmawcafUfwUuCtwM8l3ZJsfwacC1wi6R3Aw8AbJ6vIbFdhzaZhR8gzBcWJL3ZxknA4QiyPvsFc2OW544lnvOQmHp6wqKwozGsvD08gVVYfUEsYdOumXOD24Od/mtmOOnSvzLb00CWZ7UX7LcpsXjIeT6j38/XbMpt3LcxzTsZr/1bD83HYcXvubgjmRq1cUijPVvZ75+SIKi08qwsGNtoeP/JlaPSsoR/ir6sNcHwjjx0EQTBtrEJlJM+E167EVJwgCAKHdun2KUMEgiAIgnGMjRF0ChEIgiAIxmNxRxAEQdDhGJUIBEEQBB1Mh+kIIhAEQRCMw8yoDMesoSAIgo4m7ghaEGNXMYonkKolOPGyOXnCG1dQ5ohxymaMKi9Amv4F5wl0PJ+9ch5+dq0809dAxRMa+XV67XDv1vzf1pqfPZbZDrnvqczmieh+ZUFvZlu0dF5mO3pRX2YbeHogs13vCM8eG8g/pwU9ufLJa+utI7ngzbtmvGvYO0YtCaKbucxpfy8T2lyn0rKZ2nxRXrlsZN71MVSZfha0uhBdQ0EQBJ1OBIIgCIKOpkhVGfkIgiAIOhezWGIiCIKgo7HQEQRBEHQ0Rqw+GgRB0NnErKEgCIJOJwJBEARBx9NJgUA2C7IuAUh6AngIWApsaLI7k9HqPra6f9D6Pra6f9D6PjbSvwPMbNl0d5b0HQr/yrDBzE6c7rFagVkTCMaQdJOZHd1sPyai1X1sdf+g9X1sdf+g9X1sdf86iYYmrw+CIAhanwgEQRAEHc5sDASrm+1ACVrdx1b3D1rfx1b3D1rfx1b3r2OYdWMEQRAEQX2ZjXcEQRAEQR2JQBAEQdDhtFwgkLSfpKsl3SXpDklnJfsSSVdKui897lm1z0ck3S/pHkmvbpJ/50m6W9Jtki6TtLiV/Kt6/wOSTNLSKtuM+TeZj5Lem/y4Q9Knm+HjBJ/xEZKuk3SLpJskHdsM/9Lx5kq6QdKtycePJ3urfE9q+dcS35NgHGbWUhuwEjgqPV8I3AscBnwaODvZzwY+lZ4fBtwKzAEOBH4BdDfBv1cBPcn+qVbzL73eD/guSZjXDP8macOXA98H5qT3lrdSGwLfA05K9tcA1zSxDQUsSM97geuBF7fQ96SWfy3xPYlt163l7gjMbJ2Z/TQ93wLcBewDnApckIpdALwuPT8V+LKZDZrZg8D9wLE0iFr+mdn3zGwkFbsO2LeV/Etv/x3wIXbN+Tej/k3i47uAc81sML33eDN8nMA/AxalYnsAjzbDv+SXmdnW9LI3bUbrfE9c/1rlexLsSssFgmokrQKOpPg3scLM1kHxRQWWp2L7AI9U7baWnT98M+lfNW8HrkjPW8I/SacAvzSzW8cVa5p/kLXhIcBvSLpe0rWSjmm2j+P8ex9wnqRHgL8FPtJM/yR1S7oFeBy40sxa6ntSw79qWuJ7ErRwIJC0ALgUeJ+ZbZ6oqGNr+JzYWv5JOgcYAS5qFf+SP+cAH/OKOrYZmVPstGEPsCdFF8IHgUskqVk+Ov69C3i/me0HvB/43FjRZvhnZqNmdgTFv+pjJT1vguIz7uNE/rXK9yQoaMlAIKmX4gt4kZl9LZnXS1qZ3l9J8S8Din8O+1Xtvi87b9ln0j8knQGcDPyemY1dxK3g30EU/a63SlqTfPippL2b4V8NH0m+fC11K9wAVCgW/mqFNgQ4Axh7/lV2dl00pQ3HMLONwDXAibTQ96SGfy3zPQmqaPYgxfiN4p/BvwN/P85+HrsOgn06PT+cXQeZHqDxg2CefycCdwLLxtlbwr9xZdawc7B4Rv2bpA3fCXwiPT+EoqtArdKGFGMFx6XnxwM3N7ENlwGL0/N5wP9Q/Li2yvekln8t8T2Jbdzn1WwHMofg1yluCW8Dbknba4C9gKuA+9Ljkqp9zqGYZXAPaVZHE/y7P/1wjdn+uZX8G1dmDSkQzLR/k7RhH3AhcDvwU+AVrdSGyX5z+sG6HnhhE9vw+cDPko+3Ax9L9lb5ntTyryW+J7HtusUSE0EQBB1OS44RBEEQBDNHBIIgCIIOJwJBEARBhxOBIAiCoMOJQBAEQdDhRCAIgiDocCIQtAGStk5earfq/7akxWl79zT2P07St6ZYfpOkb9d4/4uSTpuqH7OR1BYvqXr9fkkPS/psM/0K2osIBMGkmNlrrFgmYDEw5UAwTf7HzF7TyANI6mlk/XXiOOCZQGBmf4e/ZlQQTJsIBG1KVRKVsQQgeyb7NZI+lZKG3CvpN5J9vqRLUvmvpBVAj07vrVGRyOZc4KCUmOW88f/0JX1W0tvS8xNTApIfAq+vKtMv6fOSbpT0M0mnljgXpbrvlPRf7FxRE0kvTCuV3izpu1Xr7ByTzuUnydfbk/1tkr4q6ZvA92r5k1bOPC/Zb5P0R8m+UtIPUhvcPtZ+Nfx+VTr+T9MxFyT7x1K9t0tanRbWQ9KfpHO8TdKXVax8+k7g/el4NY8VBLtFs6XNse3+Bmx1bLcBv5mef4K0bg7F4l//Jz1/DfD99PwDwL+k58+jWBny6PR6DcXib6uA26uOcRzwrarXnwXeBsylWEbgYIp1ey4ZKwf8DXB6er6YIulL/zjfx9f7euBKoBt4FrAROI1ijfsfk9atAX4H+Hx6fjvwkvT83DG/k39rSUsv1PIHOBP4aLLPAW6iWAPnT4Fzkr0bWFjjM1kK/GDs3IAPs3OZheplH/4D+K30/FF2JuVZnB7/EvjAuLrfBny22dddbO2zzYZb42CKSNqD4ofk2mS6gGK1zDHGVtC8meLHHYp1dP4BwMxul3TbbrjwHOBBM7sv+XMhxQ8rFBmqTpH0gfR6LrA/xYJutXgZcLGZjQKPSvrvZD+UImhdmf5UdwPrVKQ/XGhmP07lvkSx4NkYV5rZU5P48yrg+VVjEXtQBLYbgc+n1Um/bma31PD5xRRZt36UfOsDfpLee7mkDwHzgSXAHcA3KYL3RZK+Dnx9gvYIgroSgaAzGUyPo+y8Brz14CdjhF27F+dWPa+1iJWAN5jZPVM8llefgDvM7Nd2MVbl6a3Btsn8Sd017zWz72YHlV4GvBb4D0nnmdm/1/DtSjN7y7h95wLnU9xtPSLpL9nZbq+lCHqnAH8u6fBJziMI6kKMEbQhZrYJeLqqT/mtwLUT7ALwQ+BNAJIOA37VKbOFIofvGA8Bh0mak+5Cjk/2u4EDJR2UXlf/GH4XeG9Vv/iRJU7pB8CbU7/9SorcxlCsUrlM0q+lunolHW5mTwNbJL04lXvzBHXX8ue7wLvSP38kHZLGEw4AHjezf6VITHNUjXqvA14q6VfS/vMlHcLOH/0NaczgtPR+F7CfmV1NkU50MbCAvM2DoO7EHUF7MF/S2qrXn6FIovLPkuZTrO3+B5PUcT5wQeoSGls+eFN1ATN7UtKP0sDrFWb2QUmXpLL3pf0wswFJZwL/JWkDRZAZy071V8DfA7elH9817Npt43EZ8Arg5xR9+Nem4wylrpt/TIGoJ9V9B/AO4F8lbaMYF9mUVzuhP/9G0W3202R/giL/73HAByUNA1uB3/cqNbMnVAycXyxpTjJ/1MzulfSv6VzWUHQ1QdGtdWE6DwF/Z2Yb06D2f6ZB7Pea2f9M0lZBMGViGeoAKGbJAL3pR/wgirXsDzGzoSb4chzFAOlkAWKiOhZYSp4u6WxgpZmdVR8Pm0sKMEeb2R8325egPYg7gmCM+cDVqStEwLuaEQQSQ8DzJH3bpq8leK2kj1Bc4w9RzLSZ9Uh6P8WU0kub7UvQPsQdQRDsJpKup5hiWs1bzeznzfAnCKZKBIIgCIIOJ2YNBUEQdDgRCIIgCDqcCARBEAQdTgSCIAiCDuf/A6Tj/JdIxlzQAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "(tmin.sel(time='2013-08-01')-273.15).plot()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "ds_extremes = xr.Dataset({'tmin': tmin, 'tmax': tmax})" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "jupyter": { "outputs_hidden": false }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:  (lat: 25, lon: 53, time: 730)\n",
       "Coordinates:\n",
       "  * time     (time) datetime64[ns] 2013-01-01 2013-01-02 ... 2014-12-31\n",
       "  * lat      (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0\n",
       "  * lon      (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0\n",
       "Data variables:\n",
       "    tmin     (time, lat, lon) float32 241.2 241.8 241.8 ... 295.7 295.5 295.2\n",
       "    tmax     (time, lat, lon) float32 242.3 242.7 243.5 ... 296.6 296.2 295.8
" ], "text/plain": [ "\n", "Dimensions: (lat: 25, lon: 53, time: 730)\n", "Coordinates:\n", " * time (time) datetime64[ns] 2013-01-01 2013-01-02 ... 2014-12-31\n", " * lat (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0\n", " * lon (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0\n", "Data variables:\n", " tmin (time, lat, lon) float32 241.2 241.8 241.8 ... 295.7 295.5 295.2\n", " tmax (time, lat, lon) float32 242.3 242.7 243.5 ... 296.6 296.2 295.8" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds_extremes" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
tmintmax
latlontime
75.0200.02013-01-01241.199997242.299988
2013-01-02243.199997244.099991
2013-01-03242.599991244.799988
2013-01-04247.299988252.389999
2013-01-05242.799988248.599991
\n", "
" ], "text/plain": [ " tmin tmax\n", "lat lon time \n", "75.0 200.0 2013-01-01 241.199997 242.299988\n", " 2013-01-02 243.199997 244.099991\n", " 2013-01-03 242.599991 244.799988\n", " 2013-01-04 247.299988 252.389999\n", " 2013-01-05 242.799988 248.599991" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds_extremes.to_dataframe().head()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "如果我们要计算季节平均温度,但是季节不是从12月开始算,而是从1月份开始算,该怎么办?" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'air' (time: 8, lat: 25, lon: 53)>\n",
       "array([[[244.61775, 244.4874 , 244.16472, ..., 242.67862, 243.6617 ,\n",
       "         244.84286],\n",
       "        [246.70831, 246.60774, 246.2854 , ..., 241.76208, 243.09488,\n",
       "         245.42445],\n",
       "        [249.80577, 249.27916, 248.56662, ..., 242.6106 , 245.18909,\n",
       "         249.2116 ],\n",
       "        ...,\n",
       "        [295.54068, 294.8626 , 294.5957 , ..., 295.23795, 294.7679 ,\n",
       "         294.27173],\n",
       "        [296.29684, 296.1032 , 295.6412 , ..., 295.4861 , 295.27814,\n",
       "         294.85345],\n",
       "        [296.90457, 296.85693, 296.57358, ..., 296.13675, 295.94586,\n",
       "         295.85483]],\n",
       "\n",
       "       [[266.05133, 265.95355, 265.73987, ..., 255.27213, 256.4855 ,\n",
       "         258.0242 ],\n",
       "        [266.68463, 266.89017, 267.00583, ..., 254.36305, 256.30783,\n",
       "         258.96777],\n",
       "        [267.43503, 267.17825, 267.05594, ..., 255.34682, 258.0517 ,\n",
       "         261.6338 ],\n",
       "...\n",
       "        [299.39444, 298.6934 , 298.25183, ..., 298.41876, 297.89505,\n",
       "         297.44012],\n",
       "        [299.58566, 299.3528 , 298.86545, ..., 298.13773, 298.18146,\n",
       "         297.92966],\n",
       "        [299.52676, 299.55106, 299.26666, ..., 298.4734 , 298.55417,\n",
       "         298.6812 ]],\n",
       "\n",
       "       [[254.5719 , 254.2065 , 253.78835, ..., 244.84901, 245.83794,\n",
       "         247.16304],\n",
       "        [258.69034, 258.4616 , 258.29688, ..., 243.59813, 245.36269,\n",
       "         248.19038],\n",
       "        [259.91925, 258.61987, 257.98532, ..., 243.66206, 247.11562,\n",
       "         251.96043],\n",
       "        ...,\n",
       "        [298.0594 , 297.28436, 297.13278, ..., 297.8992 , 297.5463 ,\n",
       "         297.1005 ],\n",
       "        [298.82498, 298.7005 , 298.23013, ..., 298.11282, 298.20093,\n",
       "         297.89267],\n",
       "        [299.03397, 299.12115, 298.8528 , ..., 298.71136, 298.70218,\n",
       "         298.74704]]], dtype=float32)\n",
       "Coordinates:\n",
       "  * time     (time) datetime64[ns] 2013-01-01 2013-04-01 ... 2014-10-01\n",
       "  * lat      (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0\n",
       "  * lon      (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0
" ], "text/plain": [ "\n", "array([[[244.61775, 244.4874 , 244.16472, ..., 242.67862, 243.6617 ,\n", " 244.84286],\n", " [246.70831, 246.60774, 246.2854 , ..., 241.76208, 243.09488,\n", " 245.42445],\n", " [249.80577, 249.27916, 248.56662, ..., 242.6106 , 245.18909,\n", " 249.2116 ],\n", " ...,\n", " [295.54068, 294.8626 , 294.5957 , ..., 295.23795, 294.7679 ,\n", " 294.27173],\n", " [296.29684, 296.1032 , 295.6412 , ..., 295.4861 , 295.27814,\n", " 294.85345],\n", " [296.90457, 296.85693, 296.57358, ..., 296.13675, 295.94586,\n", " 295.85483]],\n", "\n", " [[266.05133, 265.95355, 265.73987, ..., 255.27213, 256.4855 ,\n", " 258.0242 ],\n", " [266.68463, 266.89017, 267.00583, ..., 254.36305, 256.30783,\n", " 258.96777],\n", " [267.43503, 267.17825, 267.05594, ..., 255.34682, 258.0517 ,\n", " 261.6338 ],\n", "...\n", " [299.39444, 298.6934 , 298.25183, ..., 298.41876, 297.89505,\n", " 297.44012],\n", " [299.58566, 299.3528 , 298.86545, ..., 298.13773, 298.18146,\n", " 297.92966],\n", " [299.52676, 299.55106, 299.26666, ..., 298.4734 , 298.55417,\n", " 298.6812 ]],\n", "\n", " [[254.5719 , 254.2065 , 253.78835, ..., 244.84901, 245.83794,\n", " 247.16304],\n", " [258.69034, 258.4616 , 258.29688, ..., 243.59813, 245.36269,\n", " 248.19038],\n", " [259.91925, 258.61987, 257.98532, ..., 243.66206, 247.11562,\n", " 251.96043],\n", " ...,\n", " [298.0594 , 297.28436, 297.13278, ..., 297.8992 , 297.5463 ,\n", " 297.1005 ],\n", " [298.82498, 298.7005 , 298.23013, ..., 298.11282, 298.20093,\n", " 297.89267],\n", " [299.03397, 299.12115, 298.8528 , ..., 298.71136, 298.70218,\n", " 298.74704]]], dtype=float32)\n", "Coordinates:\n", " * time (time) datetime64[ns] 2013-01-01 2013-04-01 ... 2014-10-01\n", " * lat (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0\n", " * lon (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tmean = air_temp.air.resample(time='QS-JAN').mean()\n", "tmean" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "我们可以进一步求长期性的季节性平均(即季节性气候):" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'air' (month: 4, lat: 25, lon: 53)>\n",
       "array([[[248.06451, 247.87129, 247.50122, ..., 242.38834, 243.41504,\n",
       "         244.81207],\n",
       "        [249.94589, 249.91418, 249.65762, ..., 241.28279, 242.95572,\n",
       "         245.75687],\n",
       "        [251.79315, 251.37738, 250.85794, ..., 242.50226, 245.54515,\n",
       "         250.02003],\n",
       "        ...,\n",
       "        [295.80817, 295.299  , 295.20734, ..., 294.8109 , 294.21518,\n",
       "         293.65   ],\n",
       "        [296.67496, 296.5963 , 296.23596, ..., 294.91943, 294.63684,\n",
       "         294.14258],\n",
       "        [297.27472, 297.30914, 297.05096, ..., 295.5161 , 295.29193,\n",
       "         295.1877 ]],\n",
       "\n",
       "       [[266.2707 , 266.1467 , 265.92212, ..., 255.81694, 256.9698 ,\n",
       "         258.4292 ],\n",
       "        [267.29608, 267.4804 , 267.57135, ..., 254.85863, 256.7419 ,\n",
       "         259.33945],\n",
       "        [268.3296 , 268.1264 , 268.0636 , ..., 256.2502 , 258.92676,\n",
       "         262.47302],\n",
       "...\n",
       "        [299.19385, 298.38416, 297.86572, ..., 298.37845, 297.90448,\n",
       "         297.50476],\n",
       "        [299.31348, 299.026  , 298.5249 , ..., 298.23846, 298.32867,\n",
       "         298.1369 ],\n",
       "        [299.2212 , 299.25613, 299.00455, ..., 298.67078, 298.75018,\n",
       "         298.88126]],\n",
       "\n",
       "       [[254.51819, 254.2999 , 253.97646, ..., 243.64935, 244.68417,\n",
       "         246.07224],\n",
       "        [259.2971 , 259.24634, 259.14093, ..., 242.3569 , 244.08167,\n",
       "         246.92615],\n",
       "        [260.90253, 259.7304 , 259.12848, ..., 242.1542 , 245.5603 ,\n",
       "         250.43971],\n",
       "        ...,\n",
       "        [297.9024 , 297.14087, 296.95703, ..., 297.8386 , 297.45078,\n",
       "         297.03668],\n",
       "        [298.49506, 298.34576, 297.91656, ..., 298.09235, 298.10907,\n",
       "         297.82123],\n",
       "        [298.68652, 298.7552 , 298.51666, ..., 298.68442, 298.65936,\n",
       "         298.70523]]], dtype=float32)\n",
       "Coordinates:\n",
       "  * lat      (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0\n",
       "  * lon      (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0\n",
       "  * month    (month) int64 1 4 7 10
" ], "text/plain": [ "\n", "array([[[248.06451, 247.87129, 247.50122, ..., 242.38834, 243.41504,\n", " 244.81207],\n", " [249.94589, 249.91418, 249.65762, ..., 241.28279, 242.95572,\n", " 245.75687],\n", " [251.79315, 251.37738, 250.85794, ..., 242.50226, 245.54515,\n", " 250.02003],\n", " ...,\n", " [295.80817, 295.299 , 295.20734, ..., 294.8109 , 294.21518,\n", " 293.65 ],\n", " [296.67496, 296.5963 , 296.23596, ..., 294.91943, 294.63684,\n", " 294.14258],\n", " [297.27472, 297.30914, 297.05096, ..., 295.5161 , 295.29193,\n", " 295.1877 ]],\n", "\n", " [[266.2707 , 266.1467 , 265.92212, ..., 255.81694, 256.9698 ,\n", " 258.4292 ],\n", " [267.29608, 267.4804 , 267.57135, ..., 254.85863, 256.7419 ,\n", " 259.33945],\n", " [268.3296 , 268.1264 , 268.0636 , ..., 256.2502 , 258.92676,\n", " 262.47302],\n", "...\n", " [299.19385, 298.38416, 297.86572, ..., 298.37845, 297.90448,\n", " 297.50476],\n", " [299.31348, 299.026 , 298.5249 , ..., 298.23846, 298.32867,\n", " 298.1369 ],\n", " [299.2212 , 299.25613, 299.00455, ..., 298.67078, 298.75018,\n", " 298.88126]],\n", "\n", " [[254.51819, 254.2999 , 253.97646, ..., 243.64935, 244.68417,\n", " 246.07224],\n", " [259.2971 , 259.24634, 259.14093, ..., 242.3569 , 244.08167,\n", " 246.92615],\n", " [260.90253, 259.7304 , 259.12848, ..., 242.1542 , 245.5603 ,\n", " 250.43971],\n", " ...,\n", " [297.9024 , 297.14087, 296.95703, ..., 297.8386 , 297.45078,\n", " 297.03668],\n", " [298.49506, 298.34576, 297.91656, ..., 298.09235, 298.10907,\n", " 297.82123],\n", " [298.68652, 298.7552 , 298.51666, ..., 298.68442, 298.65936,\n", " 298.70523]]], dtype=float32)\n", "Coordinates:\n", " * lat (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0\n", " * lon (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0\n", " * month (month) int64 1 4 7 10" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tmean.groupby('time.month').mean()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 9. 滚动 Rolling\n", "\n", "xarray 支持滚动窗口操作" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "ctime = np.arange(10) + 1\n", "c = xr.DataArray(np.arange(10), dims='time', \n", " coords={'time':ctime})\n", "rol = c.rolling(time=3)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(\n", "array(1)\n", "Coordinates:\n", " time int64 1, \n", "array([nan])\n", "Coordinates:\n", " * time (time) int64 1)\n", "(\n", "array(2)\n", "Coordinates:\n", " time int64 2, \n", "array([nan, nan])\n", "Coordinates:\n", " * time (time) int64 1 2)\n", "(\n", "array(3)\n", "Coordinates:\n", " time int64 3, \n", "array([0., 1., 2.])\n", "Coordinates:\n", " * time (time) int64 1 2 3)\n", "(\n", "array(4)\n", "Coordinates:\n", " time int64 4, \n", "array([1., 2., 3.])\n", "Coordinates:\n", " * time (time) int64 2 3 4)\n", "(\n", "array(5)\n", "Coordinates:\n", " time int64 5, \n", "array([2., 3., 4.])\n", "Coordinates:\n", " * time (time) int64 3 4 5)\n", "(\n", "array(6)\n", "Coordinates:\n", " time int64 6, \n", "array([3., 4., 5.])\n", "Coordinates:\n", " * time (time) int64 4 5 6)\n", "(\n", "array(7)\n", "Coordinates:\n", " time int64 7, \n", "array([4., 5., 6.])\n", "Coordinates:\n", " * time (time) int64 5 6 7)\n", "(\n", "array(8)\n", "Coordinates:\n", " time int64 8, \n", "array([5., 6., 7.])\n", "Coordinates:\n", " * time (time) int64 6 7 8)\n", "(\n", "array(9)\n", "Coordinates:\n", " time int64 9, \n", "array([6., 7., 8.])\n", "Coordinates:\n", " * time (time) int64 7 8 9)\n", "(\n", "array(10)\n", "Coordinates:\n", " time int64 10, \n", "array([7., 8., 9.])\n", "Coordinates:\n", " * time (time) int64 8 9 10)\n" ] } ], "source": [ "#rol\n", "for e in rol:\n", " print(e)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "air_roll = air_temp.air.rolling(time=3) #,center=True)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "DataArrayRolling [time->3]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "air_roll" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'air' (time: 2920, lat: 25, lon: 53)>\n",
       "array([[[      nan,       nan,       nan, ...,       nan,       nan,\n",
       "               nan],\n",
       "        [      nan,       nan,       nan, ...,       nan,       nan,\n",
       "               nan],\n",
       "        [      nan,       nan,       nan, ...,       nan,       nan,\n",
       "               nan],\n",
       "        ...,\n",
       "        [      nan,       nan,       nan, ...,       nan,       nan,\n",
       "               nan],\n",
       "        [      nan,       nan,       nan, ...,       nan,       nan,\n",
       "               nan],\n",
       "        [      nan,       nan,       nan, ...,       nan,       nan,\n",
       "               nan]],\n",
       "\n",
       "       [[      nan,       nan,       nan, ...,       nan,       nan,\n",
       "               nan],\n",
       "        [      nan,       nan,       nan, ...,       nan,       nan,\n",
       "               nan],\n",
       "        [      nan,       nan,       nan, ...,       nan,       nan,\n",
       "               nan],\n",
       "...\n",
       "        [295.19   , 295.62332, 297.15665, ..., 295.45667, 295.19   ,\n",
       "         294.52335],\n",
       "        [296.69003, 297.82333, 298.39   , ..., 295.52335, 295.38998,\n",
       "         294.65665],\n",
       "        [298.09   , 298.95667, 298.88998, ..., 296.12332, 295.75668,\n",
       "         295.49002]],\n",
       "\n",
       "       [[244.79   , 244.02332, 242.95667, ..., 243.05666, 243.32332,\n",
       "         243.82332],\n",
       "        [249.62334, 249.18999, 248.48999, ..., 240.48999, 241.35664,\n",
       "         242.89   ],\n",
       "        [262.68997, 262.05667, 261.45667, ..., 239.92334, 242.45667,\n",
       "         246.12334],\n",
       "        ...,\n",
       "        [294.09   , 294.29   , 295.99   , ..., 295.29   , 295.05664,\n",
       "         294.55667],\n",
       "        [296.39   , 297.32333, 297.69   , ..., 295.49002, 295.4233 ,\n",
       "         294.79   ],\n",
       "        [297.88998, 298.55664, 298.45667, ..., 296.09   , 295.82333,\n",
       "         295.55667]]], dtype=float32)\n",
       "Coordinates:\n",
       "  * lat      (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0\n",
       "  * lon      (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0\n",
       "  * time     (time) datetime64[ns] 2013-01-01 ... 2014-12-31T18:00:00\n",
       "Attributes:\n",
       "    long_name:     4xDaily Air temperature at sigma level 995\n",
       "    units:         degK\n",
       "    precision:     2\n",
       "    GRIB_id:       11\n",
       "    GRIB_name:     TMP\n",
       "    var_desc:      Air temperature\n",
       "    dataset:       NMC Reanalysis\n",
       "    level_desc:    Surface\n",
       "    statistic:     Individual Obs\n",
       "    parent_stat:   Other\n",
       "    actual_range:  [185.16 322.1 ]
" ], "text/plain": [ "\n", "array([[[ nan, nan, nan, ..., nan, nan,\n", " nan],\n", " [ nan, nan, nan, ..., nan, nan,\n", " nan],\n", " [ nan, nan, nan, ..., nan, nan,\n", " nan],\n", " ...,\n", " [ nan, nan, nan, ..., nan, nan,\n", " nan],\n", " [ nan, nan, nan, ..., nan, nan,\n", " nan],\n", " [ nan, nan, nan, ..., nan, nan,\n", " nan]],\n", "\n", " [[ nan, nan, nan, ..., nan, nan,\n", " nan],\n", " [ nan, nan, nan, ..., nan, nan,\n", " nan],\n", " [ nan, nan, nan, ..., nan, nan,\n", " nan],\n", "...\n", " [295.19 , 295.62332, 297.15665, ..., 295.45667, 295.19 ,\n", " 294.52335],\n", " [296.69003, 297.82333, 298.39 , ..., 295.52335, 295.38998,\n", " 294.65665],\n", " [298.09 , 298.95667, 298.88998, ..., 296.12332, 295.75668,\n", " 295.49002]],\n", "\n", " [[244.79 , 244.02332, 242.95667, ..., 243.05666, 243.32332,\n", " 243.82332],\n", " [249.62334, 249.18999, 248.48999, ..., 240.48999, 241.35664,\n", " 242.89 ],\n", " [262.68997, 262.05667, 261.45667, ..., 239.92334, 242.45667,\n", " 246.12334],\n", " ...,\n", " [294.09 , 294.29 , 295.99 , ..., 295.29 , 295.05664,\n", " 294.55667],\n", " [296.39 , 297.32333, 297.69 , ..., 295.49002, 295.4233 ,\n", " 294.79 ],\n", " [297.88998, 298.55664, 298.45667, ..., 296.09 , 295.82333,\n", " 295.55667]]], dtype=float32)\n", "Coordinates:\n", " * lat (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0\n", " * lon (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0\n", " * time (time) datetime64[ns] 2013-01-01 ... 2014-12-31T18:00:00\n", "Attributes:\n", " long_name: 4xDaily Air temperature at sigma level 995\n", " units: degK\n", " precision: 2\n", " GRIB_id: 11\n", " GRIB_name: TMP\n", " var_desc: Air temperature\n", " dataset: NMC Reanalysis\n", " level_desc: Surface\n", " statistic: Individual Obs\n", " parent_stat: Other\n", " actual_range: [185.16 322.1 ]" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "air_roll.mean()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 10. I/O" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "`xarray` 支持读取和保存许多格式的文件\n", "\n", "- `netcdf`、`hdf` 可以直接读写\n", "- `grib` (version 1 and 2) 需要借助 `cfgrib` 来读取 (`conda install -c conda-forge cfgrib`),支持 `Linux`, `Mac OS X`, 和 ***`Windows`***\n", "\n", "```python\n", "import xarray as xr\n", "xr.open_dataset(grib_file,engine='cfgrib')\n", "```\n", "或者\n", "```python\n", "xr.open_dataarray(grib_file,engine='cfgrib')\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "保存到 `netcdf` 文件\n", "\n", "```python\n", "ds_extremes.to_netcdf('ds_extremes.nc')\n", "```" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "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.7.7" }, "rise": { "enable_chalkboard": true, "header": "
", "progress": true, "scroll": true, "theme": "serif", "transition": "slide" } }, "nbformat": 4, "nbformat_minor": 2 }