Eval mark manipulation

This commit is contained in:
Benjamin Bertrand 2017-03-10 09:27:26 +03:00
parent 61446a074b
commit 9d9a80686e

View File

@ -0,0 +1,68 @@
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
#
# Copyright © 2017 lafrite <lafrite@Poivre>
#
# Distributed under terms of the MIT license.
"""
Manipulating rating scale of an evaluation.
Those functions are made to be applied over eval_df
"""
from .df_marks_manip import round_half_point, compute_mark_barem
__all__ = []
def new_scale_min(x):
""" Change the scale by selecting min between scale and mark """
return min(x["Mark_old"], x["Bareme"])
def new_scale_proportionnal(x):
""" Changing the scale proportionally """
return round_half_point(x["Mark_old"] * x["Bareme"] / x["Bareme_old"])
def tranform_scale(eval_df, new_scale, method):
""" Change the rating scale of the exam
It backups Bareme, Mark, Mark_barem columns adding "_old". The backup is done once then it is ignored.
It changes Bareme value to new_scale, applies method to marks and remake mark_bareme
:param eval_df: dataframe on evaluations
:param new_scale: replacement scale value
:param method: "min", "prop" or a function on eval_df rows
:returns: the transformed eval_df
"""
for c in ["Bareme", "Mark", "Mark_barem"]:
try:
eval_df[c+"_old"]
except KeyError:
eval_df[c+"_old"] = eval_df[c]
eval_df["Bareme"] = new_scale
TRANFS = {"min": new_scale_min,
"prop": new_scale_proportionnal,
}
try:
t = TRANFS[method]
except KeyError:
eval_df["Mark"] = eval_df.apply(method)
else:
eval_df["Mark"] = eval_df.apply(t, axis=1)
eval_df["Mark_barem"] = compute_mark_barem(eval_df)
return eval_df
# -----------------------------
# Reglages pour 'vim'
# vim:set autoindent expandtab tabstop=4 shiftwidth=4:
# cursor: 16 del