{ "cells": [ { "cell_type": "markdown", "id": "9b9d52bb-1273-4309-a730-ae733921d995", "metadata": {}, "source": [ "# Tabular analysis\n", "\n", "Thus far, we've read the data files as output by the National Water Model, which are provided as hourly snapshots in NetCDF format (or slight transformations of them, like via Kerchunk index files or conversion to Zarr).\n", "\n", "A subset of the data (we'll look at `reservoir` data) are distributed as NetCDF files but are fundamentally tabular. As an exercise, I [converted](https://github.com/TomAugspurger/noaa-nwm/blob/main/processing/noaanwm.py) some reservoir data to a [geoparquet](https://geoparquet.org/) dataset. Parquet is a nice, high-performance dataset for tabular data. Geoparquet is like regular parquet, only with some extra geospatial metadata." ] }, { "cell_type": "code", "execution_count": 1, "id": "07f36486-ca2b-4d53-b383-d92441ab2570", "metadata": { "tags": [] }, "outputs": [], "source": [ "import dask.dataframe as dd\n", "import dask_geopandas\n", "import geopandas" ] }, { "cell_type": "markdown", "id": "a1bfd448-17ae-4a69-8ed1-5e0ae154b21a", "metadata": {}, "source": [ "This is a pretty large dataset, partitioned across many individual parquet files, so we'll load it up with `dask.dataframe` / `dask-geopandas`." ] }, { "cell_type": "code", "execution_count": 3, "id": "b9be96e0-075a-4d70-829c-6248400360a9", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
Dask-GeoPandas GeoDataFrame Structure:
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
feature_idgeometryreservoir_typewater_sfc_elevinflowoutflow
npartitions=21
2021-08-26 01:00:00int32geometrycategory[unknown]float32float64float64
2021-09-01 01:00:00..................
.....................
2023-04-01 01:00:00..................
2023-04-18 23:00:00..................
\n", "
\n", "
Dask Name: GeoDataFrame, 5 graph layers
" ], "text/plain": [ "Dask GeoDataFrame Structure:\n", " feature_id geometry reservoir_type water_sfc_elev inflow outflow\n", "npartitions=21 \n", "2021-08-26 01:00:00 int32 geometry category[unknown] float32 float64 float64\n", "2021-09-01 01:00:00 ... ... ... ... ... ...\n", "... ... ... ... ... ... ...\n", "2023-04-01 01:00:00 ... ... ... ... ... ...\n", "2023-04-18 23:00:00 ... ... ... ... ... ...\n", "Dask Name: GeoDataFrame, 5 graph layers" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = dd.read_parquet(\n", " \"az://ciroh/short-range-reservoir.parquet/\",\n", " storage_options={\"account_name\": \"noaanwm\"},\n", " calculate_divisions=True,\n", ")\n", "geometry = df.geometry.map_partitions(\n", " geopandas.GeoSeries.from_wkb,\n", " meta=geopandas.GeoSeries([], name=\"geometry\"),\n", " crs=\"epsg:4326\",\n", ")\n", "\n", "gdf = dask_geopandas.from_dask_dataframe(df, geometry=geometry)\n", "gdf" ] }, { "cell_type": "markdown", "id": "130e8c73-5af4-4f9e-bb3b-7f56fc0f1298", "metadata": {}, "source": [ "This data structure shows our 6 columns and their data types.\n", "\n", "The output also shows that we have 21 partitions (or individual parquet files). I partitioned the data by month, so we can quickly look up a subset of the data." ] }, { "cell_type": "code", "execution_count": 4, "id": "cf8467f2-7669-4b0e-a158-f6193d4bde5f", "metadata": { "tags": [] }, "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", "
feature_idgeometryreservoir_typewater_sfc_elevinflowoutflow
time
2022-07-01491POINT (-68.37904 46.18327)1206.1580810.330.55
2022-07-01531POINT (-68.45489 46.16116)1247.6006320.030.31
2022-07-01747POINT (-68.06499 46.03409)1190.3221280.020.10
2022-07-01759POINT (-68.16213 46.02238)1165.1248630.000.17
2022-07-011581POINT (-67.93720 45.64844)1130.0302730.480.55
\n", "
" ], "text/plain": [ " feature_id geometry reservoir_type \n", "time \n", "2022-07-01 491 POINT (-68.37904 46.18327) 1 \\\n", "2022-07-01 531 POINT (-68.45489 46.16116) 1 \n", "2022-07-01 747 POINT (-68.06499 46.03409) 1 \n", "2022-07-01 759 POINT (-68.16213 46.02238) 1 \n", "2022-07-01 1581 POINT (-67.93720 45.64844) 1 \n", "\n", " water_sfc_elev inflow outflow \n", "time \n", "2022-07-01 206.158081 0.33 0.55 \n", "2022-07-01 247.600632 0.03 0.31 \n", "2022-07-01 190.322128 0.02 0.10 \n", "2022-07-01 165.124863 0.00 0.17 \n", "2022-07-01 130.030273 0.48 0.55 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w = gdf.loc[\"2022-07-01\":\"2022-07-08\"]\n", "w.head()" ] }, { "cell_type": "markdown", "id": "a0006847-9361-4402-b75b-aa387f548e31", "metadata": {}, "source": [ "We can do dataframe-style computations, like grouping by feature ID and getting some summary statistics for the `inflow` variable." ] }, { "cell_type": "code", "execution_count": 5, "id": "d448ecc8-80d4-4ede-b399-b71dd230d6b9", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 7.45 s, sys: 2.05 s, total: 9.51 s\n", "Wall time: 3.77 s\n" ] }, { "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", "
meanminmaxstdcount
feature_id
4910.7942960.0715.201.00629413236
5310.3421210.0018.430.74696113236
7470.4164110.0114.900.81588413236
7590.0003890.000.130.00417513236
15811.2713400.375.221.11301713236
\n", "
" ], "text/plain": [ " mean min max std count\n", "feature_id \n", "491 0.794296 0.07 15.20 1.006294 13236\n", "531 0.342121 0.00 18.43 0.746961 13236\n", "747 0.416411 0.01 14.90 0.815884 13236\n", "759 0.000389 0.00 0.13 0.004175 13236\n", "1581 1.271340 0.37 5.22 1.113017 13236" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%time\n", "inflow = (\n", " df.groupby(\"feature_id\")\n", " .inflow.agg([\"mean\", \"min\", \"max\", \"std\", \"count\"])\n", " .compute()\n", ")\n", "inflow.head()" ] }, { "cell_type": "markdown", "id": "4a5c7066-ab7f-4f64-92c2-d138791960df", "metadata": {}, "source": [ "Let's find the `feature_id` with the largest change in water elevation in the first month." ] }, { "cell_type": "code", "execution_count": 6, "id": "f7ae8b6e-53a0-4b3b-9c7a-02d2609ee619", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "22472505" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xs = gdf.get_partition(0).compute()\n", "change = (\n", " xs.groupby(\"feature_id\")\n", " .water_sfc_elev.agg([\"min\", \"max\"])\n", " .diff(axis=\"columns\")[\"max\"]\n", ")\n", "feature_id = change.idxmax()\n", "feature_id" ] }, { "cell_type": "markdown", "id": "42189ae3-dff4-4800-b726-e57bb4a56fce", "metadata": {}, "source": [ "We can get the `geometry` for that feature ID." ] }, { "cell_type": "code", "execution_count": 7, "id": "f11767f7-0d78-4a6d-9e7e-eb78647db7a2", "metadata": { "tags": [] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "9f1ead4947d84edf907fd06c2dc6ccf4", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Map(center=[42.485076904296875, -91.91275787353516], controls=(ZoomControl(options=['position', 'zoom_in_text'…" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from ipyleaflet import Map, CircleMarker\n", "\n", "\n", "geometry = xs[xs.feature_id == feature_id].iloc[0].geometry\n", "y, x = geometry.y, geometry.x\n", "\n", "m = Map(center=(y, x), zoom=15)\n", "m.add(CircleMarker(location=(y, x)))\n", "m.scroll_wheel_zoom = True\n", "m" ] }, { "cell_type": "markdown", "id": "361ca65f-a6e4-4418-99f7-274f8ba9fa7a", "metadata": {}, "source": [ "Now let's examine the timeseries for that particular `feature_id`.\n", "\n", "With `dask.dataframe.read_parquet` and pyarrow, we can supply a `filters` argument to efficiently filter the data based on the values, to avoid loading data we don't care about." ] }, { "cell_type": "code", "execution_count": 8, "id": "0cac3c85-e267-463e-be69-0584c932599f", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
Dask DataFrame Structure:
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
inflowoutflowwater_sfc_elev
npartitions=21
2021-08-26 01:00:00float64float64float32
2021-09-01 01:00:00.........
............
2023-04-01 01:00:00.........
2023-04-18 23:00:00.........
\n", "
\n", "
Dask Name: read-parquet, 1 graph layer
" ], "text/plain": [ "Dask DataFrame Structure:\n", " inflow outflow water_sfc_elev\n", "npartitions=21 \n", "2021-08-26 01:00:00 float64 float64 float32\n", "2021-09-01 01:00:00 ... ... ...\n", "... ... ... ...\n", "2023-04-01 01:00:00 ... ... ...\n", "2023-04-18 23:00:00 ... ... ...\n", "Dask Name: read-parquet, 1 graph layer" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts = df = dd.read_parquet(\n", " \"az://ciroh/short-range-reservoir.parquet/\",\n", " storage_options={\"account_name\": \"noaanwm\"},\n", " calculate_divisions=True,\n", " filters=[(\"feature_id\", \"=\", feature_id)],\n", " columns=[\"inflow\", \"outflow\", \"water_sfc_elev\"],\n", ")\n", "ts" ] }, { "cell_type": "code", "execution_count": 9, "id": "ba3bdd53-b48c-4e1b-b1ed-a7b7bdd72165", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 5.17 s, sys: 1.82 s, total: 6.98 s\n", "Wall time: 4.13 s\n" ] } ], "source": [ "%time ts = ts.compute()" ] }, { "cell_type": "code", "execution_count": 10, "id": "0ea6102d-d8cf-4bff-b53b-38f65d5b7a27", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "13236" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(ts)" ] }, { "cell_type": "code", "execution_count": 11, "id": "3a1f1b21-ab40-4d7d-b4e6-9e52b35319f1", "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ts.plot(subplots=True);" ] }, { "cell_type": "markdown", "id": "03715c80-1e0f-4a1f-a1fb-f06c32e6a420", "metadata": {}, "source": [ "## Exercise: Explore more\n", "\n", "Spend some more time exploring this dataset. The next two cells get the locations where these measurements are taken.\n", "\n", "Consider fusing this data with precipitation data from the [noaa-mrms-qpe](https://planetarycomputer.microsoft.com/dataset/noaa-mrms-qpe-24h-pass2) collection, or other products from the [National Water Model](https://planetarycomputer.microsoft.com/dataset/storage/noaa-nwm)." ] }, { "cell_type": "code", "execution_count": 12, "id": "82be9213-c5c2-400c-bd5e-e67ef456ea25", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "feature_id\n", "491 POINT (-68.37904 46.18327)\n", "531 POINT (-68.45489 46.16116)\n", "747 POINT (-68.06499 46.03409)\n", "759 POINT (-68.16213 46.02238)\n", "1581 POINT (-67.93720 45.64844)\n", "Name: geometry, dtype: geometry" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "points = xs.groupby(\"feature_id\").geometry.first().set_crs(\"epsg:4326\")\n", "points.head()" ] }, { "cell_type": "code", "execution_count": 13, "id": "ffb2a1c8-5a03-4874-800f-09764a1cd99f", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Limit to 1,000 to avoid plotting too many points.\n", "# You can filter spatially with .cx, or look at other subsets\n", "points.head(1000).reset_index().explore()" ] } ], "metadata": { "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.10.10" } }, "nbformat": 4, "nbformat_minor": 5 }