基于地域和热度的推荐算法(以酒店为例进行实现)

本文介绍了一种针对用户位置的酒店推荐系统,结合热度排序,通过'RecBasedAH'类实现综合考虑评分、评论数、装修时间等因素的个性化推荐。实例展示了如何根据用户地址和指定排序字段获取推荐列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于地域和热度的推荐算法的基本原理是:按照地域对事物进行划分,然后根据热度对事物进行排序, 进而推荐给用户。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在基于地域和热度的酒店推荐中,并不对用户的偏好进行区分,而是根据用户的位置信息, 结合不同的排序方式, 将用户位置附近的酒店推荐给用户。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import pandas as pd
#创建RecBasedAH类
class RecBasedAH:
    def __init__(self,path=None,addr="朝阳区",type="score",k=10, sort=False):
        self.path = path
        self.addr = addr
        self.type = type
        self.k = k
        self.sort = sort
        self.data = self.load_mess()
        
    def load_mess(self):
        data =pd.read_csv(self.path,header=0,sep=",",encoding='GBK')
        return data[data["addr"]==self.addr]
    
    def reccomend(self):
        if self.type in ["score","comment_num","lowest_price","decoration_time","open_time"]:
            data = self.data.sort_values(by=[self.type, "lowest_price"], ascending=self.sort)[:self.k]
            return dict(data.filter(items=["name",self.type]).values)
        
        elif self.type == "combine":      # 综合排序,综合以上五种因素
            # 过滤得到使用的信息
            data = self.data.filter(items=["name","score","comment_num","decoration_time","open_time","lowest_price"])
            # 对装修时间做处理
            data["decoration_time"] = data["decoration_time"].apply(lambda  x: int(x) - 2018)
           # 对开业时间做处理
            data["open_time"] = data["open_time"].apply(lambda  x: 2018 - int(x))
        for col in data.keys():
            if col !="name":
                data[col]  = ( data[col] - data[col].min() ) / (data[col].max() - data[col].min() )

        # 这里认为 评分的权重为1,评论数目权重为2,装修和开业时间权重为0.5,最低价权重为1.5
        data[self.type]=1 * data["score"] + 2 * data["comment_num"] + \
                        0.5 * data["decoration_time"] + 0.5 * data["open_time"] + 1.5 * data["lowest_price"]
        data = data.sort_values(by=self.type, ascending=self.sort)[:self.k]
        return dict(data.filter(items=["name", self.type]).values)

if __name__ == "__main__":
    path = "./hotel-mess.csv"
    """
    参数说明
    addr: 酒店所在地区,有朝阳区,丰台区,东城区,西城区,海淀区,顺义区,石景山区,延庆区,房山区,通州区
    type:排序字段,默认为 评分:score
          支持 评论数目:comment_num,装修时间:decoration_time,开业时间:open_time,最低价格:lowest_price,综合排序:combine
    k:返回结果的数目
    sort:按照指定字段的排序方式,默认为降序, True为升序  False为降序
    """

    hotel_rec = RecBasedAH(path,addr="丰台区",type="combine",k=10,sort=False)
    results = hotel_rec.reccomend()
    print(results)


实现结果

{'布丁酒店(北京西站店)': 3.1730295833128648, '7天连锁酒店(北京西客站丽泽桥店)': 3.153837789005253, 'IU酒店(北京西客站六里桥东地铁站店)': 3.1180746269016018, '万方苑国际酒店': 3.0238301076818614, '如家酒店(北京西客站六里桥店)': 2.5901208236378706, '卡普连锁酒店(北京南站店)': 2.5080940886288587, '如家酒店(北京万丰路店)': 2.4305453620980266, '7天连锁酒店(北京宋家庄地铁站店)': 2.3899440335914166, '如家酒店(北京丰台体育中心岳各庄桥店)': 2.2717954693098688, '锦江之星(北京马家堡店)': 2.171781608364371}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alexander plus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值