# Process and save peak values (function to process peak values, generate statistics, save Excel files, and plots).
def process_peak_values(peaks, folder_name, time_data):
for idx, peak_value in enumerate(time_data['date'].iloc[peaks]):
lower_bound = pd.to_datetime(peak_value) - timedelta(days=time_delta/2)
upper_bound = pd.to_datetime(peak_value) + timedelta(days=time_delta/2)
mask = (time_data['date'] > lower_bound) & (time_data['date'] < upper_bound)
fig, ax = plt.subplots(figsize=a4_dims)
d = {'date': time_data[mask]['date'], 'value': time_data[mask]['value']}
df_peaks = pd.DataFrame(data=d)
df_peaks['stat'] = "*****"
df_peaks['stat_vaue'] = "*****"
stats = pd.DataFrame(df_peaks.describe())
stats.reset_index(inplace=True)
additional_stats = [{'index': 'kurtosis', 'value': kurtosis(np.array(df_peaks['value']))},
{'index': 'skewness', 'value': skew(np.array(df_peaks['value']))}]
additional_stats_df = pd.DataFrame(additional_stats)
stats = pd.concat([stats, additional_stats_df], ignore_index=True)
stats_to_find = ['count', 'mean', 'std', 'min', '25%', '50%', '75%', 'max', 'kurtosis', 'skewness']
for i in range(len(stats.index)):
df_peaks.iloc[i, 2] = stats_to_find[i]
df_peaks.iloc[i, 3] = stats.iloc[i, 1]
df_peaks.to_excel(f'{folder_name}/flood_{str(idx)}.xlsx')
plot = sns.lineplot(time_data[mask]['date'], time_data[mask]['value'])
fig.savefig(f'{folder_name}/flood_{str(idx)}.jpg')
# Plotting and saving peak data.
process_peak_values(Overbank_flood_peaks, 'Overbank_flood_peaks', time_data)
process_peak_values(High_flow_peaks, 'High_flow_peaks', time_data)
process_peak_values(In_channel_fresh_peaks, 'In_channel_fresh_peaks', time_data)
# Combining and saving summary statistics from processed peak data.
folders = ['Overbank_flood_peaks', 'High_flow_peaks', 'In_channel_fresh_peaks']
columns = ['count', 'mean', 'std', 'min', '25%', '50%', '75%', 'max', 'kurtosis', 'skewness']
path = os.path.join(root_path, folder)
text_files = [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.xlsx')]
df_temp = pd.read_excel(file)
file_stats = [df_temp.iloc[i]['stat_vaue'] for i in range(len(columns))]
half_time_delta = int(time_delta / 2)
midpoint_date = df_temp.iloc[-1]['date'] - timedelta(days=half_time_delta)
file_stats.extend([df_temp.iloc[0]['date'], midpoint_date, df_temp.iloc[-1]['date']])
summary_data.append(file_stats)
stats_df = pd.DataFrame(summary_data, columns=columns + ['start_date', 'peak_date', 'end_date'])
stats_df.to_csv(f"{folder}_stats.csv", index=False)