From d994b646e9e6bb9727917a986ab09e5b84f9abd9 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Thu, 8 May 2014 13:24:49 +0200 Subject: [PATCH] use precalculated scores per question group for team result --- knowledge/survey/README.txt | 10 +++++++--- knowledge/survey/questionnaire.py | 14 ++++++-------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/knowledge/survey/README.txt b/knowledge/survey/README.txt index dd3e3b7..921be1b 100644 --- a/knowledge/survey/README.txt +++ b/knowledge/survey/README.txt @@ -84,7 +84,11 @@ Team evaluation >>> resp03 = Response(quest, 'mary') >>> resp03.values = {qu01: 1, qu02: 2, qu03: 4} - >>> res, ranks, averages = resp01.getTeamResult([resp01, resp03]) - >>> ranks, averages - ([2], [0.6666...]) + >>> resp01.values[qugroup] = resp01.getGroupedResult()[0][2] + >>> resp03.values[qugroup] = resp03.getGroupedResult()[0][2] + + >>> ranks, averages = resp01.getTeamResult(resp03.getGroupedResult(), + ... [resp01, resp03]) + >>> ranks, averages + ([1], [0.6666...]) diff --git a/knowledge/survey/questionnaire.py b/knowledge/survey/questionnaire.py index 459bc8e..0a2d259 100644 --- a/knowledge/survey/questionnaire.py +++ b/knowledge/survey/questionnaire.py @@ -110,18 +110,16 @@ class Response(object): result.append((qugroup, qugroup.feedbackItems[int(wScore)], relScore)) return result - def getTeamResult(self, teamData): - mine = self.getGroupedResult() - all = [d.getGroupedResult() for d in teamData] + def getTeamResult(self, mine, teamData): averages = [] ranks = [] for idx, qgdata in enumerate(mine): total = 0.0 - pos = len(teamData) - for j, data in enumerate(all): - total += data[idx][2] - if qgdata[2] >= data[idx][2]: + values = sorted([data.values[qgdata[0]] for data in teamData]) + for j, value in enumerate(values): + total += value + if qgdata[2] >= value: pos = len(teamData) - j ranks.append(pos) averages.append(total / len(teamData)) - return mine, ranks, averages + return ranks, averages