andykr1k commited on
Commit
828fed3
·
1 Parent(s): c865291

fixed following followed user schema

Browse files
Files changed (1) hide show
  1. app.py +8 -7
app.py CHANGED
@@ -57,13 +57,14 @@ def load_and_preprocess_data():
57
  followers = pd.DataFrame(followers_response.data)
58
  users = pd.DataFrame(users_response.data)
59
 
60
- merged = followers.merge(users, left_on='following', right_on='id', how='left')
61
- merged = merged.rename(columns={'id_x': 'follower_id', 'id_y': 'followed_id'})
62
-
63
  merged = merged[['follower_id', 'followed_id']].dropna()
64
  return merged[(merged['follower_id'] != '') & (merged['followed_id'] != '')]
65
 
66
  def create_graph_dataframe(merged_df):
 
67
  G = nx.from_pandas_edgelist(merged_df, source='follower_id', target='followed_id', create_using=nx.DiGraph())
68
  user_ids = sorted(G.nodes())
69
  return G, torch.eye(len(user_ids)), user_ids
@@ -130,17 +131,17 @@ def get_recommendations(user_id, model, data, G, user_ids, top_k=10):
130
  return []
131
 
132
  user_idx = user_ids.index(user_id)
 
133
  current_follows = set(G.successors(user_id))
134
-
 
135
  candidates = [u for u in user_ids if u != user_id and u not in current_follows]
136
-
137
  with torch.no_grad():
138
  embeddings = model(data.x, data.edge_index)
139
  user_embed = embeddings[user_idx]
140
-
141
  candidate_indices = [user_ids.index(u) for u in candidates]
142
  candidate_embeds = embeddings[candidate_indices]
143
-
144
  scores = torch.mm(user_embed.view(1, -1), candidate_embeds.T).squeeze()
145
 
146
  top_indices = scores.argsort(descending=True)[:top_k]
 
57
  followers = pd.DataFrame(followers_response.data)
58
  users = pd.DataFrame(users_response.data)
59
 
60
+ # 'id' is the followed user, 'following' is the follower
61
+ merged = followers.merge(users, left_on='id', right_on='id', how='left')
62
+ merged = merged.rename(columns={'following': 'follower_id', 'id': 'followed_id'})
63
  merged = merged[['follower_id', 'followed_id']].dropna()
64
  return merged[(merged['follower_id'] != '') & (merged['followed_id'] != '')]
65
 
66
  def create_graph_dataframe(merged_df):
67
+ # Edge from follower to followed
68
  G = nx.from_pandas_edgelist(merged_df, source='follower_id', target='followed_id', create_using=nx.DiGraph())
69
  user_ids = sorted(G.nodes())
70
  return G, torch.eye(len(user_ids)), user_ids
 
131
  return []
132
 
133
  user_idx = user_ids.index(user_id)
134
+ # Successors are the users this user follows
135
  current_follows = set(G.successors(user_id))
136
+
137
+ # Exclude self and already-followed users
138
  candidates = [u for u in user_ids if u != user_id and u not in current_follows]
139
+
140
  with torch.no_grad():
141
  embeddings = model(data.x, data.edge_index)
142
  user_embed = embeddings[user_idx]
 
143
  candidate_indices = [user_ids.index(u) for u in candidates]
144
  candidate_embeds = embeddings[candidate_indices]
 
145
  scores = torch.mm(user_embed.view(1, -1), candidate_embeds.T).squeeze()
146
 
147
  top_indices = scores.argsort(descending=True)[:top_k]