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]
|
>>> qugroup.feedbackItems = [fi01, fi02, fi03]
|
||||||
|
|
||||||
>>> res = resp01.getGroupedResult()
|
>>> res = resp01.getGroupedResult()
|
||||||
>>> for qugroup, fi, score in res:
|
>>> for r in res:
|
||||||
... print fi.text, round(score, 2)
|
... print r['feedback'].text, round(r['score'], 2), r['rank']
|
||||||
fi02 0.58
|
fi02 0.58 1
|
||||||
|
|
||||||
>>> res = resp02.getGroupedResult()
|
>>> res = resp02.getGroupedResult()
|
||||||
>>> for qugroup, fi, score in res:
|
>>> for r in res:
|
||||||
... print fi.text, round(score, 2)
|
... print r['feedback'].text, round(r['score'], 2), r['rank']
|
||||||
fi03 0.75
|
fi03 0.75 1
|
||||||
|
|
||||||
Team evaluation
|
Team evaluation
|
||||||
---------------
|
---------------
|
||||||
|
@ -84,11 +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}
|
||||||
|
|
||||||
>>> resp01.values[qugroup] = resp01.getGroupedResult()[0][2]
|
>>> resp01.values[qugroup] = resp01.getGroupedResult()[0]['score']
|
||||||
>>> resp03.values[qugroup] = resp03.getGroupedResult()[0][2]
|
>>> resp03.values[qugroup] = resp03.getGroupedResult()[0]['score']
|
||||||
|
|
||||||
>>> ranks, averages = resp01.getTeamResult(resp03.getGroupedResult(),
|
>>> teamData = resp01.getTeamResult(resp03.getGroupedResult(),
|
||||||
... [resp01, resp03])
|
... [resp01, resp03])
|
||||||
>>> ranks, averages
|
>>> teamData
|
||||||
([1], [0.6666...])
|
[{'average': 0.6666...}]
|
||||||
|
|
||||||
|
|
|
@ -107,19 +107,26 @@ class Response(object):
|
||||||
if scoreMax > 0.0:
|
if scoreMax > 0.0:
|
||||||
relScore = score / scoreMax
|
relScore = score / scoreMax
|
||||||
wScore = relScore * len(qugroup.feedbackItems) - 0.00001
|
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
|
return result
|
||||||
|
|
||||||
def getTeamResult(self, mine, teamData):
|
def getTeamResult(self, mine, teamData):
|
||||||
averages = []
|
result = []
|
||||||
ranks = []
|
|
||||||
for idx, qgdata in enumerate(mine):
|
for idx, qgdata in enumerate(mine):
|
||||||
total = 0.0
|
values = [data.values[qgdata['group']] for data in teamData]
|
||||||
values = sorted([data.values[qgdata[0]] for data in teamData])
|
avg = sum(values) / len(teamData)
|
||||||
for j, value in enumerate(values):
|
result.append(dict(group=qgdata['group'], average=avg))
|
||||||
total += value
|
ranks = getRanks([r['average'] for r in result])
|
||||||
if qgdata[2] >= value:
|
for idx, r in enumerate(result):
|
||||||
pos = len(teamData) - j
|
r['rank'] = ranks[idx]
|
||||||
ranks.append(pos)
|
return result
|
||||||
averages.append(total / len(teamData))
|
|
||||||
return ranks, averages
|
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