############################################################################## # ScoDoc # Copyright (c) 1999 - 2022 Emmanuel Viennet. All rights reserved. # See LICENSE ############################################################################## """Quelques classes auxiliaires pour les calculs des notes """ import numpy as np class StatsMoyenne: """Une moyenne d'un ensemble étudiants sur quelque chose (moyenne générale d'un semestre, d'un module, d'un groupe...) et les statistiques associées: min, max, moy, effectif """ def __init__(self, vals): """Calcul les statistiques. Les valeurs NAN ou non numériques sont toujours enlevées. Si vals is None, renvoie des zéros (utilisé pour UE bonus) """ try: if vals is None or len(vals) == 0 or np.isnan(vals).all(): self.moy = self.min = self.max = self.size = self.nb_vals = 0 else: self.moy = np.nanmean(vals) self.min = np.nanmin(vals) self.max = np.nanmax(vals) self.size = len(vals) self.nb_vals = self.size - np.count_nonzero(np.isnan(vals)) except TypeError: # que des NaN dans un array d'objets, ou ce genre de choses exotiques... self.moy = self.min = self.max = self.size = self.nb_vals = 0 def to_dict(self): "Tous les attributs dans un dict" return { "min": self.min, "max": self.max, "moy": self.moy, "size": self.size, "nb_vals": self.nb_vals, }