1
0
forked from ScoDoc/ScoDoc

Bonus grenoble 2020 (à compléter pour l'ancien)

This commit is contained in:
Emmanuel Viennet 2022-01-26 20:38:27 +01:00
parent 4222ea8160
commit 3c36acd194
3 changed files with 69 additions and 2 deletions

View File

@ -49,6 +49,10 @@ class BonusSport:
- modimpl_coefs: les coefs des modules
En classique: 1d ndarray de float (modimpl)
En APC: 2d ndarray de float, (modimpl x UE) <= attention à transposer
- etud_moy_gen: Series, index etudid, valeur float (moyenne générale avant bonus)
- etud_moy_ue: DataFrame columns UE (sans sport), rows etudid (moyennes avant bonus)
etud_moy_gen et etud_moy_ue ne sont PAS modifiés (mais utilisés par certains bonus non additifs).
"""
# Si vrai, en APC, si le bonus UE est None, reporte le bonus moy gen:
@ -67,9 +71,13 @@ class BonusSport:
ues: list,
modimpl_inscr_df: pd.DataFrame,
modimpl_coefs: np.array,
etud_moy_gen,
etud_moy_ue,
):
self.formsemestre = formsemestre
self.ues = ues
self.etud_moy_gen = etud_moy_gen
self.etud_moy_ue = etud_moy_ue
self.etuds_idx = modimpl_inscr_df.index # les étudiants inscrits au semestre
self.bonus_ues: pd.DataFrame = None # virtual
self.bonus_moy_gen: pd.Series = None # virtual
@ -293,7 +301,7 @@ class BonusTours(BonusDirect):
# ---- Un peu moins simples (mais pas trop compliqué)
# Bonus simple, mais avec chagement de paramètres en 2010 !
# Bonus simple, mais avec changement de paramètres en 2010 !
class BonusLille(BonusSportSimples):
"""Calcul bonus modules optionels (sport, culture), règle IUT Villeneuve d'Ascq
@ -320,8 +328,63 @@ class BonusLille(BonusSportSimples):
)
def bonus_iut1grenoble_2017(notes_sport, coefs, infos=None):
"""Calcul bonus sport IUT Grenoble sur la moyenne générale (version 2017)
La note de sport de nos étudiants va de 0 à 5 points.
Chaque point correspond à un % qui augmente la moyenne de chaque UE et la moyenne générale.
Par exemple : note de sport 2/5 : la moyenne générale sera augmentée de 2%.
Calcul ici du bonus sur moyenne générale
"""
# les coefs sont ignorés
# notes de 0 à 5
points = sum([x for x in notes_sport])
factor = (points / 4.0) / 100.0
bonus = infos["moy"] * factor
return bonus
class BonusGrenobleIUT1(BonusSport):
"""
La note de sport est sur 20, et on calcule une bonification (en %)
qui va s'appliquer à la moyenne de chaque UE du semestre en appliquant
la formule : bonification (en %) = (note-10)*0,5.
Bonification qui ne s'applique que si la note est >10.
(Une note de 10 donne donc 0% de bonif ; note de 20 : 5% de bonif)
"""
name = "bonus_grenoble_iut1_2020"
# C'est un bonus "multiplicatif": on l'exprime en additif,
# sur chaque moyenne d'UE m_0
# m_1 = a . m_0
# m_1 = m_0 + bonus
# bonus = m_0 (a - 1)
def compute_bonus(self, sem_modimpl_moys_inscrits, modimpl_coefs_etuds_no_nan):
"""calcul du bonus"""
# Calcule moyenne pondérée des notes de sport:
notes = np.sum(
sem_modimpl_moys_inscrits * modimpl_coefs_etuds_no_nan, axis=1
) / np.sum(modimpl_coefs_etuds_no_nan, axis=1)
notes = np.nan_to_num(notes, copy=False)
a = (notes - 10.0) * 0.005
a[a <= 0] = 1.0 # note < 10, pas de bonus
if self.formsemestre.formation.is_apc():
# ne s'applique qu'aux moyennes d'UE
b = self.etud_moy_ue * (a - 1)
self.bonus_ues = b # DataFrame
else:
# ne s'applique qu'à la moyenne générale
b = self.etud_moy_gen * (a - 1)
self.bonus_moy_gen = b
class BonusVilleAvray(BonusSport):
"""Calcul bonus modules optionels (sport, culture), règle IUT Ville d'Avray
"""Bonus modules optionels (sport, culture), règle IUT Ville d'Avray.
Les étudiants de l'IUT peuvent suivre des enseignements optionnels
de l'Université Paris 10 (C2I) non rattachés à une unité d'enseignement.

View File

@ -73,6 +73,8 @@ class ResultatsSemestreBUT(NotesTableCompat):
self.ues,
self.modimpl_inscr_df,
self.modimpl_coefs_df.transpose(),
self.etud_moy_gen,
self.etud_moy_ue,
)
self.bonus_ues = bonus.get_bonus_ues()
if self.bonus_ues is not None:

View File

@ -80,6 +80,8 @@ class ResultatsSemestreClassic(NotesTableCompat):
self.ues,
self.modimpl_inscr_df,
self.modimpl_coefs,
self.etud_moy_gen,
self.etud_moy_ue,
)
self.bonus_ues = bonus.get_bonus_ues()
if self.bonus_ues is not None: