Skip to content

Commit

Permalink
add .forecasts property that retrieves forecasts (#32)
Browse files Browse the repository at this point in the history
* add `.forecasts` property that returns a dictionary of forecasts starting at each initial time for all forecast advisories in the track

* add test for forecasts

* make forecasts a mapping of strings to dataframes

Co-authored-by: zacharyburnett <zachary.r.burnett@gmail.com>
  • Loading branch information
zacharyburnett and zacharyburnett committed Mar 30, 2022
1 parent 02ea621 commit ba6b1ff
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
23 changes: 23 additions & 0 deletions stormevents/nhc/track.py
Original file line number Diff line number Diff line change
Expand Up @@ -922,6 +922,29 @@ def wind_swaths(self, wind_speed: int, segments: int = 91) -> Dict[str, Polygon]

return wind_swaths

@property
def forecasts(self) -> Dict[str, Dict[str, DataFrame]]:
data = self.data

forecast_advisories = (
advisory for advisory in pandas.unique(data['advisory']) if advisory != 'BEST'
)

forecasts = {}
for advisory in forecast_advisories:
advisory_data = data[data['advisory'] == advisory]

initial_times = pandas.unique(advisory_data['datetime'])

forecasts[advisory] = {}
for initial_time in initial_times:
forecast_data = advisory_data[advisory_data['datetime'] == initial_time]
forecasts[advisory][
f'{pandas.to_datetime(initial_time):%Y%m%dT%H%M%S}'
] = forecast_data.sort_values('forecast_hours')

return forecasts

@property
def duration(self) -> pandas.Timedelta:
"""
Expand Down
10 changes: 10 additions & 0 deletions tests/test_nhc.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,16 @@ def test_vortex_track_properties():
assert len(track) == 175


def test_vortex_track_forecasts():
track = VortexTrack.from_storm_name('florence', 2018, file_deck='a')

forecasts = track.forecasts

assert len(forecasts) == 4
assert len(forecasts['OFCL']) == 77
assert len(forecasts['OFCL']['20180830T120000']) == 13


@pytest.mark.disable_socket
def test_vortex_track_from_file():
input_directory = INPUT_DIRECTORY / 'test_vortex_track_from_file'
Expand Down

0 comments on commit ba6b1ff

Please sign in to comment.