{ "cells": [ { "cell_type": "markdown", "id": "0702ec6c-f370-4cad-bb32-bb80d4335bdb", "metadata": {}, "source": [ "# Event" ] }, { "cell_type": "code", "execution_count": 1, "id": "4ce4b199-5572-4e33-83b6-593ce09e57a4", "metadata": {}, "outputs": [], "source": [ "import xarray\n", "import numpy\n", "import pandas\n", "import climtas\n", "import xesmf\n", "import dask.array" ] }, { "cell_type": "markdown", "id": "bfc85e52-2dc0-44f7-b271-8e59361fbc6e", "metadata": {}, "source": [ "We have a Dask dataset, and we'd like to identify periods where the value is above some threshold" ] }, { "cell_type": "code", "execution_count": 2, "id": "7c1dcb98-fbaf-403e-a388-523b73fc6821", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'temperature' (time: 1095, lat: 50, lon: 100)>\n",
       "dask.array<random_sample, shape=(1095, 50, 100), dtype=float64, chunksize=(90, 25, 25), chunktype=numpy.ndarray>\n",
       "Coordinates:\n",
       "  * time     (time) datetime64[ns] 2001-01-01 2001-01-02 ... 2003-12-31\n",
       "  * lat      (lat) float64 -90.0 -86.33 -82.65 -78.98 ... 78.98 82.65 86.33 90.0\n",
       "  * lon      (lon) float64 -180.0 -176.4 -172.8 -169.2 ... 169.2 172.8 176.4
" ], "text/plain": [ "\n", "dask.array\n", "Coordinates:\n", " * time (time) datetime64[ns] 2001-01-01 2001-01-02 ... 2003-12-31\n", " * lat (lat) float64 -90.0 -86.33 -82.65 -78.98 ... 78.98 82.65 86.33 90.0\n", " * lon (lon) float64 -180.0 -176.4 -172.8 -169.2 ... 169.2 172.8 176.4" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "time = pandas.date_range('20010101', '20040101', freq='D', closed='left')\n", "\n", "data = dask.array.random.random((len(time),50,100), chunks=(90,25,25))\n", "lat = numpy.linspace(-90, 90, data.shape[1])\n", "lon = numpy.linspace(-180, 180, data.shape[2], endpoint=False)\n", "\n", "da = xarray.DataArray(data, coords=[('time', time), ('lat', lat), ('lon', lon)], name='temperature')\n", "da.lat.attrs['standard_name'] = 'latitude'\n", "da.lon.attrs['standard_name'] = 'longitude'\n", "\n", "da" ] }, { "cell_type": "markdown", "id": "402209fd-7865-4577-b9d3-3ccf5bef1625", "metadata": {}, "source": [ "[climtas.event.find_events](api/event.rst#climtas.event.find_events) will create a Pandas table of events. You give it an array of boolean values, `True` if an event is active, which can e.g. be generated by comparing against a threshold like a mean or percentile." ] }, { "cell_type": "code", "execution_count": 3, "id": "5b9da0f5-50d3-463e-a624-6beda2d93fd0", "metadata": {}, "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", " \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", "
timelatlonevent_duration
02231210
1311211
2392111
3320611
460610
...............
25891074318211
25901079367911
25911081349812
25921084257910
25931083357811
\n", "

2594 rows × 4 columns

\n", "
" ], "text/plain": [ " time lat lon event_duration\n", "0 2 23 12 10\n", "1 3 1 12 11\n", "2 3 9 21 11\n", "3 3 20 6 11\n", "4 6 0 6 10\n", "... ... ... ... ...\n", "2589 1074 31 82 11\n", "2590 1079 36 79 11\n", "2591 1081 34 98 12\n", "2592 1084 25 79 10\n", "2593 1083 35 78 11\n", "\n", "[2594 rows x 4 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "threshold = da.mean('time')\n", "\n", "events = climtas.event.find_events(da > threshold, min_duration = 10)\n", "\n", "events" ] }, { "cell_type": "markdown", "id": "ed0c70f2-1c28-4cfb-bdee-9a68508df45a", "metadata": {}, "source": [ "Since the result is a Pandas table normal Pandas operations will work, here's a histogram of event durations. The values in the event table are the array indices where events start and the number of steps the event is active for." ] }, { "cell_type": "code", "execution_count": 4, "id": "7e560257-05d6-43b5-b21e-d4ff718d22db", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "events.hist('event_duration', grid=False);" ] }, { "cell_type": "markdown", "id": "a7771f19-191d-4bfa-afa2-e1b2afcd4e34", "metadata": {}, "source": [ "You can convert from the indices to coordinates using [climtas.event.event_coords](api/event.rst#climtas.event.event_coords). Events still active at the end of the dataset are marked with a duration of NaT (not a time)" ] }, { "cell_type": "code", "execution_count": 5, "id": "dfe44704-7145-4d68-9509-8ef613101703", "metadata": {}, "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", " \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", "
timelatlonevent_duration
02001-01-03-5.510204-136.810 days
12001-01-04-86.326531-136.811 days
22001-01-04-56.938776-104.411 days
32001-01-04-16.530612-158.411 days
42001-01-07-90.000000-158.410 days
...............
25892003-12-1123.877551115.211 days
25902003-12-1642.244898104.411 days
25912003-12-1834.897959172.812 days
25922003-12-211.836735104.410 days
25932003-12-2038.571429100.811 days
\n", "

2594 rows × 4 columns

\n", "
" ], "text/plain": [ " time lat lon event_duration\n", "0 2001-01-03 -5.510204 -136.8 10 days\n", "1 2001-01-04 -86.326531 -136.8 11 days\n", "2 2001-01-04 -56.938776 -104.4 11 days\n", "3 2001-01-04 -16.530612 -158.4 11 days\n", "4 2001-01-07 -90.000000 -158.4 10 days\n", "... ... ... ... ...\n", "2589 2003-12-11 23.877551 115.2 11 days\n", "2590 2003-12-16 42.244898 104.4 11 days\n", "2591 2003-12-18 34.897959 172.8 12 days\n", "2592 2003-12-21 1.836735 104.4 10 days\n", "2593 2003-12-20 38.571429 100.8 11 days\n", "\n", "[2594 rows x 4 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coords = climtas.event.event_coords(da, events)\n", "\n", "coords" ] }, { "cell_type": "markdown", "id": "297b852e-4d75-4505-8fb3-cca70e7f0eb7", "metadata": {}, "source": [ "To get statistics for each event use [climtas.event.map_events](api/event.rst#climtas.event.map_events). This takes a function that is given the event's data and returns a dict of different statistics. It's helpful to use `.values` here to return a number instead of a DataArray with coordinates and attributes." ] }, { "cell_type": "code", "execution_count": 6, "id": "6b91ec41-86d7-4cc3-bab4-22e90afdb14f", "metadata": {}, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
summean
07.7206461917656210.7720646191765621
17.5451689087822780.6859244462529344
28.7764049532848270.7978549957531661
38.8206292835227080.8018753894111552
47.3506208185051830.7350620818505182
.........
25898.7107908842535760.7918900803866887
25906.732660817866260.6120600743514782
25918.8685922149959740.7390493512496645
25927.7902115942778640.7790211594277864
25938.6698673149185530.7881697559016867
\n", "

2594 rows × 2 columns

\n", "
" ], "text/plain": [ " sum mean\n", "0 7.720646191765621 0.7720646191765621\n", "1 7.545168908782278 0.6859244462529344\n", "2 8.776404953284827 0.7978549957531661\n", "3 8.820629283522708 0.8018753894111552\n", "4 7.350620818505183 0.7350620818505182\n", "... ... ...\n", "2589 8.710790884253576 0.7918900803866887\n", "2590 6.73266081786626 0.6120600743514782\n", "2591 8.868592214995974 0.7390493512496645\n", "2592 7.790211594277864 0.7790211594277864\n", "2593 8.669867314918553 0.7881697559016867\n", "\n", "[2594 rows x 2 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stats = climtas.event.map_events(da, events, lambda x: {'sum': x.sum().values, 'mean': x.mean().values})\n", "\n", "stats" ] }, { "cell_type": "markdown", "id": "dfae98e3-96a0-409b-b2c7-0a7762a50eb4", "metadata": {}, "source": [ "Again this is a Pandas dataframe, so you can join the different tables really simply" ] }, { "cell_type": "code", "execution_count": 7, "id": "1d07ec7b-a291-48ae-9ed4-7e3276302993", "metadata": {}, "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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
timelatlonevent_durationsummean
02001-01-03-5.510204-136.810 days7.7206461917656210.7720646191765621
12001-01-04-86.326531-136.811 days7.5451689087822780.6859244462529344
22001-01-04-56.938776-104.411 days8.7764049532848270.7978549957531661
32001-01-04-16.530612-158.411 days8.8206292835227080.8018753894111552
42001-01-07-90.000000-158.410 days7.3506208185051830.7350620818505182
.....................
25892003-12-1123.877551115.211 days8.7107908842535760.7918900803866887
25902003-12-1642.244898104.411 days6.732660817866260.6120600743514782
25912003-12-1834.897959172.812 days8.8685922149959740.7390493512496645
25922003-12-211.836735104.410 days7.7902115942778640.7790211594277864
25932003-12-2038.571429100.811 days8.6698673149185530.7881697559016867
\n", "

2594 rows × 6 columns

\n", "
" ], "text/plain": [ " time lat lon event_duration sum \\\n", "0 2001-01-03 -5.510204 -136.8 10 days 7.720646191765621 \n", "1 2001-01-04 -86.326531 -136.8 11 days 7.545168908782278 \n", "2 2001-01-04 -56.938776 -104.4 11 days 8.776404953284827 \n", "3 2001-01-04 -16.530612 -158.4 11 days 8.820629283522708 \n", "4 2001-01-07 -90.000000 -158.4 10 days 7.350620818505183 \n", "... ... ... ... ... ... \n", "2589 2003-12-11 23.877551 115.2 11 days 8.710790884253576 \n", "2590 2003-12-16 42.244898 104.4 11 days 6.73266081786626 \n", "2591 2003-12-18 34.897959 172.8 12 days 8.868592214995974 \n", "2592 2003-12-21 1.836735 104.4 10 days 7.790211594277864 \n", "2593 2003-12-20 38.571429 100.8 11 days 8.669867314918553 \n", "\n", " mean \n", "0 0.7720646191765621 \n", "1 0.6859244462529344 \n", "2 0.7978549957531661 \n", "3 0.8018753894111552 \n", "4 0.7350620818505182 \n", "... ... \n", "2589 0.7918900803866887 \n", "2590 0.6120600743514782 \n", "2591 0.7390493512496645 \n", "2592 0.7790211594277864 \n", "2593 0.7881697559016867 \n", "\n", "[2594 rows x 6 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coords.join(stats)" ] } ], "metadata": { "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.8.6" } }, "nbformat": 4, "nbformat_minor": 5 }