You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
3.9 KiB
Python

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]