diff --git a/KuznetsovYuM/docs/data/1-st-exercise/visualize_results.py b/KuznetsovYuM/docs/data/1-st-exercise/visualize_results.py new file mode 100644 index 0000000..06ed78c --- /dev/null +++ b/KuznetsovYuM/docs/data/1-st-exercise/visualize_results.py @@ -0,0 +1,45 @@ +import pandas as pd +import matplotlib.pyplot as plt +import numpy as np +import os + +csv_path = 'experiment_results.csv' +if not os.path.exists(csv_path): + print("Run phonebook_structures.py first to generate results.") + exit(1) + +df = pd.read_csv(csv_path) + +mean_times = df.groupby(['Structure', 'Mode'])[['Insert (sec)', 'Search (sec)', 'Delete (sec)']].mean().reset_index() + +structures = mean_times['Structure'].unique() +modes = mean_times['Mode'].unique() + +fig, axes = plt.subplots(1, 3, figsize=(15, 5)) +operations = ['Insert (sec)', 'Search (sec)', 'Delete (sec)'] +titles = ['Insertion', 'Search', 'Deletion'] + +for ax, op, title in zip(axes, operations, titles): + x = np.arange(len(structures)) + width = 0.35 + + random_vals = [] + sorted_vals = [] + for s in structures: + random_row = mean_times[(mean_times['Structure']==s) & (mean_times['Mode']=='random')] + sorted_row = mean_times[(mean_times['Structure']==s) & (mean_times['Mode']=='sorted')] + random_vals.append(random_row[op].values[0] if not random_row.empty else 0) + sorted_vals.append(sorted_row[op].values[0] if not sorted_row.empty else 0) + + ax.bar(x - width/2, random_vals, width, label='Random order') + ax.bar(x + width/2, sorted_vals, width, label='Sorted order') + ax.set_xticks(x) + ax.set_xticklabels(structures) + ax.set_ylabel('Time (seconds)') + ax.set_title(title) + ax.legend() + +plt.tight_layout() +plt.savefig('performance_comparison.png', dpi=150) +plt.show() +print("Graph saved to performance_comparison.png") \ No newline at end of file