2026-rff_mp/VaravinVV/docs/data/task2/tables.py

53 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import sys
import os
def plot_results(csv_file: str, output_dir: str = "plots"):
if not os.path.exists(csv_file):
print(f"Файл {csv_file} не найден.")
return
df = pd.read_csv(csv_file, encoding='utf-8')
required = ["лабиринт", "стратегия", "время_мс", "посещено_клеток", "длина_пути"]
for col in required:
if col not in df.columns:
print(f"В CSV отсутствует колонка {col}")
return
os.makedirs(output_dir, exist_ok=True)
sns.set_style("whitegrid")
for maze_name in df["лабиринт"].unique():
maze_df = df[df["лабиринт"] == maze_name]
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
fig.suptitle(f"Сравнение стратегий для лабиринта {maze_name}", fontsize=14)
ax = axes[0]
sns.barplot(data=maze_df, x="стратегия", y="время_мс", ax=ax, palette="viridis")
ax.set_title("Время выполнения (мс)")
ax.set_ylabel("мс")
ax = axes[1]
sns.barplot(data=maze_df, x="стратегия", y="посещено_клеток", ax=ax, palette="plasma")
ax.set_title("Количество посещённых клеток")
ax.set_ylabel("клетки")
ax = axes[2]
sns.barplot(data=maze_df, x="стратегия", y="длина_пути", ax=ax, palette="coolwarm")
ax.set_title("Длина найденного пути")
ax.set_ylabel("шаги")
plt.tight_layout()
plt.savefig(os.path.join(output_dir, f"results_{maze_name}.png"), dpi=150)
plt.close()
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Использование: python tables.py <csv_файл> <папка_для_сохранения>")
print("Пример: python tables.py res.csv plots")
sys.exit(1)
csv_file = sys.argv[1]
out_dir = sys.argv[2] if len(sys.argv) > 2 else "plots"
plot_results(csv_file, out_dir)