Detailed usage¶
[1]:
import ocean_data_gateway as odg
import pandas as pd
pd.set_option('display.max_rows', 5)
General Options¶
[2]:
kw = {
"min_lon": -124.0,
"max_lon": -123.0,
"min_lat": 39.0,
"max_lat": 40.0,
"min_time": '2021-4-1',
"max_time": '2021-4-2',
}
Parallel¶
You can control readers individually as needed. For example, you could input the keyword parallel, which every reader accepts, per individual reader (in case you want different values for different readers), or you can input it for all readers by including it in kwargs generally. It runs in parallel using the joblib Parallel and delayed modules with multiprocesses — running loops on different cores.
[3]:
kwargs = {
'kw': kw,
'approach': 'region',
'parallel': True,
'erddap': {
'known_server': 'ioos',
# 'parallel': False,
'variables': 'salinity',
},
'axds': {'catalog_name': None,
# 'parallel': True,
'axds_type': 'platform2',
'variables': 'Salinity'},
}
data = odg.Gateway(**kwargs)
Reader Choice¶
Your reader choices can be selected as follows, where odg.erddap connects to ERDDAP servers, the odg.axds connects to Axiom databases, and the odg.local enables easy local file read-in. If you don’t input any reader, it will use all of them. Alternatively you can input some subset.
[4]:
readers = [odg.erddap,
odg.axds,
odg.local]
Use only ERDDAP reader and Axiom reader:
[5]:
data = odg.Gateway(kw=kw, approach='region',
readers=[odg.erddap,
odg.axds])
Region¶
Search by time/space region.
All variables¶
Don’t input anything with the variables keyword, or use 'variables': None:
[6]:
kwargs = {
'kw': kw,
'approach': 'region',
'readers': [odg.erddap,
odg.axds],
'variables': None
}
data = odg.Gateway(**kwargs)
By variables(s)¶
If no variables are specified for a given reader, datasets with any variables will be returned from a search. This is most relevant for a region search.
However, if you want to specify a variable or variables, keep in mind that different readers have different names for variables, which is why you can’t just input a variable name for all the readers.
This is only relevant for the ERDDAP and Axiom readers currently (it will retain all variables in local files). The Axiom reader of type platform2 will search by variable where the available variable names are specified, and of type layer_group, the query method will be used for variable searching.
Let’s say you want to search for salinity. You can input the base of the word as variables (“sal” or “salinity” but not “salt” since the checker searches for matches with the whole input variable name and “salt” isn’t used for any variable names) and the code will make sure it exactly matches a known variable name. If it cannot match, it will throw an error with suggestions. This is not done automatically since for example “soil_salinity” matches for “salinity”. You need to do this for each
known_server for the erddap reader separately, and specific variables will only be used to filter for the axds reader for axds_type='platform2'. Any variable names can be input for the axds reader for axds_type='layer_group'.
[7]:
kwargs = {
'kw': kw,
'approach': 'region',
'stations': '8771972',
'readers': [odg.erddap,
odg.axds],
'erddap': {
'known_server': ['coastwatch','ioos'],
'variables': [['sal'],
['sal']]
},
'axds': {
'axds_type': ['platform2','layer_group'],
'variables': ['sal','salinity']},
}
data = odg.Gateway(**kwargs)
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-7-2c87bad22b62> in <module>
17
18
---> 19 data = odg.Gateway(**kwargs)
~/projects/ocean_data_gateway/ocean_data_gateway/gateway.py in __init__(self, **kwargs)
103
104 self.kwargs = kwargs
--> 105 self.sources
106
107 @property
~/projects/ocean_data_gateway/ocean_data_gateway/gateway.py in sources(self)
214
215 if self.kwargs_all["approach"] == "region":
--> 216 reader = source.region(args_in)
217 elif self.kwargs_all["approach"] == "stations":
218 reader = source.stations(args_in)
~/projects/ocean_data_gateway/ocean_data_gateway/readers/erddap.py in __init__(self, kwargs)
757 # make sure variables are on parameter list
758 if variables is not None:
--> 759 self.check_variables(variables)
760 self.variables = variables
761
~/projects/ocean_data_gateway/ocean_data_gateway/readers/erddap.py in check_variables(self, variables, verbose)
696 \nor search parameter group values with `ErddapReader().search_variables({variables})`.\
697 \n\n Try some of the following variables:\n{str(self.search_variables(variables))}" # \
--> 698 assert condition, assertion
699
700 if condition and verbose:
AssertionError: The input variables are not exact matches to ok variables for known_server ioos.
Check all parameter group values with `ErddapReader().all_variables()`
or search parameter group values with `ErddapReader().search_variables(['sal'])`.
Try some of the following variables:
count
variable
salinity 954
salinity_qc 954
... ...
sea_water_practical_salinity_4161sc_a_qc_agg 1
sea_water_practical_salinity_10091sc_a 1
[1148 rows x 1 columns]
You can do this process iteratively, trying out variables for each of the ERDDAP and Axiom readers until you get what you want. Once you have selected variables that match, the code won’t complain anymore.
[8]:
kwargs = {
'kw': kw,
'approach': 'region',
'readers': [odg.erddap,
odg.axds],
'erddap': {
'known_server': ['coastwatch','ioos'],
'variables': [['salinity', 'sea_water_salinity'],
['salinity', 'sea_water_practical_salinity']]
},
'axds': {
'axds_type': ['platform2','layer_group'],
'variables': ['Salinity','Salinity']},
}
data = odg.Gateway(**kwargs)
Actions with variables¶
Alternatively you can proactively search for variables for each reader. Currently the ways to call the individiual libraries aren’t pretty but they’ll work. Note that the number of times a variable is used in the system is also included under “count” to see what the popular names are (many are not widely used).
All available variables¶
Return all variables for the two ERDDAP known_servers, then for the Axiom reader axds_type='platform2'.
[9]:
odg.erddap.ErddapReader(known_server='coastwatch').all_variables().head()
[9]:
| count | |
|---|---|
| variable | |
| abund_m3 | 2 |
| ac_line | 1 |
| ac_sta | 1 |
| adg_412 | 8 |
| adg_412_bias | 8 |
[10]:
odg.erddap.ErddapReader(known_server='ioos').all_variables().head()
[10]:
| count | |
|---|---|
| variable | |
| air_pressure | 4028 |
| air_pressure_10011met_a | 2 |
| air_pressure_10311ahlm_a | 2 |
| air_pressure_10311ahlm_a_qc_agg | 1 |
| air_pressure_10311ahlm_a_qc_tests | 1 |
The Axiom reader variables are for axds_type='platform2' not axds_type='layer_group since the latter are more unique grid products that don’t conform well.
[11]:
odg.axds.AxdsReader(axds_type='platform2').all_variables().head()
[11]:
| count | |
|---|---|
| variable | |
| Ammonium | 23 |
| Atmospheric Pressure: Air Pressure at Sea Level | 362 |
| Atmospheric Pressure: Barometric Pressure | 4152 |
| Backscatter Intensity | 286 |
| Battery | 2705 |
All available variables, sorted by count¶
[12]:
odg.erddap.ErddapReader(known_server='coastwatch').search_variables('').head()
[12]:
| count | |
|---|---|
| variable | |
| time | 1637 |
| longitude | 1352 |
| latitude | 1352 |
| altitude | 725 |
| sst | 208 |
[13]:
odg.erddap.ErddapReader(known_server='ioos').search_variables('').head()
[13]:
| count | |
|---|---|
| variable | |
| time | 38331 |
| longitude | 38331 |
| latitude | 38331 |
| z | 37377 |
| station | 37377 |
[14]:
odg.axds.AxdsReader(axds_type='platform2').search_variables('').head()
[14]:
| count | |
|---|---|
| variable | |
| Stream Height | 19758 |
| Water Surface above Datum | 19489 |
| Stream Flow | 15203 |
| Temperature: Air Temperature | 8369 |
| Precipitation | 7364 |
Variables search, sorted by count¶
[15]:
odg.erddap.ErddapReader(known_server='coastwatch').search_variables('sal').head()
[15]:
| count | |
|---|---|
| variable | |
| salinity | 73 |
| salt | 4 |
| sea_water_salinity | 4 |
| surface_salinity_trend | 2 |
| bucket_salinity | 1 |
[16]:
odg.erddap.ErddapReader(known_server='ioos').search_variables('sal').head()
[16]:
| count | |
|---|---|
| variable | |
| salinity | 954 |
| salinity_qc | 954 |
| sea_water_practical_salinity | 778 |
| soil_salinity_qc_agg | 622 |
| soil_salinity | 622 |
[17]:
odg.axds.AxdsReader(axds_type='platform2').search_variables('sal').head()
[17]:
| count | |
|---|---|
| variable | |
| Salinity | 3204 |
| Soil Salinity | 622 |
Check variables¶
And finally you can check to make sure you have good variables. No news is good news in this. Reminder that you don’t check for axds reader for axds_type=‘layer_group’ because that is searched for in the database just by name as a query.
[18]:
odg.erddap.ErddapReader(known_server='coastwatch').check_variables(['salinity', 'sea_water_salinity'])
[19]:
odg.erddap.ErddapReader(known_server='ioos').check_variables(['salinity', 'sea_water_practical_salinity'])
[20]:
odg.axds.AxdsReader(axds_type='platform2').check_variables('Salinity')
Or, all together in one call
[21]:
kwargs = {
'kw': kw,
'approach': 'region',
'readers': [odg.erddap,
odg.axds],
'erddap': {
'known_server': ['coastwatch','ioos'],
'variables': [['salinity', 'sea_water_salinity'],
['salinity', 'sea_water_practical_salinity']]
},
'axds': {
'axds_type': ['platform2','layer_group'],
'variables': ['Salinity',
'salinity' # this one can be called anything that might make a match
]},
}
data = odg.Gateway(**kwargs)
[22]:
data.dataset_ids
[22]:
[[],
[],
[],
['5104d464-8a30-4720-aeb7-57e801844e6e',
'd359748a-fe78-11e7-8128-0023aeec7b98',
'99737f5d-c984-4bf0-82cd-18508fea413f',
'3261285c-e3c9-45fd-b777-e6d681a3eaad']]
Stations¶
You can search by either a general station name to be searched for, or by the specific database dataset_id if you know it (from performing a search previously, for example).
By station name¶
In the case that you know names of stations, but they might not be the names in the particular databases, you can use this approach.
In the follow example, I use some station id’s I know off the top of my head. Note that the dataset_ids are returned in order of the readers in a list of lists that are being used (ERDDAP IOOS, ERDDAP Coastwatch, Axiom platform2, Axiom layer_group, localreader). The module will check all of the readers for the station names.
There are 2 listings for the station “SFBOFS” because there are two listings in the database: one for unstructured grid output and one for interpolated structured grid output. The module (not ‘layer_group’) uuid is the “dataset_id” for axds_type='layer_group' searches/stations.
[23]:
kwargs = {
'approach': 'stations',
'stations': ['8771972','SFBOFS','42020','TABS_B']
}
data = odg.Gateway(**kwargs)
[24]:
data.dataset_ids
[24]:
[['tabs_b', 'wmo_42020', 'noaa_nos_co_ops_8771972'],
[],
[],
['03158b5d-f712-45f2-b05d-e4954372c1ce',
'794f7bba-b3d2-4da8-8465-408c27ab433b'],
[]]
By Dataset ID¶
Once we know the database dataset_ids, we can use them directly for future searches. Note that they need to be associated with the correct reader/database, as shown in the call below.
[25]:
kwargs = {
'approach': 'stations',
'erddap': {
'known_server': 'ioos',
'dataset_ids': [['tabs_b', 'wmo_42020', 'noaa_nos_co_ops_8771972']]
},
'axds': {
'axds_type': 'layer_group',
'dataset_ids': '03158b5d-f712-45f2-b05d-e4954372c1ce'},
}
data = odg.Gateway(**kwargs)
[26]:
data.dataset_ids
[26]:
[['tabs_b', 'wmo_42020', 'noaa_nos_co_ops_8771972'],
['03158b5d-f712-45f2-b05d-e4954372c1ce'],
[]]
For axds_type=='layer_group', Axiom module’s uuid’s should be used as dataset_ids (these are returned from the search above in “By station name”). If for some reason you have an Axiom ‘layer_group’ uuid specifically, you should input that as a “station”. In both cases, the module uuid is returned as the dataset_id because that is how ‘layer_group’ information is organized.
[27]:
# Example with module uuid input as dataset_id for 'layer_group'
kwargs = {
'approach': 'stations',
'axds': {
'axds_type': 'layer_group',
'dataset_ids': '03158b5d-f712-45f2-b05d-e4954372c1ce'}
}
data = odg.Gateway(**kwargs)
data.dataset_ids
[27]:
[[], [], ['03158b5d-f712-45f2-b05d-e4954372c1ce'], []]
[28]:
# Example with layer_group uuid input as station for 'layer_group'
kwargs = {
'approach': 'stations',
'axds': {
'axds_type': 'layer_group',
'stations': '04784baa-6be8-4aa7-b039-269f35e92e91'}
}
data = odg.Gateway(**kwargs)
data.dataset_ids
[28]:
[[], [], ['03158b5d-f712-45f2-b05d-e4954372c1ce'], []]
Include Time Range¶
By default, the full available time range will be returned for each dataset unless the user specifies one to narrow the returned datasets in time.
Data defined in previous cell shows long time range for any of the sources you can tell there are 4 sources considered since the list in the previous code cell has 4 elements.
[29]:
data.sources[0].kw
[29]:
{'min_time': '1900-01-01', 'max_time': '2100-12-31'}
A shorter time range is shown in the following since it is specified.
[30]:
kwargs = {
'kw': {'min_time': '2017-1-1',
'max_time': '2017-1-2'},
'approach': 'stations',
'stations': ['8771972']
}
data = odg.Gateway(**kwargs)
data.sources[0].kw
[30]:
{'min_time': '2017-1-1', 'max_time': '2017-1-2'}
Reader Options¶
ERDDAP Reader¶
By default, the Data module will use erddap with two known servers: IOOS and Coastwatch.
[31]:
kwargs = {
'kw': kw,
'approach': 'region',
'readers': [odg.erddap]
}
data = odg.Gateway(**kwargs)
data.sources[0].name, data.sources[1].name
[31]:
('erddap_ioos', 'erddap_coastwatch')
Choose one known server¶
The user can specify to use just one of these:
[32]:
kwargs = {
'kw': kw,
'approach': 'region',
'readers': [odg.erddap],
'erddap': {
'known_server': ['ioos'], # or 'coastwatch'
}
}
data = odg.Gateway(**kwargs)
data.sources[0].name
[32]:
'erddap_ioos'
New ERDDAP Server¶
You can give the necessary information to use a different ERDDAP server.
[33]:
kwargs = {
'kw': kw,
'approach': 'region',
'readers': [odg.erddap],
'erddap': {
'known_server': 'ifremer',
'protocol': 'tabledap',
'server': 'http://www.ifremer.fr/erddap'
}
}
data = odg.Gateway(**kwargs)
[34]:
data.dataset_ids
[34]:
[['OceanGlidersGDACTrajectories',
'ArgoFloats-synthetic-BGC',
'ArgoFloats',
'copernicus-fos']]
AXDS Reader¶
By default the Gateway class will use axds with two types of data: ‘platform2’ (like gliders) or ‘layer_group’ (model output, gridded products).
[35]:
kwargs = {
'kw': kw,
'approach': 'region',
'readers': [odg.axds]
}
data = odg.Gateway(**kwargs)
data.sources[0].name, data.sources[1].name
[35]:
('axds_platform2', 'axds_layer_group')
Specify AXDS Type¶
The user can specify to use just one of these:
[36]:
kwargs = {
'kw': kw,
'approach': 'region',
'readers': [odg.axds],
'axds': {
'axds_type': 'platform2', # or 'layer_group'
}
}
data = odg.Gateway(**kwargs)
data.sources[0].name
[36]:
'axds_platform2'
Local Files¶
I can’t remember the process by which I got these files from a portal now, but they are just meant to be sample files anyway. Hopefully this will work reasonably well with other files too.
The region and stations approach doesn’t work as well with local files if the user would only be inputting filenames if they know they want to use them. It could be useful to use the approaches in the case that the user has a bunch of files somewhere or a catalog that already exists and they just want to point to that and have the code filter down. That code is not in place but could be if that is a good use case.
So it currently doesn’t matter which approach is used for local files. There is a default kw and region if nothing is input and in this case that is fine since neither are used.
[37]:
filenames = ['/Users/kthyng/Downloads/ANIMIDA_III_BeaufortSea_2014-2015/kasper-netcdf/ANIMctd14.nc',
'/Users/kthyng/Downloads/Harrison_Bay_CTD_MooringData_2014-2015/Harrison_Bay_data/SBE16plus_01604787_2015_08_09_final.csv']
data = odg.Gateway(readers=odg.local, local={'filenames': filenames})
Can look at metadata or data
[38]:
data.meta[0]
[38]:
| time_variable | geospatial_lon_min | geospatial_lat_max | variables | geospatial_lat_min | catalog_dir | lon_variable | time_coverage_end | download_url | coords | geospatial_lon_max | time_coverage_start | lat_variable | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ANIMctd14.nc | time | -152.581114 | 71.488255 | [station_name, sal, tem, fluoro, turbidity, PA... | 69.850874 | /Users/kthyng/.ocean_data_gateway/catalogs/ | lon | 2014-08-07T21:35:54.000004381 | /Users/kthyng/Downloads/ANIMIDA_III_BeaufortSe... | [time, lat, lon, pressure] | -141.717438 | 2014-07-31T15:33:33.999999314 | lat |
| SBE16plus_01604787_2015_08_09_final.csv | NaN | -150.237 | 70.6349 | [time, latitude, longitude, water_depth, Condu... | 70.6349 | /Users/kthyng/.ocean_data_gateway/catalogs/ | NaN | 2015-08-09T06:00:05Z | /Users/kthyng/Downloads/Harrison_Bay_CTD_Moori... | NaN | -150.237 | 2014-08-01T12:00:05Z | NaN |
[39]:
data.data[0]()['ANIMctd14.nc']
[39]:
<xarray.Dataset>
Dimensions: (nzmax: 1587, profile: 57)
Coordinates:
time (profile) datetime64[ns] 2014-08-07T02:02:34.0000028...
lat (profile) float64 71.27 71.23 71.18 ... 70.45 70.46
lon (profile) float64 -152.2 -152.3 ... -145.8 -145.8
pressure (profile, nzmax) float64 2.187 2.399 ... -9.999e+03
Dimensions without coordinates: nzmax, profile
Data variables:
station_name (profile) |S12 b'1.01 ' ... b'T-XA '
sal (profile, nzmax) float64 24.85 24.85 ... -9.999e+03
tem (profile, nzmax) float64 1.625 1.589 ... -9.999e+03
fluoro (profile, nzmax) float64 0.6842 0.7452 ... -9.999e+03
turbidity (profile, nzmax) float64 0.604 0.6895 ... -9.999e+03
PAR (profile, nzmax) float64 9.596 9.097 ... -9.999e+03
platform_variable float64 9.969e+36
instrument_variable float64 9.969e+36
crs float64 9.969e+36
Attributes: (12/35)
Conventions: CF-1.6
Metadata_Conventions: Unidata Dataset Discovery v1.0
featureType: profile
cdm_data_type: Station
nodc_template_version: NODC_NetCDF_Profile_Incomplete_Templete_v1.1
standard_name_vocabulary: NetCDF Climate and Forecast(CF) Metadata Conv...
... ...
keywords: OCEAN TEMPERATURE,SALINITY,TURBIDITY,WATER PR...
acknowledgement: Kasper, J., CTD measurements collected from s...
publisher_name: Tim Whiteaker
publisher_email: whiteaker@utexas.edu
publisher_url: http://arcticstudies.org/animida_iii
license: Creative Commons Attribution 3.0 United State...- nzmax: 1587
- profile: 57
- time(profile)datetime64[ns]2014-08-07T02:02:34.000002890 .....
- long_name :
- Time
- standard_name :
- time
- axis :
- T
array(['2014-08-07T02:02:34.000002890', '2014-08-07T02:31:30.999995917', '2014-08-07T03:04:34.999997019', '2014-08-07T03:44:35.000004842', '2014-08-07T05:30:49.000002443', '2014-08-07T06:43:14.999996200', '2014-08-07T07:51:52.000004947', '2014-08-07T08:41:06.999999806', '2014-08-07T09:38:47.999996021', '2014-08-07T10:24:33.999997973', '2014-08-07T11:08:58.999996706', '2014-08-07T11:57:20.000002831', '2014-08-07T12:58:43.999996483', '2014-08-07T14:00:17.000001668', '2014-08-06T21:46:32.000003904', '2014-08-06T23:56:41.999997720', '2014-08-01T07:51:47.000001892', '2014-08-05T11:06:11.999997273', '2014-08-05T14:31:20.999999865', '2014-08-05T07:19:40.000003427', '2014-08-05T03:39:31.999998763', '2014-08-04T23:54:28.000000342', '2014-08-02T15:00:31.999997422', '2014-08-04T05:47:36.999996677', '2014-08-04T09:42:31.000003516', '2014-08-02T19:28:25.000002309', '2014-08-02T22:45:06.999998912', '2014-08-03T03:35:26.999999955', '2014-08-03T13:01:52.999997288', '2014-08-03T09:12:38.000002428', '2014-08-03T16:41:24.999996051', '2014-08-04T13:25:18.000000715', '2014-07-31T20:06:57.999999225', '2014-08-06T11:58:55.000000521', '2014-08-07T17:54:20.000003501', '2014-08-01T12:02:37.000003382', '2014-08-01T19:54:32.000002115', '2014-08-06T19:33:12.000004649', '2014-08-06T17:13:42.999995201', '2014-08-06T04:18:59.999999105', '2014-07-31T16:05:03.000002726', '2014-07-31T21:53:57.000004202', '2014-08-06T08:43:29.000004082', '2014-08-01T02:10:38.000002875', '2014-08-05T20:54:18.999998867', '2014-08-05T17:52:53.000002652', '2014-07-31T15:33:33.999999314', '2014-08-02T06:48:27.999998331', '2014-08-02T01:29:06.000001207', '2014-08-02T06:06:59.999995082', '2014-08-02T05:05:41.000004485', '2014-08-02T02:48:15.000001788', '2014-08-02T11:58:45.999999046', '2014-08-07T21:35:54.000004381', '2014-08-02T07:29:54.999996945', '2014-08-02T08:46:09.000001251', '2014-08-02T10:39:29.000001624'], dtype='datetime64[ns]') - lat(profile)float6471.27 71.23 71.18 ... 70.45 70.46
- long_name :
- Latitude
- standard_name :
- latitude
- units :
- degrees_north
- axis :
- Y
array([71.27225956, 71.22546608, 71.1828751 , 71.11893327, 71.07164454, 71.01888685, 70.95546243, 70.90777605, 70.85752238, 70.81290955, 70.77344161, 70.72899046, 70.67407551, 70.63143392, 71.48825494, 71.3200445 , 70.71264365, 70.88461349, 71.11719392, 70.67183686, 70.64589157, 70.73439543, 70.33155618, 70.06498806, 70.1456518 , 70.35776341, 70.27504723, 70.19071299, 70.00356447, 70.26059707, 69.85087388, 70.15870796, 70.67175168, 70.95305402, 70.58023353, 70.63878476, 70.43679492, 71.40786111, 71.28257336, 70.67243945, 70.75055769, 70.84894449, 70.91312332, 70.75745466, 70.96323434, 71.2054922 , 70.74851899, 70.36377752, 70.42197757, 70.36001923, 70.31633163, 70.36482493, 70.53614961, 70.50559223, 70.38211278, 70.45137916, 70.45610999]) - lon(profile)float64-152.2 -152.3 ... -145.8 -145.8
- long_name :
- Longitude
- standard_name :
- longitude
- units :
- degrees_east
- axis :
- X
array([-152.18736186, -152.26558414, -152.36990205, -152.47346189, -152.58111431, -152.28765531, -151.92403401, -151.67217388, -151.41466334, -151.19357953, -150.96530218, -150.75113539, -150.48551697, -150.22267472, -152.09878182, -152.09031571, -148.76676686, -148.13566522, -148.10803545, -147.59097709, -146.66101925, -145.90928921, -145.33509426, -144.77811194, -144.79985958, -144.49358368, -143.90994133, -142.90462939, -141.96291807, -141.76024626, -141.71743821, -145.32177925, -150.15522639, -151.35422264, -148.93345328, -149.27168521, -147.34319735, -151.56710266, -151.55962152, -151.18764268, -150.46985537, -150.06153782, -151.99511685, -149.44081914, -148.99688393, -149.03136448, -150.47462316, -146.01765707, -146.18176652, -145.9058253 , -146.08181184, -146.11831133, -145.7092749 , -148.71190803, -145.98302287, -145.83675661, -145.80932285]) - pressure(profile, nzmax)float642.187 2.399 ... -9.999e+03
- long_name :
- pressure
- units :
- decibars
- standard_name :
- sea_water_pressure
- nodc_name :
- HYDROSTATIC PRESSURE
- FillValue :
- -9999.0
- axis :
- Z
- positive :
- down
array([[ 2.187e+00, 2.399e+00, 2.622e+00, ..., -9.999e+03, -9.999e+03, -9.999e+03], [ 2.093e+00, 2.232e+00, 2.382e+00, ..., -9.999e+03, -9.999e+03, -9.999e+03], [ 2.070e+00, 2.212e+00, 2.366e+00, ..., -9.999e+03, -9.999e+03, -9.999e+03], ..., [ 2.009e+00, 2.022e+00, 2.038e+00, ..., -9.999e+03, -9.999e+03, -9.999e+03], [ 2.021e+00, 2.081e+00, 2.159e+00, ..., -9.999e+03, -9.999e+03, -9.999e+03], [ 2.017e+00, 2.087e+00, 2.174e+00, ..., -9.999e+03, -9.999e+03, -9.999e+03]])
- station_name(profile)|S12b'1.01 ' ... b'T-XA '
- long_name :
- Official station name
array([b'1.01 ', b'1.02 ', b'1.03 ', b'1.04 ', b'1.05 ', b'1.06 ', b'1.07 ', b'1.08 ', b'1.09 ', b'1.10 ', b'1.11 ', b'1.12 ', b'1.13 ', b'1.14 ', b'1.2 ', b'1 ', b'10 ', b'11 ', b'11A ', b'12 ', b'15 ', b'16 ', b'18 ', b'1B ', b'1C ', b'20 ', b'21 ', b'22 ', b'23 ', b'24 ', b'25 ', b'2C ', b'4 ', b'5 ', b'5B ', b'5E ', b'5-5 ', b'6.1 ', b'6 ', b'6F ', b'6d-2 ', b'7 ', b'7C ', b'8 ', b'9 ', b'9A ', b'AOOS Mooring', b'HH1-5 ', b'Hex-1 ', b'Hex-12 ', b'Hex-17 ', b'L250-5 ', b'M-4 ', b'N03 ', b'S-XA ', b'T-3 ', b'T-XA '], dtype='|S12') - sal(profile, nzmax)float6424.85 24.85 ... -9.999e+03
- long_name :
- practical salinity
- units :
- PSU
- standard_name :
- sea_water_salinity
- nodc_name :
- SALINITY
- FillValue :
- -9999.0
- grid_mapping :
- crs
- cell_methods :
- time:point lon:point lat:point pressure:point
array([[ 24.84961837, 24.85368677, 24.89387348, ..., -9999. , -9999. , -9999. ], [-9999. , -9999. , 22.11890858, ..., -9999. , -9999. , -9999. ], [ 20.28840937, 20.38098995, 20.5835275 , ..., -9999. , -9999. , -9999. ], ..., [-9999. , -9999. , -9999. , ..., -9999. , -9999. , -9999. ], [ 17.69904968, 17.70329302, 17.69904834, ..., -9999. , -9999. , -9999. ], [ 18.63613017, 18.71405916, 18.79754556, ..., -9999. , -9999. , -9999. ]]) - tem(profile, nzmax)float641.625 1.589 ... -9.999e+03
- long_name :
- temperature
- units :
- degree_Celsius
- standard_name :
- sea_water_temperature
- nodc_name :
- WATER TEMPERATURE
- FillValue :
- -9999.0
- grid_mapping :
- crs
- cell_methods :
- time:point lon:point lat:point pressure:point
array([[ 1.6247e+00, 1.5893e+00, 1.5133e+00, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], [ 1.9580e+00, 1.9317e+00, 1.8825e+00, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], [ 2.5943e+00, 2.4718e+00, 2.2398e+00, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], ..., [-9.9990e+03, -9.9990e+03, -9.9990e+03, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], [ 1.5620e+00, 1.5533e+00, 1.5614e+00, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], [ 1.7342e+00, 1.7512e+00, 1.7733e+00, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03]]) - fluoro(profile, nzmax)float640.6842 0.7452 ... -9.999e+03
- long_name :
- fluorescence
- units :
- milligram per m^3
- nodc_name :
- FLUORESCENCE
- FillValue :
- -9999.0
- grid_mapping :
- crs
- cell_methods :
- time:point lon:point lat:point pressure:point
array([[ 6.842e-01, 7.452e-01, 7.574e-01, ..., -9.999e+03, -9.999e+03, -9.999e+03], [ 4.277e-01, 4.400e-01, 4.400e-01, ..., -9.999e+03, -9.999e+03, -9.999e+03], [ 8.185e-01, 8.063e-01, 8.063e-01, ..., -9.999e+03, -9.999e+03, -9.999e+03], ..., [ 4.766e-01, 4.766e-01, 4.644e-01, ..., -9.999e+03, -9.999e+03, -9.999e+03], [ 6.109e-01, 6.109e-01, 6.231e-01, ..., -9.999e+03, -9.999e+03, -9.999e+03], [ 4.644e-01, 4.766e-01, 4.644e-01, ..., -9.999e+03, -9.999e+03, -9.999e+03]]) - turbidity(profile, nzmax)float640.604 0.6895 ... -9.999e+03
- long_name :
- turbidity
- units :
- NTU
- standard_name :
- sea_water_turbidity
- nodc_name :
- TURBIDITY
- FillValue :
- -9999.0
- grid_mapping :
- crs
- cell_methods :
- time:point lon:point lat:point pressure:point
array([[ 6.0400e-01, 6.8950e-01, 6.8340e-01, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], [ 7.6270e-01, 7.6270e-01, 7.5660e-01, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], [ 1.0314e+00, 1.0436e+00, 1.0924e+00, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], ..., [ 6.6510e-01, 6.6510e-01, 6.4060e-01, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], [ 6.8340e-01, 6.8950e-01, 6.7730e-01, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], [ 6.2840e-01, 6.1620e-01, 6.2840e-01, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03]]) - PAR(profile, nzmax)float649.596 9.097 ... -9.999e+03
- long_name :
- PAR/irraddiance
- units :
- watts per m^2
- nodc_name :
- PHOTOSYNTHETIC ACTIVE RADIATION (PAR)
- FillValue :
- -9999.0
- grid_mapping :
- crs
- cell_methods :
- time:point lon:point lat:point pressure:point
array([[ 9.5961e+00, 9.0970e+00, 8.5034e+00, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], [ 1.1916e+01, 1.0559e+01, 9.3827e+00, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], [ 1.1264e+01, 1.0009e+01, 8.8200e+00, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], ..., [ 2.2305e-01, 2.2180e-01, 2.1993e-01, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], [ 8.4557e-02, 8.4557e-02, 8.4557e-02, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03], [ 4.4667e-02, 4.5940e-02, 4.3796e-02, ..., -9.9990e+03, -9.9990e+03, -9.9990e+03]]) - platform_variable()float649.969e+36
- long_name :
- Norseman II
- call_sign :
- WDD6688
- nodc_code :
- 32QO
- imo_code :
- 7908122
array(9.96920997e+36)
- instrument_variable()float649.969e+36
- long_name :
- SBE 25plus Sealogger CTD
- manufacturer :
- Sea-Bird Electronics
array(9.96920997e+36)
- crs()float649.969e+36
- grid_mapping_name :
- latitude_longitude
- epsg_code :
- EPSG:4326
- semi_major_axis :
- 6378137.0
- inverse_flattening :
- 298.257223563
array(9.96920997e+36)
- Conventions :
- CF-1.6
- Metadata_Conventions :
- Unidata Dataset Discovery v1.0
- featureType :
- profile
- cdm_data_type :
- Station
- nodc_template_version :
- NODC_NetCDF_Profile_Incomplete_Templete_v1.1
- standard_name_vocabulary :
- NetCDF Climate and Forecast(CF) Metadata Convention Standard Name Table Version 29
- title :
- Seawater CTD profiles from ANIMIDA III, 2014
- summary :
- CTD casts from the Alaskan Beaufort Sea during the research cruise for the ANIMIDA III project in the summer of 2014
- source :
- CTD casts from the Alaskan Beaufort Sea
- platform :
- platform_variable
- instrument :
- instrument_variable
- sea_name :
- Beaufort Sea
- time_coverage_start :
- 2014-07-31T15:33Z
- time_coverage_end :
- 2014-08-07T21:36Z
- time_coverage_resolution :
- point
- geospatial_lat_min :
- 69.85
- geospatial_lat_max :
- 71.48
- geospatial_lat_units :
- degrees_north
- geospatial_lat_resolution :
- point
- geospatial_lon_min :
- -152.58
- geospatial_lon_max :
- -141.71
- geospatial_lon_units :
- degrees_east
- geospatial_lon_resolution :
- point
- institution :
- University of Alaska Fairbanks
- creator_name :
- Jeremy Kasper
- creator_url :
- http://ine.uaf.edu/people/researchers/jeremy-kasper/
- creator_email :
- jlkasper@alaska.edu
- project :
- ANIMIDA III
- keywords_vocabulary :
- GCMD Science Keywords Version 8.1
- keywords :
- OCEAN TEMPERATURE,SALINITY,TURBIDITY,WATER PRESSURE,FLUORESCENCE,PHOTOSYNTHETICALLY ACTIVE RADIATION
- acknowledgement :
- Kasper, J., CTD measurements collected from seawater for ANIMIDA III in 2014
- publisher_name :
- Tim Whiteaker
- publisher_email :
- whiteaker@utexas.edu
- publisher_url :
- http://arcticstudies.org/animida_iii
- license :
- Creative Commons Attribution 3.0 United States (CC BY 3.0 US) license - https://creativecommons.org/licenses/by/3.0/us/
[40]:
data.data[0]()['SBE16plus_01604787_2015_08_09_final.csv']
[40]:
| time | latitude | longitude | water_depth | Conductivity_[S/m] | Pressure_[db] | Temperature_ITS90_[deg C] | Salinity_Practical_[PSU] | Voltage0_[volts] | Instrument_Time_[juliandays] | flag | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2014-08-01T12:00:05Z | 70.6349 | -150.237 | 13.0 | 2.495646 | 12.687 | -1.4619 | 31.0905 | 0.3091 | 213.500058 | 0.0 |
| 1 | 2014-08-01T13:00:05Z | 70.6349 | -150.237 | 13.0 | 2.495454 | 12.699 | -1.4595 | 31.0854 | 0.3265 | 213.541725 | 0.0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 8945 | 2015-08-09T05:00:05Z | 70.6349 | -150.237 | 13.0 | 2.591448 | 12.777 | 0.3619 | 30.5086 | 0.3873 | 586.208391 | 0.0 |
| 8946 | 2015-08-09T06:00:05Z | 70.6349 | -150.237 | 13.0 | 2.585462 | 12.754 | 0.2862 | 30.5062 | 0.2441 | 586.250058 | 0.0 |
8947 rows × 11 columns
