算法过程缓慢
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 如果您不打算快速扩展,请在开始时使用。
考虑一个平台,用户可以在其中选择他更重视的因素。例如标准的 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 如果您不打算快速扩展,请在开始时使用。