From 6c7f17cebe134f81a26a342507c58e4c4ba6ee45 Mon Sep 17 00:00:00 2001 From: Chris Leaman Date: Mon, 19 Nov 2018 15:40:43 +1100 Subject: [PATCH] Tidy up observed storm impacts --- src/analysis/observed_storm_impacts.py | 37 +++++++++++++------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/analysis/observed_storm_impacts.py b/src/analysis/observed_storm_impacts.py index 1b501ed..be48505 100644 --- a/src/analysis/observed_storm_impacts.py +++ b/src/analysis/observed_storm_impacts.py @@ -22,6 +22,13 @@ def return_first_or_nan(l): def volume_change(df_profiles, df_profile_features, zone): + """ + Calculates how much the volume change there is between prestrom and post storm profiles. + :param df_profiles: + :param df_profile_features: + :param zone: Either 'swash' or 'dune_face' + :return: + """ logger.info('Calculating change in beach volume in {} zone'.format(zone)) df_vol_changes = pd.DataFrame(index=df_profile_features.index) @@ -96,27 +103,19 @@ def beach_volume(x, z, x_min=np.NINF, x_max=np.inf): return simps(z_masked, x_masked) -def impacts_from_profiles(df_profiles, df_profile_features): - # Impacts should be per site, so use the profile_features as the base index. - df_observed_impacts = pd.DataFrame(index=df_profile_features.index) - - # Swash zone volume change - prestorm_swash_vol, poststorm_swash_vol = volume_change(df_profiles, df_profile_features, zone='swash') - - # Dune volume change - - # If no dune volume change, then swash zone - - # - pass - - def storm_regime(df_observed_impacts): + """ + Returns the dataframe with an additional column of storm impacts based on the Storm Impact Scale. Refer to + Sallenger (2000) for details. + :param df_observed_impacts: + :return: + """ logger.info('Getting observed storm regimes') - df_observed_impacts.loc[df_observed_impacts.swash_vol_change < 3,'storm_regime'] = 'swash' + df_observed_impacts.loc[df_observed_impacts.swash_vol_change < 3, 'storm_regime'] = 'swash' df_observed_impacts.loc[df_observed_impacts.dune_face_vol_change > 3, 'storm_regime'] = 'collision' return df_observed_impacts + if __name__ == '__main__': logger.info('Importing existing data') data_folder = './data/interim' @@ -129,10 +128,10 @@ if __name__ == '__main__': logger.info('Getting pre/post storm volumes') df_swash_vol_changes = volume_change(df_profiles, df_profile_features, zone='swash') df_dune_face_vol_changes = volume_change(df_profiles, df_profile_features, zone='dune_face') - df_observed_impacts = df_observed_impacts.join([df_swash_vol_changes, df_dune_face_vol_changes ]) + df_observed_impacts = df_observed_impacts.join([df_swash_vol_changes, df_dune_face_vol_changes]) - # TODO Classify regime based on volume changes + # Classify regime based on volume changes df_observed_impacts = storm_regime(df_observed_impacts) - # TODO Save dataframe to csv + # Save dataframe to csv df_observed_impacts.to_csv(os.path.join(data_folder, 'impacts_observed.csv'))