diff --git a/docs/source/examples/RWTH Evaluation.ipynb b/docs/source/examples/RWTH Evaluation.ipynb index c90f02ca99d9a344d720176d8c4fec98df05b193..db6ecca9ee86881013eb4ab0158272747df31695 100644 --- a/docs/source/examples/RWTH Evaluation.ipynb +++ b/docs/source/examples/RWTH Evaluation.ipynb @@ -39,8 +39,15 @@ "\n", "from rwth_nb.misc.feedback import RWTHFeedbackEvaluator\n", "\n", - "eva = RWTHFeedbackEvaluator(data) # collect feedback data using rwth_nb.misc.feedback.RWTHFeedbackCollector first\n", - "eva.evaluate(lang='de')" + "eva = RWTHFeedbackEvaluator([\n", + " {'id': 'likes', 'type': 'free-text-required', 'label': 'Das war gut:'}, \n", + " {'id': 'dislikes', 'type': 'free-text-required', 'label': 'Das könnte verbessert werden:'}, \n", + " {'id': 'misc', 'type': 'free-text', 'label': 'Was ich sonst noch sagen möchte:'}, \n", + " {'id': 'learning', 'type': 'scale', 'label' : 'Ich habe das Gefühl etwas gelernt zu haben.'},\n", + " {'id': 'supervision', 'type': 'scale', 'label' : 'Die Betreuung des Versuchs war gut.'},\n", + " {'id': 'script', 'type': 'scale', 'label' : 'Die Versuchsunterlagen sind verständlich.'},\n", + "]) # collect feedback data using rwth_nb.misc.feedback.RWTHFeedbackCollector first\n", + "eva.evaluate([data_v6, data_v7], lang='de')" ] } ], diff --git a/rwth_nb/misc/feedback.py b/rwth_nb/misc/feedback.py index 58c228606ee590c4be9889da4b04119c15cfcc9d..265f6d3148846fe1ea582cc09179ad427e858f9a 100644 --- a/rwth_nb/misc/feedback.py +++ b/rwth_nb/misc/feedback.py @@ -483,8 +483,8 @@ class RWTHFeedbackEvaluator: Parameters ---------- - data: pandas.Dataframe - dataframe created by collector class using json files + questions: Dict + same dict of questions as in RWTHFeedback Examples @@ -496,8 +496,10 @@ class RWTHFeedbackEvaluator: scale_options = [] free_text_options = [] - def __init__(self, data): - self.data = data + def __init__(self, questions=None): + if questions is not None: + self.scale_options = [q['id'] for q in questions if q['type'] in ('scale')] + self.free_text_options = [q['id'] for q in questions if q['type'] in ('free-text', 'free-text-required')] def evaluate(self, data, lang='en', scale_options=['learning', 'supervision', 'script'], free_text_options=['likes', 'dislikes', 'misc']): @@ -525,8 +527,9 @@ class RWTHFeedbackEvaluator: likert_scale = getattr(RWTHFeedback, f'feedback_scale_options_{lang}') - scale_options = scale_options - free_text_options = free_text_options + if not (self.scale_options and self.free_text_options): + self.scale_options = scale_options + self.free_text_options = free_text_options out = [widgets.Output() for _ in self.data] @@ -538,8 +541,8 @@ class RWTHFeedbackEvaluator: for ind, d in enumerate(self.data): with out[ind]: # likert scale plots - fig, axs = plt.subplots(1, len(scale_options), figsize=(13, 3)) - for i, l in enumerate(scale_options): + fig, axs = plt.subplots(1, len(self.scale_options), figsize=(13, 3)) + for i, l in enumerate(self.scale_options): # list with counts counts = [int(self.data[d][l].count(a)) for a in likert_scale] @@ -558,7 +561,7 @@ class RWTHFeedbackEvaluator: # free text lists tab = widgets.Tab() tab_children = [] - for i, f in enumerate(free_text_options): + for i, f in enumerate(self.free_text_options): tab.set_title(i, f) v_box = [widgets.HTML(f'<li>{label}</li>',