Skip to content

Instantly share code, notes, and snippets.

@cboettig
Last active April 4, 2025 18:57
Show Gist options
  • Save cboettig/9689e7a4805c39f863efbb379be1ba54 to your computer and use it in GitHub Desktop.
Save cboettig/9689e7a4805c39f863efbb379be1ba54 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "0fe188b5-3a99-4c34-bc2a-882f2ba7ac75",
"metadata": {},
"source": [
"# Zarr + Xarray vs. DuckDB and Parquet\n",
"\n",
"## Initialize Connections\n",
"\n",
"For these benchmarks, we exclude the initial scanning of the file, which has a one-time cost compared to subsequent queries.\n",
"The assumption here is that the same dataset object will be used repeatedly for multiple queries."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "566e1a28-d28d-4e31-9c07-82470c4d159c",
"metadata": {},
"outputs": [],
"source": [
"import xarray as xr\n",
"import icechunk as ic\n",
"import duckdb\n",
"import zarr\n",
"import os\n",
"\n",
"os.environ[\"AWS_ACCESS_KEY_ID\"] = \"\"\n",
"os.environ[\"AWS_SECRET_ACCESS_KEY\"] = \"\"\n",
"os.environ[\"AWS_S3_ENDPOINT\"] = \"\"\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "ffc76af4-8342-4205-91f5-1d78e1c35bcd",
"metadata": {},
"outputs": [],
"source": [
"duckdb.sql(\"INSTALL spatial; LOAD spatial;\")\n",
"duckdb.sql(\"INSTALL httpfs; LOAD httpfs;\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "4da89a5d-e56b-4d13-a478-6023260c78d1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<donfig.config_obj.ConfigSet at 0x7aef66147320>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# make sure Zarr uses all threads on this EC2 instance\n",
"# (DuckDB does this automatically)\n",
"zarr.config.set(\n",
" {\n",
" 'threading.max_workers': 16,\n",
" 'async.concurrency': 32\n",
" }\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "dc4260f1-a5dc-4a5d-83a5-00f1e9cce875",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.12/site-packages/numcodecs/zarr3.py:169: UserWarning: Numcodecs codecs are not in the Zarr version 3 specification and may not be supported by other zarr implementations.\n",
" super().__init__(**codec_config)\n",
"/opt/conda/lib/python3.12/site-packages/numcodecs/zarr3.py:169: UserWarning: Numcodecs codecs are not in the Zarr version 3 specification and may not be supported by other zarr implementations.\n",
" super().__init__(**codec_config)\n",
"/opt/conda/lib/python3.12/site-packages/numcodecs/zarr3.py:169: UserWarning: Numcodecs codecs are not in the Zarr version 3 specification and may not be supported by other zarr implementations.\n",
" super().__init__(**codec_config)\n",
"/opt/conda/lib/python3.12/site-packages/numcodecs/zarr3.py:169: UserWarning: Numcodecs codecs are not in the Zarr version 3 specification and may not be supported by other zarr implementations.\n",
" super().__init__(**codec_config)\n",
"/opt/conda/lib/python3.12/site-packages/numcodecs/zarr3.py:169: UserWarning: Numcodecs codecs are not in the Zarr version 3 specification and may not be supported by other zarr implementations.\n",
" super().__init__(**codec_config)\n"
]
},
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=\"dark\"],\n",
"html[data-theme=\"dark\"],\n",
"body[data-theme=\"dark\"],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1f1f1f;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block !important;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 0 20px 0 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: inline-block;\n",
" opacity: 0;\n",
" height: 0;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:focus + label {\n",
" border: 2px solid var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: \"►\";\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: \"▼\";\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: \"(\";\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: \")\";\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: \",\";\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-index-name div,\n",
".xr-index-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.Dataset&gt; Size: 4GB\n",
"Dimensions: (longitude: 1440, latitude: 721, valid_time: 209)\n",
"Coordinates:\n",
" time datetime64[ns] 8B ...\n",
" * latitude (latitude) float64 6kB 90.0 89.75 89.5 ... -89.5 -89.75 -90.0\n",
" * longitude (longitude) float64 12kB 0.0 0.25 0.5 0.75 ... -0.75 -0.5 -0.25\n",
" * valid_time (valid_time) datetime64[ns] 2kB 2024-05-13 ... 2024-05-29\n",
"Data variables:\n",
" r2 (longitude, latitude, valid_time) float32 868MB ...\n",
" t2m (longitude, latitude, valid_time) float32 868MB ...\n",
" prate (longitude, latitude, valid_time) float32 868MB ...\n",
" gust (longitude, latitude, valid_time) float32 868MB ...\n",
" tcc (longitude, latitude, valid_time) float32 868MB ...\n",
"Attributes:\n",
" description: GFS data ingested for forecasting demo</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-ab03b846-f1e1-4d76-826a-4e35568f70e9' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-ab03b846-f1e1-4d76-826a-4e35568f70e9' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>longitude</span>: 1440</li><li><span class='xr-has-index'>latitude</span>: 721</li><li><span class='xr-has-index'>valid_time</span>: 209</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-9799e779-e60c-4383-89b6-51d76b7c1183' class='xr-section-summary-in' type='checkbox' checked><label for='section-9799e779-e60c-4383-89b6-51d76b7c1183' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>time</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-bac6ea4d-ce41-4e9d-9ece-2dae79ad9855' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-bac6ea4d-ce41-4e9d-9ece-2dae79ad9855' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a92582b5-f79c-4297-8e22-c03fb424c59a' class='xr-var-data-in' type='checkbox'><label for='data-a92582b5-f79c-4297-8e22-c03fb424c59a' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>T</dd><dt><span>standard_name :</span></dt><dd>forecast_reference_time</dd></dl></div><div class='xr-var-data'><pre>[1 values with dtype=datetime64[ns]]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>latitude</span></div><div class='xr-var-dims'>(latitude)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>90.0 89.75 89.5 ... -89.75 -90.0</div><input id='attrs-780b33a0-7c36-4f97-b0c9-d2784401cfe1' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-780b33a0-7c36-4f97-b0c9-d2784401cfe1' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-91ffeabc-5a17-459d-a78f-023348fcdd9f' class='xr-var-data-in' type='checkbox'><label for='data-91ffeabc-5a17-459d-a78f-023348fcdd9f' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>Y</dd><dt><span>standard_name :</span></dt><dd>latitude</dd><dt><span>units :</span></dt><dd>degrees_north</dd></dl></div><div class='xr-var-data'><pre>array([ 90. , 89.75, 89.5 , ..., -89.5 , -89.75, -90. ])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>longitude</span></div><div class='xr-var-dims'>(longitude)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>0.0 0.25 0.5 ... -0.75 -0.5 -0.25</div><input id='attrs-dcda33cd-eca7-4007-9a5b-de2225c89cb6' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-dcda33cd-eca7-4007-9a5b-de2225c89cb6' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-9f1e1105-3ca5-4b4a-b220-db7bf26855aa' class='xr-var-data-in' type='checkbox'><label for='data-9f1e1105-3ca5-4b4a-b220-db7bf26855aa' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0. , 0.25, 0.5 , ..., -0.75, -0.5 , -0.25])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>valid_time</span></div><div class='xr-var-dims'>(valid_time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>2024-05-13 ... 2024-05-29</div><input id='attrs-461ce969-477f-4f6d-81d2-2b9791019af6' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-461ce969-477f-4f6d-81d2-2b9791019af6' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-76fbdd74-8f6c-4f6a-adf2-a6aeea195106' class='xr-var-data-in' type='checkbox'><label for='data-76fbdd74-8f6c-4f6a-adf2-a6aeea195106' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;2024-05-13T00:00:00.000000000&#x27;, &#x27;2024-05-13T01:00:00.000000000&#x27;,\n",
" &#x27;2024-05-13T02:00:00.000000000&#x27;, ..., &#x27;2024-05-28T18:00:00.000000000&#x27;,\n",
" &#x27;2024-05-28T21:00:00.000000000&#x27;, &#x27;2024-05-29T00:00:00.000000000&#x27;],\n",
" dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-093c1259-eb9a-4c9f-80c7-a0ef7de405f6' class='xr-section-summary-in' type='checkbox' checked><label for='section-093c1259-eb9a-4c9f-80c7-a0ef7de405f6' class='xr-section-summary' >Data variables: <span>(5)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>r2</span></div><div class='xr-var-dims'>(longitude, latitude, valid_time)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-255306e3-067f-4cd3-ae46-6e9c7e99c50f' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-255306e3-067f-4cd3-ae46-6e9c7e99c50f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-9c120b74-7912-4995-a5f4-d9d985a8eea2' class='xr-var-data-in' type='checkbox'><label for='data-9c120b74-7912-4995-a5f4-d9d985a8eea2' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>GRIB_NV :</span></dt><dd>0</dd><dt><span>GRIB_Nx :</span></dt><dd>1440</dd><dt><span>GRIB_Ny :</span></dt><dd>721</dd><dt><span>GRIB_cfName :</span></dt><dd>relative_humidity</dd><dt><span>GRIB_cfVarName :</span></dt><dd>r2</dd><dt><span>GRIB_dataType :</span></dt><dd>fc</dd><dt><span>GRIB_gridDefinitionDescription :</span></dt><dd>Latitude/longitude. Also called equidistant cylindrical, or Plate Carree</dd><dt><span>GRIB_gridType :</span></dt><dd>regular_ll</dd><dt><span>GRIB_iDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_iScansNegatively :</span></dt><dd>0</dd><dt><span>GRIB_jDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_jPointsAreConsecutive :</span></dt><dd>0</dd><dt><span>GRIB_jScansPositively :</span></dt><dd>0</dd><dt><span>GRIB_latitudeOfFirstGridPointInDegrees :</span></dt><dd>90.0</dd><dt><span>GRIB_latitudeOfLastGridPointInDegrees :</span></dt><dd>-90.0</dd><dt><span>GRIB_longitudeOfFirstGridPointInDegrees :</span></dt><dd>0.0</dd><dt><span>GRIB_longitudeOfLastGridPointInDegrees :</span></dt><dd>359.75</dd><dt><span>GRIB_missingValue :</span></dt><dd>3.4028234663852886e+38</dd><dt><span>GRIB_name :</span></dt><dd>2 metre relative humidity</dd><dt><span>GRIB_numberOfPoints :</span></dt><dd>1038240</dd><dt><span>GRIB_paramId :</span></dt><dd>260242</dd><dt><span>GRIB_parameterName :</span></dt><dd>Relative humidity</dd><dt><span>GRIB_parameterUnits :</span></dt><dd>%</dd><dt><span>GRIB_shortName :</span></dt><dd>2r</dd><dt><span>GRIB_stepRange :</span></dt><dd>0</dd><dt><span>GRIB_stepType :</span></dt><dd>instant</dd><dt><span>GRIB_stepUnits :</span></dt><dd>1</dd><dt><span>GRIB_typeOfLevel :</span></dt><dd>heightAboveGround</dd><dt><span>GRIB_units :</span></dt><dd>%</dd><dt><span>grid_mapping :</span></dt><dd>gribfile_projection</dd><dt><span>long_name :</span></dt><dd>2 metre relative humidity</dd><dt><span>standard_name :</span></dt><dd>relative_humidity</dd><dt><span>units :</span></dt><dd>%</dd></dl></div><div class='xr-var-data'><pre>[216992160 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>t2m</span></div><div class='xr-var-dims'>(longitude, latitude, valid_time)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-3dfab6b1-0ac8-4d61-a0a2-30d0cdf21f93' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-3dfab6b1-0ac8-4d61-a0a2-30d0cdf21f93' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-77d1cd4c-7481-454a-a31d-3cedb9e6c9f2' class='xr-var-data-in' type='checkbox'><label for='data-77d1cd4c-7481-454a-a31d-3cedb9e6c9f2' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>GRIB_NV :</span></dt><dd>0</dd><dt><span>GRIB_Nx :</span></dt><dd>1440</dd><dt><span>GRIB_Ny :</span></dt><dd>721</dd><dt><span>GRIB_cfName :</span></dt><dd>air_temperature</dd><dt><span>GRIB_cfVarName :</span></dt><dd>t2m</dd><dt><span>GRIB_dataType :</span></dt><dd>fc</dd><dt><span>GRIB_gridDefinitionDescription :</span></dt><dd>Latitude/longitude. Also called equidistant cylindrical, or Plate Carree</dd><dt><span>GRIB_gridType :</span></dt><dd>regular_ll</dd><dt><span>GRIB_iDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_iScansNegatively :</span></dt><dd>0</dd><dt><span>GRIB_jDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_jPointsAreConsecutive :</span></dt><dd>0</dd><dt><span>GRIB_jScansPositively :</span></dt><dd>0</dd><dt><span>GRIB_latitudeOfFirstGridPointInDegrees :</span></dt><dd>90.0</dd><dt><span>GRIB_latitudeOfLastGridPointInDegrees :</span></dt><dd>-90.0</dd><dt><span>GRIB_longitudeOfFirstGridPointInDegrees :</span></dt><dd>0.0</dd><dt><span>GRIB_longitudeOfLastGridPointInDegrees :</span></dt><dd>359.75</dd><dt><span>GRIB_missingValue :</span></dt><dd>3.4028234663852886e+38</dd><dt><span>GRIB_name :</span></dt><dd>2 metre temperature</dd><dt><span>GRIB_numberOfPoints :</span></dt><dd>1038240</dd><dt><span>GRIB_paramId :</span></dt><dd>167</dd><dt><span>GRIB_parameterName :</span></dt><dd>Temperature</dd><dt><span>GRIB_parameterUnits :</span></dt><dd>K</dd><dt><span>GRIB_shortName :</span></dt><dd>2t</dd><dt><span>GRIB_stepRange :</span></dt><dd>0</dd><dt><span>GRIB_stepType :</span></dt><dd>instant</dd><dt><span>GRIB_stepUnits :</span></dt><dd>1</dd><dt><span>GRIB_typeOfLevel :</span></dt><dd>heightAboveGround</dd><dt><span>GRIB_units :</span></dt><dd>K</dd><dt><span>grid_mapping :</span></dt><dd>gribfile_projection</dd><dt><span>long_name :</span></dt><dd>2 metre temperature</dd><dt><span>standard_name :</span></dt><dd>air_temperature</dd><dt><span>units :</span></dt><dd>K</dd></dl></div><div class='xr-var-data'><pre>[216992160 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>prate</span></div><div class='xr-var-dims'>(longitude, latitude, valid_time)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-98825b77-5000-4843-a366-8cf4b7592349' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-98825b77-5000-4843-a366-8cf4b7592349' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-7a40f461-6ff9-44f7-ba3d-b44cd9c7ca2b' class='xr-var-data-in' type='checkbox'><label for='data-7a40f461-6ff9-44f7-ba3d-b44cd9c7ca2b' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>GRIB_NV :</span></dt><dd>0</dd><dt><span>GRIB_Nx :</span></dt><dd>1440</dd><dt><span>GRIB_Ny :</span></dt><dd>721</dd><dt><span>GRIB_cfName :</span></dt><dd>unknown</dd><dt><span>GRIB_cfVarName :</span></dt><dd>prate</dd><dt><span>GRIB_dataType :</span></dt><dd>fc</dd><dt><span>GRIB_gridDefinitionDescription :</span></dt><dd>Latitude/longitude. Also called equidistant cylindrical, or Plate Carree</dd><dt><span>GRIB_gridType :</span></dt><dd>regular_ll</dd><dt><span>GRIB_iDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_iScansNegatively :</span></dt><dd>0</dd><dt><span>GRIB_jDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_jPointsAreConsecutive :</span></dt><dd>0</dd><dt><span>GRIB_jScansPositively :</span></dt><dd>0</dd><dt><span>GRIB_latitudeOfFirstGridPointInDegrees :</span></dt><dd>90.0</dd><dt><span>GRIB_latitudeOfLastGridPointInDegrees :</span></dt><dd>-90.0</dd><dt><span>GRIB_longitudeOfFirstGridPointInDegrees :</span></dt><dd>0.0</dd><dt><span>GRIB_longitudeOfLastGridPointInDegrees :</span></dt><dd>359.75</dd><dt><span>GRIB_missingValue :</span></dt><dd>3.4028234663852886e+38</dd><dt><span>GRIB_name :</span></dt><dd>Precipitation rate</dd><dt><span>GRIB_numberOfPoints :</span></dt><dd>1038240</dd><dt><span>GRIB_paramId :</span></dt><dd>3059</dd><dt><span>GRIB_parameterName :</span></dt><dd>Precipitation rate</dd><dt><span>GRIB_parameterUnits :</span></dt><dd>kg m-2 s-1</dd><dt><span>GRIB_shortName :</span></dt><dd>prate</dd><dt><span>GRIB_stepRange :</span></dt><dd>0</dd><dt><span>GRIB_stepType :</span></dt><dd>instant</dd><dt><span>GRIB_stepUnits :</span></dt><dd>1</dd><dt><span>GRIB_typeOfLevel :</span></dt><dd>surface</dd><dt><span>GRIB_units :</span></dt><dd>kg m**-2 s**-1</dd><dt><span>grid_mapping :</span></dt><dd>gribfile_projection</dd><dt><span>long_name :</span></dt><dd>Precipitation rate</dd><dt><span>standard_name :</span></dt><dd>unknown</dd><dt><span>units :</span></dt><dd>kg m**-2 s**-1</dd></dl></div><div class='xr-var-data'><pre>[216992160 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>gust</span></div><div class='xr-var-dims'>(longitude, latitude, valid_time)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-1b8cfb71-801a-437f-a8e9-e667b870bd77' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-1b8cfb71-801a-437f-a8e9-e667b870bd77' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a8f6a70e-1eb9-44b7-9a84-d059869a431b' class='xr-var-data-in' type='checkbox'><label for='data-a8f6a70e-1eb9-44b7-9a84-d059869a431b' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>GRIB_NV :</span></dt><dd>0</dd><dt><span>GRIB_Nx :</span></dt><dd>1440</dd><dt><span>GRIB_Ny :</span></dt><dd>721</dd><dt><span>GRIB_cfName :</span></dt><dd>unknown</dd><dt><span>GRIB_cfVarName :</span></dt><dd>gust</dd><dt><span>GRIB_dataType :</span></dt><dd>fc</dd><dt><span>GRIB_gridDefinitionDescription :</span></dt><dd>Latitude/longitude. Also called equidistant cylindrical, or Plate Carree</dd><dt><span>GRIB_gridType :</span></dt><dd>regular_ll</dd><dt><span>GRIB_iDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_iScansNegatively :</span></dt><dd>0</dd><dt><span>GRIB_jDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_jPointsAreConsecutive :</span></dt><dd>0</dd><dt><span>GRIB_jScansPositively :</span></dt><dd>0</dd><dt><span>GRIB_latitudeOfFirstGridPointInDegrees :</span></dt><dd>90.0</dd><dt><span>GRIB_latitudeOfLastGridPointInDegrees :</span></dt><dd>-90.0</dd><dt><span>GRIB_longitudeOfFirstGridPointInDegrees :</span></dt><dd>0.0</dd><dt><span>GRIB_longitudeOfLastGridPointInDegrees :</span></dt><dd>359.75</dd><dt><span>GRIB_missingValue :</span></dt><dd>3.4028234663852886e+38</dd><dt><span>GRIB_name :</span></dt><dd>Wind speed (gust)</dd><dt><span>GRIB_numberOfPoints :</span></dt><dd>1038240</dd><dt><span>GRIB_paramId :</span></dt><dd>260065</dd><dt><span>GRIB_parameterName :</span></dt><dd>Wind speed (gust)</dd><dt><span>GRIB_parameterUnits :</span></dt><dd>m s-1</dd><dt><span>GRIB_shortName :</span></dt><dd>gust</dd><dt><span>GRIB_stepRange :</span></dt><dd>0</dd><dt><span>GRIB_stepType :</span></dt><dd>instant</dd><dt><span>GRIB_stepUnits :</span></dt><dd>1</dd><dt><span>GRIB_typeOfLevel :</span></dt><dd>surface</dd><dt><span>GRIB_units :</span></dt><dd>m s**-1</dd><dt><span>grid_mapping :</span></dt><dd>gribfile_projection</dd><dt><span>long_name :</span></dt><dd>Wind speed (gust)</dd><dt><span>standard_name :</span></dt><dd>unknown</dd><dt><span>units :</span></dt><dd>m s**-1</dd></dl></div><div class='xr-var-data'><pre>[216992160 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>tcc</span></div><div class='xr-var-dims'>(longitude, latitude, valid_time)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-588a558b-496e-4909-8ff5-9b7f2c322bcc' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-588a558b-496e-4909-8ff5-9b7f2c322bcc' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-d28c6f69-feb4-4e96-a5db-bae0b497aa73' class='xr-var-data-in' type='checkbox'><label for='data-d28c6f69-feb4-4e96-a5db-bae0b497aa73' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>GRIB_NV :</span></dt><dd>0</dd><dt><span>GRIB_Nx :</span></dt><dd>1440</dd><dt><span>GRIB_Ny :</span></dt><dd>721</dd><dt><span>GRIB_cfName :</span></dt><dd>unknown</dd><dt><span>GRIB_cfVarName :</span></dt><dd>unknown</dd><dt><span>GRIB_dataType :</span></dt><dd>fc</dd><dt><span>GRIB_gridDefinitionDescription :</span></dt><dd>Latitude/longitude. Also called equidistant cylindrical, or Plate Carree</dd><dt><span>GRIB_gridType :</span></dt><dd>regular_ll</dd><dt><span>GRIB_iDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_iScansNegatively :</span></dt><dd>0</dd><dt><span>GRIB_jDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_jPointsAreConsecutive :</span></dt><dd>0</dd><dt><span>GRIB_jScansPositively :</span></dt><dd>0</dd><dt><span>GRIB_latitudeOfFirstGridPointInDegrees :</span></dt><dd>90.0</dd><dt><span>GRIB_latitudeOfLastGridPointInDegrees :</span></dt><dd>-90.0</dd><dt><span>GRIB_longitudeOfFirstGridPointInDegrees :</span></dt><dd>0.0</dd><dt><span>GRIB_longitudeOfLastGridPointInDegrees :</span></dt><dd>359.75</dd><dt><span>GRIB_missingValue :</span></dt><dd>3.4028234663852886e+38</dd><dt><span>GRIB_name :</span></dt><dd>Total Cloud Cover</dd><dt><span>GRIB_numberOfPoints :</span></dt><dd>1038240</dd><dt><span>GRIB_paramId :</span></dt><dd>228164</dd><dt><span>GRIB_parameterName :</span></dt><dd>Total cloud cover</dd><dt><span>GRIB_parameterUnits :</span></dt><dd>%</dd><dt><span>GRIB_shortName :</span></dt><dd>tcc</dd><dt><span>GRIB_stepRange :</span></dt><dd>0</dd><dt><span>GRIB_stepType :</span></dt><dd>instant</dd><dt><span>GRIB_stepUnits :</span></dt><dd>1</dd><dt><span>GRIB_typeOfLevel :</span></dt><dd>atmosphere</dd><dt><span>GRIB_units :</span></dt><dd>%</dd><dt><span>grid_mapping :</span></dt><dd>gribfile_projection</dd><dt><span>long_name :</span></dt><dd>Total Cloud Cover</dd><dt><span>standard_name :</span></dt><dd>unknown</dd><dt><span>units :</span></dt><dd>%</dd></dl></div><div class='xr-var-data'><pre>[216992160 values with dtype=float32]</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-fa565a62-79dd-4473-8cb6-137a9a8c2ba5' class='xr-section-summary-in' type='checkbox' ><label for='section-fa565a62-79dd-4473-8cb6-137a9a8c2ba5' class='xr-section-summary' >Indexes: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>latitude</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-bb681115-cebb-4f32-8a1a-c2357290a59d' class='xr-index-data-in' type='checkbox'/><label for='index-bb681115-cebb-4f32-8a1a-c2357290a59d' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([ 90.0, 89.75, 89.5, 89.25, 89.0, 88.75, 88.5, 88.25, 88.0,\n",
" 87.75,\n",
" ...\n",
" -87.75, -88.0, -88.25, -88.5, -88.75, -89.0, -89.25, -89.5, -89.75,\n",
" -90.0],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;latitude&#x27;, length=721))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>longitude</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-fb37f2d3-1ae4-45e3-9889-2efab15af30b' class='xr-index-data-in' type='checkbox'/><label for='index-fb37f2d3-1ae4-45e3-9889-2efab15af30b' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([ 0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25,\n",
" ...\n",
" -2.5, -2.25, -2.0, -1.75, -1.5, -1.25, -1.0, -0.75, -0.5, -0.25],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;longitude&#x27;, length=1440))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>valid_time</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-a34f86ed-385b-4df2-81ea-d948963ef49c' class='xr-index-data-in' type='checkbox'/><label for='index-a34f86ed-385b-4df2-81ea-d948963ef49c' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(DatetimeIndex([&#x27;2024-05-13 00:00:00&#x27;, &#x27;2024-05-13 01:00:00&#x27;,\n",
" &#x27;2024-05-13 02:00:00&#x27;, &#x27;2024-05-13 03:00:00&#x27;,\n",
" &#x27;2024-05-13 04:00:00&#x27;, &#x27;2024-05-13 05:00:00&#x27;,\n",
" &#x27;2024-05-13 06:00:00&#x27;, &#x27;2024-05-13 07:00:00&#x27;,\n",
" &#x27;2024-05-13 08:00:00&#x27;, &#x27;2024-05-13 09:00:00&#x27;,\n",
" ...\n",
" &#x27;2024-05-27 21:00:00&#x27;, &#x27;2024-05-28 00:00:00&#x27;,\n",
" &#x27;2024-05-28 03:00:00&#x27;, &#x27;2024-05-28 06:00:00&#x27;,\n",
" &#x27;2024-05-28 09:00:00&#x27;, &#x27;2024-05-28 12:00:00&#x27;,\n",
" &#x27;2024-05-28 15:00:00&#x27;, &#x27;2024-05-28 18:00:00&#x27;,\n",
" &#x27;2024-05-28 21:00:00&#x27;, &#x27;2024-05-29 00:00:00&#x27;],\n",
" dtype=&#x27;datetime64[ns]&#x27;, name=&#x27;valid_time&#x27;, length=209, freq=None))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-40875c3e-d64a-4fa6-bd84-40c3336bcfe0' class='xr-section-summary-in' type='checkbox' checked><label for='section-40875c3e-d64a-4fa6-bd84-40c3336bcfe0' class='xr-section-summary' >Attributes: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>description :</span></dt><dd>GFS data ingested for forecasting demo</dd></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.Dataset> Size: 4GB\n",
"Dimensions: (longitude: 1440, latitude: 721, valid_time: 209)\n",
"Coordinates:\n",
" time datetime64[ns] 8B ...\n",
" * latitude (latitude) float64 6kB 90.0 89.75 89.5 ... -89.5 -89.75 -90.0\n",
" * longitude (longitude) float64 12kB 0.0 0.25 0.5 0.75 ... -0.75 -0.5 -0.25\n",
" * valid_time (valid_time) datetime64[ns] 2kB 2024-05-13 ... 2024-05-29\n",
"Data variables:\n",
" r2 (longitude, latitude, valid_time) float32 868MB ...\n",
" t2m (longitude, latitude, valid_time) float32 868MB ...\n",
" prate (longitude, latitude, valid_time) float32 868MB ...\n",
" gust (longitude, latitude, valid_time) float32 868MB ...\n",
" tcc (longitude, latitude, valid_time) float32 868MB ...\n",
"Attributes:\n",
" description: GFS data ingested for forecasting demo"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"storage = ic.s3_storage(\n",
" bucket=\"earthmover-sample-data\",\n",
" prefix=\"icechunk/gfs/solar/2024-05-13T00:00:00-pcodec\",\n",
" anonymous=True,\n",
" region=\"us-east-1\"\n",
")\n",
"repo = ic.Repository.open(storage)\n",
"session = repo.readonly_session(\"main\")\n",
"store = session.store\n",
"ds_ic = xr.open_dataset(session.store, engine=xr.backends.ZarrBackendEntrypoint, zarr_format=3, consolidated=False, chunks=None);\n",
"ds_ic"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "a8042ebc-5677-4001-a28f-f39431c596e8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"┌─────────────────────┬───────────┬───────────┬───────┬───────────┬───────┬─────────────────────┬─────────────────┐\n",
"│ valid_time │ gust │ prate │ r2 │ t2m │ tcc │ time │ geometry │\n",
"│ timestamp_ns │ float │ float │ float │ float │ float │ timestamp_ns │ geometry │\n",
"├─────────────────────┼───────────┼───────────┼───────┼───────────┼───────┼─────────────────────┼─────────────────┤\n",
"│ 2024-05-12 18:00:00 │ 6.2033625 │ 1.04e-05 │ 86.0 │ 269.8426 │ 100.0 │ 2024-05-12 18:00:00 │ POINT (0 90) │\n",
"│ 2024-05-12 19:00:00 │ 6.300296 │ 7.2e-06 │ 86.3 │ 269.8121 │ 100.0 │ 2024-05-12 18:00:00 │ POINT (0 90) │\n",
"│ 2024-05-12 20:00:00 │ 6.4174957 │ 4e-06 │ 83.8 │ 269.86224 │ 100.0 │ 2024-05-12 18:00:00 │ POINT (0 90) │\n",
"│ 2024-05-12 21:00:00 │ 6.4212985 │ 4e-06 │ 81.2 │ 270.0631 │ 98.0 │ 2024-05-12 18:00:00 │ POINT (0 90) │\n",
"│ 2024-05-12 22:00:00 │ 7.029407 │ 1.6e-06 │ 84.3 │ 269.76135 │ 49.0 │ 2024-05-12 18:00:00 │ POINT (0 90) │\n",
"│ 2024-05-12 23:00:00 │ 7.701468 │ 0.0 │ 90.6 │ 268.10004 │ 5.0 │ 2024-05-12 18:00:00 │ POINT (0 90) │\n",
"│ 2024-05-13 00:00:00 │ 7.325299 │ 0.0 │ 92.8 │ 266.83868 │ 5.8 │ 2024-05-12 18:00:00 │ POINT (0 90) │\n",
"│ 2024-05-13 01:00:00 │ 7.016412 │ 0.0 │ 94.2 │ 266.1 │ 6.5 │ 2024-05-12 18:00:00 │ POINT (0 90) │\n",
"│ 2024-05-13 02:00:00 │ 6.9108753 │ 0.0 │ 94.6 │ 265.53864 │ 6.4 │ 2024-05-12 18:00:00 │ POINT (0 90) │\n",
"│ 2024-05-13 03:00:00 │ 6.7239223 │ 0.0 │ 94.3 │ 265.25797 │ 61.9 │ 2024-05-12 18:00:00 │ POINT (0 90) │\n",
"│ · │ · │ · │ · │ · │ · │ · │ · │\n",
"│ · │ · │ · │ · │ · │ · │ · │ · │\n",
"│ · │ · │ · │ · │ · │ · │ · │ · │\n",
"│ 2024-05-23 15:00:00 │ 1.6156534 │ 0.0 │ 72.0 │ 274.242 │ 95.3 │ 2024-05-12 18:00:00 │ POINT (0 78.25) │\n",
"│ 2024-05-23 18:00:00 │ 1.810498 │ 0.0 │ 70.9 │ 274.34473 │ 81.7 │ 2024-05-12 18:00:00 │ POINT (0 78.25) │\n",
"│ 2024-05-23 21:00:00 │ 1.817041 │ 0.0 │ 75.2 │ 274.463 │ 100.0 │ 2024-05-12 18:00:00 │ POINT (0 78.25) │\n",
"│ 2024-05-24 00:00:00 │ 3.6031995 │ 0.0 │ 80.3 │ 274.15198 │ 100.0 │ 2024-05-12 18:00:00 │ POINT (0 78.25) │\n",
"│ 2024-05-24 03:00:00 │ 4.6 │ 4.16e-05 │ 94.3 │ 273.60516 │ 100.0 │ 2024-05-12 18:00:00 │ POINT (0 78.25) │\n",
"│ 2024-05-24 06:00:00 │ 6.7025695 │ 5.6e-06 │ 98.5 │ 274.14844 │ 100.0 │ 2024-05-12 18:00:00 │ POINT (0 78.25) │\n",
"│ 2024-05-24 09:00:00 │ 9.019824 │ 0.000108 │ 98.7 │ 274.59375 │ 100.0 │ 2024-05-12 18:00:00 │ POINT (0 78.25) │\n",
"│ 2024-05-24 12:00:00 │ 9.310799 │ 0.0001112 │ 98.9 │ 274.8121 │ 100.0 │ 2024-05-12 18:00:00 │ POINT (0 78.25) │\n",
"│ 2024-05-24 15:00:00 │ 6.5135336 │ 6.4e-06 │ 98.9 │ 274.46054 │ 100.0 │ 2024-05-12 18:00:00 │ POINT (0 78.25) │\n",
"│ 2024-05-24 18:00:00 │ 7.72677 │ 2.56e-05 │ 98.8 │ 274.40518 │ 100.0 │ 2024-05-12 18:00:00 │ POINT (0 78.25) │\n",
"├─────────────────────┴───────────┴───────────┴───────┴───────────┴───────┴─────────────────────┴─────────────────┤\n",
"│ ? rows (>9999 rows, 20 shown) 8 columns │\n",
"└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pq_fname = \"s3://earthmover-sample-data/parquet/gfs/solar/2024-05-12T18:00:00.geoparquet\"\n",
"rel = duckdb.read_parquet(pq_fname) \n",
"rel"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "536f8aa1-ad2a-416e-a321-b3fbbf3e04d4",
"metadata": {},
"outputs": [],
"source": [
"rel2 = duckdb.read_parquet(\"s3://earthmover-sample-data/parquet/gfs/solar/2024-05-13T00:00:00.geoparquet\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "63c0da63-0e5b-461b-9a36-a495777ac3d1",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">DatabaseTable: ibis_read_parquet_4ankggropfdhtcmksdtvsuu3sq\n",
" longitude float64\n",
" latitude float64\n",
" valid_time timestamp(9)\n",
" gust float32\n",
" t2m float32\n",
" r2 float32\n",
" prate float32\n",
" tcc float32\n",
" time timestamp(9)\n",
" geometry binary\n",
"</pre>\n"
],
"text/plain": [
"DatabaseTable: ibis_read_parquet_4ankggropfdhtcmksdtvsuu3sq\n",
" longitude float64\n",
" latitude float64\n",
" valid_time timestamp(9)\n",
" gust float32\n",
" t2m float32\n",
" r2 float32\n",
" prate float32\n",
" tcc float32\n",
" time timestamp(9)\n",
" geometry binary"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import ibis\n",
"con = ibis.duckdb.connect()\n",
"\n",
"con.read_parquet(\"s3://earthmover-sample-data/parquet/gfs/solar/2024-05-13T00:00:00.geoparquet\")"
]
},
{
"cell_type": "markdown",
"id": "b2a2f8b0-4e8d-448d-9ad6-85ff9a6e4cef",
"metadata": {},
"source": [
"## Temporal Query"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "318c6212-9289-4d8c-af1c-95af5c834606",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 36.2 ms, sys: 17.1 ms, total: 53.4 ms\n",
"Wall time: 1.83 s\n"
]
}
],
"source": [
"%%time\n",
"df = rel.query(\"forecast_data\",\n",
" \"\"\"\n",
" SELECT valid_time, t2m\n",
" FROM forecast_data\n",
" WHERE geometry=ST_Point(-105, 40)\n",
" \"\"\"\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "59b18de7-5955-4de0-8529-1442af8550c8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 1.06 s, sys: 108 ms, total: 1.17 s\n",
"Wall time: 3.54 s\n"
]
}
],
"source": [
"%%time\n",
"df = rel2.query(\"forecast_data\",\n",
" \"\"\"\n",
" SELECT valid_time, t2m\n",
" FROM forecast_data\n",
" WHERE longitude = -105 AND latitude = 40\n",
" \"\"\"\n",
").df()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "65b62df7-7079-4ca8-99c0-450cd0aea2cc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 2.64 s, sys: 237 ms, total: 2.88 s\n",
"Wall time: 4.27 s\n"
]
}
],
"source": [
"%%time\n",
"df = rel2.query(\"forecast_data\",\n",
" \"\"\"\n",
" SELECT valid_time, t2m\n",
" FROM forecast_data\n",
" WHERE longitude BETWEEN -80 AND -60 AND latitude BETWEEN 30 AND 40 \n",
" \"\"\"\n",
").df()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "ae3b3d00-85a0-4183-a329-c566ecd56fa8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 1.21 s, sys: 486 ms, total: 1.69 s\n",
"Wall time: 3.66 s\n"
]
},
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=\"dark\"],\n",
"html[data-theme=\"dark\"],\n",
"body[data-theme=\"dark\"],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1f1f1f;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block !important;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 0 20px 0 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: inline-block;\n",
" opacity: 0;\n",
" height: 0;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:focus + label {\n",
" border: 2px solid var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: \"►\";\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: \"▼\";\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: \"(\";\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: \")\";\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: \",\";\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-index-name div,\n",
".xr-index-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.Dataset&gt; Size: 14MB\n",
"Dimensions: (longitude: 81, latitude: 41, valid_time: 209)\n",
"Coordinates:\n",
" time datetime64[ns] 8B 2024-05-13\n",
" * latitude (latitude) float64 328B 40.0 39.75 39.5 ... 30.5 30.25 30.0\n",
" * longitude (longitude) float64 648B -120.0 -119.8 -119.5 ... -100.2 -100.0\n",
" * valid_time (valid_time) datetime64[ns] 2kB 2024-05-13 ... 2024-05-29\n",
"Data variables:\n",
" r2 (longitude, latitude, valid_time) float32 3MB 25.1 22.5 ... 25.2\n",
" t2m (longitude, latitude, valid_time) float32 3MB 295.4 ... 306.1\n",
" prate (longitude, latitude, valid_time) float32 3MB 0.0 0.0 ... 0.0\n",
" gust (longitude, latitude, valid_time) float32 3MB 5.005 ... 10.1\n",
" tcc (longitude, latitude, valid_time) float32 3MB 15.2 ... 61.4\n",
"Attributes:\n",
" description: GFS data ingested for forecasting demo</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-e3b339ff-96f0-4f21-bc77-5ef52c844f52' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-e3b339ff-96f0-4f21-bc77-5ef52c844f52' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>longitude</span>: 81</li><li><span class='xr-has-index'>latitude</span>: 41</li><li><span class='xr-has-index'>valid_time</span>: 209</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-28066850-ff17-4559-998f-780794323746' class='xr-section-summary-in' type='checkbox' checked><label for='section-28066850-ff17-4559-998f-780794323746' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>time</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>2024-05-13</div><input id='attrs-6bb72f30-c7fc-413b-877b-269ee380d810' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-6bb72f30-c7fc-413b-877b-269ee380d810' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-12751630-ae14-4270-a1df-e7c06df34d04' class='xr-var-data-in' type='checkbox'><label for='data-12751630-ae14-4270-a1df-e7c06df34d04' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>T</dd><dt><span>standard_name :</span></dt><dd>forecast_reference_time</dd></dl></div><div class='xr-var-data'><pre>array(&#x27;2024-05-13T00:00:00.000000000&#x27;, dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>latitude</span></div><div class='xr-var-dims'>(latitude)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>40.0 39.75 39.5 ... 30.5 30.25 30.0</div><input id='attrs-dd10638b-c4a1-41b3-b6b8-7880c3f8e34e' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-dd10638b-c4a1-41b3-b6b8-7880c3f8e34e' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-ea0b6e36-b13a-451b-af0a-5e9a606ee32b' class='xr-var-data-in' type='checkbox'><label for='data-ea0b6e36-b13a-451b-af0a-5e9a606ee32b' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>axis :</span></dt><dd>Y</dd><dt><span>standard_name :</span></dt><dd>latitude</dd><dt><span>units :</span></dt><dd>degrees_north</dd></dl></div><div class='xr-var-data'><pre>array([40. , 39.75, 39.5 , 39.25, 39. , 38.75, 38.5 , 38.25, 38. , 37.75,\n",
" 37.5 , 37.25, 37. , 36.75, 36.5 , 36.25, 36. , 35.75, 35.5 , 35.25,\n",
" 35. , 34.75, 34.5 , 34.25, 34. , 33.75, 33.5 , 33.25, 33. , 32.75,\n",
" 32.5 , 32.25, 32. , 31.75, 31.5 , 31.25, 31. , 30.75, 30.5 , 30.25,\n",
" 30. ])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>longitude</span></div><div class='xr-var-dims'>(longitude)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-120.0 -119.8 ... -100.2 -100.0</div><input id='attrs-ffd4e1fc-ab0a-4ce1-bd20-8249feeb51b8' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-ffd4e1fc-ab0a-4ce1-bd20-8249feeb51b8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-dbd9f719-93e8-4bff-bfb5-0810e3eb8bb8' class='xr-var-data-in' type='checkbox'><label for='data-dbd9f719-93e8-4bff-bfb5-0810e3eb8bb8' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([-120. , -119.75, -119.5 , -119.25, -119. , -118.75, -118.5 , -118.25,\n",
" -118. , -117.75, -117.5 , -117.25, -117. , -116.75, -116.5 , -116.25,\n",
" -116. , -115.75, -115.5 , -115.25, -115. , -114.75, -114.5 , -114.25,\n",
" -114. , -113.75, -113.5 , -113.25, -113. , -112.75, -112.5 , -112.25,\n",
" -112. , -111.75, -111.5 , -111.25, -111. , -110.75, -110.5 , -110.25,\n",
" -110. , -109.75, -109.5 , -109.25, -109. , -108.75, -108.5 , -108.25,\n",
" -108. , -107.75, -107.5 , -107.25, -107. , -106.75, -106.5 , -106.25,\n",
" -106. , -105.75, -105.5 , -105.25, -105. , -104.75, -104.5 , -104.25,\n",
" -104. , -103.75, -103.5 , -103.25, -103. , -102.75, -102.5 , -102.25,\n",
" -102. , -101.75, -101.5 , -101.25, -101. , -100.75, -100.5 , -100.25,\n",
" -100. ])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>valid_time</span></div><div class='xr-var-dims'>(valid_time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>2024-05-13 ... 2024-05-29</div><input id='attrs-06dd647f-63a1-40e4-86cd-02297c9d69e9' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-06dd647f-63a1-40e4-86cd-02297c9d69e9' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-1c70b596-1153-47a2-86a5-305de59420f7' class='xr-var-data-in' type='checkbox'><label for='data-1c70b596-1153-47a2-86a5-305de59420f7' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;2024-05-13T00:00:00.000000000&#x27;, &#x27;2024-05-13T01:00:00.000000000&#x27;,\n",
" &#x27;2024-05-13T02:00:00.000000000&#x27;, ..., &#x27;2024-05-28T18:00:00.000000000&#x27;,\n",
" &#x27;2024-05-28T21:00:00.000000000&#x27;, &#x27;2024-05-29T00:00:00.000000000&#x27;],\n",
" dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-8daf981b-6005-44be-a63a-bab075504f23' class='xr-section-summary-in' type='checkbox' checked><label for='section-8daf981b-6005-44be-a63a-bab075504f23' class='xr-section-summary' >Data variables: <span>(5)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>r2</span></div><div class='xr-var-dims'>(longitude, latitude, valid_time)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>25.1 22.5 27.7 ... 34.9 26.8 25.2</div><input id='attrs-4fc2c2f6-dce2-4db5-a8b5-878ad23802d1' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-4fc2c2f6-dce2-4db5-a8b5-878ad23802d1' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c0179fe9-e456-402c-a9f8-87150cac29b2' class='xr-var-data-in' type='checkbox'><label for='data-c0179fe9-e456-402c-a9f8-87150cac29b2' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>GRIB_NV :</span></dt><dd>0</dd><dt><span>GRIB_Nx :</span></dt><dd>1440</dd><dt><span>GRIB_Ny :</span></dt><dd>721</dd><dt><span>GRIB_cfName :</span></dt><dd>relative_humidity</dd><dt><span>GRIB_cfVarName :</span></dt><dd>r2</dd><dt><span>GRIB_dataType :</span></dt><dd>fc</dd><dt><span>GRIB_gridDefinitionDescription :</span></dt><dd>Latitude/longitude. Also called equidistant cylindrical, or Plate Carree</dd><dt><span>GRIB_gridType :</span></dt><dd>regular_ll</dd><dt><span>GRIB_iDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_iScansNegatively :</span></dt><dd>0</dd><dt><span>GRIB_jDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_jPointsAreConsecutive :</span></dt><dd>0</dd><dt><span>GRIB_jScansPositively :</span></dt><dd>0</dd><dt><span>GRIB_latitudeOfFirstGridPointInDegrees :</span></dt><dd>90.0</dd><dt><span>GRIB_latitudeOfLastGridPointInDegrees :</span></dt><dd>-90.0</dd><dt><span>GRIB_longitudeOfFirstGridPointInDegrees :</span></dt><dd>0.0</dd><dt><span>GRIB_longitudeOfLastGridPointInDegrees :</span></dt><dd>359.75</dd><dt><span>GRIB_missingValue :</span></dt><dd>3.4028234663852886e+38</dd><dt><span>GRIB_name :</span></dt><dd>2 metre relative humidity</dd><dt><span>GRIB_numberOfPoints :</span></dt><dd>1038240</dd><dt><span>GRIB_paramId :</span></dt><dd>260242</dd><dt><span>GRIB_parameterName :</span></dt><dd>Relative humidity</dd><dt><span>GRIB_parameterUnits :</span></dt><dd>%</dd><dt><span>GRIB_shortName :</span></dt><dd>2r</dd><dt><span>GRIB_stepRange :</span></dt><dd>0</dd><dt><span>GRIB_stepType :</span></dt><dd>instant</dd><dt><span>GRIB_stepUnits :</span></dt><dd>1</dd><dt><span>GRIB_typeOfLevel :</span></dt><dd>heightAboveGround</dd><dt><span>GRIB_units :</span></dt><dd>%</dd><dt><span>grid_mapping :</span></dt><dd>gribfile_projection</dd><dt><span>long_name :</span></dt><dd>2 metre relative humidity</dd><dt><span>standard_name :</span></dt><dd>relative_humidity</dd><dt><span>units :</span></dt><dd>%</dd></dl></div><div class='xr-var-data'><pre>array([[[25.1, 22.5, 27.7, ..., 40.9, 18. , 31.6],\n",
" [25. , 32.5, 36.1, ..., 32.3, 16.6, 24.9],\n",
" [28.1, 37. , 42.3, ..., 21.1, 16. , 18. ],\n",
" ...,\n",
" [86.4, 86.6, 87. , ..., 83.9, 84.1, 84.2],\n",
" [85.9, 86.2, 86.6, ..., 83.1, 83.9, 84. ],\n",
" [85.3, 85.7, 86.2, ..., 82.7, 83.5, 84. ]],\n",
"\n",
" [[22.8, 24.5, 26.5, ..., 40.6, 22.3, 27. ],\n",
" [22. , 28.1, 37.4, ..., 33.9, 18.9, 20.8],\n",
" [21.5, 22.2, 31.1, ..., 29.8, 15. , 12.7],\n",
" ...,\n",
" [86.4, 86.9, 87.1, ..., 84.1, 84.2, 84.5],\n",
" [86. , 86.2, 86.7, ..., 83.5, 83.9, 84.2],\n",
" [85.6, 85.9, 87.1, ..., 83.1, 83.6, 84.2]],\n",
"\n",
" [[37.5, 37.4, 31.3, ..., 60.4, 51. , 36.9],\n",
" [18.8, 22.1, 35.7, ..., 39.6, 20.4, 15. ],\n",
" [17. , 20.5, 32.5, ..., 34.9, 15.2, 13.4],\n",
" ...,\n",
"...\n",
" ...,\n",
" [52.4, 61.2, 68.4, ..., 35.5, 27.8, 27.2],\n",
" [45.5, 56.5, 66.5, ..., 38.1, 28.2, 27.2],\n",
" [46.7, 58.1, 66.6, ..., 40.6, 28.7, 26.5]],\n",
"\n",
" [[81.2, 84.7, 91.7, ..., 31.2, 30.2, 30.2],\n",
" [76.8, 82.1, 90.2, ..., 30.4, 29.5, 29.6],\n",
" [78.2, 81.3, 87.1, ..., 29.5, 26.9, 29.5],\n",
" ...,\n",
" [55.8, 66.4, 73.8, ..., 32.1, 26.1, 26.5],\n",
" [52.4, 63.5, 68. , ..., 34.9, 27.2, 26.5],\n",
" [48.7, 61.2, 65.4, ..., 38.1, 28.1, 26. ]],\n",
"\n",
" [[85. , 86.4, 93.5, ..., 31.6, 30.9, 31. ],\n",
" [82.6, 86.6, 93.8, ..., 30.5, 29.7, 31.3],\n",
" [76.5, 84.9, 89.1, ..., 29.1, 26. , 29.7],\n",
" ...,\n",
" [59.3, 69.7, 74.3, ..., 28.7, 24.1, 25.3],\n",
" [54.2, 66.9, 67.8, ..., 31.1, 25.2, 25. ],\n",
" [54.2, 64.8, 69.5, ..., 34.9, 26.8, 25.2]]], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>t2m</span></div><div class='xr-var-dims'>(longitude, latitude, valid_time)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>295.4 295.7 294.3 ... 306.7 306.1</div><input id='attrs-5dc9cf9a-a74c-4ff2-adf7-03e5e07952c1' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-5dc9cf9a-a74c-4ff2-adf7-03e5e07952c1' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-65ffb8a1-2309-4676-b122-df9faa8ddb6a' class='xr-var-data-in' type='checkbox'><label for='data-65ffb8a1-2309-4676-b122-df9faa8ddb6a' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>GRIB_NV :</span></dt><dd>0</dd><dt><span>GRIB_Nx :</span></dt><dd>1440</dd><dt><span>GRIB_Ny :</span></dt><dd>721</dd><dt><span>GRIB_cfName :</span></dt><dd>air_temperature</dd><dt><span>GRIB_cfVarName :</span></dt><dd>t2m</dd><dt><span>GRIB_dataType :</span></dt><dd>fc</dd><dt><span>GRIB_gridDefinitionDescription :</span></dt><dd>Latitude/longitude. Also called equidistant cylindrical, or Plate Carree</dd><dt><span>GRIB_gridType :</span></dt><dd>regular_ll</dd><dt><span>GRIB_iDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_iScansNegatively :</span></dt><dd>0</dd><dt><span>GRIB_jDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_jPointsAreConsecutive :</span></dt><dd>0</dd><dt><span>GRIB_jScansPositively :</span></dt><dd>0</dd><dt><span>GRIB_latitudeOfFirstGridPointInDegrees :</span></dt><dd>90.0</dd><dt><span>GRIB_latitudeOfLastGridPointInDegrees :</span></dt><dd>-90.0</dd><dt><span>GRIB_longitudeOfFirstGridPointInDegrees :</span></dt><dd>0.0</dd><dt><span>GRIB_longitudeOfLastGridPointInDegrees :</span></dt><dd>359.75</dd><dt><span>GRIB_missingValue :</span></dt><dd>3.4028234663852886e+38</dd><dt><span>GRIB_name :</span></dt><dd>2 metre temperature</dd><dt><span>GRIB_numberOfPoints :</span></dt><dd>1038240</dd><dt><span>GRIB_paramId :</span></dt><dd>167</dd><dt><span>GRIB_parameterName :</span></dt><dd>Temperature</dd><dt><span>GRIB_parameterUnits :</span></dt><dd>K</dd><dt><span>GRIB_shortName :</span></dt><dd>2t</dd><dt><span>GRIB_stepRange :</span></dt><dd>0</dd><dt><span>GRIB_stepType :</span></dt><dd>instant</dd><dt><span>GRIB_stepUnits :</span></dt><dd>1</dd><dt><span>GRIB_typeOfLevel :</span></dt><dd>heightAboveGround</dd><dt><span>GRIB_units :</span></dt><dd>K</dd><dt><span>grid_mapping :</span></dt><dd>gribfile_projection</dd><dt><span>long_name :</span></dt><dd>2 metre temperature</dd><dt><span>standard_name :</span></dt><dd>air_temperature</dd><dt><span>units :</span></dt><dd>K</dd></dl></div><div class='xr-var-data'><pre>array([[[295.35797, 295.6773 , 294.29666, ..., 290.17905, 294.64767,\n",
" 293.09076],\n",
" [294.85797, 292.87732, 292.19666, ..., 290.67905, 294.54767,\n",
" 294.19077],\n",
" [293.158 , 291.47733, 289.99664, ..., 291.27905, 294.04767,\n",
" 293.59076],\n",
" ...,\n",
" [289.35797, 289.2773 , 289.19666, ..., 288.77905, 289.04767,\n",
" 288.89075],\n",
" [289.45798, 289.37732, 289.29666, ..., 288.87903, 289.14767,\n",
" 289.09076],\n",
" [289.45798, 289.47733, 289.39667, ..., 288.87903, 289.14767,\n",
" 289.39075]],\n",
"\n",
" [[295.35797, 294.57733, 294.09665, ..., 290.27905, 293.54767,\n",
" 294.19077],\n",
" [295.95798, 294.57733, 291.99664, ..., 291.87903, 295.3477 ,\n",
" 295.99075],\n",
" [296.05798, 295.97733, 293.79666, ..., 292.17905, 296.3477 ,\n",
" 297.59076],\n",
"...\n",
" [299.658 , 297.37732, 295.19666, ..., 303.67905, 306.9477 ,\n",
" 305.79077],\n",
" [299.85797, 297.2773 , 295.49664, ..., 302.97903, 306.54767,\n",
" 305.69077],\n",
" [300.05798, 297.2773 , 295.79666, ..., 302.37903, 306.24768,\n",
" 305.59076]],\n",
"\n",
" [[288.658 , 288.47733, 286.19666, ..., 298.17905, 299.8477 ,\n",
" 299.59076],\n",
" [288.55798, 287.87732, 285.89667, ..., 298.47903, 299.74768,\n",
" 299.69077],\n",
" [289.85797, 287.6773 , 286.89667, ..., 298.97903, 300.3477 ,\n",
" 299.89075],\n",
" ...,\n",
" [299.158 , 296.7773 , 295.09665, ..., 304.57904, 307.74768,\n",
" 306.49075],\n",
" [299.658 , 296.57733, 295.39667, ..., 303.87903, 307.3477 ,\n",
" 306.29077],\n",
" [299.45798, 296.6773 , 294.69666, ..., 303.07904, 306.74768,\n",
" 306.09076]]], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>prate</span></div><div class='xr-var-dims'>(longitude, latitude, valid_time)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0</div><input id='attrs-62ef82f6-7ac3-463f-8975-0835f41b1cd7' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-62ef82f6-7ac3-463f-8975-0835f41b1cd7' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b4a55007-a97c-431e-89f4-e2f117d6a868' class='xr-var-data-in' type='checkbox'><label for='data-b4a55007-a97c-431e-89f4-e2f117d6a868' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>GRIB_NV :</span></dt><dd>0</dd><dt><span>GRIB_Nx :</span></dt><dd>1440</dd><dt><span>GRIB_Ny :</span></dt><dd>721</dd><dt><span>GRIB_cfName :</span></dt><dd>unknown</dd><dt><span>GRIB_cfVarName :</span></dt><dd>prate</dd><dt><span>GRIB_dataType :</span></dt><dd>fc</dd><dt><span>GRIB_gridDefinitionDescription :</span></dt><dd>Latitude/longitude. Also called equidistant cylindrical, or Plate Carree</dd><dt><span>GRIB_gridType :</span></dt><dd>regular_ll</dd><dt><span>GRIB_iDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_iScansNegatively :</span></dt><dd>0</dd><dt><span>GRIB_jDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_jPointsAreConsecutive :</span></dt><dd>0</dd><dt><span>GRIB_jScansPositively :</span></dt><dd>0</dd><dt><span>GRIB_latitudeOfFirstGridPointInDegrees :</span></dt><dd>90.0</dd><dt><span>GRIB_latitudeOfLastGridPointInDegrees :</span></dt><dd>-90.0</dd><dt><span>GRIB_longitudeOfFirstGridPointInDegrees :</span></dt><dd>0.0</dd><dt><span>GRIB_longitudeOfLastGridPointInDegrees :</span></dt><dd>359.75</dd><dt><span>GRIB_missingValue :</span></dt><dd>3.4028234663852886e+38</dd><dt><span>GRIB_name :</span></dt><dd>Precipitation rate</dd><dt><span>GRIB_numberOfPoints :</span></dt><dd>1038240</dd><dt><span>GRIB_paramId :</span></dt><dd>3059</dd><dt><span>GRIB_parameterName :</span></dt><dd>Precipitation rate</dd><dt><span>GRIB_parameterUnits :</span></dt><dd>kg m-2 s-1</dd><dt><span>GRIB_shortName :</span></dt><dd>prate</dd><dt><span>GRIB_stepRange :</span></dt><dd>0</dd><dt><span>GRIB_stepType :</span></dt><dd>instant</dd><dt><span>GRIB_stepUnits :</span></dt><dd>1</dd><dt><span>GRIB_typeOfLevel :</span></dt><dd>surface</dd><dt><span>GRIB_units :</span></dt><dd>kg m**-2 s**-1</dd><dt><span>grid_mapping :</span></dt><dd>gribfile_projection</dd><dt><span>long_name :</span></dt><dd>Precipitation rate</dd><dt><span>standard_name :</span></dt><dd>unknown</dd><dt><span>units :</span></dt><dd>kg m**-2 s**-1</dd></dl></div><div class='xr-var-data'><pre>array([[[0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
" [0.000e+00, 7.200e-06, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
" [0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
" ...,\n",
" [0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
" [0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
" [0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00]],\n",
"\n",
" [[0.000e+00, 2.400e-06, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
" [0.000e+00, 6.320e-05, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
" [0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
"...\n",
" [0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
" [0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
" [0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00]],\n",
"\n",
" [[0.000e+00, 8.000e-07, 2.936e-04, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
" [0.000e+00, 4.696e-04, 2.840e-04, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
" [3.200e-06, 1.384e-04, 5.552e-04, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
" ...,\n",
" [0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
" [0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00],\n",
" [0.000e+00, 0.000e+00, 0.000e+00, ..., 0.000e+00, 0.000e+00,\n",
" 0.000e+00]]], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>gust</span></div><div class='xr-var-dims'>(longitude, latitude, valid_time)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>5.005 3.703 7.021 ... 9.601 10.1</div><input id='attrs-71685def-176a-4f62-acec-ae76f0c927d8' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-71685def-176a-4f62-acec-ae76f0c927d8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-e7de27da-0e5d-46e7-a5c0-55b4aef01891' class='xr-var-data-in' type='checkbox'><label for='data-e7de27da-0e5d-46e7-a5c0-55b4aef01891' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>GRIB_NV :</span></dt><dd>0</dd><dt><span>GRIB_Nx :</span></dt><dd>1440</dd><dt><span>GRIB_Ny :</span></dt><dd>721</dd><dt><span>GRIB_cfName :</span></dt><dd>unknown</dd><dt><span>GRIB_cfVarName :</span></dt><dd>gust</dd><dt><span>GRIB_dataType :</span></dt><dd>fc</dd><dt><span>GRIB_gridDefinitionDescription :</span></dt><dd>Latitude/longitude. Also called equidistant cylindrical, or Plate Carree</dd><dt><span>GRIB_gridType :</span></dt><dd>regular_ll</dd><dt><span>GRIB_iDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_iScansNegatively :</span></dt><dd>0</dd><dt><span>GRIB_jDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_jPointsAreConsecutive :</span></dt><dd>0</dd><dt><span>GRIB_jScansPositively :</span></dt><dd>0</dd><dt><span>GRIB_latitudeOfFirstGridPointInDegrees :</span></dt><dd>90.0</dd><dt><span>GRIB_latitudeOfLastGridPointInDegrees :</span></dt><dd>-90.0</dd><dt><span>GRIB_longitudeOfFirstGridPointInDegrees :</span></dt><dd>0.0</dd><dt><span>GRIB_longitudeOfLastGridPointInDegrees :</span></dt><dd>359.75</dd><dt><span>GRIB_missingValue :</span></dt><dd>3.4028234663852886e+38</dd><dt><span>GRIB_name :</span></dt><dd>Wind speed (gust)</dd><dt><span>GRIB_numberOfPoints :</span></dt><dd>1038240</dd><dt><span>GRIB_paramId :</span></dt><dd>260065</dd><dt><span>GRIB_parameterName :</span></dt><dd>Wind speed (gust)</dd><dt><span>GRIB_parameterUnits :</span></dt><dd>m s-1</dd><dt><span>GRIB_shortName :</span></dt><dd>gust</dd><dt><span>GRIB_stepRange :</span></dt><dd>0</dd><dt><span>GRIB_stepType :</span></dt><dd>instant</dd><dt><span>GRIB_stepUnits :</span></dt><dd>1</dd><dt><span>GRIB_typeOfLevel :</span></dt><dd>surface</dd><dt><span>GRIB_units :</span></dt><dd>m s**-1</dd><dt><span>grid_mapping :</span></dt><dd>gribfile_projection</dd><dt><span>long_name :</span></dt><dd>Wind speed (gust)</dd><dt><span>standard_name :</span></dt><dd>unknown</dd><dt><span>units :</span></dt><dd>m s**-1</dd></dl></div><div class='xr-var-data'><pre>array([[[ 5.004875 , 3.702984 , 7.0213413, ..., 1.8055443,\n",
" 4.3008685, 3.801896 ],\n",
" [ 4.604875 , 6.502984 , 5.121341 , ..., 3.0055444,\n",
" 5.3008685, 7.301896 ],\n",
" [ 2.104875 , 4.102984 , 3.7213414, ..., 3.3055444,\n",
" 3.4008687, 3.7018962],\n",
" ...,\n",
" [ 7.104875 , 7.102984 , 7.3213415, ..., 8.105544 ,\n",
" 7.7008686, 8.001896 ],\n",
" [ 6.9048753, 7.002984 , 7.121341 , ..., 7.505544 ,\n",
" 7.400869 , 7.901896 ],\n",
" [ 6.8048754, 6.902984 , 6.721341 , ..., 7.4055443,\n",
" 7.2008686, 7.6018963]],\n",
"\n",
" [[ 2.7048752, 3.102984 , 4.121341 , ..., 2.2055442,\n",
" 3.9008687, 5.801896 ],\n",
" [ 3.7048752, 4.402984 , 4.5213413, ..., 1.7055444,\n",
" 4.8008685, 6.6018963],\n",
" [ 2.7048752, 3.4029841, 7.8213415, ..., 2.5055444,\n",
" 5.000869 , 5.201896 ],\n",
"...\n",
" [ 2.7048752, 2.302984 , 3.4213412, ..., 10.505545 ,\n",
" 9.300869 , 10.001896 ],\n",
" [ 1.8048751, 2.202984 , 3.8213413, ..., 11.205544 ,\n",
" 9.700869 , 10.401896 ],\n",
" [ 1.5048752, 1.902984 , 3.2213414, ..., 11.405544 ,\n",
" 10.200869 , 10.601896 ]],\n",
"\n",
" [[ 5.604875 , 4.602984 , 3.2213414, ..., 9.405544 ,\n",
" 6.400869 , 5.001896 ],\n",
" [ 7.104875 , 5.902984 , 3.3213413, ..., 8.605544 ,\n",
" 6.500869 , 4.701896 ],\n",
" [ 7.8048754, 7.802984 , 2.5213413, ..., 8.005545 ,\n",
" 6.8008685, 4.701896 ],\n",
" ...,\n",
" [ 1.5048752, 1.802984 , 2.6213412, ..., 10.205544 ,\n",
" 9.000869 , 9.601896 ],\n",
" [ 1.8048751, 1.2029841, 2.6213412, ..., 11.005545 ,\n",
" 9.400868 , 10.101896 ],\n",
" [ 1.6048752, 1.002984 , 1.8213413, ..., 11.005545 ,\n",
" 9.600869 , 10.101896 ]]], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>tcc</span></div><div class='xr-var-dims'>(longitude, latitude, valid_time)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>15.2 100.0 96.5 ... 0.0 4.4 61.4</div><input id='attrs-f21d88da-e6be-49c6-b1bb-0d86ca2981bc' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-f21d88da-e6be-49c6-b1bb-0d86ca2981bc' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-ff75a717-0ce1-4948-82e6-b8aff7764067' class='xr-var-data-in' type='checkbox'><label for='data-ff75a717-0ce1-4948-82e6-b8aff7764067' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>GRIB_NV :</span></dt><dd>0</dd><dt><span>GRIB_Nx :</span></dt><dd>1440</dd><dt><span>GRIB_Ny :</span></dt><dd>721</dd><dt><span>GRIB_cfName :</span></dt><dd>unknown</dd><dt><span>GRIB_cfVarName :</span></dt><dd>unknown</dd><dt><span>GRIB_dataType :</span></dt><dd>fc</dd><dt><span>GRIB_gridDefinitionDescription :</span></dt><dd>Latitude/longitude. Also called equidistant cylindrical, or Plate Carree</dd><dt><span>GRIB_gridType :</span></dt><dd>regular_ll</dd><dt><span>GRIB_iDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_iScansNegatively :</span></dt><dd>0</dd><dt><span>GRIB_jDirectionIncrementInDegrees :</span></dt><dd>0.25</dd><dt><span>GRIB_jPointsAreConsecutive :</span></dt><dd>0</dd><dt><span>GRIB_jScansPositively :</span></dt><dd>0</dd><dt><span>GRIB_latitudeOfFirstGridPointInDegrees :</span></dt><dd>90.0</dd><dt><span>GRIB_latitudeOfLastGridPointInDegrees :</span></dt><dd>-90.0</dd><dt><span>GRIB_longitudeOfFirstGridPointInDegrees :</span></dt><dd>0.0</dd><dt><span>GRIB_longitudeOfLastGridPointInDegrees :</span></dt><dd>359.75</dd><dt><span>GRIB_missingValue :</span></dt><dd>3.4028234663852886e+38</dd><dt><span>GRIB_name :</span></dt><dd>Total Cloud Cover</dd><dt><span>GRIB_numberOfPoints :</span></dt><dd>1038240</dd><dt><span>GRIB_paramId :</span></dt><dd>228164</dd><dt><span>GRIB_parameterName :</span></dt><dd>Total cloud cover</dd><dt><span>GRIB_parameterUnits :</span></dt><dd>%</dd><dt><span>GRIB_shortName :</span></dt><dd>tcc</dd><dt><span>GRIB_stepRange :</span></dt><dd>0</dd><dt><span>GRIB_stepType :</span></dt><dd>instant</dd><dt><span>GRIB_stepUnits :</span></dt><dd>1</dd><dt><span>GRIB_typeOfLevel :</span></dt><dd>atmosphere</dd><dt><span>GRIB_units :</span></dt><dd>%</dd><dt><span>grid_mapping :</span></dt><dd>gribfile_projection</dd><dt><span>long_name :</span></dt><dd>Total Cloud Cover</dd><dt><span>standard_name :</span></dt><dd>unknown</dd><dt><span>units :</span></dt><dd>%</dd></dl></div><div class='xr-var-data'><pre>array([[[ 15.2, 100. , 96.5, ..., 0. , 8.5, 75.6],\n",
" [100. , 96.6, 8.2, ..., 0. , 1.7, 3.2],\n",
" [ 66.8, 76. , 45.5, ..., 0. , 24.6, 28.3],\n",
" ...,\n",
" [ 0. , 0. , 0. , ..., 3.3, 21.8, 19.9],\n",
" [ 0. , 0. , 0. , ..., 0. , 18.6, 16.9],\n",
" [ 0. , 0. , 0. , ..., 0.3, 17.8, 16.1]],\n",
"\n",
" [[ 91.4, 99. , 98.4, ..., 0. , 1.8, 72.6],\n",
" [ 98.7, 99.5, 82.5, ..., 0. , 5. , 4.4],\n",
" [ 73.5, 33.8, 3.4, ..., 0. , 5. , 53.6],\n",
" ...,\n",
" [ 0. , 0. , 0. , ..., 12.2, 23.3, 28.2],\n",
" [ 0. , 0. , 0. , ..., 2.1, 18.8, 18.9],\n",
" [ 0. , 0. , 0. , ..., 0. , 11.7, 21. ]],\n",
"\n",
" [[ 4.4, 51.3, 39.3, ..., 0. , 0. , 3. ],\n",
" [ 96.9, 79.1, 76.6, ..., 0.1, 5.8, 4.2],\n",
" [ 57.7, 23.6, 20.4, ..., 0. , 7.6, 72.8],\n",
" ...,\n",
"...\n",
" ...,\n",
" [100. , 4. , 0.3, ..., 0. , 0.6, 6.7],\n",
" [ 98.6, 3. , 30.2, ..., 0. , 7.6, 97.3],\n",
" [100. , 5.4, 64. , ..., 0. , 47.5, 100. ]],\n",
"\n",
" [[ 82.5, 60.5, 100. , ..., 0. , 25.6, 12.9],\n",
" [ 41.5, 40.8, 100. , ..., 0. , 5. , 4.1],\n",
" [100. , 95. , 100. , ..., 2.4, 3.3, 5. ],\n",
" ...,\n",
" [ 45.3, 5. , 15.4, ..., 0. , 0.1, 23.7],\n",
" [ 59.5, 5.2, 100. , ..., 0. , 5.2, 100. ],\n",
" [100. , 21. , 100. , ..., 0. , 6.3, 99.3]],\n",
"\n",
" [[ 94.9, 58.8, 99.9, ..., 0. , 15.9, 16.7],\n",
" [ 38. , 26.4, 100. , ..., 0. , 4.7, 48.5],\n",
" [ 14.8, 99.9, 100. , ..., 1.4, 4.5, 18.3],\n",
" ...,\n",
" [ 30.4, 12.8, 38.5, ..., 0. , 0. , 28.3],\n",
" [ 91.1, 63.5, 100. , ..., 0. , 2.2, 98.8],\n",
" [100. , 80.7, 100. , ..., 0. , 4.4, 61.4]]], dtype=float32)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-53c44815-8146-442d-9777-6bc0db765669' class='xr-section-summary-in' type='checkbox' ><label for='section-53c44815-8146-442d-9777-6bc0db765669' class='xr-section-summary' >Indexes: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>latitude</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-dc462617-3576-477e-9ef3-c1c4ad3ad655' class='xr-index-data-in' type='checkbox'/><label for='index-dc462617-3576-477e-9ef3-c1c4ad3ad655' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([ 40.0, 39.75, 39.5, 39.25, 39.0, 38.75, 38.5, 38.25, 38.0, 37.75,\n",
" 37.5, 37.25, 37.0, 36.75, 36.5, 36.25, 36.0, 35.75, 35.5, 35.25,\n",
" 35.0, 34.75, 34.5, 34.25, 34.0, 33.75, 33.5, 33.25, 33.0, 32.75,\n",
" 32.5, 32.25, 32.0, 31.75, 31.5, 31.25, 31.0, 30.75, 30.5, 30.25,\n",
" 30.0],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;latitude&#x27;))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>longitude</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-98517861-26da-495c-bbe8-11d333cc5617' class='xr-index-data-in' type='checkbox'/><label for='index-98517861-26da-495c-bbe8-11d333cc5617' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([ -120.0, -119.75, -119.5, -119.25, -119.0, -118.75, -118.5, -118.25,\n",
" -118.0, -117.75, -117.5, -117.25, -117.0, -116.75, -116.5, -116.25,\n",
" -116.0, -115.75, -115.5, -115.25, -115.0, -114.75, -114.5, -114.25,\n",
" -114.0, -113.75, -113.5, -113.25, -113.0, -112.75, -112.5, -112.25,\n",
" -112.0, -111.75, -111.5, -111.25, -111.0, -110.75, -110.5, -110.25,\n",
" -110.0, -109.75, -109.5, -109.25, -109.0, -108.75, -108.5, -108.25,\n",
" -108.0, -107.75, -107.5, -107.25, -107.0, -106.75, -106.5, -106.25,\n",
" -106.0, -105.75, -105.5, -105.25, -105.0, -104.75, -104.5, -104.25,\n",
" -104.0, -103.75, -103.5, -103.25, -103.0, -102.75, -102.5, -102.25,\n",
" -102.0, -101.75, -101.5, -101.25, -101.0, -100.75, -100.5, -100.25,\n",
" -100.0],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;longitude&#x27;))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>valid_time</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-7ebea0cb-7fe2-41c8-9f05-25f41ff40ae5' class='xr-index-data-in' type='checkbox'/><label for='index-7ebea0cb-7fe2-41c8-9f05-25f41ff40ae5' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(DatetimeIndex([&#x27;2024-05-13 00:00:00&#x27;, &#x27;2024-05-13 01:00:00&#x27;,\n",
" &#x27;2024-05-13 02:00:00&#x27;, &#x27;2024-05-13 03:00:00&#x27;,\n",
" &#x27;2024-05-13 04:00:00&#x27;, &#x27;2024-05-13 05:00:00&#x27;,\n",
" &#x27;2024-05-13 06:00:00&#x27;, &#x27;2024-05-13 07:00:00&#x27;,\n",
" &#x27;2024-05-13 08:00:00&#x27;, &#x27;2024-05-13 09:00:00&#x27;,\n",
" ...\n",
" &#x27;2024-05-27 21:00:00&#x27;, &#x27;2024-05-28 00:00:00&#x27;,\n",
" &#x27;2024-05-28 03:00:00&#x27;, &#x27;2024-05-28 06:00:00&#x27;,\n",
" &#x27;2024-05-28 09:00:00&#x27;, &#x27;2024-05-28 12:00:00&#x27;,\n",
" &#x27;2024-05-28 15:00:00&#x27;, &#x27;2024-05-28 18:00:00&#x27;,\n",
" &#x27;2024-05-28 21:00:00&#x27;, &#x27;2024-05-29 00:00:00&#x27;],\n",
" dtype=&#x27;datetime64[ns]&#x27;, name=&#x27;valid_time&#x27;, length=209, freq=None))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-4da26639-fde4-4093-a25d-8dc7c22a5d4d' class='xr-section-summary-in' type='checkbox' checked><label for='section-4da26639-fde4-4093-a25d-8dc7c22a5d4d' class='xr-section-summary' >Attributes: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>description :</span></dt><dd>GFS data ingested for forecasting demo</dd></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.Dataset> Size: 14MB\n",
"Dimensions: (longitude: 81, latitude: 41, valid_time: 209)\n",
"Coordinates:\n",
" time datetime64[ns] 8B 2024-05-13\n",
" * latitude (latitude) float64 328B 40.0 39.75 39.5 ... 30.5 30.25 30.0\n",
" * longitude (longitude) float64 648B -120.0 -119.8 -119.5 ... -100.2 -100.0\n",
" * valid_time (valid_time) datetime64[ns] 2kB 2024-05-13 ... 2024-05-29\n",
"Data variables:\n",
" r2 (longitude, latitude, valid_time) float32 3MB 25.1 22.5 ... 25.2\n",
" t2m (longitude, latitude, valid_time) float32 3MB 295.4 ... 306.1\n",
" prate (longitude, latitude, valid_time) float32 3MB 0.0 0.0 ... 0.0\n",
" gust (longitude, latitude, valid_time) float32 3MB 5.005 ... 10.1\n",
" tcc (longitude, latitude, valid_time) float32 3MB 15.2 ... 61.4\n",
"Attributes:\n",
" description: GFS data ingested for forecasting demo"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time ds_ic.sel(longitude=slice(-120, -100), latitude=slice(40, 30)).compute()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "f6d0ce2b-f80b-4908-b732-1911d4e5317f",
"metadata": {},
"outputs": [],
"source": [
"#%time ds_ic.isel(longitude=slice(-120, -100), latitude=slice(40, 30)).compute()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "061f9e8f-dd4f-4c7d-a683-15d1c12586f6",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 162 ms, sys: 81.4 ms, total: 244 ms\n",
"Wall time: 853 ms\n"
]
}
],
"source": [
"%time ds_ic.t2m.isel(longitude = -120, latitude=40).compute();"
]
},
{
"cell_type": "markdown",
"id": "02b3cf15-3a59-4add-97d3-62ac6b9122d0",
"metadata": {},
"source": [
"## Spatial Query"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "cb399344-23ec-4901-82f3-28a7b1e6a5ba",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 48.3 ms, sys: 31.1 ms, total: 79.4 ms\n",
"Wall time: 2.13 s\n"
]
}
],
"source": [
"%%time\n",
"df = rel2.query(\"forecast_data\",\n",
" \"\"\"\n",
" SELECT valid_time, latitude, longitude, t2m\n",
" FROM forecast_data\n",
" WHERE valid_time BETWEEN TIMESTAMP '2024-05-13 02:00:00' AND TIMESTAMP '2024-05-14 00:00:00'\n",
" \"\"\"\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "902f7416-f601-4c2e-a4fe-c5286f63d59a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 875 ms, sys: 451 ms, total: 1.33 s\n",
"Wall time: 2.1 s\n"
]
}
],
"source": [
"%time ds_ic.t2m.sel(valid_time=slice(\"2024-05-13T02:00:00\", \"2024-05-14T00:00:00\")).compute();"
]
},
{
"cell_type": "markdown",
"id": "eab5972f-1a0b-42a1-a485-5ee912087421",
"metadata": {},
"source": [
"## Temporal Mean\n",
"\n",
"For the aggregation queries, we switch to different variables to avoid biasing the results from Icechunk's aggresive caching."
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "fd299291-9d0e-4f87-a063-7ccb9976e428",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 42.2 ms, sys: 30.4 ms, total: 72.7 ms\n",
"Wall time: 1.95 s\n"
]
}
],
"source": [
"%%time\n",
"df = rel2.query(\"forecast_data\",\n",
" \"\"\"\n",
" SELECT AVG(r2), latitude, longitude\n",
" FROM forecast_data\n",
" GROUP BY latitude, longitude\n",
" \"\"\"\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "dba927f7-3a5c-4dd1-88ac-daf46f70e1bc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 3.8 s, sys: 1.18 s, total: 4.98 s\n",
"Wall time: 3.52 s\n"
]
}
],
"source": [
"%time ds_ic.r2.mean((\"valid_time\")).compute();"
]
},
{
"cell_type": "markdown",
"id": "acefd50e-3e0c-4a67-a71e-f830a2642217",
"metadata": {},
"source": [
"## Spatial Mean"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "0187a4c6-980a-4d82-9535-4741a4ef4434",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 49 ms, sys: 34.2 ms, total: 83.2 ms\n",
"Wall time: 1.95 s\n"
]
}
],
"source": [
"%%time\n",
"df = rel2.query(\"forecast_data\",\n",
" \"\"\"\n",
" SELECT AVG(tcc), valid_time\n",
" FROM forecast_data\n",
" GROUP BY valid_time\n",
" \"\"\"\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "8349f164-67f6-47b0-9dd9-02725edb785a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 3.75 s, sys: 1.26 s, total: 5.02 s\n",
"Wall time: 3.32 s\n"
]
}
],
"source": [
"%time ds_ic.tcc.mean((\"longitude\", \"latitude\")).compute();"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "93612cfe-9f93-4e81-aec3-efe23b8c67a1",
"metadata": {},
"outputs": [],
"source": []
}
],
"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.12.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment