我如何按书评排序,而不是按平均书评排序?

2024-04-19 22:49:13 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我没有背景,对这门科学我是新手

这是我的问题。我有一个读者评论的书籍列表(假设用户可以给这些书籍加1到5颗星)

现在,我想根据书评从最好的到最差的分类,但对书评进行平均似乎是错误的,因为一本书评为5颗星的书会被认为比一本书评为4颗星和5颗星的书更好

我在这里的选择是什么?是否有任何特定于python的库可以做到这一点

谢谢大家!


Tags: 用户列表错误评论分类科学书籍背景
2条回答

下面是一个使用“伪评论”(如https://stats.stackexchange.com/questions/173683/sorting-products-by-reviews-considering-the-number-of-reviews中所述)对列表进行排序的简单示例:

from statistics import mean
from typing import List, NamedTuple


class Book(NamedTuple):
    title: str
    reviews: List[int]
    # other useful info might go here?


books = [
    Book("The Big Orange Splot", [5, 5]),
    Book("Lizard Music", [5, 5, 5, 5, 4, 5]),
    Book("Young Adult Novel", [2, 2, 5, 5, 5, 5, 5, 5]),
    Book("Fishwhistle", [4, 4, 5, 4, 5]),
    Book("The Davinci Code", [2, 2, 5, 2, 3, 4, 2, 1])
]

books.sort(
    key=lambda book: mean(book.reviews + [3, 3, 3]),
    reverse=True
)

for book in books:
    print(
        f"{book.title}: "
        f"{mean(book.reviews):.1f} stars "
        f"({len(book.reviews)} reviews)"
    )
Lizard Music: 4.8 stars (6 reviews)
Young Adult Novel: 4.2 stars (8 reviews)
Fishwhistle: 4.4 stars (5 reviews)
The Big Orange Splot: 5.0 stars (2 reviews)
The Davinci Code: 2.6 stars (8 reviews)

请注意,sort()调用在调用mean()之前添加了3个假三星评论,目的是将少量评论的书籍倾斜到3,但稍后当我们显示评论时,我们使用“真实”平均评级,而不使用假条目

与普通客户评论不同,您还可以选择更抽象的“最受欢迎”选项?亚马逊通过“亚马逊的选择”来回避你所描述的问题,因为人们必须假设该产品具有最好的平均评论,并且已经售出了许多产品

看待它的一种方式是思考某个东西有多少“分”,以及它有多少“分”有机会得分。如果一个项目被审查了十次,并且最高分数是5分,那么它就有机会得到50分。您可以通过这种方式设置一个阈值,即“最受欢迎”的排序方法中只包括必须有机会得分的项目,例如100分。对于最终用户来说,这可能是一个抽象的概念,毕竟我们不知道为什么有些东西是“亚马逊的选择”,但当你使用他们的网站时,这似乎是有道理的

就编码而言,最简单的方法是只在“最流行”的排序方法中包含至少有x篇评论的书籍

相关问题 更多 >