算法过程缓慢

Algorithm process is slow

考虑一个平台,用户可以在其中选择他更重视的因素。例如标准的 5 个因素 A, B, C, D, E

然后每个产品评论都有 A1, B1, C1, D1, E1 的权重。所以,如果他更重视 A,那么权衡将考虑到这一点。结果是每个评论对每个用户都有不同的总体。

我的问题是关于它的算法。目前处理速度较慢。

对于每个类别摘要,我需要遍历该类别的所有公司,以及每个公司的所有评论。

#1 step
find companies of category X with more than 1 review published

companies_X = [1, 2, 3, 5, n]

#2 step 
iterate all companies, and all reviews of these companies

for company in companies:
   for review in company:
      #calculate the weighing of the review for the current user criteria
      #give more importance to recent reviews

#3 step 
avg of all reviews for each company data

#4 step 
make the avg of all companies of this category to create a final score for the category x

这行得通,但我无法加载需要 30 秒的页面。

我正在考虑缓存此页面,但那样的话我需要在后台为所有用户处理此页面。绝对不是一个好的解决方案。

关于改进的任何想法?欢迎任何见解。

第一个选项:使用 numpy 和 pandas 可以提高你的速度,如果以一种聪明的方式利用,所以通过 避免循环可能。这可以通过使用 apply 方法来完成,同时处理 numpy and pandas,以及一些条件或 lambda 函数。

for company in companies:
    for review in company:

可以替换为review_data["note"] = note_formula(review_data["number_reviews"])

编辑:这里note_formula是一个返回review权重的函数,如问题评论中所示:

  # calculate the weighing of the review for the current user criteria
  # give more importance to recent reviews 

您的第 4 步可以通过使用 pandas 中的 groupby 方法以及计算平均值来执行。

第二个选项:你的数据存储在哪里?如果它们在数据库中,提高性能的一个好的规则是:尽可能少地移动数据,所以直接在数据库中执行请求,我认为你所有的操作都可以写在 SQL 中,并且然后仅将结果重定向到 python 脚本。如果您的数据以其他方式存储,请考虑使用数据库引擎,例如 SQLite 如果您不打算快速扩展,请在开始时使用。