import pandas as pd import matplotlib.pyplot as plt import numpy as np # Загрузка данных df = pd.read_csv('experiment_results.csv') # Усреднение по повторам 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 = ['Вставка', 'Поиск', 'Удаление'] for ax, op, title in zip(axes, operations, titles): # Для каждой структуры строим две колонки (random, sorted) 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='Случайный') ax.bar(x + width/2, sorted_vals, width, label='Отсортированный') ax.set_xticks(x) ax.set_xticklabels(structures) ax.set_ylabel('Время (сек)') ax.set_title(title) ax.legend() plt.tight_layout() plt.savefig('../../performance_comparison.png', dpi=150) plt.show()