Package: noaa-coops
noaa_coopsA Python wrapper for the NOAA CO-OPS Tides & CurrentsDataandMetadataAPIs.InstallationThis package is distributed viaPyPiand can be installed using ,pip,poetry, etc.# Install with pip❯pipinstallnoaa_coops# Install with poetry❯poetryaddnoaa_coopsGetting StartedStationsData is accessed viaStationclass objects. Each station is uniquely identified by anid. To initialize aStationobject, run:>>>fromnoaa_coopsimportStation>>>seattle=Station(id="9447130")# Create Station object for Seattle (ID = 9447130)Stations and their IDs can be found using the Tides & Currentsmapping interface. Alternatively, you can search for stations in a bounding box using theget_stations_from_bboxfunction, which will return a list of stations found in the box (if any).>>>frompprintimportpprint>>>fromnoaa_coopsimportStation,get_stations_from_bbox>>>stations=get_stations_from_bbox(lat_coords=[40.389,40.9397],lon_coords=[-74.4751,-73.7432])>>>pprint(stations)['8516945','8518750','8519483','8531680']>>>station_one=Station(id="8516945")>>>pprint(station_one.name)'Kings Point'MetadataStation metadata is stored in the.metadataattribute of aStationobject. Additionally, the keys of the metadata attribute dictionary are also assigned as attributes of the station object itself.>>>frompprintimportpprint>>>fromnoaa_coopsimportStation>>>seattle=Station(id="9447130")>>>pprint(list(seattle.metadata.items())[:5])# Print first 3 items in metadata[('tidal',True),('greatlakes',False),('shefcode','EBSW1')]# Metadata dictionary can be very long>>>pprint(seattle.lat_lon['lat'])# Print latitude47.601944>>>pprint(seattle.lat_lon['lon'])# Print longitude-122.339167Data InventoryA description of a Station's data products and available dates can be accessed via the.data_inventoryattribute of aStationobject.>>>fromnoaa_coopsimportStation>>>frompprintimportpprint>>>seattle=Station(id="9447130")>>>pprint(seattle.data_inventory){'Air Temperature':{'end_date':'2019-01-02 18:36','start_date':'1991-11-09 01:00'},'Barometric Pressure':{'end_date':'2019-01-02 18:36','start_date':'1991-11-09 00:00'},'Preliminary 6-Minute Water Level':{'end_date':'2023-02-05 19:54','start_date':'2001-01-01 00:00'},'Verified 6-Minute Water Level':{'end_date':'2022-12-31 23:54','start_date':'1995-06-01 00:00'},'Verified High/Low Water Level':{'end_date':'2022-12-31 23:54','start_date':'1977-10-18 02:18'},'Verified Hourly Height Water Level':{'end_date':'2022-12-31 23:00','start_date':'1899-01-01 00:00'},'Verified Monthly Mean Water Level':{'end_date':'2022-12-31 23:54','start_date':'1898-12-01 00:00'},'Water Temperature':{'end_date':'2019-01-02 18:36','start_date':'1991-11-09 00:00'},'Wind':{'end_date':'2019-01-02 18:36','start_date':'1991-11-09 00:00'}}Data RetrievalAvailable data products can be found in NOAA CO-OPS Data API docs.Station data can be fetched using the.get_datamethod on aStationobject. Data is returned as a PandasDataFramefor ease of use and analysis. DataFrame columns are named according to the NOAA CO-OPS APIdocs, with thetcolumn (timestamp) set as the DataFrame index.The example below fetches water level data from the Seattle station (id=9447130) for a 1 month period. The correspondingweb outputis shown below the code as a reference.>>>fromnoaa_coopsimportStation>>>seattle=Station(id="9447130")>>>df_water_levels=seattle.get_data(...begin_date="20150101",...end_date="20150131",...product="water_level",...datum="MLLW",...units="metric",...time_zone="gmt")>>>df_water_levels.head()vsfqt2015-01-0100:00:001.7990.0230,0,0,0v2015-01-0100:06:001.7180.0180,0,0,0v2015-01-0100:12:001.6390.0130,0,0,0v2015-01-0100:18:001.5570.0120,0,0,0v2015-01-0100:24:001.4730.0140,0,0,0vDevelopmentRequirementsThis package and its dependencies are managed usingpoetry. To install the development environment fornoaa_coops, first install poetry, then run (inside the repo):poetryinstallTODOClickherefor a list of existing issues and to submit a new one.ContributionContributions are welcome, feel free to submit a pull request.