# -*- 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 datetime import numpy as np from app.scodoc import sco_utils as scu import pandas as pd TAGS_RESERVES = ["but"] class TableTag(object): """ Classe mémorisant les moyennes des étudiants à différents tags et permettant de calculer des rangs et des statistiques. Ses attributs sont: * nom : Nom représentatif des données de la Table * inscrlist : Les étudiants inscrits dans le TagTag avec leur information de la forme : { etudid : dictionnaire d'info extrait de Scodoc, ...} * taglist : Liste triée des noms des tags * resultats : Dictionnaire donnant les notes-moyennes de chaque étudiant par tag et la somme commulée des coeff utilisées dans le calcul de la moyenne pondérée, sous la forme : { tag : { etudid: (note_moy, somme_coeff_norm), ...} * rangs : Dictionnaire donnant les rang par tag de chaque étudiant de la forme : { tag : {etudid: rang, ...} } * nbinscrits : Nombre d'inscrits dans le semestre (pas de distinction entre les tags) * statistiques : Dictionnaire donnant les statistiques (moyenne, min, max) des résultats par tag de la forme : { tag : (moy, min, max), ...} """ def __init__(self, nom: str): """Les attributs basiques des TagTable, qui seront initialisés dans les classes dérivées """ self.nom = nom """Les étudiants""" self.etudiants = {} """Les moyennes par tag""" self.moyennes_tags = {} # ----------------------------------------------------------------------------------------------------------- def get_all_tags(self): """Liste des tags de la table, triée par ordre alphabétique Returns: Liste de tags triés par ordre alphabétique """ return sorted(self.moyennes_tags.keys()) def df_tagtable(self): """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 = self.get_all_tags() if tags: dict_series = {tag: self.moyennes_tags[tag]["notes"] for tag in tags} df = pd.DataFrame(dict_series) return df else: return None def str_tagtable(self): """Renvoie une chaine de caractère listant toutes les moyennes, les rangs des étudiants pour tous les tags.""" etudiants = self.etudiants df = pd.DataFrame.from_dict(etudiants, orient="index", columns=["nom"]) for tag in self.get_all_tags(): df = df.join(self.moyennes_tags[tag]["notes"].rename(f"moy {tag}")) df = df.join(self.moyennes_tags[tag]["classements"].rename(f"class {tag}")) return df.to_csv(sep=";")