import intake
import hvplot.pandas
import hvplot.xarray
import cook_inlet_catalogs as cic
import holoviews as hv
Moorings (NOAA): across Cook Inlet¶
Moorings from NOAA
Geese Island, Sitkalidak Island, Bear Cove, Anchorage, Kodiak Island, Alitak, Seldovia, Old Harbor, Boulder Point, Albatross Banks, Shelikof Strait
cat = intake.open_catalog(cic.utils.cat_path("moorings_noaa"))
Plot all datasets in catalog¶
dd, ddlabels = cic.utils.combine_datasets_for_map(cat)
dd.hvplot(**cat.metadata["map"]) * ddlabels.hvplot(**cat.metadata["maplabels"])
List available datasets in the catalog¶
dataset_ids = list(cat)
dataset_ids
['boulder-point',
'geese-island-gps-tide-buoy',
'noaa_nos_co_ops_9455500',
'noaa_nos_co_ops_9455595',
'noaa_nos_co_ops_9455920',
'noaa_nos_co_ops_9457292',
'noaa_nos_co_ops_9457804',
'old-harbor-1',
'sitkalidak-island-gps-tide-bu',
'wmo_46077']
Select one dataset to investigate¶
try:
dataset_id = dataset_ids[2]
except:
dataset_id = dataset_ids[0]
print(dataset_id)
dd = cat[dataset_id].read()
dd
noaa_nos_co_ops_9455500
---------------------------------------------------------------------------
HTTPStatusError Traceback (most recent call last)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/erddapy/core/url.py:71, in _urlopen(url, auth, **kwargs)
70 try:
---> 71 response.raise_for_status()
72 except httpx.HTTPError as err:
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/httpx/_models.py:829, in Response.raise_for_status(self)
828 message = message.format(self, error_type=error_type)
--> 829 raise HTTPStatusError(message, request=request, response=self)
HTTPStatusError: Server error '502 Bad Gateway' for url 'https://erddap.aoos.org/erddap/tabledap/noaa_nos_co_ops_9455500.csv?time%2Clatitude%2Clongitude%2Cz%2Csea_water_temperature%2Cwater_surface_above_station_datum%26time%3E%3D915148800.0'
For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/502
The above exception was the direct cause of the following exception:
HTTPError Traceback (most recent call last)
Cell In[5], line 7
4 dataset_id = dataset_ids[0]
5 print(dataset_id)
----> 7 dd = cat[dataset_id].read()
8 dd
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/readers.py:121, in BaseReader.read(self, *args, **kwargs)
119 kw.update(kwargs)
120 args = kw.pop("args", ()) or args
--> 121 return self._read(*args, **kw)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake_erddap/erddap.py:187, in TableDAPReader._read(self, server, dataset_id, variables, mask_failed_qartod, dropna, cache_kwargs, open_kwargs, constraints, **kw)
182 print(
183 "If your filenames are too long, input only a few variables"
184 "to return or input into cache kwargs `same_names=False`"
185 )
186 else:
--> 187 dataframe: pd.DataFrame = e.to_pandas(
188 requests_kwargs={"timeout": 60}, **open_kwargs
189 )
190 if mask_failed_qartod:
191 dataframe = self.run_mask_failed_qartod(dataframe)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/erddapy/erddapy.py:420, in ERDDAP.to_pandas(self, requests_kwargs, **kw)
418 distinct = kw.pop("distinct", False)
419 url = self.get_download_url(response=response, distinct=distinct)
--> 420 return to_pandas(
421 url,
422 requests_kwargs=requests_kwargs,
423 pandas_kwargs=dict(**kw),
424 )
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/erddapy/core/interfaces.py:37, in to_pandas(url, requests_kwargs, pandas_kwargs)
26 def to_pandas(
27 url: str,
28 requests_kwargs: dict | None = None,
29 pandas_kwargs: dict | None = None,
30 ) -> pd.DataFrame:
31 """Convert a URL to Pandas DataFrame.
32
33 url: URL to request data from.
34 requests_kwargs: arguments to be passed to urlopen method.
35 **pandas_kwargs: kwargs to be passed to third-party library (pandas).
36 """
---> 37 data = urlopen(url, requests_kwargs or {})
38 try:
39 return pd.read_csv(data, **(pandas_kwargs or {}))
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/erddapy/core/url.py:101, in urlopen(url, requests_kwargs)
99 if requests_kwargs is None:
100 requests_kwargs = {}
--> 101 data = _urlopen(url, **requests_kwargs)
102 data.seek(0)
103 return data
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/erddapy/core/url.py:74, in _urlopen(url, auth, **kwargs)
72 except httpx.HTTPError as err:
73 msg = f"{response.content.decode()}"
---> 74 raise httpx.HTTPError(msg) from err
75 return io.BytesIO(response.content)
HTTPError: <html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.22.1</center>
</body>
</html>
Plot one dataset¶
keys = list(cat[dataset_id].metadata["plots"].keys())
print(keys)
plots = []
for key in keys:
plot_kwargs = cat[dataset_id].metadata["plots"][key]
if "clim" in plot_kwargs and isinstance(plot_kwargs["clim"], list):
plot_kwargs["clim"] = tuple(plot_kwargs["clim"])
if "dynamic" in plot_kwargs:
plot_kwargs["dynamic"] = False
plots.append(cat[dataset_id].ToHvPlot(**plot_kwargs).read())
hv.Layout(plots).cols(1)