73 lines
2.8 KiB
Python
73 lines
2.8 KiB
Python
|
|
import pandas as pd
|
||
|
|
import matplotlib.pyplot as plt
|
||
|
|
import numpy as np
|
||
|
|
|
||
|
|
|
||
|
|
df = pd.read_excel('/content/data (1).xlsx')
|
||
|
|
device_id_to_plot = 'HCV-000-5003' # Replace with the desired device ID
|
||
|
|
df_filtered = df[df['DEVICE_ID'] == device_id_to_plot]
|
||
|
|
grouped = df_filtered.groupby('USER_ID')
|
||
|
|
|
||
|
|
if not df_filtered.empty:
|
||
|
|
|
||
|
|
led_types = ['Sample', 'Buffer']
|
||
|
|
num_leds = 4
|
||
|
|
user_ids = list(grouped.groups.keys())
|
||
|
|
|
||
|
|
num_groups = len(user_ids) // 5 + (1 if len(user_ids) % 5 != 0 else 0)
|
||
|
|
user_id_groups = [user_ids[i*5:(i+1)*5] for i in range(num_groups)]
|
||
|
|
|
||
|
|
# Create subplots for Sample and Buffer
|
||
|
|
fig, axs = plt.subplots(num_groups, 2, figsize=(12, 5*num_groups), sharex=True, gridspec_kw={'hspace': 0.5})
|
||
|
|
colormap = plt.cm.get_cmap('tab10')
|
||
|
|
|
||
|
|
for i, group_ids in enumerate(user_id_groups):
|
||
|
|
group_data = [grouped.get_group(user_id) for user_id in group_ids]
|
||
|
|
|
||
|
|
for j, led_type in enumerate(led_types):
|
||
|
|
led_values = [[] for _ in range(num_leds)]
|
||
|
|
|
||
|
|
for user_group in group_data:
|
||
|
|
led_vals_per_user = [[] for _ in range(num_leds)]
|
||
|
|
|
||
|
|
for k in range(1, num_leds + 1):
|
||
|
|
led_values_per_user = user_group[f'LED{k}_{led_type}']
|
||
|
|
led_vals_per_user[k - 1].extend(led_values_per_user)
|
||
|
|
|
||
|
|
for led_num in range(num_leds):
|
||
|
|
led_values[led_num].extend(led_vals_per_user[led_num])
|
||
|
|
|
||
|
|
# Plot Sample and Buffer values for each LED
|
||
|
|
x = np.arange(len(group_ids))
|
||
|
|
bar_width = 0.15 # Adjust bar width
|
||
|
|
for led_num in range(num_leds):
|
||
|
|
axs[i, j].bar(x + led_num * bar_width, led_values[led_num][:len(group_ids)], width=bar_width, color=colormap(led_num), label=f'LED {led_num + 1}')
|
||
|
|
|
||
|
|
|
||
|
|
axs[i, j].set_ylabel('Value')
|
||
|
|
axs[i, j].legend()
|
||
|
|
|
||
|
|
|
||
|
|
axs[i, j].set_xticks(x + (num_leds - 1) * bar_width / 2)
|
||
|
|
axs[i, j].set_xticklabels(group_ids, rotation=45, ha='right')
|
||
|
|
|
||
|
|
|
||
|
|
axs[-1, j].set_xlabel('USER_ID')
|
||
|
|
|
||
|
|
#Assigning user id
|
||
|
|
for i, group_ids in enumerate(user_id_groups[:-1]): # Exclude the last group
|
||
|
|
for idx, user_id in enumerate(group_ids):
|
||
|
|
axs[i, 0].text(idx, -0.2, user_id, ha='center', va='center', rotation=-45, fontsize=8)
|
||
|
|
axs[i, 1].text(idx, -0.2, user_id, ha='center', va='center', rotation=-45, fontsize=8)
|
||
|
|
|
||
|
|
last_group_ids = user_id_groups[-1][:-3]
|
||
|
|
for idx, user_id in enumerate(last_group_ids):
|
||
|
|
axs[-1, 0].text(idx, -0.2, user_id, ha='center', va='center', rotation=-45, fontsize=8)
|
||
|
|
axs[-1, 1].text(idx, -0.2, user_id, ha='center', va='center', rotation=-45, fontsize=8)
|
||
|
|
|
||
|
|
|
||
|
|
plt.tight_layout()
|
||
|
|
plt.show()
|
||
|
|
else:
|
||
|
|
print(f"No data points found for Device ID: {device_id_to_plot}")
|
||
|
|
|