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))
|
etudids_sorted = sorted(list(self.diplomes_ids))
|
||||||
|
|
||||||
if self.rcstags:
|
if not self.rcstags:
|
||||||
return None
|
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
|
# Partant d'un dataframe vierge
|
||||||
df = pd.DataFrame(index=etudids_sorted, columns=colonnes) # colonnes)
|
initialisation = False
|
||||||
for col in colonnes:
|
df = pd.DataFrame()
|
||||||
if "rang" in col:
|
|
||||||
df[col] = df[col].astype(str)
|
|
||||||
df.columns = list(range(len(colonnes)))
|
|
||||||
|
|
||||||
for rcstag in self.rcstags.values():
|
for etudid in etudids_sorted:
|
||||||
# Charge les moyennes au tag d'un RCStag (SemX ou RCSXTag)
|
# 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:
|
if tag in rcstag.moyennes_tags:
|
||||||
# Les infos sur les moyennes du tag
|
moytag: pd.DataFrame = rcstag.moyennes_tags[tag]
|
||||||
moytag: pe_moytag.MoyennesTag = rcstag.moyennes_tags[tag]
|
|
||||||
df_moytag = moytag.to_df(
|
df_moytag = moytag.to_df(
|
||||||
aggregat=aggregat,
|
aggregat=aggregat,
|
||||||
cohorte="Groupe",
|
cohorte="Groupe",
|
||||||
)
|
)
|
||||||
df_moytag.columns = list(range(len(colonnes)))
|
|
||||||
|
|
||||||
# Etudiants/Champs communs entre le df et les données interclassées
|
# Modif les colonnes au regard du 1er df_moytag significatif lu
|
||||||
(
|
if not initialisation:
|
||||||
etudids_communs,
|
df = pd.DataFrame(
|
||||||
champs_communs, # les colonnes de synthèse
|
np.nan, index=etudids_sorted, columns=df_moytag.columns
|
||||||
) = pe_comp.find_index_and_columns_communs(df, df_moytag)
|
)
|
||||||
|
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
|
# Injecte les notes de l'étudiant
|
||||||
df.loc[etudids_communs, champs_communs] = df_moytag.loc[
|
df.loc[etudid, :] = df_moytag.loc[etudid, :]
|
||||||
etudids_communs, champs_communs
|
|
||||||
]
|
|
||||||
|
|
||||||
# Refixe les colonnes
|
|
||||||
df.columns = colonnes
|
|
||||||
return df
|
return df
|
||||||
|
@ -146,10 +146,10 @@ def get_colonne_df(aggregat, tag, champ, cohorte, critere):
|
|||||||
"""Renvoie le tuple (aggregat, tag, champ, cohorte, critere)
|
"""Renvoie le tuple (aggregat, tag, champ, cohorte, critere)
|
||||||
utilisé pour désigner les colonnes du df"""
|
utilisé pour désigner les colonnes du df"""
|
||||||
liste_champs = []
|
liste_champs = []
|
||||||
if aggregat:
|
if aggregat != None:
|
||||||
liste_champs += [aggregat]
|
liste_champs += [aggregat]
|
||||||
liste_champs += [tag, champ]
|
liste_champs += [tag, champ]
|
||||||
if cohorte:
|
if cohorte != None:
|
||||||
liste_champs += [cohorte]
|
liste_champs += [cohorte]
|
||||||
liste_champs += [critere]
|
liste_champs += [critere]
|
||||||
return tuple(liste_champs)
|
return "|".join(liste_champs)
|
||||||
|
@ -125,6 +125,7 @@ class TableTag(object):
|
|||||||
|
|
||||||
# Ajout des données par tags
|
# Ajout des données par tags
|
||||||
for tag in tags_cibles:
|
for tag in tags_cibles:
|
||||||
|
if tag in self.moyennes_tags:
|
||||||
moy_tag_df = self.moyennes_tags[tag].to_df(aggregat, cohorte)
|
moy_tag_df = self.moyennes_tags[tag].to_df(aggregat, cohorte)
|
||||||
df = df.join(moy_tag_df)
|
df = df.join(moy_tag_df)
|
||||||
|
|
||||||
@ -138,7 +139,9 @@ class TableTag(object):
|
|||||||
|
|
||||||
# Conversion des colonnes en multiindex
|
# Conversion des colonnes en multiindex
|
||||||
if type_colonnes:
|
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
|
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)
|
"""Pour un champ donné, renvoie l'index (ou le multindex)
|
||||||
à intégrer au dataframe"""
|
à intégrer au dataframe"""
|
||||||
liste = []
|
liste = []
|
||||||
if aggregat:
|
if aggregat != None:
|
||||||
liste += [aggregat]
|
liste += [aggregat]
|
||||||
liste += ["Administratif", "Identité"]
|
liste += ["Administratif", "Identité"]
|
||||||
if cohorte:
|
if cohorte != None:
|
||||||
liste += [champ]
|
liste += [champ]
|
||||||
liste += [champ]
|
liste += [champ]
|
||||||
return tuple(liste)
|
return "|".join(liste)
|
||||||
|
|
||||||
|
|
||||||
def df_administratif(
|
def df_administratif(
|
||||||
@ -199,6 +202,7 @@ def df_administratif(
|
|||||||
_get_champ_administratif(champ, aggregat, cohorte)
|
_get_champ_administratif(champ, aggregat, cohorte)
|
||||||
for champ in CHAMPS_ADMINISTRATIFS
|
for champ in CHAMPS_ADMINISTRATIFS
|
||||||
]
|
]
|
||||||
|
|
||||||
df = pd.DataFrame.from_dict(donnees, orient="index", columns=colonnes)
|
df = pd.DataFrame.from_dict(donnees, orient="index", columns=colonnes)
|
||||||
df = df.sort_values(by=colonnes[1:])
|
df = df.sort_values(by=colonnes[1:])
|
||||||
return df
|
return df
|
||||||
|
@ -422,9 +422,16 @@ class JuryPE(object):
|
|||||||
) as writer:
|
) as writer:
|
||||||
onglets = []
|
onglets = []
|
||||||
for onglet, df in synthese.items():
|
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:
|
# é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)}")
|
pe_affichage.pe_print(f"=> Export excel de {', '.join(onglets)}")
|
||||||
output.seek(0)
|
output.seek(0)
|
||||||
|
|
||||||
@ -491,7 +498,6 @@ class JuryPE(object):
|
|||||||
tags = self._do_tags_list(self.interclasstags)
|
tags = self._do_tags_list(self.interclasstags)
|
||||||
for tag in tags:
|
for tag in tags:
|
||||||
for type_moy in [pe_moytag.CODE_MOY_UE, pe_moytag.CODE_MOY_COMPETENCES]:
|
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)
|
synthese[(tag, type_moy)] = self.df_tag_type(tag, type_moy)
|
||||||
return synthese
|
return synthese
|
||||||
|
|
||||||
@ -520,8 +526,8 @@ class JuryPE(object):
|
|||||||
else:
|
else:
|
||||||
aggregats = pe_rcs.TOUS_LES_RCS
|
aggregats = pe_rcs.TOUS_LES_RCS
|
||||||
|
|
||||||
|
aff_aggregat = []
|
||||||
for aggregat in aggregats:
|
for aggregat in aggregats:
|
||||||
print(aggregat)
|
|
||||||
# Descr de l'aggrégat
|
# Descr de l'aggrégat
|
||||||
descr = pe_rcs.TYPES_RCS[aggregat]["descr"]
|
descr = pe_rcs.TYPES_RCS[aggregat]["descr"]
|
||||||
|
|
||||||
@ -533,6 +539,8 @@ class JuryPE(object):
|
|||||||
df_groupe = interclass.compute_df_synthese_moyennes_tag(
|
df_groupe = interclass.compute_df_synthese_moyennes_tag(
|
||||||
tag, aggregat=aggregat, type_colonnes=False
|
tag, aggregat=aggregat, type_colonnes=False
|
||||||
)
|
)
|
||||||
|
if not df_groupe.empty:
|
||||||
|
aff_aggregat += [aggregat]
|
||||||
df = df.join(df_groupe)
|
df = df.join(df_groupe)
|
||||||
|
|
||||||
# Le dataframe du classement sur la promo
|
# Le dataframe du classement sur la promo
|
||||||
@ -543,11 +551,22 @@ class JuryPE(object):
|
|||||||
cohorte="Promo",
|
cohorte="Promo",
|
||||||
type_colonnes=False,
|
type_colonnes=False,
|
||||||
)
|
)
|
||||||
|
if not df_promo.empty:
|
||||||
|
aff_aggregat += [aggregat]
|
||||||
df = df.join(df_promo)
|
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
|
# Conversion des colonnes en multiindex
|
||||||
if type_colonnes:
|
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
|
return df
|
||||||
# Fin de l'aggrégat
|
# Fin de l'aggrégat
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user