예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
 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