repytex/notes_tools/tools/eval_tools.py

109 lines
3.6 KiB
Python

#!/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):
"""
>>> from .df_marks_manip import digest_flat_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