Début de la mise en place des RCUEs
This commit is contained in:
parent
7026746385
commit
1bed4bb720
@ -144,14 +144,16 @@ class RCSemXTag(pe_tabletags.TableTag):
|
|||||||
notes_cube,
|
notes_cube,
|
||||||
coeffs_df,
|
coeffs_df,
|
||||||
coeffs_cube,
|
coeffs_cube,
|
||||||
) = self.compute_cubes(tag)
|
coeffs_rcues_df,
|
||||||
|
coeffs_rcues_cube,
|
||||||
|
) = self.assemble_cubes(tag)
|
||||||
|
|
||||||
# Calcule les moyennes, et synthétise les coeffs
|
# Calcule les moyennes, et synthétise les coeffs
|
||||||
(
|
(
|
||||||
moys_competences,
|
moys_competences,
|
||||||
matrice_coeffs_moy_gen,
|
matrice_coeffs_moy_gen,
|
||||||
) = self.compute_notes_et_coeffs_competences(
|
) = self.compute_notes_et_coeffs_competences(
|
||||||
notes_cube, coeffs_cube, inscr_cube
|
notes_cube, coeffs_cube, coeffs_rcues_cube, inscr_cube
|
||||||
)
|
)
|
||||||
|
|
||||||
# Affichage des coeffs
|
# Affichage des coeffs
|
||||||
@ -182,13 +184,14 @@ class RCSemXTag(pe_tabletags.TableTag):
|
|||||||
else:
|
else:
|
||||||
return f"{self.__class__.__name__} {self.rcs_id}"
|
return f"{self.__class__.__name__} {self.rcs_id}"
|
||||||
|
|
||||||
def compute_cubes(self, tag):
|
def assemble_cubes(self, tag):
|
||||||
"""Pour un tag donné, construit les cubes de :
|
"""Pour un tag donné, construit les cubes :
|
||||||
* d'inscriptions aux compétences (etudid x competences x SxTag)
|
* d'inscriptions aux compétences (etudid x competences x SxTag)
|
||||||
* de notes (etudid x competences x SxTag)
|
* de notes (etudid x competences x SxTag)
|
||||||
* de coeffs (etudid x competences x SxTag)
|
* des coeffs pour le calcul des moyennes générales par UE (etudid x competences x SxTag)
|
||||||
|
* des coeffs pour le calcul des regroupements cohérents d'UE/compétences
|
||||||
|
|
||||||
nécessaire au calcul des moyennes, en :
|
nécessaires au calcul des moyennes, en :
|
||||||
|
|
||||||
* transformant les données des UEs en données de compétences (changement de noms)
|
* transformant les données des UEs en données de compétences (changement de noms)
|
||||||
* fusionnant les données d'un même semestre, lorsque plusieurs UEs traitent d'une même compétence (cas des RCSx = Sx)
|
* fusionnant les données d'un même semestre, lorsque plusieurs UEs traitent d'une même compétence (cas des RCSx = Sx)
|
||||||
@ -203,7 +206,8 @@ class RCSemXTag(pe_tabletags.TableTag):
|
|||||||
|
|
||||||
inscriptions_dfs = {}
|
inscriptions_dfs = {}
|
||||||
notes_dfs = {}
|
notes_dfs = {}
|
||||||
coeffs_dfs = {}
|
coeffs_moy_gen_dfs = {}
|
||||||
|
coeffs_rcue_dfs = {}
|
||||||
|
|
||||||
for sxtag_id, sxtag in self.sxstags_aggreges.items():
|
for sxtag_id, sxtag in self.sxstags_aggreges.items():
|
||||||
# Partant de dataframes vierges
|
# Partant de dataframes vierges
|
||||||
@ -213,7 +217,10 @@ class RCSemXTag(pe_tabletags.TableTag):
|
|||||||
notes_df = pd.DataFrame(
|
notes_df = pd.DataFrame(
|
||||||
np.nan, index=self.etudids_sorted, columns=self.competences_sorted
|
np.nan, index=self.etudids_sorted, columns=self.competences_sorted
|
||||||
)
|
)
|
||||||
coeffs_df = pd.DataFrame(
|
coeffs_moy_gen_df = pd.DataFrame(
|
||||||
|
np.nan, index=self.etudids_sorted, columns=self.competences_sorted
|
||||||
|
)
|
||||||
|
coeffs_rcue_df = pd.DataFrame(
|
||||||
np.nan, index=self.etudids_sorted, columns=self.competences_sorted
|
np.nan, index=self.etudids_sorted, columns=self.competences_sorted
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -224,7 +231,8 @@ class RCSemXTag(pe_tabletags.TableTag):
|
|||||||
# Les inscr, les notes, les coeffs
|
# Les inscr, les notes, les coeffs
|
||||||
acro_ues_inscr_parcours = sxtag.acro_ues_inscr_parcours
|
acro_ues_inscr_parcours = sxtag.acro_ues_inscr_parcours
|
||||||
notes = moys_tag.matrice_notes_gen
|
notes = moys_tag.matrice_notes_gen
|
||||||
coeffs = moys_tag.matrice_coeffs_moy_gen # les coeffs
|
coeffs_moy_gen = moys_tag.matrice_coeffs_moy_gen # les coeffs
|
||||||
|
coeffs_rcues = sxtag.coefs_rcue # dictionnaire UE -> coeff
|
||||||
|
|
||||||
# Traduction des acronymes d'UE en compétences
|
# Traduction des acronymes d'UE en compétences
|
||||||
# comp_to_ues = pe_comp.asso_comp_to_accronymes(self.acronymes_ues_to_competences)
|
# comp_to_ues = pe_comp.asso_comp_to_accronymes(self.acronymes_ues_to_competences)
|
||||||
@ -253,14 +261,26 @@ class RCSemXTag(pe_tabletags.TableTag):
|
|||||||
etudids_communs, acronyme
|
etudids_communs, acronyme
|
||||||
]
|
]
|
||||||
|
|
||||||
# Les coeffs
|
# Les coeffs pour la moyenne générale
|
||||||
etuds_avec_coeffs = coeffs[coeffs[acronyme].notnull()].index
|
etuds_avec_coeffs = coeffs_moy_gen[
|
||||||
|
coeffs_moy_gen[acronyme].notnull()
|
||||||
|
].index
|
||||||
etudids_communs = list(
|
etudids_communs = list(
|
||||||
coeffs_df.index.intersection(etuds_avec_coeffs)
|
coeffs_moy_gen_df.index.intersection(etuds_avec_coeffs)
|
||||||
)
|
)
|
||||||
coeffs_df.loc[etudids_communs, competence] = coeffs.loc[
|
coeffs_moy_gen_df.loc[
|
||||||
etudids_communs, acronyme
|
etudids_communs, competence
|
||||||
|
] = coeffs_moy_gen.loc[etudids_communs, acronyme]
|
||||||
|
|
||||||
|
# Les coeffs des RCUE reportés là où les étudiants ont des notes
|
||||||
|
etuds_avec_notes = notes[notes[acronyme].notnull()].index
|
||||||
|
etudids_communs = list(
|
||||||
|
notes_df.index.intersection(etuds_avec_notes)
|
||||||
|
)
|
||||||
|
coeffs_rcue_df.loc[etudids_communs, competence] = coeffs_rcues[
|
||||||
|
acronyme
|
||||||
]
|
]
|
||||||
|
|
||||||
# Supprime tout ce qui n'est pas numérique
|
# Supprime tout ce qui n'est pas numérique
|
||||||
# for col in notes_df.columns:
|
# for col in notes_df.columns:
|
||||||
# notes_df[col] = pd.to_numeric(notes_df[col], errors="coerce")
|
# notes_df[col] = pd.to_numeric(notes_df[col], errors="coerce")
|
||||||
@ -268,9 +288,10 @@ class RCSemXTag(pe_tabletags.TableTag):
|
|||||||
# Stocke les dfs
|
# Stocke les dfs
|
||||||
inscriptions_dfs[sxtag_id] = inscription_df
|
inscriptions_dfs[sxtag_id] = inscription_df
|
||||||
notes_dfs[sxtag_id] = notes_df
|
notes_dfs[sxtag_id] = notes_df
|
||||||
coeffs_dfs[sxtag_id] = coeffs_df
|
coeffs_moy_gen_dfs[sxtag_id] = coeffs_moy_gen_df
|
||||||
|
coeffs_rcue_dfs[sxtag_id] = coeffs_rcue_df
|
||||||
|
|
||||||
"""Réunit les inscriptions sous forme d'un cube etudids x competences x semestres"""
|
# Réunit les inscriptions sous forme d'un cube etudids x competences x semestres
|
||||||
sxtag_x_etudids_x_comps = [
|
sxtag_x_etudids_x_comps = [
|
||||||
inscriptions_dfs[sxtag_id] for sxtag_id in self.sxstags_aggreges
|
inscriptions_dfs[sxtag_id] for sxtag_id in self.sxstags_aggreges
|
||||||
]
|
]
|
||||||
@ -278,25 +299,37 @@ class RCSemXTag(pe_tabletags.TableTag):
|
|||||||
sxtag_x_etudids_x_comps, axis=-1
|
sxtag_x_etudids_x_comps, axis=-1
|
||||||
)
|
)
|
||||||
|
|
||||||
"""Réunit les notes sous forme d'un cube etudids x competences x semestres"""
|
# Réunit les notes sous forme d'un cube etudids x competences x semestres
|
||||||
sxtag_x_etudids_x_comps = [
|
sxtag_x_etudids_x_comps = [
|
||||||
notes_dfs[sxtag_id] for sxtag_id in self.sxstags_aggreges
|
notes_dfs[sxtag_id] for sxtag_id in self.sxstags_aggreges
|
||||||
]
|
]
|
||||||
notes_etudids_x_comps_x_sxtag = np.stack(sxtag_x_etudids_x_comps, axis=-1)
|
notes_etudids_x_comps_x_sxtag = np.stack(sxtag_x_etudids_x_comps, axis=-1)
|
||||||
|
|
||||||
"""Réunit les coeffs sous forme d'un cube etudids x competences x semestres"""
|
# Réunit les coeffs sous forme d'un cube etudids x competences x semestres
|
||||||
sxtag_x_etudids_x_comps = [
|
sxtag_x_etudids_x_comps = [
|
||||||
coeffs_dfs[sxtag_id] for sxtag_id in self.sxstags_aggreges
|
coeffs_moy_gen_dfs[sxtag_id] for sxtag_id in self.sxstags_aggreges
|
||||||
]
|
]
|
||||||
coeffs_etudids_x_comps_x_sxtag = np.stack(sxtag_x_etudids_x_comps, axis=-1)
|
coeffs_etudids_x_comps_x_sxtag = np.stack(sxtag_x_etudids_x_comps, axis=-1)
|
||||||
|
|
||||||
|
# Normalise les coeffs de rcue par année (pour que le poids des années soit le
|
||||||
|
# même)
|
||||||
|
# Réunit les coeffs sous forme d'un cube etudids x competences x semestres
|
||||||
|
sxtag_x_etudids_x_comps = [
|
||||||
|
coeffs_rcue_dfs[sxtag_id] for sxtag_id in self.sxstags_aggreges
|
||||||
|
]
|
||||||
|
coeffs_rcues_etudids_x_comps_x_sxtag = np.stack(
|
||||||
|
sxtag_x_etudids_x_comps, axis=-1
|
||||||
|
)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
inscriptions_dfs,
|
inscriptions_dfs,
|
||||||
inscriptions_etudids_x_comps_x_sxtag,
|
inscriptions_etudids_x_comps_x_sxtag,
|
||||||
notes_dfs,
|
notes_dfs,
|
||||||
notes_etudids_x_comps_x_sxtag,
|
notes_etudids_x_comps_x_sxtag,
|
||||||
coeffs_dfs,
|
coeffs_moy_gen_dfs,
|
||||||
coeffs_etudids_x_comps_x_sxtag,
|
coeffs_etudids_x_comps_x_sxtag,
|
||||||
|
coeffs_rcue_dfs,
|
||||||
|
coeffs_rcues_etudids_x_comps_x_sxtag,
|
||||||
)
|
)
|
||||||
|
|
||||||
def _do_taglist(self) -> list[str]:
|
def _do_taglist(self) -> list[str]:
|
||||||
@ -324,7 +357,11 @@ class RCSemXTag(pe_tabletags.TableTag):
|
|||||||
return dict_competences
|
return dict_competences
|
||||||
|
|
||||||
def compute_notes_et_coeffs_competences(
|
def compute_notes_et_coeffs_competences(
|
||||||
self, notes_cube: np.array, coeffs_cube: np.array, inscr_mask: np.array
|
self,
|
||||||
|
notes_cube: np.array,
|
||||||
|
coeffs_cube: np.array,
|
||||||
|
coeffs_rcue: np.array,
|
||||||
|
inscr_mask: np.array,
|
||||||
):
|
):
|
||||||
"""Calcule la moyenne par compétences (à un tag donné) sur plusieurs semestres (partant du set_cube).
|
"""Calcule la moyenne par compétences (à un tag donné) sur plusieurs semestres (partant du set_cube).
|
||||||
|
|
||||||
@ -337,8 +374,10 @@ class RCSemXTag(pe_tabletags.TableTag):
|
|||||||
notes_cube: notes moyennes aux compétences ndarray
|
notes_cube: notes moyennes aux compétences ndarray
|
||||||
(etuds x UEs|compétences x sxtags), des floats avec des NaN
|
(etuds x UEs|compétences x sxtags), des floats avec des NaN
|
||||||
coeffs_cube: coeffs appliqués aux compétences
|
coeffs_cube: coeffs appliqués aux compétences
|
||||||
(etuds x UEs|compétences x sxtags), des floats avec des NaN
|
(etuds x UEs|compétences x sxtags) dans le calcul des moyennes générales,
|
||||||
inscr_mask: inscrptions aux compétences ndarray
|
des floats avec des NaN
|
||||||
|
coeffs_rcue_cube: coeffs des RCUE appliqués dans les moyennes de RCS
|
||||||
|
inscr_mask: inscriptions aux compétences ndarray
|
||||||
(etuds x UEs|compétences x sxtags), des 0 et des 1
|
(etuds x UEs|compétences x sxtags), des 0 et des 1
|
||||||
Returns:
|
Returns:
|
||||||
Un DataFrame avec pour columns les moyennes par tags,
|
Un DataFrame avec pour columns les moyennes par tags,
|
||||||
|
@ -72,6 +72,12 @@ class ResSemBUTTag(ResultatsSemestreBUT, pe_tabletags.TableTag):
|
|||||||
# Le nom du res_semestre taggué
|
# Le nom du res_semestre taggué
|
||||||
self.nom = self.get_repr(verbose=True)
|
self.nom = self.get_repr(verbose=True)
|
||||||
|
|
||||||
|
# Le rang du ResultatsSemestreBUT
|
||||||
|
self.semestre_id = self.formsemestre.semestre_id
|
||||||
|
"""Rang du ResultatsSemestreBUT"""
|
||||||
|
self.annee_id = (self.semestre_id - 1) // 2 + 1
|
||||||
|
"""Année du ResultatsSemestreBUT"""
|
||||||
|
|
||||||
# Les étudiants (etuds, états civils & etudis) ajouté
|
# Les étudiants (etuds, états civils & etudis) ajouté
|
||||||
self.add_etuds(self.etuds)
|
self.add_etuds(self.etuds)
|
||||||
self.etudids_sorted = sorted(self.etudids)
|
self.etudids_sorted = sorted(self.etudids)
|
||||||
@ -87,7 +93,7 @@ class ResSemBUTTag(ResultatsSemestreBUT, pe_tabletags.TableTag):
|
|||||||
]
|
]
|
||||||
"""Liste des UEs standards du ResultatsSemestreBUT"""
|
"""Liste des UEs standards du ResultatsSemestreBUT"""
|
||||||
|
|
||||||
# Les parcours des étudiants à ce semestre
|
# Les parcours des étudiants à ce semestre (None si pas de parcours)
|
||||||
self.parcours = []
|
self.parcours = []
|
||||||
"""Parcours auxquels sont inscrits les étudiants"""
|
"""Parcours auxquels sont inscrits les étudiants"""
|
||||||
for etudid in self.etudids_sorted:
|
for etudid in self.etudids_sorted:
|
||||||
@ -104,11 +110,11 @@ class ResSemBUTTag(ResultatsSemestreBUT, pe_tabletags.TableTag):
|
|||||||
# Les acronymes des UEs
|
# Les acronymes des UEs
|
||||||
self.ues_to_acronymes = {ue.id: ue.acronyme for ue in self.ues_standards}
|
self.ues_to_acronymes = {ue.id: ue.acronyme for ue in self.ues_standards}
|
||||||
self.acronymes_sorted = sorted(self.ues_to_acronymes.values())
|
self.acronymes_sorted = sorted(self.ues_to_acronymes.values())
|
||||||
"""Les acronymes de UE triés par ordre alphabétique"""
|
"""Liste des acronymes des UE triés par ordre alphabétique"""
|
||||||
|
|
||||||
# Les compétences associées aux UEs (définies par les acronymes)
|
# Les compétences associées aux UEs (définies par les acronymes)
|
||||||
self.acronymes_ues_to_competences = {}
|
self.acronymes_ues_to_competences = {}
|
||||||
"""Association acronyme d'UEs -> compétence"""
|
"""Association {acronyme d'UEs -> compétence}"""
|
||||||
for ue in self.ues_standards:
|
for ue in self.ues_standards:
|
||||||
assert ue.niveau_competence, ScoValueError(
|
assert ue.niveau_competence, ScoValueError(
|
||||||
"Des UEs ne sont pas rattachées à des compétences"
|
"Des UEs ne sont pas rattachées à des compétences"
|
||||||
@ -118,7 +124,7 @@ class ResSemBUTTag(ResultatsSemestreBUT, pe_tabletags.TableTag):
|
|||||||
self.competences_sorted = sorted(
|
self.competences_sorted = sorted(
|
||||||
list(set(self.acronymes_ues_to_competences.values()))
|
list(set(self.acronymes_ues_to_competences.values()))
|
||||||
)
|
)
|
||||||
"""Compétences triées par nom"""
|
"""Liste de compétences triées par nom"""
|
||||||
aff = pe_affichage.repr_asso_ue_comp(self.acronymes_ues_to_competences)
|
aff = pe_affichage.repr_asso_ue_comp(self.acronymes_ues_to_competences)
|
||||||
pe_affichage.pe_print(f"--> UEs/Compétences : {aff}")
|
pe_affichage.pe_print(f"--> UEs/Compétences : {aff}")
|
||||||
|
|
||||||
@ -156,6 +162,12 @@ class ResSemBUTTag(ResultatsSemestreBUT, pe_tabletags.TableTag):
|
|||||||
self.capitalisations = self._get_capitalisations(self.ues_standards)
|
self.capitalisations = self._get_capitalisations(self.ues_standards)
|
||||||
"""DataFrame indiquant les UEs capitalisables d'un étudiant (etudids x )"""
|
"""DataFrame indiquant les UEs capitalisables d'un étudiant (etudids x )"""
|
||||||
|
|
||||||
|
# Les coeffs des RCUE
|
||||||
|
self.coefs_rcue = {}
|
||||||
|
"""Coefs de RCUE par acronyme d'UEs"""
|
||||||
|
for ue in self.ues_standards:
|
||||||
|
self.coefs_rcue[ue.acronyme] = ue.coef_rcue
|
||||||
|
|
||||||
# Calcul des moyennes & les classements de chaque étudiant à chaque tag
|
# Calcul des moyennes & les classements de chaque étudiant à chaque tag
|
||||||
self.moyennes_tags = {}
|
self.moyennes_tags = {}
|
||||||
"""Moyennes par tags (personnalisés ou 'but')"""
|
"""Moyennes par tags (personnalisés ou 'but')"""
|
||||||
|
@ -109,6 +109,10 @@ class SxTag(pe_tabletags.TableTag):
|
|||||||
self.fid_final = sxtag_id[1]
|
self.fid_final = sxtag_id[1]
|
||||||
self.ressembuttag_final = ressembuttags[self.fid_final]
|
self.ressembuttag_final = ressembuttags[self.fid_final]
|
||||||
"""Le ResSemBUTTag final"""
|
"""Le ResSemBUTTag final"""
|
||||||
|
self.semestre_id = self.ressembuttag_final.semestre_id
|
||||||
|
"""Rang du SxTag"""
|
||||||
|
self.annee_id = self.ressembuttag_final.annee_id
|
||||||
|
"""Année du SxTag"""
|
||||||
|
|
||||||
# Ajoute les etudids et les états civils
|
# Ajoute les etudids et les états civils
|
||||||
self.etuds = self.ressembuttag_final.etuds
|
self.etuds = self.ressembuttag_final.etuds
|
||||||
@ -137,11 +141,14 @@ class SxTag(pe_tabletags.TableTag):
|
|||||||
"""L'association acronyme d'UEs -> compétence"""
|
"""L'association acronyme d'UEs -> compétence"""
|
||||||
self.competences_sorted = sorted(self.acronymes_ues_to_competences.values())
|
self.competences_sorted = sorted(self.acronymes_ues_to_competences.values())
|
||||||
"""Les compétences triées par nom"""
|
"""Les compétences triées par nom"""
|
||||||
|
|
||||||
aff = pe_affichage.repr_asso_ue_comp(self.acronymes_ues_to_competences)
|
aff = pe_affichage.repr_asso_ue_comp(self.acronymes_ues_to_competences)
|
||||||
pe_affichage.pe_print(f"--> UEs/Compétences : {aff}")
|
pe_affichage.pe_print(f"--> UEs/Compétences : {aff}")
|
||||||
|
|
||||||
# Les inscriptions des étudiants aux UEs (donnée par leur acronyme)
|
# Les coefs de RCUE issus du dernier semestre
|
||||||
|
self.coefs_rcue = self.ressembuttag_final.coefs_rcue
|
||||||
|
"""Coefs de RCUE par acronyme d'UEs"""
|
||||||
|
|
||||||
|
# Les inscriptions des étudiants aux UEs (données par leur acronyme)
|
||||||
# par report de celle du ressemfinal
|
# par report de celle du ressemfinal
|
||||||
self.acro_ues_inscr_parcours = self.ressembuttag_final.acro_ues_inscr_parcours
|
self.acro_ues_inscr_parcours = self.ressembuttag_final.acro_ues_inscr_parcours
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user