refactor result data structure, fix rank calculation, add team rank
This commit is contained in:
parent
b04daf0c51
commit
0f03b894f4
2 changed files with 30 additions and 23 deletions
|
@ -69,14 +69,14 @@ Grouped feedback items
|
|||
>>> qugroup.feedbackItems = [fi01, fi02, fi03]
|
||||
|
||||
>>> res = resp01.getGroupedResult()
|
||||
>>> for qugroup, fi, score in res:
|
||||
... print fi.text, round(score, 2)
|
||||
fi02 0.58
|
||||
>>> for r in res:
|
||||
... print r['feedback'].text, round(r['score'], 2), r['rank']
|
||||
fi02 0.58 1
|
||||
|
||||
>>> res = resp02.getGroupedResult()
|
||||
>>> for qugroup, fi, score in res:
|
||||
... print fi.text, round(score, 2)
|
||||
fi03 0.75
|
||||
>>> for r in res:
|
||||
... print r['feedback'].text, round(r['score'], 2), r['rank']
|
||||
fi03 0.75 1
|
||||
|
||||
Team evaluation
|
||||
---------------
|
||||
|
@ -84,11 +84,11 @@ Team evaluation
|
|||
>>> resp03 = Response(quest, 'mary')
|
||||
>>> resp03.values = {qu01: 1, qu02: 2, qu03: 4}
|
||||
|
||||
>>> resp01.values[qugroup] = resp01.getGroupedResult()[0][2]
|
||||
>>> resp03.values[qugroup] = resp03.getGroupedResult()[0][2]
|
||||
>>> resp01.values[qugroup] = resp01.getGroupedResult()[0]['score']
|
||||
>>> resp03.values[qugroup] = resp03.getGroupedResult()[0]['score']
|
||||
|
||||
>>> ranks, averages = resp01.getTeamResult(resp03.getGroupedResult(),
|
||||
>>> teamData = resp01.getTeamResult(resp03.getGroupedResult(),
|
||||
... [resp01, resp03])
|
||||
>>> ranks, averages
|
||||
([1], [0.6666...])
|
||||
>>> teamData
|
||||
[{'average': 0.6666...}]
|
||||
|
||||
|
|
|
@ -107,19 +107,26 @@ class Response(object):
|
|||
if scoreMax > 0.0:
|
||||
relScore = score / scoreMax
|
||||
wScore = relScore * len(qugroup.feedbackItems) - 0.00001
|
||||
result.append((qugroup, qugroup.feedbackItems[int(wScore)], relScore))
|
||||
result.append(dict(
|
||||
group=qugroup,
|
||||
feedback=qugroup.feedbackItems[int(wScore)],
|
||||
score=relScore))
|
||||
ranks = getRanks([r['score'] for r in result])
|
||||
for idx, r in enumerate(result):
|
||||
r['rank'] = ranks[idx]
|
||||
return result
|
||||
|
||||
def getTeamResult(self, mine, teamData):
|
||||
averages = []
|
||||
ranks = []
|
||||
result = []
|
||||
for idx, qgdata in enumerate(mine):
|
||||
total = 0.0
|
||||
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 ranks, averages
|
||||
values = [data.values[qgdata['group']] for data in teamData]
|
||||
avg = sum(values) / len(teamData)
|
||||
result.append(dict(group=qgdata['group'], average=avg))
|
||||
ranks = getRanks([r['average'] for r in result])
|
||||
for idx, r in enumerate(result):
|
||||
r['rank'] = ranks[idx]
|
||||
return result
|
||||
|
||||
def getRanks(values):
|
||||
ordered = list(reversed(sorted(values)))
|
||||
return [ordered.index(v) + 1 for v in values]
|
||||
|
|
Loading…
Add table
Reference in a new issue