diff --git a/knowledge/survey/README.txt b/knowledge/survey/README.txt index 921be1b..3a95523 100644 --- a/knowledge/survey/README.txt +++ b/knowledge/survey/README.txt @@ -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...}] diff --git a/knowledge/survey/questionnaire.py b/knowledge/survey/questionnaire.py index 0a2d259..5b698e4 100644 --- a/knowledge/survey/questionnaire.py +++ b/knowledge/survey/questionnaire.py @@ -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]