forked from ScoDoc/ScoDoc
Bonus Annecy
This commit is contained in:
parent
9a57f362dc
commit
7f164b1e1f
@ -13,6 +13,7 @@ Les classes de Bonus fournissent deux méthodes:
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
import datetime
|
import datetime
|
||||||
|
import math
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
@ -106,6 +107,8 @@ class BonusSport:
|
|||||||
# sem_modimpl_moys_spo est (nb_etuds, nb_mod_sport)
|
# sem_modimpl_moys_spo est (nb_etuds, nb_mod_sport)
|
||||||
# ou (nb_etuds, nb_mod_sport, nb_ues_non_bonus)
|
# ou (nb_etuds, nb_mod_sport, nb_ues_non_bonus)
|
||||||
nb_etuds, nb_mod_sport = sem_modimpl_moys_spo.shape[:2]
|
nb_etuds, nb_mod_sport = sem_modimpl_moys_spo.shape[:2]
|
||||||
|
if nb_etuds == 0 or nb_mod_sport == 0:
|
||||||
|
return # no bonus at all
|
||||||
# Enlève les NaN du numérateur:
|
# Enlève les NaN du numérateur:
|
||||||
sem_modimpl_moys_no_nan = np.nan_to_num(sem_modimpl_moys_spo, nan=0.0)
|
sem_modimpl_moys_no_nan = np.nan_to_num(sem_modimpl_moys_spo, nan=0.0)
|
||||||
|
|
||||||
@ -157,7 +160,8 @@ class BonusSport:
|
|||||||
"""Calcul des bonus: méthode virtuelle à écraser.
|
"""Calcul des bonus: méthode virtuelle à écraser.
|
||||||
Arguments:
|
Arguments:
|
||||||
- sem_modimpl_moys_inscrits:
|
- sem_modimpl_moys_inscrits:
|
||||||
ndarray (nb_etuds, mod_sport) ou en APC (nb_etuds, mods_sport, nb_ue_non_bonus)
|
ndarray (nb_etuds, mod_sport)
|
||||||
|
ou en APC (nb_etuds, mods_sport, nb_ue_non_bonus)
|
||||||
les notes aux modules sports auxquel l'étudiant est inscrit, 0 sinon. Pas de nans.
|
les notes aux modules sports auxquel l'étudiant est inscrit, 0 sinon. Pas de nans.
|
||||||
- modimpl_coefs_etuds_no_nan:
|
- modimpl_coefs_etuds_no_nan:
|
||||||
les coefficients: float ndarray
|
les coefficients: float ndarray
|
||||||
@ -236,10 +240,6 @@ class BonusSportAdditif(BonusSport):
|
|||||||
bonus_moy_arr, index=self.etuds_idx, dtype=float
|
bonus_moy_arr, index=self.etuds_idx, dtype=float
|
||||||
)
|
)
|
||||||
|
|
||||||
# if len(bonus_moy_arr.shape) > 1:
|
|
||||||
# bonus_moy_arr = bonus_moy_arr.sum(axis=1)
|
|
||||||
# Laisse bonus_moy_gen à None, en APC le bonus moy. gen. sera réparti sur les UEs.
|
|
||||||
|
|
||||||
|
|
||||||
class BonusSportMultiplicatif(BonusSport):
|
class BonusSportMultiplicatif(BonusSport):
|
||||||
"""Bonus sport qui multiplie les moyennes d'UE par un facteur"""
|
"""Bonus sport qui multiplie les moyennes d'UE par un facteur"""
|
||||||
@ -294,6 +294,49 @@ class BonusDirect(BonusSportAdditif):
|
|||||||
proportion_point = 1.0
|
proportion_point = 1.0
|
||||||
|
|
||||||
|
|
||||||
|
class BonusAnnecy(BonusSport):
|
||||||
|
"""Calcul bonus modules optionnels (sport), règle IUT d'Annecy.
|
||||||
|
Il peut y avoir plusieurs modules de bonus.
|
||||||
|
Prend pour chaque étudiant la meilleure de ses notes bonus et
|
||||||
|
ajoute à chaque UE :
|
||||||
|
0.05 point si >=10,
|
||||||
|
0.1 point si >=12,
|
||||||
|
0.15 point si >=14,
|
||||||
|
0.2 point si >=16,
|
||||||
|
0.25 point si >=18.
|
||||||
|
"""
|
||||||
|
|
||||||
|
name = "bonus_iut_annecy"
|
||||||
|
displayed_name = "IUT d'Annecy"
|
||||||
|
|
||||||
|
def compute_bonus(self, sem_modimpl_moys_inscrits, modimpl_coefs_etuds_no_nan):
|
||||||
|
"""calcul du bonus"""
|
||||||
|
# if math.prod(sem_modimpl_moys_inscrits.shape) == 0:
|
||||||
|
# return # no etuds or no mod sport
|
||||||
|
# Prend la note de chaque modimpl, sans considération d'UE
|
||||||
|
if len(sem_modimpl_moys_inscrits.shape) > 2: # apc
|
||||||
|
sem_modimpl_moys_inscrits = sem_modimpl_moys_inscrits[:, :, 0]
|
||||||
|
# ici sem_modimpl_moys_inscrits est nb_etuds x nb_mods_bonus, en APC et en classic
|
||||||
|
note_bonus_max = np.max(sem_modimpl_moys_inscrits, axis=1) # 1d, nb_etuds
|
||||||
|
bonus = np.zeros(note_bonus_max.shape)
|
||||||
|
bonus[note_bonus_max >= 18.0] = 0.25
|
||||||
|
bonus[note_bonus_max >= 16.0] = 0.20
|
||||||
|
bonus[note_bonus_max >= 14.0] = 0.15
|
||||||
|
bonus[note_bonus_max >= 12.0] = 0.10
|
||||||
|
bonus[note_bonus_max >= 10.0] = 0.05
|
||||||
|
|
||||||
|
# Bonus moyenne générale et sur les UE
|
||||||
|
self.bonus_moy_gen = pd.Series(bonus, index=self.etuds_idx, dtype=float)
|
||||||
|
ues_idx = [ue.id for ue in self.formsemestre.query_ues(with_sport=False)]
|
||||||
|
nb_ues_no_bonus = len(ues_idx)
|
||||||
|
self.bonus_ues = pd.DataFrame(
|
||||||
|
np.stack([bonus] * nb_ues_no_bonus, axis=1),
|
||||||
|
columns=ues_idx,
|
||||||
|
index=self.etuds_idx,
|
||||||
|
dtype=float,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class BonusBethune(BonusSportMultiplicatif):
|
class BonusBethune(BonusSportMultiplicatif):
|
||||||
"""Calcul bonus modules optionnels (sport), règle IUT de Béthune.
|
"""Calcul bonus modules optionnels (sport), règle IUT de Béthune.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user