forked from ScoDoc/ScoDoc
Corrige tri etuds/compétences dans traduction SxTag -> RSCTag
This commit is contained in:
parent
491d600bd4
commit
8de1a44583
@ -43,7 +43,7 @@ import numpy as np
|
||||
import app.pe.rcss.pe_rcs as pe_rcs
|
||||
import app.pe.rcss.pe_rcrcf as pe_rcrcf
|
||||
import app.pe.pe_sxtag as pe_sxtag
|
||||
|
||||
import app.pe.pe_comp as pe_comp
|
||||
from app.pe.pe_tabletags import TableTag
|
||||
from app.pe.pe_moytag import MoyennesTag
|
||||
|
||||
@ -93,16 +93,16 @@ class RCSTag(TableTag):
|
||||
# Les étudiants (etuds, états civils & etudis)
|
||||
self.etuds = nt.etuds
|
||||
self.add_etuds(nt.etuds)
|
||||
self.etudids_sorted = sorted(self.etudids)
|
||||
"""Etudids triés"""
|
||||
|
||||
# Les compétences (extraites de tous les Sxtags)
|
||||
self.association_ues_comp = self.mapping_ue_competences()
|
||||
print(self.association_ues_comp)
|
||||
"""Association indiquant pour chaque UE , quelle compétence lui correspond"""
|
||||
pe_affichage.pe_print(f"* Association UEs -> compétences : {self.association_ues_comp}")
|
||||
|
||||
self.competences_sorted = self.do_complist()
|
||||
"""Liste des compétences triées"""
|
||||
|
||||
|
||||
"""Compétences extraites de tous les SxTag aggrégés"""
|
||||
"""Compétences (triées) extraites de tous les SxTag aggrégés"""
|
||||
pe_affichage.pe_print(f"* Compétences : {', '.join(self.competences_sorted)}")
|
||||
|
||||
# Les tags
|
||||
@ -116,11 +116,11 @@ class RCSTag(TableTag):
|
||||
|
||||
for tag in self.tags_sorted:
|
||||
# Cube de note
|
||||
notes_cube, coeffs_cube = self.compute_notes_comps_cube(tag)
|
||||
notes_cube, coeffs_cube = self.compute_notes_comps_cube(tag, self.etudids_sorted, self.competences_sorted)
|
||||
|
||||
# Calcule des moyennes/coeffs sous forme d'un dataframe"""
|
||||
moys_competences, coeffs_competences = compute_notes_competences(
|
||||
notes_cube, coeffs_cube, self.etudids, self.competences_sorted
|
||||
notes_cube, coeffs_cube, self.etudids_sorted, self.competences_sorted
|
||||
)
|
||||
|
||||
# Les moyennes
|
||||
@ -139,20 +139,25 @@ class RCSTag(TableTag):
|
||||
else:
|
||||
return f"{self.__class__.__name__} ({self.rcs_id})"
|
||||
|
||||
def compute_notes_comps_cube(self, tag):
|
||||
def compute_notes_comps_cube(self, tag, etudids_sorted: list[int], competences_sorted: list[str]):
|
||||
"""Pour un tag donné, construit :
|
||||
* le cube de notes (etudid x competences x SxTag) nécessaire au calcul des moyennes,
|
||||
en remplaçant les données d'UE (obtenus du SxTag) par les compétences
|
||||
* le cube de coeffs (etudid x competences x SxTag) (traduisant les inscriptions)
|
||||
appliqué au calcul des différents SxTag
|
||||
|
||||
Args:
|
||||
tag: Le tag visé
|
||||
etudids_sorted: Les etudis triés
|
||||
competences_sorted: Les compétences triées
|
||||
"""
|
||||
# nb_tags = len(self.tags_sorted)
|
||||
# nb_etudiants = len(self.etuds)
|
||||
# nb_semestres = len(self.semestres_tags_aggreges)
|
||||
|
||||
# Index du cube (etudids -> dim 0, tags -> dim 1)
|
||||
etudids = [etud.etudid for etud in self.etuds]
|
||||
competences_sorted = self.competences_sorted
|
||||
# etudids = [etud.etudid for etud in self.etuds]
|
||||
# competences_sorted = self.competences_sorted
|
||||
sxstags_ids = list(self.sxstags.keys())
|
||||
|
||||
notes_dfs = {}
|
||||
@ -160,8 +165,8 @@ class RCSTag(TableTag):
|
||||
|
||||
for sxtag_id, sxtag in self.sxstags.items():
|
||||
# Partant d'un dataframe vierge
|
||||
notes_df = pd.DataFrame(np.nan, index=etudids, columns=competences_sorted)
|
||||
coeffs_df = pd.DataFrame(np.nan, index=etudids, columns=competences_sorted)
|
||||
notes_df = pd.DataFrame(np.nan, index=etudids_sorted, columns=competences_sorted)
|
||||
coeffs_df = pd.DataFrame(np.nan, index=etudids_sorted, columns=competences_sorted)
|
||||
|
||||
moys_tag = sxtag.moyennes_tags[tag]
|
||||
|
||||
@ -175,11 +180,8 @@ class RCSTag(TableTag):
|
||||
notes.columns = comp_associes_aux_ues
|
||||
coeffs.columns = comp_associes_aux_ues
|
||||
|
||||
# Compétences communes
|
||||
comp_communes = list(set(competences_sorted) & set(comp_associes_aux_ues))
|
||||
|
||||
# Etudiants communs
|
||||
etudids_communs = notes_df.index.intersection(notes.index)
|
||||
# Les étudiants et les compétences communes
|
||||
etudids_communs, comp_communes = pe_comp.find_index_and_columns_communs(notes_df, notes)
|
||||
|
||||
# Recopie des notes et des coeffs
|
||||
notes_df.loc[etudids_communs, comp_communes] = notes.loc[
|
||||
@ -233,7 +235,7 @@ class RCSTag(TableTag):
|
||||
|
||||
|
||||
def compute_notes_competences(
|
||||
set_cube: np.array, coeff_cube: np.array, etudids: list, competences: list
|
||||
set_cube: np.array, coeff_cube: np.array, etudids_sorted: list, competences_sorted: list
|
||||
):
|
||||
"""Calcule:
|
||||
* la moyenne par compétences à un tag donné sur plusieurs semestres (partant du set_cube).
|
||||
@ -248,16 +250,16 @@ def compute_notes_competences(
|
||||
set_cube: notes moyennes aux modules ndarray
|
||||
(etuds x UEs|compétences x sxtags), des floats avec des NaN
|
||||
coeffs_cube: somme des coeffs impliqués dans la moyennes
|
||||
etudids: liste des étudiants (dim. 0 du cube)
|
||||
competences: list
|
||||
etudids_sorted: liste des étudiants (dim. 0 du cube)
|
||||
competences_sorted: list
|
||||
tags: liste des tags (dim. 1 du cube)
|
||||
Returns:
|
||||
Un DataFrame avec pour columns les moyennes par tags,
|
||||
et pour rows les etudid
|
||||
"""
|
||||
nb_etuds, nb_comps, nb_semestres = set_cube.shape
|
||||
assert nb_etuds == len(etudids)
|
||||
assert nb_comps == len(competences)
|
||||
assert nb_etuds == len(etudids_sorted)
|
||||
assert nb_comps == len(competences_sorted)
|
||||
|
||||
# Quelles entrées du cube contiennent des notes ?
|
||||
mask = ~np.isnan(set_cube)
|
||||
@ -275,12 +277,12 @@ def compute_notes_competences(
|
||||
# Le dataFrame des notes moyennes
|
||||
etud_moy_tag_df = pd.DataFrame(
|
||||
etud_moy_tag,
|
||||
index=etudids, # les etudids
|
||||
columns=competences, # les competences
|
||||
index=etudids_sorted, # les etudids
|
||||
columns=competences_sorted, # les competences
|
||||
)
|
||||
etud_moy_tag_df.fillna(np.nan)
|
||||
|
||||
coeffs_df = pd.DataFrame(coeff_tag, index=etudids, columns=competences)
|
||||
coeffs_df = pd.DataFrame(coeff_tag, index=etudids_sorted, columns=competences_sorted)
|
||||
coeffs_df.fillna(np.nan)
|
||||
|
||||
return etud_moy_tag_df, coeffs_df
|
||||
|
Loading…
Reference in New Issue
Block a user