# -*- mode: python -*- # -*- coding: utf-8 -*- ############################################################################## # # Gestion scolarite IUT # # Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Emmanuel Viennet emmanuel.viennet@viennet.net # ############################################################################## ############################################################################## # Module "Avis de poursuite d'étude" # conçu et développé par Cléo Baras (IUT de Grenoble) ############################################################################## """ Created on Thu Sep 8 09:36:33 2016 @author: barasc """ import pandas as pd from app.models import Identite TAGS_RESERVES = ["but"] class TableTag(object): def __init__(self): """Classe centralisant différentes méthodes communes aux SemestreTag, TrajectoireTag, AggregatInterclassTag """ # Les étudiants # self.etuds: list[Identite] = None # A venir """Les étudiants""" # self.etats_civils: dict[int, Identite] = None """Les états civils""" # self.etudids: list[int] = None """Les etudids""" def add_etuds(self, etuds: list[Identite]): """Mémorise les informations sur les étudiants Args: etuds: la liste des identités de l'étudiant """ # self.etuds = etuds self.etats_civils = {etud.etudid: etud.etat_civil for etud in self.etuds} self.etudids = list(self.etats_civils.keys()) def get_all_tags(self): """Liste des tags de la table, triée par ordre alphabétique, extraite des clés du dictionnaire ``moyennes_tags`` connues (tags en doublon possible). Returns: Liste de tags triés par ordre alphabétique """ return sorted(list(self.moyennes_tags.keys())) def df_moyennes_et_classements(self) -> pd.DataFrame: """Renvoie un dataframe listant toutes les moyennes, et les classements des étudiants pour tous les tags. Est utilisé pour afficher le détail d'un tableau taggué (semestres, trajectoires ou aggrégat) Returns: Le dataframe des notes et des classements """ etudiants = self.etats_civils df = pd.DataFrame.from_dict(etudiants, orient="index", columns=["nom"]) tags_tries = self.get_all_tags() for tag in tags_tries: moy_tag = self.moyennes_tags[tag] for acronyme in moy_tag.moyennes: moy = moy_tag.moyennes[acronyme] # une moyenne df = df.join(moy.synthese["notes"].rename(f"Moy {tag}-{acronyme}")) df = df.join( moy.synthese["classements"].rename(f"Class {tag}-{acronyme}") ) moy_gen = moy_tag.moyenne_gen df = df.join(moy_gen.synthese["notes"].rename(f"Moy {tag} (gen)")) df = df.join(moy_gen.synthese["classements"].rename(f"Class {tag} (gen)")) df.sort_values(by=['nom']) return df def df_notes(self) -> pd.DataFrame | None: """Renvoie un dataframe (etudid x tag) listant toutes les moyennes par tags Returns: Un dataframe etudids x tag (avec tag par ordre alphabétique) """ tags_tries = self.get_all_tags() if tags_tries: dict_series = {} for tag in tags_tries: # Les moyennes associés au tag moy_tag = self.moyennes_tags[tag] dict_series[tag] = moy_tag.synthese["notes"] df = pd.DataFrame(dict_series) return df