#!/usr/bin/env python # encoding: utf-8 import pandas as pd import numpy as np def select(quest_df, exo_df, eval_df, evalname): """ Return quest, exo and eval rows which correspond to evalname :param quest_df: TODO :param exo_df: TODO :param eval_df: TODO """ qu = quest_df[quest_df["Nom"] == evalname] exo = exo_df[exo_df["Nom"] == evalname] ev = eval_df[eval_df["Nom"] == evalname] return qu, exo, ev def select_contains(quest_df, exo_df, eval_df, name_part): """ Return quest, exo and eval rows which contains name_part :param quest_df: TODO :param exo_df: TODO :param eval_df: TODO """ qu = quest_df[quest_df["Nom"].str.contains(name_part)] exo = exo_df[exo_df["Nom"].str.contains(name_part)] ev = eval_df[eval_df["Nom"].str.contains(name_part)] return qu, exo, ev def get_present_absent(eval_df): """ Return list of student who where present (Mark > 0) and the list of those who weren't """ presents = eval_df[eval_df["Mark"] > 0]["Eleve"] absents = eval_df[eval_df["Mark"] == 0]["Eleve"] return {"presents": presents, "absents": absents} def keep_only_presents(quest_df, exo_df, eval_df, presents): """ Return quest, exo and eval rows of presents students """ qu = quest_df[quest_df["Eleve"].isin(presents)] exo = exo_df[exo_df["Eleve"].isin(presents)] ev = eval_df[eval_df["Eleve"].isin(presents)] return qu, exo, ev def students_pov(quest_df, exo_df, eval_df): """ >>> d = {"Eleve":["E1"]*6 + ["E2"]*6, ... "Nom": ["N1"]*4+["N2"]*2 + ["N1"]*4+["N2"]*2, ... "Exercice":["Ex1"]*2+["Ex2"]*2+["Ex1"]+["Ex2"] + ["Ex1"]*2+["Ex2"]*2+["Ex1"]+["Ex2"], ... "Question":["Q1"]+["Q2"]+["Q1"]+["Q2"]+["Q1"]+["Q1"] + ["Q1"]+["Q2"]+["Q1"]+["Q2"]+["Q1"]+["Q1"], ... "Date":["16/09/2016"]*4+["01/10/2016"]*2 + ["16/09/2016"]*4+["01/10/2016"]*2, ... "Trimestre": ["1"]*12, ... "Bareme":[1]*2+[2]*2+[2]*2 + [1]*2+[2]*2+[2]*2, ... "Niveau":[0]*4+[1]*2 + [0]*4+[1]*2, ... "Note":[1, 0.33, 2, 1.5, 1, 3, 0.666, 1, 1.5, 1, 2, 3], ... } >>> df = pd.DataFrame(d) >>> quest_df, exo_df, eval_df = digest_flat_df(df) >>> std_pov = students_pov(quest_df, exo_df, eval_df) >>> std = std_pov[0] >>> std["Nom"] 'E1' >>> "{} / {}".format(std["Total"]["Mark"], std["Total"]["Bareme"]) '5.0 / 6.0' >>> for exo in std["Exercices"]: ... print("{}: {} / {}".format(exo["Nom"], exo["Total"]["Mark"], exo["Total"]["Bareme"])) Ex1: 1.5 / 2.0 Ex2: 3.5 / 4.0 >>> exo = std["Exercices"][0] >>> for _,q in exo["Questions"].iterrows(): ... print("{} : {}".format(q["Question"], q["Latex_rep"])) Q1 : 1.0 Q2 : 0.33 Q1 : \RepU """ es = [] for e in eval_df["Eleve"].unique(): eleve = {"Nom":e} e_quest = quest_df[quest_df["Eleve"] == e] eleve["quest"] = e_quest e_exo = exo_df[exo_df["Eleve"] == e] #e_df = ds_df[ds_df["Eleve"] == e][["Exercice", "Question", "Bareme", "Commentaire", "Niveau", "Mark", "Latex_rep"]] eleve["Total"] = eval_df[eval_df["Eleve"]==e].iloc[0] exos = [] for exo in e_exo["Exercice"].unique(): ex = {"Nom":exo} ex["Total"] = e_exo[e_exo["Exercice"]==exo].iloc[0] ex["Questions"] = e_quest[e_quest["Exercice"] == exo] exos.append(ex) eleve["Exercices"] = exos es.append(eleve) return es # ----------------------------- # Reglages pour 'vim' # vim:set autoindent expandtab tabstop=4 shiftwidth=4: # cursor: 16 del