From 30941db818ecba0f0942fe6cd5b20143d4c7444a Mon Sep 17 00:00:00 2001 From: Robbi Bishop-Taylor Date: Mon, 30 Sep 2024 06:50:41 +0000 Subject: [PATCH] Fix bug --- docs/notebooks/Model_tides.ipynb | 424 +++++++++++++++++++++++++++---- 1 file changed, 378 insertions(+), 46 deletions(-) diff --git a/docs/notebooks/Model_tides.ipynb b/docs/notebooks/Model_tides.ipynb index 4d6ef77..c07ed52 100644 --- a/docs/notebooks/Model_tides.ipynb +++ b/docs/notebooks/Model_tides.ipynb @@ -14,7 +14,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": { "tags": [] }, @@ -110,7 +110,7 @@ "2018-01-01 04:00:00 122.2186 -18.0008 FES2014 1.126837" ] }, - "execution_count": 1, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -142,7 +142,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": { "tags": [] }, @@ -185,7 +185,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": { "tags": [] }, @@ -260,7 +260,7 @@ "4 2022-09-30 00:00:00 122.25 -18.2" ] }, - "execution_count": 3, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -286,7 +286,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": { "tags": [] }, @@ -302,78 +302,78 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 5/5 [00:04<00:00, 1.03it/s]\n" + "100%|██████████| 5/5 [00:04<00:00, 1.05it/s]\n" ] }, { "data": { "text/html": [ "\n", - "\n", + "
\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
 timexytide_heighttimexytide_height
02022-09-01 00:00:00122.210000-18.200000-3.59041002022-09-01 00:00:00122.210000-18.200000-3.590410
12022-09-08 06:00:00122.220000-18.200000-1.64217512022-09-08 06:00:00122.220000-18.200000-1.642175
22022-09-15 12:00:00122.230000-18.200000-3.35181522022-09-15 12:00:00122.230000-18.200000-3.351815
32022-09-22 18:00:00122.240000-18.200000-0.94293932022-09-22 18:00:00122.240000-18.200000-0.942939
42022-09-30 00:00:00122.250000-18.200000-3.61331742022-09-30 00:00:00122.250000-18.200000-3.613317
\n" ], "text/plain": [ - "" + "" ] }, - "execution_count": 4, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Model tides in \"one-to-one\" mode\n", - "tide_df = model_tides(\n", + "onetoone_df = model_tides(\n", " x=sites_df.x,\n", " y=sites_df.y,\n", " time=sites_df.time,\n", @@ -382,7 +382,7 @@ ")\n", "\n", "# Add results as a new datframe column\n", - "sites_df[\"tide_height\"] = tide_df.tide_m.values\n", + "sites_df[\"tide_height\"] = onetoone_df.tide_m.values\n", "sites_df.style.set_properties(**{\"background-color\": \"#FFFF8F\"}, subset=[\"tide_height\"])" ] }, @@ -395,9 +395,314 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/env/lib/python3.10/site-packages/geopandas/array.py:403: UserWarning: Geometry is in a geographic CRS. Results from 'sjoin_nearest' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.\n", + "\n", + " warnings.warn(\n", + "/home/jovyan/Robbi/eo-tides/eo_tides/validation.py:157: FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.\n", + " pd.read_csv(\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sea_levelqc_flaguse_flagfile_namesite_namecountrycontributor_abbreviatedcontributor_fullcontributor_websitecontributor_contact...start_date_timeend_date_timenumber_of_yearstime_zone_hoursdatum_informationinstrumentprecisionnull_valuegauge_typeoverall_record_quality
site_codetime
626502018-01-01 00:00:001.20422711../../tests/data/broome-62650-aus-bomBroomeAUSBOMBureau of Meteorologyhttp://www.bom.gov.au/oceanography/projects/nt...tides@bom.gov.au...2/07/1966 0:0031/12/2019 23:00510Chart Datum / Lowest Astronomical TideUnspecifiedUnspecified-99.9999CoastalNo obvious issues
2018-01-01 01:00:002.30722711../../tests/data/broome-62650-aus-bomBroomeAUSBOMBureau of Meteorologyhttp://www.bom.gov.au/oceanography/projects/nt...tides@bom.gov.au...2/07/1966 0:0031/12/2019 23:00510Chart Datum / Lowest Astronomical TideUnspecifiedUnspecified-99.9999CoastalNo obvious issues
2018-01-01 02:00:002.70822711../../tests/data/broome-62650-aus-bomBroomeAUSBOMBureau of Meteorologyhttp://www.bom.gov.au/oceanography/projects/nt...tides@bom.gov.au...2/07/1966 0:0031/12/2019 23:00510Chart Datum / Lowest Astronomical TideUnspecifiedUnspecified-99.9999CoastalNo obvious issues
2018-01-01 03:00:002.13322711../../tests/data/broome-62650-aus-bomBroomeAUSBOMBureau of Meteorologyhttp://www.bom.gov.au/oceanography/projects/nt...tides@bom.gov.au...2/07/1966 0:0031/12/2019 23:00510Chart Datum / Lowest Astronomical TideUnspecifiedUnspecified-99.9999CoastalNo obvious issues
2018-01-01 04:00:001.04522711../../tests/data/broome-62650-aus-bomBroomeAUSBOMBureau of Meteorologyhttp://www.bom.gov.au/oceanography/projects/nt...tides@bom.gov.au...2/07/1966 0:0031/12/2019 23:00510Chart Datum / Lowest Astronomical TideUnspecifiedUnspecified-99.9999CoastalNo obvious issues
\n", + "

5 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " sea_level qc_flag use_flag \\\n", + "site_code time \n", + "62650 2018-01-01 00:00:00 1.204227 1 1 \n", + " 2018-01-01 01:00:00 2.307227 1 1 \n", + " 2018-01-01 02:00:00 2.708227 1 1 \n", + " 2018-01-01 03:00:00 2.133227 1 1 \n", + " 2018-01-01 04:00:00 1.045227 1 1 \n", + "\n", + " file_name \\\n", + "site_code time \n", + "62650 2018-01-01 00:00:00 ../../tests/data/broome-62650-aus-bom \n", + " 2018-01-01 01:00:00 ../../tests/data/broome-62650-aus-bom \n", + " 2018-01-01 02:00:00 ../../tests/data/broome-62650-aus-bom \n", + " 2018-01-01 03:00:00 ../../tests/data/broome-62650-aus-bom \n", + " 2018-01-01 04:00:00 ../../tests/data/broome-62650-aus-bom \n", + "\n", + " site_name country contributor_abbreviated \\\n", + "site_code time \n", + "62650 2018-01-01 00:00:00 Broome AUS BOM \n", + " 2018-01-01 01:00:00 Broome AUS BOM \n", + " 2018-01-01 02:00:00 Broome AUS BOM \n", + " 2018-01-01 03:00:00 Broome AUS BOM \n", + " 2018-01-01 04:00:00 Broome AUS BOM \n", + "\n", + " contributor_full \\\n", + "site_code time \n", + "62650 2018-01-01 00:00:00 Bureau of Meteorology \n", + " 2018-01-01 01:00:00 Bureau of Meteorology \n", + " 2018-01-01 02:00:00 Bureau of Meteorology \n", + " 2018-01-01 03:00:00 Bureau of Meteorology \n", + " 2018-01-01 04:00:00 Bureau of Meteorology \n", + "\n", + " contributor_website \\\n", + "site_code time \n", + "62650 2018-01-01 00:00:00 http://www.bom.gov.au/oceanography/projects/nt... \n", + " 2018-01-01 01:00:00 http://www.bom.gov.au/oceanography/projects/nt... \n", + " 2018-01-01 02:00:00 http://www.bom.gov.au/oceanography/projects/nt... \n", + " 2018-01-01 03:00:00 http://www.bom.gov.au/oceanography/projects/nt... \n", + " 2018-01-01 04:00:00 http://www.bom.gov.au/oceanography/projects/nt... \n", + "\n", + " contributor_contact ... start_date_time \\\n", + "site_code time ... \n", + "62650 2018-01-01 00:00:00 tides@bom.gov.au ... 2/07/1966 0:00 \n", + " 2018-01-01 01:00:00 tides@bom.gov.au ... 2/07/1966 0:00 \n", + " 2018-01-01 02:00:00 tides@bom.gov.au ... 2/07/1966 0:00 \n", + " 2018-01-01 03:00:00 tides@bom.gov.au ... 2/07/1966 0:00 \n", + " 2018-01-01 04:00:00 tides@bom.gov.au ... 2/07/1966 0:00 \n", + "\n", + " end_date_time number_of_years \\\n", + "site_code time \n", + "62650 2018-01-01 00:00:00 31/12/2019 23:00 51 \n", + " 2018-01-01 01:00:00 31/12/2019 23:00 51 \n", + " 2018-01-01 02:00:00 31/12/2019 23:00 51 \n", + " 2018-01-01 03:00:00 31/12/2019 23:00 51 \n", + " 2018-01-01 04:00:00 31/12/2019 23:00 51 \n", + "\n", + " time_zone_hours \\\n", + "site_code time \n", + "62650 2018-01-01 00:00:00 0 \n", + " 2018-01-01 01:00:00 0 \n", + " 2018-01-01 02:00:00 0 \n", + " 2018-01-01 03:00:00 0 \n", + " 2018-01-01 04:00:00 0 \n", + "\n", + " datum_information \\\n", + "site_code time \n", + "62650 2018-01-01 00:00:00 Chart Datum / Lowest Astronomical Tide \n", + " 2018-01-01 01:00:00 Chart Datum / Lowest Astronomical Tide \n", + " 2018-01-01 02:00:00 Chart Datum / Lowest Astronomical Tide \n", + " 2018-01-01 03:00:00 Chart Datum / Lowest Astronomical Tide \n", + " 2018-01-01 04:00:00 Chart Datum / Lowest Astronomical Tide \n", + "\n", + " instrument precision null_value \\\n", + "site_code time \n", + "62650 2018-01-01 00:00:00 Unspecified Unspecified -99.9999 \n", + " 2018-01-01 01:00:00 Unspecified Unspecified -99.9999 \n", + " 2018-01-01 02:00:00 Unspecified Unspecified -99.9999 \n", + " 2018-01-01 03:00:00 Unspecified Unspecified -99.9999 \n", + " 2018-01-01 04:00:00 Unspecified Unspecified -99.9999 \n", + "\n", + " gauge_type overall_record_quality \n", + "site_code time \n", + "62650 2018-01-01 00:00:00 Coastal No obvious issues \n", + " 2018-01-01 01:00:00 Coastal No obvious issues \n", + " 2018-01-01 02:00:00 Coastal No obvious issues \n", + " 2018-01-01 03:00:00 Coastal No obvious issues \n", + " 2018-01-01 04:00:00 Coastal No obvious issues \n", + "\n", + "[5 rows x 26 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "from eo_tides.validation import eval_metrics, load_gauge_gesla\n", "\n", @@ -415,11 +720,38 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Correlation 0.998\n", + "RMSE 0.144\n", + "MAE 0.113\n", + "R-squared 0.995\n", + "Bias 0.004\n", + "Regression slope 0.986\n", + "dtype: float64" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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9Lvf/U633367fv3rX6u4uFhVVVVatmyZUlNTdeWVV0qSRo4cqUceeUS5ubnau3evli1bppEjR+qmm24KeCy+nrd48WLdc889Wrt2rSwWiyTpySef1JgxY/S1r31NkrR06VLV1tbqiSeeUG5urp577jldeOGF2rt3r4qKisL3XxyA8DAAIEx27dplSDJqa2sHvHfaaacZjz/+uMu1f/u3fzNmz57t8X533323MWPGDL+effvttxtnn3223887cuSIMWTIEGPr1q3O92fPnm387Gc/MwzDMKqrqw2LxWLU19e73OOCCy4wVq9ebRiGYWzYsMHIyMjwa3wAIo+ZGgBhc/bZZ+uCCy7Q1KlTtXDhQi1YsEDf+9731N3drU8++UTl5eVatmyZ8/Pd3d3KyMhwvn766ad1//33q7q6Wm1tberu7lZ6enrA47Db7T6fZ7PZ9M1vflObNm3SvHnzdPDgQb355ptav369JGn37t0yDEOTJk1yuXdnZ6eysrICHhOAyCPUAAgbq9Wq1157Tdu3b9err76qiooK3XLLLXrppZcknVwSmjVr1oDvSNJbb72lyy67TGvWrNHChQuVkZGhJ554Qvfdd1/A4+jt7fX5PElavHixrr/+elVUVOjxxx/X5MmTdfbZZzvvYbVatWvXLpfvSFJaWlrAYwIQeYQaAGFlsVhUWlqq0tJS3XbbbcrLy9O2bds0duxY1dTUaPHixW6/t23bNuXl5emWW25xXqurqwtqDGPGjPH5PEm65JJL9C//8i/6y1/+oscff1xXXHGF873i4mL19PToyJEjmjdvXlDjADC4CDUAwubtt9/W//7v/2rBggXKycnR22+/LbvdrjPPPFN33HGHrrvuOqWnp+uiiy5SZ2endu7cqebmZq1atUqFhYU6dOiQnnjiCZWUlOhPf/qTnnvuuaDH4ut5kpSamqqLL75Yt956qz744ANdfvnlzu9PmjRJixcv1pIlS3TfffepuLhYjY2N+utf/6qpU6fqn/7pn0L+7wtAmEW7qAdA/Hj//feNhQsXGjabzRg2bJgxadIko6Kiwvn+pk2bjOnTpxtDhw41MjMzjbKyMuPZZ591vv+zn/3MyMrKMtLS0owf/OAHxq9+9Su/C3H7Fwr78zzDMIw//elPhiSjrKxswD27urqM2267zcjPzzeSk5ONU045xbj00kuNd9991zAMCoWBWGMxDMOIdrACAAAIFc33AABAXCDUADCFyZMnKy0tze3Ppk2boj08ADGA5ScAplBXV+fxyIQxY8Zo5MiRgzwiALGGUAMAAOICy08AACAuEGoAAEBcINQAAIC4QKgBAABxgVADAADiAqEGAADEBUINAACIC4QaAAAQF/4fBTFfYOUv3E8AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Combine modelled and observed gauge data and compare\n", "joined_df = gauge_df.join(tide_df)\n",