import pandas as pd import numpy as np import matplotlib.pyplot as plt # Load the data input_excel_path = r'' data = pd.read_csv(input_excel_path) # Define window size window_size = 50 # Adjust window size if needed # Skip initial data points and define range start_point = 3000 end_point = start_point + 2000 # Preprocess the data activities = data['Activity'].unique().tolist() processed_data_list = [] for i in range(start_point // window_size, end_point // window_size): start_idx = i * window_size end_idx = start_idx + window_size window_data = data['AnkleAccelerometer'].iloc[start_idx:end_idx] # Compute Parseval energy for the window parseval_energy = np.sum(window_data ** 2) # Assign activity for this window (if available) activity = data['Activity'].iloc[start_idx] if 'Activity' in data.columns else 'Unknown' # Time is the midpoint of the window time = start_idx + window_size / 2 # Append to the processed_data list processed_data_list.append({ 'Time': time, 'Activity': activity, 'ParsevalEnergy': parseval_energy }) # Convert the list to a DataFrame processed_data = pd.DataFrame(processed_data_list) # Normalize Parseval energies for better visualization processed_data['ParsevalEnergy'] = processed_data.groupby('Activity')['ParsevalEnergy'].transform(lambda x: (x - x.min()) / (x.max() - x.min())) # Limit to the selected range for plotting plot_data = processed_data.copy() plot_data['Time'] = np.linspace(0, len(plot_data) * window_size, num=len(plot_data)) # Plot the data plt.figure(figsize=(20, 10)) # Adjust figure size activity_map = {activity: color for activity, color in zip(activities, ['blue', 'orange', 'green', 'red', 'purple', 'brown', 'pink', 'cyan'])} # Plot all activities on the same plot with different colors for activity in activities: activity_data = plot_data[plot_data['Activity'] == activity] plt.plot(activity_data['Time'], activity_data['ParsevalEnergy'], label=activity, color=activity_map.get(activity, 'black'), linewidth=2) plt.xlabel('Time', fontsize=16, fontweight='bold') plt.ylabel('Normalized Parseval Energy', fontsize=16, fontweight='bold') plt.title('Parseval Energy of AnkleAccelerometer', fontsize=20, fontweight='bold') plt.legend(prop={'size': 12, 'weight': 'bold'}) plt.xticks(fontsize=12, fontweight='bold') plt.yticks(fontsize=12, fontweight='bold') plt.grid(True) plt.tight_layout() # Save the plot as an image output_image_path = r'' plt.savefig(output_image_path) # Save the processed data to a CSV file output_csv_path = r'' processed_data.to_csv(output_csv_path, index=False) print("Plot and CSV file saved successfully.")