forked from ScoDoc/ScoDoc
PE: n'affiche plus les note manquantes comme NaN
This commit is contained in:
parent
87af662c65
commit
69725ea386
@ -194,12 +194,14 @@ class SemestreTag(pe_tagtable.TableTag):
|
|||||||
return tagdict
|
return tagdict
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
def comp_MoyennesTag(self, tag, force=False):
|
def comp_MoyennesTag(self, tag, force=False) -> list:
|
||||||
"""Calcule et renvoie les "moyennes" de tous les étudiants du SemTag (non défaillants)
|
"""Calcule et renvoie les "moyennes" de tous les étudiants du SemTag
|
||||||
à un tag donné, en prenant en compte
|
(non défaillants) à un tag donné, en prenant en compte
|
||||||
tous les modimpl_id concerné par le tag, leur coeff et leur pondération.
|
tous les modimpl_id concerné par le tag, leur coeff et leur pondération.
|
||||||
Force ou non le calcul de la moyenne lorsque des notes sont manquantes.
|
Force ou non le calcul de la moyenne lorsque des notes sont manquantes.
|
||||||
Renvoie les informations sous la forme d'une liste [ (moy, somme_coeff_normalise, etudid), ...]
|
|
||||||
|
Renvoie les informations sous la forme d'une liste
|
||||||
|
[ (moy, somme_coeff_normalise, etudid), ...]
|
||||||
"""
|
"""
|
||||||
lesMoyennes = []
|
lesMoyennes = []
|
||||||
for etudid in self.get_etudids():
|
for etudid in self.get_etudids():
|
||||||
|
@ -38,6 +38,7 @@ Created on Thu Sep 8 09:36:33 2016
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
from app.scodoc import notes_table
|
from app.scodoc import notes_table
|
||||||
|
|
||||||
@ -287,47 +288,52 @@ class TableTag(object):
|
|||||||
|
|
||||||
|
|
||||||
# *********************************************
|
# *********************************************
|
||||||
def moyenne_ponderee_terme_a_terme(notes, coeffs=None, force=False):
|
def moyenne_ponderee_terme_a_terme(notes, coefs=None, force=False):
|
||||||
"""
|
"""
|
||||||
Calcule la moyenne pondérée d'une liste de notes avec d'éventuels coeffs de pondération.
|
Calcule la moyenne pondérée d'une liste de notes avec d'éventuels coeffs de pondération.
|
||||||
Renvoie le résultat sous forme d'un tuple (moy, somme_coeff)
|
Renvoie le résultat sous forme d'un tuple (moy, somme_coeff)
|
||||||
|
|
||||||
La liste de notes contient soit : 1) des valeurs numériques 2) des strings "-NA-" (pas de notes) ou "-NI-" (pas inscrit)
|
La liste de notes contient soit :
|
||||||
ou "-c-" ue capitalisée, 3) None.
|
1) des valeurs numériques
|
||||||
|
2) des strings "-NA-" (pas de notes) ou "-NI-" (pas inscrit) ou "-c-" ue capitalisée,
|
||||||
|
3) None.
|
||||||
|
|
||||||
Le paramètre force indique si le calcul de la moyenne doit être forcée ou non, c'est à
|
Le paramètre force indique si le calcul de la moyenne doit être forcée ou non, c'est à
|
||||||
dire s'il y a ou non omission des notes non numériques (auquel cas la moyenne est calculée sur les
|
dire s'il y a ou non omission des notes non numériques (auquel cas la moyenne est
|
||||||
notes disponibles) ; sinon renvoie (None, None).
|
calculée sur les notes disponibles) ; sinon renvoie (None, None).
|
||||||
"""
|
"""
|
||||||
# Vérification des paramètres d'entrée
|
# Vérification des paramètres d'entrée
|
||||||
if not isinstance(notes, list) or (
|
if not isinstance(notes, list) or (
|
||||||
coeffs != None and not isinstance(coeffs, list) and len(coeffs) != len(notes)
|
coefs != None and not isinstance(coefs, list) and len(coefs) != len(notes)
|
||||||
):
|
):
|
||||||
raise ValueError("Erreur de paramètres dans moyenne_ponderee_terme_a_terme")
|
raise ValueError("Erreur de paramètres dans moyenne_ponderee_terme_a_terme")
|
||||||
|
|
||||||
# Récupération des valeurs des paramètres d'entrée
|
# Récupération des valeurs des paramètres d'entrée
|
||||||
coeffs = [1] * len(notes) if coeffs == None else coeffs
|
coefs = [1] * len(notes) if coefs is None else coefs
|
||||||
|
|
||||||
# S'il n'y a pas de notes
|
# S'il n'y a pas de notes
|
||||||
if not notes: # Si notes = []
|
if not notes: # Si notes = []
|
||||||
return (None, None)
|
return (None, None)
|
||||||
|
|
||||||
notesValides = [
|
# Liste indiquant les notes valides
|
||||||
(1 if isinstance(note, float) or isinstance(note, int) else 0) for note in notes
|
notes_valides = [
|
||||||
] # Liste indiquant les notes valides
|
(isinstance(note, float) and not np.isnan(note)) or isinstance(note, int)
|
||||||
if force == True or (
|
for note in notes
|
||||||
force == False and sum(notesValides) == len(notes)
|
]
|
||||||
): # Si on force le calcul de la moyenne ou qu'on ne le force pas et qu'on a le bon nombre de notes
|
# Si on force le calcul de la moyenne ou qu'on ne le force pas
|
||||||
(moyenne, ponderation) = (0.0, 0.0)
|
# et qu'on a le bon nombre de notes
|
||||||
|
if force or sum(notes_valides) == len(notes):
|
||||||
|
moyenne, ponderation = 0.0, 0.0
|
||||||
for i in range(len(notes)):
|
for i in range(len(notes)):
|
||||||
if notesValides[i]:
|
if notes_valides[i]:
|
||||||
moyenne += coeffs[i] * notes[i]
|
moyenne += coefs[i] * notes[i]
|
||||||
ponderation += coeffs[i]
|
ponderation += coefs[i]
|
||||||
return (
|
return (
|
||||||
(moyenne / (ponderation * 1.0), ponderation)
|
(moyenne / (ponderation * 1.0), ponderation)
|
||||||
if ponderation != 0
|
if ponderation != 0
|
||||||
else (None, 0)
|
else (None, 0)
|
||||||
)
|
)
|
||||||
else: # Si on ne force pas le calcul de la moyenne
|
# Si on ne force pas le calcul de la moyenne
|
||||||
return (None, None)
|
return (None, None)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user