import sys import os import yaml import matplotlib.pyplot as plt import numpy as np scores_big =[] name = [] colors = [] def s_a(n): return sum(n)/len(n) def mediana(n): while len(n) >2: n.remove(min(n)) n.remove(max(n)) if len(n) == 2: return s_a(n) else: return n[0] def plot(ax, path, color): scores =[] for filename in sorted(os.listdir(path)): file_path = os.path.join(path, filename) # Check if it is a file and not a subdirectory if os.path.isfile(file_path) and file_path.endswith('.yaml'): with open(file_path, 'r', encoding='utf-8') as file: data = yaml.load(file, Loader = yaml.Loader) #scores.append(data['score']) scores.append(data['score']/data['total_time']) ax.plot(range(1, len(scores)+1),scores, '.-', label=f"{path.split('/')[-1]}'s scores", color = color) ax.plot((1, len(scores)),(s_a(scores), s_a(scores)), '--', label=f"{path.split('/')[-1]}'s mean ({round(s_a(scores), 3)})", color = color) ax.plot((1, len(scores)),(mediana(scores), mediana(scores)), ':', label=f"{path.split('/')[-1]}'s mediana ({round(mediana(scores), 3)})", color = color) def boxplot(ax, path, color): scores =[] for filename in sorted(os.listdir(path)): file_path = os.path.join(path, filename) # Check if it is a file and not a subdirectory if os.path.isfile(file_path) and file_path.endswith('.yaml'): with open(file_path, 'r', encoding='utf-8') as file: data = yaml.load(file, Loader = yaml.Loader) #scores.append(data['score']) scores.append(data['score']/data['total_time']) scores_big.append(scores) name.append(path.split('/')[-1]) colors.append(color) if __name__ == '__main__': global_path = "/home/gestures/Easy_sim/dummy_simulation/stats/" # 1. Name (Dima) # 2. Name-Name (Dima-Elisey) DATA = {} # Name of creator - {} - Name of tester for dirname in sorted(os.listdir(global_path)): dirpath = os.path.join(global_path, dirname) if os.path.isdir(file_path): data = [] if not dirname.contains('-'): name = dirname if not name is DATA: DATA[name] = {} DATA[name][name] = data else: names = dirname.split('-') name1 = names[0] name2 = names[1] if not name1 is DATA: DATA[name1] = {} DATA[name1][name2] = data for filename in sorted(os.listdir(dirpath)): file_path = os.path.join(dirpath, filename) if file_path.endswith('.yaml'): with open(file_path, 'r', encoding='utf-8') as file: datafile = yaml.load(file, Loader = yaml.Loader) # TODO change score to new formula data.append(datafile['score']) fig, ax = plt.subplots() boxplot(ax, "/home/gestures/Easy_sim/dummy_simulation/stats/Dima", "limegreen") boxplot(ax, "/home/gestures/Easy_sim/dummy_simulation/stats/Elisey", "red") boxplot(ax, "/home/gestures/Easy_sim/dummy_simulation/stats/BOBA", "magenta") boxplot(ax, "/home/gestures/Easy_sim/dummy_simulation/stats/Nika", "pink") boxplot(ax, "/home/gestures/Easy_sim/dummy_simulation/stats/Sasha", "orange") plot(ax, "/home/gestures/Easy_sim/dummy_simulation/stats/Christine", "blue") scores_BIG = ax.boxplot(scores_big, patch_artist=True, tick_labels=name) # Применяем цвета к каждому ящику for patch, color in zip(scores_BIG['boxes'], colors): patch.set_facecolor(color) ax.set(xlabel='№', ylabel='score') ax.grid() ax.legend() ax.set_title("Scores of students in dummy simulation") plt.show() #path.split('/')[-1]