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()
