我有一个数据集-大约有30000个用户,我想根据基于PageRank的UserRank算法来计算每个用户的影响力:
对于每个用户,我都有一个关注者列表。我试图用Python计算它,但是我得到了:
RecursionError: maximum recursion depth exceeded while calling a Python object
这里是代码:
def calculate_user_rank(user_id):
user_rank = 0
for j in user[user_id]["followers"]:
user_rank += (1 + (user[user_id]["followers_count"]/user[user_id]["tweets"]) * calculate_user_rank(j))/user[j]["followers_count"]
return user_rank
有没有办法为每个用户计算此度量?
处理该问题的一种方法是利用动态编程的概念,因为您可能会一遍又一遍地重复解决相同的子问题。因此,最好是存储用户页面排名的结果,而不是一次又一次地计算它们。
用途:
def calculate_user_rank(user_id, memo={}):
user_rank = 0
for j in user[user_id]["followers"]:
if j not in memo:
memo[j] = calculate_user_rank(j, memo)
user_rank += (1 + (user[user_id]["followers_count"]/user[user_id]["tweets"]) * memo[j])/user[j]["followers_count"]
memo[user_id] = user_rank
return memo[user_id]
您可以随时更改默认递归限制:What is the maximum recursion depth in Python, and how to increase it?但是在此示例中,我希望为您的问题提供迭代解决方案(例如:https://github.com/thomasjhuang/PageRank/blob/master/run_pagerank.py),并为每个用户缓存其性能得分。