Spaces:
Running
Running
andykr1k commited on
Commit ·
828fed3
1
Parent(s): c865291
fixed following followed user schema
Browse files
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 |
-
|
| 61 |
-
merged =
|
| 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]
|