BUT: calcul moy. gen. indicative ne considérant que les UE du parcours

This commit is contained in:
Emmanuel Viennet 2022-10-31 16:26:36 +01:00
parent 3e7aa48918
commit 49e46892b4
3 changed files with 15 additions and 8 deletions

View File

@ -52,13 +52,16 @@ def compute_sem_moys_apc_using_coefs(
def compute_sem_moys_apc_using_ects( def compute_sem_moys_apc_using_ects(
etud_moy_ue_df: pd.DataFrame, ects: list, formation_id=None, skip_empty_ues=False etud_moy_ue_df: pd.DataFrame,
ects_df: pd.DataFrame,
formation_id=None,
skip_empty_ues=False,
) -> pd.Series: ) -> pd.Series:
"""Calcule les moyennes générales indicatives de tous les étudiants """Calcule les moyennes générales indicatives de tous les étudiants
= moyenne des moyennes d'UE, pondérée par leurs ECTS. = moyenne des moyennes d'UE, pondérée par leurs ECTS.
etud_moy_ue_df: DataFrame, colonnes ue_id, lignes etudid etud_moy_ue_df: DataFrame, colonnes ue_id, lignes etudid
ects: liste de floats ou None, 1 par UE ects: DataFrame, col. ue_id, lignes etudid, valeur float ou None
Si skip_empty_ues: ne compte pas les UE non notées. Si skip_empty_ues: ne compte pas les UE non notées.
Sinon (par défaut), une UE non notée compte comme zéro. Sinon (par défaut), une UE non notée compte comme zéro.
@ -68,11 +71,11 @@ def compute_sem_moys_apc_using_ects(
try: try:
if skip_empty_ues: if skip_empty_ues:
# annule les coefs des UE sans notes (NaN) # annule les coefs des UE sans notes (NaN)
ects = np.where(etud_moy_ue_df.isna(), 0.0, np.array(ects, dtype=float)) ects = np.where(etud_moy_ue_df.isna(), 0.0, ects_df.to_numpy())
# ects est devenu nb_etuds x nb_ues
moy_gen = (etud_moy_ue_df * ects).sum(axis=1) / ects.sum(axis=1)
else: else:
moy_gen = (etud_moy_ue_df * ects).sum(axis=1) / sum(ects) ects = ects_df.to_numpy()
# ects est maintenant un array nb_etuds x nb_ues
moy_gen = (etud_moy_ue_df * ects).sum(axis=1) / ects.sum(axis=1)
except TypeError: except TypeError:
if None in ects: if None in ects:
formation = Formation.query.get(formation_id) formation = Formation.query.get(formation_id)

View File

@ -114,6 +114,10 @@ class ResultatsSemestreBUT(NotesTableCompat):
# Nanifie les moyennes d'UE hors parcours pour chaque étudiant # Nanifie les moyennes d'UE hors parcours pour chaque étudiant
self.etud_moy_ue *= self.ues_inscr_parcours_df self.etud_moy_ue *= self.ues_inscr_parcours_df
# Les ects (utilisés comme coefs) sont nuls pour les UE hors parcours:
ects = self.ues_inscr_parcours_df.fillna(0.0) * [
ue.ects for ue in self.ues if ue.type != UE_SPORT
]
# Moyenne générale indicative: # Moyenne générale indicative:
# (note: le bonus sport a déjà été appliqué aux moyennes d'UE, et impacte # (note: le bonus sport a déjà été appliqué aux moyennes d'UE, et impacte
@ -123,7 +127,7 @@ class ResultatsSemestreBUT(NotesTableCompat):
# ) # )
self.etud_moy_gen = moy_sem.compute_sem_moys_apc_using_ects( self.etud_moy_gen = moy_sem.compute_sem_moys_apc_using_ects(
self.etud_moy_ue, self.etud_moy_ue,
[ue.ects for ue in self.ues if ue.type != UE_SPORT], ects,
formation_id=self.formsemestre.formation_id, formation_id=self.formsemestre.formation_id,
skip_empty_ues=sco_preferences.get_preference( skip_empty_ues=sco_preferences.get_preference(
"but_moy_skip_empty_ues", self.formsemestre.id "but_moy_skip_empty_ues", self.formsemestre.id

View File

@ -439,7 +439,7 @@ class ResultatsSemestre(ResultatsCache):
allow_html=True, allow_html=True,
): ):
"""Table récap. des résultats. """Table récap. des résultats.
allow_html: si vri, peut-mettre du HTML dans les valeurs allow_html: si vrai, peut mettre du HTML dans les valeurs
Result: tuple avec Result: tuple avec
- rows: liste de dicts { column_id : value } - rows: liste de dicts { column_id : value }