use precalculated scores per question group for team result

This commit is contained in:
Helmut Merz 2014-05-08 13:24:49 +02:00
parent 94463df4d5
commit d994b646e9
2 changed files with 13 additions and 11 deletions

View file

@ -84,7 +84,11 @@ Team evaluation
>>> resp03 = Response(quest, 'mary') >>> resp03 = Response(quest, 'mary')
>>> resp03.values = {qu01: 1, qu02: 2, qu03: 4} >>> resp03.values = {qu01: 1, qu02: 2, qu03: 4}
>>> res, ranks, averages = resp01.getTeamResult([resp01, resp03]) >>> resp01.values[qugroup] = resp01.getGroupedResult()[0][2]
>>> ranks, averages >>> resp03.values[qugroup] = resp03.getGroupedResult()[0][2]
([2], [0.6666...])
>>> ranks, averages = resp01.getTeamResult(resp03.getGroupedResult(),
... [resp01, resp03])
>>> ranks, averages
([1], [0.6666...])

View file

@ -110,18 +110,16 @@ class Response(object):
result.append((qugroup, qugroup.feedbackItems[int(wScore)], relScore)) result.append((qugroup, qugroup.feedbackItems[int(wScore)], relScore))
return result return result
def getTeamResult(self, teamData): def getTeamResult(self, mine, teamData):
mine = self.getGroupedResult()
all = [d.getGroupedResult() for d in teamData]
averages = [] averages = []
ranks = [] ranks = []
for idx, qgdata in enumerate(mine): for idx, qgdata in enumerate(mine):
total = 0.0 total = 0.0
pos = len(teamData) values = sorted([data.values[qgdata[0]] for data in teamData])
for j, data in enumerate(all): for j, value in enumerate(values):
total += data[idx][2] total += value
if qgdata[2] >= data[idx][2]: if qgdata[2] >= value:
pos = len(teamData) - j pos = len(teamData) - j
ranks.append(pos) ranks.append(pos)
averages.append(total / len(teamData)) averages.append(total / len(teamData))
return mine, ranks, averages return ranks, averages