def get_users_recommendations_dict(db_conn_conf, user_ids): """Create dict with recommendations for given users """ db_conn = RSDBConnection(db_conn_conf) raw_recommendations = { user_id: read_recommendation_from_file(db_conn_conf, db_conn.get_user_name(user_id)) for user_id in user_ids } db_conn.finalize() return format_data(raw_recommendations), len(user_ids)
def main(number_of_groups, max_group_size=4): """Evaluate the system on a given number of random groups """ db_conn_conf = {"user": "******", "host": "localhost", "database": "bgg"} recommendation_functions = [ recommend_merge_users(avg), recommend_merge_users(max), recommend_merge_users(min), recommend_merge_recommendations(avg), recommend_merge_recommendations(max), recommend_merge_recommendations(min), ] user_groups = [] db_conn = RSDBConnection(db_conn_conf) for _ in range(number_of_groups): user_groups.append(db_conn.get_random_user_group(max_group_size)) db_conn.finalize() # user_groups = [[113, 145]] for user_group in user_groups: db_conn = RSDBConnection(db_conn_conf) user_names = [db_conn.get_user_name(user_id) for user_id in user_group] group_name = "_".join(user_names) db_conn.finalize() print "Evaluating user group: ", group_name user_rating_functions = [get_user_ratings(user_id) for user_id in user_group] evaluation_functions = user_rating_functions + recommendation_functions results_list = [dict(recommend(db_conn_conf, user_group, group_name)) for recommend in evaluation_functions] print results_list game_ids = set.union(*[set(reco.keys()) for reco in results_list]) print game_ids results_dict = {game_id: [] for game_id in game_ids} print results_dict # convert list of dicts into dict with list values results_dict = { game_id: [reco.get(game_id, None) for reco in results_list] for game_id in set.union(*[set(reco.keys()) for reco in results_list]) } print results_dict with open("eval/" + group_name + ".tsv", "wb") as eval_results_file: writer = csv.writer(eval_results_file, delimiter="\t") headings = ( ["game_id"] + user_names + ["merge_usr_avg", "merge_usr_max", "merge_usr_min", "merge_rec_avg", "merge_rec_max", "merge_rec_min"] ) writer.writerow(headings) for game_id, results in sorted(results_dict.items()): writer.writerow([game_id] + results)
def resulting_fun(db_conn_conf, user_ids, group_name): db_conn = RSDBConnection(db_conn_conf) ratings = db_conn.get_user_ratings(user_id) recommendations = read_recommendation_from_file(db_conn_conf, db_conn.get_user_name(user_id)) db_conn.finalize() return ratings + recommendations