import intake
import hvplot.pandas
import hvplot.xarray
import cook_inlet_catalogs as cic
import holoviews as hv
CTD Profiles (USGS BOEM): across Cook Inlet¶
USGS Cook Inlet fish and bird survey CTD profiles.
CTD profiles collected in Cook Inlet from 2016-2021 by Mayumi Arimitsu as part of BOEM sponsored research on fish and bird distributions in Cook Inlet. The profiles are collected in July for the years 2016-2021.
The scientific project is described here: https://www.usgs.gov/centers/alaska-science-center/science/cook-inlet-seabird-and-forage-fish-study#overview.
cat = intake.open_catalog(cic.utils.cat_path("ctd_profiles_usgs_boem"))
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
['2016102001',
'2016106001',
'2016120001',
'2016122201',
'2016123001',
'2016123002',
'2016125001',
'2016126001',
'2016126002',
'2016205701',
'2016206001',
'2016221001',
'2016223001',
'2016223002',
'2016224001',
'2016225001',
'2016226001',
'2017101001',
'2017103001',
'2017120001',
'2017122001',
'2017123001',
'2017124001',
'2017125001',
'2017125002',
'2017201001',
'2017204001',
'2017205001',
'2017206001',
'2017207001',
'2017212001',
'2017214001',
'2017220001',
'2017223001',
'2017224001',
'2017225001',
'2018104001',
'2018120001',
'2018121001',
'2018122001',
'2018123001',
'2018124001',
'2018125001',
'2018126001',
'2018203001',
'2018203002',
'2018205001',
'2018208001',
'2018214002',
'2018221001',
'2018223001',
'2018223002',
'2018225001',
'2019106001',
'2019121001',
'2019122001',
'2019123001',
'2019125001',
'2019126001',
'2019205001',
'2019210001',
'2019221001',
'2019223001',
'2019223002',
'2019226001',
'2021105001',
'2021122001',
'2021123001',
'2021124001',
'2021125001',
'2021126001',
'2021205001',
'2021210001',
'2021221001',
'2021223001',
'2021223002',
'2021224001',
'2021226001']
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
2016120001
| date_time | station_number | location | ctd_latitude | ctd_longitude | pressure | temp | C0Sm | DzdtM | Par | Sbeox0MgL | Sbeox0PS | SvCM | CStarAt0 | CStarTr0 | salt | FlECOAFL | TurbWETntu0 | Ph | OxsatMgL | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2016-07-17 08:33:00 | 2016120001 | Kalgin Island | 60.30618 | -152.19212 | 1 | 13.3170 | 3.337872 | -0.063 | 768.000000 | NaN | NaN | 1492.57 | 1.1178 | 75.6201 | 27.6436 | 1.0242 | 1.7943 | 9.070 | 8.80512 |
| 1 | 2016-07-17 08:33:00 | 2016120001 | Kalgin Island | 60.30618 | -152.19212 | 2 | 13.3214 | 3.336830 | 0.679 | 343.000000 | NaN | NaN | 1492.60 | 1.1350 | 75.2960 | 27.6244 | 1.2115 | 1.9996 | 9.070 | 8.80501 |
| 2 | 2016-07-17 08:33:00 | 2016120001 | Kalgin Island | 60.30618 | -152.19212 | 3 | 13.3134 | 3.336744 | 0.766 | 195.000000 | NaN | NaN | 1492.60 | 1.1468 | 75.0747 | 27.6291 | 1.2266 | 1.9545 | 9.072 | 8.80624 |
| 3 | 2016-07-17 08:33:00 | 2016120001 | Kalgin Island | 60.30618 | -152.19212 | 4 | 13.3086 | 3.336873 | 0.827 | 113.000000 | NaN | NaN | 1492.59 | 1.1625 | 74.7853 | 27.6369 | 1.2101 | 1.9931 | 9.073 | 8.80691 |
| 4 | 2016-07-17 08:33:00 | 2016120001 | Kalgin Island | 60.30618 | -152.19212 | 5 | 13.3061 | 3.337038 | 1.059 | 73.400000 | NaN | NaN | 1492.62 | 1.2420 | 73.3089 | 27.6367 | 1.1938 | 2.1567 | 9.075 | 8.80720 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 62 | 2016-07-17 08:33:00 | 2016120001 | Kalgin Island | 60.30618 | -152.19212 | 63 | 12.4617 | 3.386520 | 0.732 | 0.000015 | NaN | NaN | 1491.95 | 3.9815 | 36.9784 | 28.7044 | 0.9993 | 9.8916 | 9.189 | 8.90686 |
| 63 | 2016-07-17 08:33:00 | 2016120001 | Kalgin Island | 60.30618 | -152.19212 | 64 | 12.4581 | 3.386749 | 0.874 | 0.000028 | NaN | NaN | 1491.96 | 4.5403 | 32.2270 | 28.7119 | 1.0523 | 10.4878 | 9.189 | 8.90729 |
| 64 | 2016-07-17 08:33:00 | 2016120001 | Kalgin Island | 60.30618 | -152.19212 | 65 | 12.4601 | 3.386667 | 0.882 | 0.000019 | NaN | NaN | 1491.98 | 4.6604 | 31.2080 | 28.7095 | 1.0470 | 10.1999 | 9.194 | 8.90706 |
| 65 | 2016-07-17 08:33:00 | 2016120001 | Kalgin Island | 60.30618 | -152.19212 | 66 | 12.4604 | 3.386730 | 0.727 | 0.000009 | NaN | NaN | 1492.00 | 4.3089 | 34.0654 | 28.7060 | 1.0759 | 9.9825 | 9.195 | 8.90700 |
| 66 | 2016-07-17 08:33:00 | 2016120001 | Kalgin Island | 60.30618 | -152.19212 | 67 | 12.4550 | 3.387197 | 0.055 | 0.000022 | NaN | NaN | 1492.00 | 4.0479 | 36.5550 | 28.7163 | 1.0347 | 13.3594 | 9.202 | 8.90758 |
67 rows × 20 columns
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)
['data']
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[6], line 11
9 if "dynamic" in plot_kwargs:
10 plot_kwargs["dynamic"] = False
---> 11 plots.append(cat[dataset_id].ToHvPlot(**plot_kwargs).read())
12 hv.Layout(plots).cols(1)
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/readers/convert.py:629, in Pipeline._read(self, discover, **kwargs)
627 kw = kwargs if i == len(self.steps) else {}
628 if i:
--> 629 data = self._read_stage_n(i, data=data, **kw)
630 else:
631 data = self._read_stage_n(i, discover=discover, **kw)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/convert.py:615, in Pipeline._read_stage_n(self, stage, discover, **kwargs)
613 return func(metadata=self.metadata).discover(*arg, **kw2)
614 else:
--> 615 return func(metadata=self.metadata).read(*arg, **kw2)
616 elif isinstance(func, BaseReader):
617 if discover:
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/readers/convert.py:62, in BaseConverter._read(self, data, *args, **kwargs)
60 if isinstance(data, BaseReader):
61 data = data.read()
---> 62 return self.run(data, *args, **kwargs)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/convert.py:192, in ToHvPlot.run(self, data, explorer, **kw)
189 if explorer:
190 # this is actually a hvplot.ui:hvPlotExplorer and only allows tabular data
191 return hvplot.explorer(data, **kw)
--> 192 return hvplot.hvPlot(data, **kw)()
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/hvplot/plotting/core.py:95, in hvPlotBase.__call__(self, x, y, kind, **kwds)
92 plot = self._get_converter(x, y, kind, **kwds)(kind, x, y)
93 return pn.panel(plot, **panel_dict)
---> 95 return self._get_converter(x, y, kind, **kwds)(kind, x, y)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/hvplot/converter.py:2066, in HoloViewsConverter.__call__(self, kind, x, y)
2063 dataset = Dataset(data)
2064 dataset = redim_(dataset, **self._redim)
-> 2066 obj = method(x, y)
2067 obj._dataset = dataset
2069 if self.crs and self.project:
2070 # Apply projection before rasterizing
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/hvplot/converter.py:2601, in HoloViewsConverter.line(self, x, y, data)
2599 def line(self, x=None, y=None, data=None):
2600 self._error_if_unavailable('line')
-> 2601 return self.chart(Curve, x, y, data)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/hvplot/converter.py:2588, in HoloViewsConverter.chart(self, element, x, y, data)
2586 charts = []
2587 for c in y:
-> 2588 ydim = hv.Dimension(c, label=self.value_label)
2589 kdims, vdims = self._get_dimensions([x], [ydim])
2590 chart = element(data, kdims, vdims)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/holoviews/core/dimension.py:285, in Dimension.__init__(self, spec, **params)
283 raise ValueError('Dimension name cannot be empty')
284 if not all_params['label']:
--> 285 raise ValueError('Dimension label cannot be empty')
287 values = params.get('values', [])
288 if isinstance(values, str) and values == 'initial':
ValueError: Dimension label cannot be empty