forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -278,48 +278,38 @@ class InterClassTag(pe_tabletags.TableTag):
|
||||
|
||||
etudids_sorted = sorted(list(self.diplomes_ids))
|
||||
|
||||
if self.rcstags:
|
||||
if not self.rcstags:
|
||||
return None
|
||||
|
||||
# Un rcstag significatif pour initier les colonnes
|
||||
moytag = self._un_rcstag_significatif(self.rcstags)
|
||||
if not moytag:
|
||||
return None
|
||||
df_moytag = moytag.to_df(
|
||||
aggregat=aggregat,
|
||||
cohorte="Groupe",
|
||||
)
|
||||
colonnes = list(df_moytag.columns)
|
||||
|
||||
# Partant d'un dataframe vierge
|
||||
df = pd.DataFrame(index=etudids_sorted, columns=colonnes) # colonnes)
|
||||
for col in colonnes:
|
||||
if "rang" in col:
|
||||
df[col] = df[col].astype(str)
|
||||
df.columns = list(range(len(colonnes)))
|
||||
initialisation = False
|
||||
df = pd.DataFrame()
|
||||
|
||||
for rcstag in self.rcstags.values():
|
||||
# Charge les moyennes au tag d'un RCStag (SemX ou RCSXTag)
|
||||
if tag in rcstag.moyennes_tags:
|
||||
# Les infos sur les moyennes du tag
|
||||
moytag: pe_moytag.MoyennesTag = rcstag.moyennes_tags[tag]
|
||||
df_moytag = moytag.to_df(
|
||||
aggregat=aggregat,
|
||||
cohorte="Groupe",
|
||||
)
|
||||
df_moytag.columns = list(range(len(colonnes)))
|
||||
for etudid in etudids_sorted:
|
||||
# Charge ses moyennes au RCSTag suivi
|
||||
rcs = self.suivis[etudid] # Son Sx ou son RCSemX suivi
|
||||
if rcs:
|
||||
rcstag = self.rcstags[rcs.rcs_id] # Son SxTag ou RCSTag
|
||||
# Charge la moyenne
|
||||
if tag in rcstag.moyennes_tags:
|
||||
moytag: pd.DataFrame = rcstag.moyennes_tags[tag]
|
||||
df_moytag = moytag.to_df(
|
||||
aggregat=aggregat,
|
||||
cohorte="Groupe",
|
||||
)
|
||||
|
||||
# Etudiants/Champs communs entre le df et les données interclassées
|
||||
(
|
||||
etudids_communs,
|
||||
champs_communs, # les colonnes de synthèse
|
||||
) = pe_comp.find_index_and_columns_communs(df, df_moytag)
|
||||
# Modif les colonnes au regard du 1er df_moytag significatif lu
|
||||
if not initialisation:
|
||||
df = pd.DataFrame(
|
||||
np.nan, index=etudids_sorted, columns=df_moytag.columns
|
||||
)
|
||||
colonnes = list(df_moytag.columns)
|
||||
for col in colonnes:
|
||||
if col.endswith("rang"):
|
||||
df[col] = df[col].astype(str)
|
||||
initialisation = True
|
||||
|
||||
# Injecte les données par tag
|
||||
df.loc[etudids_communs, champs_communs] = df_moytag.loc[
|
||||
etudids_communs, champs_communs
|
||||
]
|
||||
# Injecte les notes de l'étudiant
|
||||
df.loc[etudid, :] = df_moytag.loc[etudid, :]
|
||||
|
||||
# Refixe les colonnes
|
||||
df.columns = colonnes
|
||||
return df
|
||||
|
@ -146,10 +146,10 @@ def get_colonne_df(aggregat, tag, champ, cohorte, critere):
|
||||
"""Renvoie le tuple (aggregat, tag, champ, cohorte, critere)
|
||||
utilisé pour désigner les colonnes du df"""
|
||||
liste_champs = []
|
||||
if aggregat:
|
||||
if aggregat != None:
|
||||
liste_champs += [aggregat]
|
||||
liste_champs += [tag, champ]
|
||||
if cohorte:
|
||||
if cohorte != None:
|
||||
liste_champs += [cohorte]
|
||||
liste_champs += [critere]
|
||||
return tuple(liste_champs)
|
||||
return "|".join(liste_champs)
|
||||
|
@ -125,8 +125,9 @@ class TableTag(object):
|
||||
|
||||
# Ajout des données par tags
|
||||
for tag in tags_cibles:
|
||||
moy_tag_df = self.moyennes_tags[tag].to_df(aggregat, cohorte)
|
||||
df = df.join(moy_tag_df)
|
||||
if tag in self.moyennes_tags:
|
||||
moy_tag_df = self.moyennes_tags[tag].to_df(aggregat, cohorte)
|
||||
df = df.join(moy_tag_df)
|
||||
|
||||
# Tri par nom, prénom
|
||||
if administratif:
|
||||
@ -138,7 +139,9 @@ class TableTag(object):
|
||||
|
||||
# Conversion des colonnes en multiindex
|
||||
if type_colonnes:
|
||||
df.columns = pd.MultiIndex.from_tuples(df.columns)
|
||||
colonnes = list(df.columns)
|
||||
colonnes = [tuple(col.split("|")) for col in colonnes]
|
||||
df.columns = pd.MultiIndex.from_tuples(colonnes)
|
||||
|
||||
return df
|
||||
|
||||
@ -162,13 +165,13 @@ def _get_champ_administratif(champ, aggregat=None, cohorte=None):
|
||||
"""Pour un champ donné, renvoie l'index (ou le multindex)
|
||||
à intégrer au dataframe"""
|
||||
liste = []
|
||||
if aggregat:
|
||||
if aggregat != None:
|
||||
liste += [aggregat]
|
||||
liste += ["Administratif", "Identité"]
|
||||
if cohorte:
|
||||
if cohorte != None:
|
||||
liste += [champ]
|
||||
liste += [champ]
|
||||
return tuple(liste)
|
||||
return "|".join(liste)
|
||||
|
||||
|
||||
def df_administratif(
|
||||
@ -199,6 +202,7 @@ def df_administratif(
|
||||
_get_champ_administratif(champ, aggregat, cohorte)
|
||||
for champ in CHAMPS_ADMINISTRATIFS
|
||||
]
|
||||
|
||||
df = pd.DataFrame.from_dict(donnees, orient="index", columns=colonnes)
|
||||
df = df.sort_values(by=colonnes[1:])
|
||||
return df
|
||||
|
@ -422,9 +422,16 @@ class JuryPE(object):
|
||||
) as writer:
|
||||
onglets = []
|
||||
for onglet, df in synthese.items():
|
||||
onglets += [onglet]
|
||||
if isinstance(onglet, tuple):
|
||||
if onglet[1] == pe_moytag.CODE_MOY_COMPETENCES:
|
||||
nom_onglet = onglet[0][: 31 - 5] + "/Comp."
|
||||
else:
|
||||
nom_onglet = onglet[0][: 31 - 3] + "/UE"
|
||||
else:
|
||||
nom_onglet = onglet
|
||||
onglets += [nom_onglet]
|
||||
# écriture dans l'onglet:
|
||||
df.to_excel(writer, onglet, index=True, header=True)
|
||||
df.to_excel(writer, nom_onglet, index=True, header=True)
|
||||
pe_affichage.pe_print(f"=> Export excel de {', '.join(onglets)}")
|
||||
output.seek(0)
|
||||
|
||||
@ -491,7 +498,6 @@ class JuryPE(object):
|
||||
tags = self._do_tags_list(self.interclasstags)
|
||||
for tag in tags:
|
||||
for type_moy in [pe_moytag.CODE_MOY_UE, pe_moytag.CODE_MOY_COMPETENCES]:
|
||||
pe_affichage.pe_print(f" -> Synthèse du tag {tag} par {type_moy}")
|
||||
synthese[(tag, type_moy)] = self.df_tag_type(tag, type_moy)
|
||||
return synthese
|
||||
|
||||
@ -520,8 +526,8 @@ class JuryPE(object):
|
||||
else:
|
||||
aggregats = pe_rcs.TOUS_LES_RCS
|
||||
|
||||
aff_aggregat = []
|
||||
for aggregat in aggregats:
|
||||
print(aggregat)
|
||||
# Descr de l'aggrégat
|
||||
descr = pe_rcs.TYPES_RCS[aggregat]["descr"]
|
||||
|
||||
@ -533,7 +539,9 @@ class JuryPE(object):
|
||||
df_groupe = interclass.compute_df_synthese_moyennes_tag(
|
||||
tag, aggregat=aggregat, type_colonnes=False
|
||||
)
|
||||
df = df.join(df_groupe)
|
||||
if not df_groupe.empty:
|
||||
aff_aggregat += [aggregat]
|
||||
df = df.join(df_groupe)
|
||||
|
||||
# Le dataframe du classement sur la promo
|
||||
df_promo = interclass.to_df(
|
||||
@ -543,11 +551,22 @@ class JuryPE(object):
|
||||
cohorte="Promo",
|
||||
type_colonnes=False,
|
||||
)
|
||||
df = df.join(df_promo)
|
||||
if not df_promo.empty:
|
||||
aff_aggregat += [aggregat]
|
||||
df = df.join(df_promo)
|
||||
|
||||
if aff_aggregat:
|
||||
aff_aggregat = sorted(set(aff_aggregat))
|
||||
pe_affichage.pe_print(
|
||||
f" -> Synthèse de 👜{tag} par {type_moy} avec {', '.join(aff_aggregat)}"
|
||||
)
|
||||
else:
|
||||
pe_affichage.pe_print(f" -> Synthèse du tag {tag} par {type_moy} : <vide>")
|
||||
# Conversion des colonnes en multiindex
|
||||
if type_colonnes:
|
||||
df.columns = pd.MultiIndex.from_tuples(df.columns)
|
||||
colonnes = list(df.columns)
|
||||
colonnes = [tuple(col.split("|")) for col in colonnes]
|
||||
df.columns = pd.MultiIndex.from_tuples(colonnes)
|
||||
return df
|
||||
# Fin de l'aggrégat
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user