Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import sys
- import json
- import operator
- import math
- true_path = 'true_recoms.txt'
- team_path = 'recoms.txt'
- result = { 'score': 0, 'details': 'failed' }
- true_recs = {}
- with open(true_path) as f:
- for line in f:
- data = json.loads(line)
- true_recs[data['item']] = data['true_recoms']
- ndcg_sum = 0
- lines_number = 0
- with open(team_path) as f:
- for line in f:
- data = json.loads(line)
- lines_number += 1
- trs = true_recs[data['item']]
- tmrs = data['recoms']
- sorted_trs = sorted(trs.items(), key = operator.itemgetter(1), reverse = True)
- sorted_tmrs = sorted(tmrs.items(), key = operator.itemgetter(1), reverse = True)
- dcg = 0
- idcg = 0
- for i in range(len(trs)):
- delta = sorted_trs[i][1]
- if i + 1 != 1:
- delta = delta / float(math.log(i + 1, 2))
- idcg += delta
- for i in range(len(tmrs)):
- if sorted_tmrs[i][0] in trs:
- delta = trs[sorted_tmrs[i][0]]
- if i + 1 != 1:
- delta = delta / float(math.log(i + 1, 2))
- dcg += delta
- ndcg_sum += dcg / idcg
- if lines_number != len(true_recs.keys()):
- result['details'] = 'Wrong lines number'
- else:
- result['details'] = 'ok'
- result['score'] = ndcg_sum / lines_number
- print repr(result)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement