-
Notifications
You must be signed in to change notification settings - Fork 0
/
userSimilarity.py
74 lines (53 loc) · 2.61 KB
/
userSimilarity.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import pandas as pd
current_player = 100
treshold = 0.25 #value from -1.0 to 1.0, the higher it is the more selective algorithm will be
similarity_df = pd.read_csv("Datasets/similarity_df.csv")
similarity_df.drop("Unnamed: 0", axis = 1, inplace=True)
game_indexes_inverted = pd.read_csv("Datasets/game_indexes_inverted.csv")
game_indexes_inverted.drop("Unnamed: 0", axis = 1, inplace=True)
ratings_df = pd.read_csv("Datasets/user_df_with_ratings.csv")
ratings_df.drop("Unnamed: 0", axis = 1, inplace=True)
user_indexes = pd.read_csv("Datasets/user_indexes_inverted.csv")
user_indexes.drop("Unnamed: 0", axis = 1, inplace=True)
###########################################################################
def neighbours(sim):
return [sim.index[i] for i, v in enumerate(sim) if (v>=treshold)]
similar_players = neighbours(similarity_df.iloc[current_player])
if str(current_player) in similar_players:
similar_players.remove(str(current_player))
###########################################################################
similar_players_Ids = []
for player in similar_players:
similar_players_Ids.append(user_indexes[player][0])
###########################################################################
def get_current_player_games(index):
active_player_id = user_indexes[str(index)][0]
active_player = ratings_df.loc[ratings_df["userId"] == active_player_id]
active_player = active_player["game"]
active_player_games = []
for row in range(len(active_player)):
game = active_player.iloc[row]
if game not in active_player_games:
active_player_games.append(game)
return active_player_games
###########################################################################
active_player_games = get_current_player_games(current_player)
recommended_games = []
super_recommended = []
for player in similar_players_Ids:
current_player = ratings_df.loc[ratings_df["userId"] == player]
player_recommendation = current_player.loc[current_player['rating'] >= 4]['game']
for row in range(len(player_recommendation)):
game = player_recommendation.iloc[row]
if game not in active_player_games:
if game not in recommended_games:
recommended_games.append(game)
else:
super_recommended.append(game)
if len(super_recommended) == 0:
if len(recommended_games) != 0:
print(f"Users similar to You liked: {recommended_games}")
else:
print(f"Woah, You're quite unique, there is noone like You (at current treshold: {treshold})")
else:
print(f"Multiple players similar to You liked {super_recommended}")