(计算机大数据专业毕设推荐)基于大数据的热门旅游景点推荐系统【协同过滤推荐算法-爬虫-数据分析-Hadoop】

基于大数据的热门旅游景点推荐系统

前言介绍

选题背景及意义

随着经济的稳步增长以及人们生活水平的不断提高,旅游已经成为人们生活中不可或缺的一部分。旅游不仅能够帮助人们放松身心、缓解工作和生活压力,还能拓宽视野、增长见识,满足人们对美好生活的向往[1]。与此同时,互联网和移动设备的普及,使得人们获取旅游信息的方式发生了巨大变化。旅游市场的蓬勃发展也带来了一些问题。一方面,海量的旅游信息充斥在网络上,景点介绍、游客评价、攻略分享等信息繁多且繁杂,用户在选择旅游景点时往往面临信息过载的困扰,难以快速、准确地找到符合自己需求和兴趣的景点。另一方面,对于旅游景点的管理者和旅游服务提供商来说,如何有效地推广景点、吸引更多游客,以及如何对旅游相关数据进行管理和分析,从而提升服务质量和运营效率,也是亟待解决的问题。

热门旅游景点推荐系统的开发,旨在利用先进的技术手段,解决上述问题。系统采用B/S开发模式,结合django、Python、Hadoop以及Scrapy爬虫等技术,实现对用户、景点分类、旅游景点(包括江苏景点等)的有效管理。通过Scrapy爬虫获取丰富的旅游景点数据,利用Hadoop进行数据的存储和处理,借助django搭建系统后端架构,Python进行数据分析和处理,为用户提供个性化的景点推荐服务。

该系统的开发具有重要意义。对于用户而言,能够节省他们筛选景点的时间和精力,提供更加精准、个性化的旅游推荐,提升旅游体验。对于旅游景点和旅游服务提供商来说,系统可以帮助他们更好地了解用户需求,进行精准营销和推广,提高景点的知名度和吸引力。此外,该系统的建设也有助于推动旅游行业的数字化转型,促进旅游行业的健康发展。

01开发环境

1.1 Python技术

1.2 Django框架

1.3 Hadoop

1.4 Scrapy爬虫

1.5 MySQL数据库

1.6 B/S 结构

1.7 Vue.js 技术

1.8 协同过滤算法

02系统功能模块

亮点(爬虫【携程旅行】、协同过滤算法推荐、数据分析、Echarts可视化看板)

1、数据管理:爬虫信息列表展示。

2、数据存储:mysql数据库。

3、数据分析:大数据分析统计图表大屏

4、智能推荐:基于用户的协同过滤算法推荐

04图片展示

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

后台管理系统

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

05系统文档、代码展示

5.1 系统文档
在这里插入图片描述

5.2 代码展示

#协同过滤算法代码(学习交流+VX: S20231025S )
#查找相似用户
def cosine_similarity(a, b):
    numerator = sum([a[key] * b[key] for key in a if key in b])
    denominator = math.sqrt(sum([a[key]**2 for key in a])) * math.sqrt(sum([b[key]**2 for key in b]))
    return numerator / denominator
#收藏协同算法
def evaluationdata_autoSort2(request):
    if request.method in ["POST", "GET"]:
        req_dict = request.session.get("req_dict")
        cursor = connection.cursor()
        sorted_recommended_goods=[]
        user_ratings={}
        token = request.META.get('HTTP_TOKEN')
        decode_str = eval(base64.b64decode(token).decode("utf8"))
        user_id = decode_str['params']["id"]
        try:
            cursor.execute("select * from storeup where type = 1 and tablename = 'evaluationdata' order by addtime desc")
            desc = cursor.description
            data_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]
            #用户-订单矩阵
            for item in data_dict:
                if user_ratings.__contains__(item["userid"]):
                    ratings_dict = user_ratings[item["userid"]]
                    if ratings_dict.__contains__(item["refid"]):
                        ratings_dict[str(item["refid"])]+=1
                    else:
                        ratings_dict[str(item["refid"])] =1
                else:
                    user_ratings[item["userid"]] = {
                        str(item["refid"]):1
                    }
            try:
                # 计算目标用户与其他用户的相似度
                similarities = {other_user: cosine_similarity(user_ratings[user_id], user_ratings[other_user])
                                for other_user in user_ratings if other_user != user_id}
                # 找到与目标用户最相似的用户
                most_similar_user = sorted(similarities, key=similarities.get, reverse=True)[0]
                # 找到最相似但目标用户未购买过的商品
                recommended_goods = {goods: rating for goods, rating in user_ratings[most_similar_user].items() if
                                     goods not in user_ratings[user_id]}
                # 按评分降序排列推荐
                sorted_recommended_goods = sorted(recommended_goods, key=recommended_goods.get, reverse=True)
            except:
                pass
        except:
            sorted_recommended_goods=[]
        L = []
        where = " AND ".join([f"{key} = '{value}'" for key, value in req_dict.items() if key!="page" and key!="limit" and key!="order"and key!="sort"])
        if where:
            sql = f'''SELECT * FROM (SELECT * FROM evaluationdata WHERE {where}) AS table1 WHERE id IN ('{"','".join(sorted_recommended_goods)}') union all SELECT * FROM (SELECT * FROM evaluationdata WHERE {where}) AS table1 WHERE id NOT IN ('{"','".join(sorted_recommended_goods)}')'''
        else:
            sql = f'''select * from evaluationdata where id in ('{"','".join(sorted_recommended_goods)}') union all select * from evaluationdata where id not in('{"','".join(sorted_recommended_goods)}')'''
        cursor.execute(sql)
        desc = cursor.description
        data_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]
        for online_dict in data_dict:
            for key in online_dict:
                if 'datetime.datetime' in str(type(online_dict[key])):
                    online_dict[key] = online_dict[key].strftime(
                        "%Y-%m-%d %H:%M:%S")
                else:
                    pass
            L.append(online_dict)
        return JsonResponse(....)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

VX_S20231025S

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

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

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

打赏作者

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

抵扣说明:

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

余额充值