基于深度学习的旅游推荐系统

1. 项目背景

随着人们生活水平的提高,旅游已成为大众休闲娱乐的重要方式。然而,面对海量的旅游景点信息,用户往往难以快速找到符合个人兴趣的目的地。传统的旅游信息网站多采用静态展示或简单的关键词搜索,缺乏针对用户的个性化服务。

本项目旨在构建一个基于Web的旅游推荐系统 ,利用Python Django框架作为后端开发基础,结合大数据处理与深度学习(机器学习)算法,对旅游景点数据进行深度挖掘与分析,实现个性化的景点推荐,提升用户体验,帮助用户更高效地制定出行计划。

演示视频及代码资料下载:https://www.bilibili.com/video/BV1nXzKBUEcP

配套论文

配套PPT

2. 技术架构

本系统采用 B/S(Browser/Server)架构,前后端分离或模板渲染模式开发。

  • 后端开发框架:Python + Django 2.0
  • 数据存储:MySQL (业务数据)
  • 数据爬取:Scrapy / Requests + Lxml
  • 数据分析与推荐:实现KMeans聚类、逻辑回归等
  • 前端技术:HTML, CSS, JavaScript, Vue.js (或JQuery), ECharts (可视化)
  • 开发环境:Windows/Linux, PyCharm, Navicat

系统架构图

  1. 数据层:Scrapy爬虫抓取各大旅游网站数据(如携程、去哪儿),清洗后存入MySQL数据库。
  2. 处理层:读取MySQL数据,进行特征提取、模型训练(如聚类分析用户偏好、景点相似度计算),将结果回写至数据库或生成JSON文件。
  3. 应用层:Django处理HTTP请求,包括用户管理、景点展示、评论互动、推荐接口调用等。
  4. 展示层:前端页面展示景点列表、详情、推荐结果及数据可视化大屏。

3. 数据库设计

系统核心数据表包括用户表、景点表、旅游路线表等。以下是主要表的简要设计:

3.1 用户表 (yonghu)

用于存储注册用户的信息。

字段名 类型 描述
id BigInteger 主键
zhanghao Varchar 账号
mima Varchar 密码
xingming Varchar 姓名
shouji Varchar 手机号
touxiang Text 头像URL
addtime DateTime 注册时间

3.2 景点表 (jiangxijingdian)

存储爬取或录入的景点详细信息。

字段名 类型 描述
id BigInteger 主键
poiname Varchar 景点名称
cover Text 封面图片
jiage Float 门票价格
heatscore Float 热度评分
commentscore Float 评论评分
tags Varchar 标签(如:山水、人文)
clicknum Integer 点击/浏览次数
storeupnum Integer 收藏数
clicktime DateTime 最近点击时间(用于推荐)

3.3 收藏表 (storeup)

记录用户的收藏行为,用于后续的兴趣分析。

字段名 类型 描述
userid BigInteger 用户ID
refid BigInteger 关联商品/景点ID
type Varchar 类型(1:收藏, 21:赞, 22:踩等)

4. 系统实现

本系统采用了Python和Mysql相结合的结构,以及基于客户端管理模式即B/S模式,设计开发了这款基于DJANGO框架的旅游推荐系统。在配置文件中添加了编码方式来解决代码中中文的问题,本系统的设计开发,将CSS代码写在一个文件夹中,这样每个网页设计时,可以直接调用,既省时又省力。编写代码时,可以一边看着设计界面,一边编写CSS样式,为设计开发过程减轻了负担。

5.1系统前台功能实现

系统首页为用户提供江西旅游的核心信息与便捷入口。其中,"江西景点"模块集中展示江西的热门景点,如庐山、滕王阁等,方便用户快速了解;"江西旅游"提供旅游攻略、推荐线路等综合信息,助力用户规划行程;"个人中心"则是用户管理个人资料、收藏及偏好设置的专属空间,提升个性化体验。系统首页页面如图5-1所示:

图5-1系统首页页面

在基于深度学习的旅游推荐系统中,个人中心功能为用户提供便捷的个性化服务。用户可以在此修改密码,确保账户安全。旅游路线规划功能根据用户偏好和历史行为,利用深度学习算法生成定制化路线。我的收藏则方便用户保存心仪的旅游景点、酒店或攻略,方便随时查看,提升用户体验。个人中心页面如图5-2所示:

图5-2个人中心页面

5.2后台管理员功能实现

管理员主页面作为系统控制中心,提供全面的管理功能。页面通常详细列出所有管理模块,包括用户、江西景点、江西旅游、旅游路线规划、轮播图管理、个人中心等,确保管理员能够高效地进行日常管理工作。整个页面布局清晰,功能模块化,便于管理员快速定位和操作。管理员主界面如图5-3所示:

图5-3 管理员主界面

在旅游推荐系统中,管理员点击"用户管理"功能后,可输入用户姓名或性别进行精准查询。查询结果以列表形式展示用户信息,管理员可在此基础上查看用户详情、修改用户信息或删除用户记录。管理员还可通过此功能添加新用户,完善用户信息,确保用户数据的完整性和准确性,从而高效管理用户信息,提升系统管理效率。如图5-4所示:

图5-4 用户界面

管理员点击"江西景点"功能后,可输入景点名称进行查询,系统会快速返回相关景点信息列表。管理员可在列表中查看景点详情,包括介绍、门票价格、开放时间等。管理员还可以添加新的景点信息,通过爬取数据功能从外部网站自动获取景点数据,或删除不再需要的景点记录。管理员能够修改景点信息,确保数据的准确性和时效性,为用户提供最新的旅游参考。如图5-5所示:

图5-5 江西景点界面

在旅游推荐系统中,管理员点击"江西旅游"功能后,可输入标题进行查询,系统会快速返回相关的江西旅游信息列表,包括旅游攻略、景点介绍、特色活动等内容。管理员可以查看详细信息,对现有内容进行修改或删除,以确保信息的准确性和时效性。管理员还可以通过系统添加新的江西旅游信息,或利用爬取数据功能从外部权威渠道获取最新的旅游资讯,丰富平台内容。如图5-6所示:

图5-6 江西旅游界面

管理员点击"旅游路线规划"功能后,可输入标题进行查询,系统会快速返回相关的旅游路线规划信息列表。管理员能够查看每条路线的详细内容,包括行程安排、景点顺序、预计时间等。管理员可以添加新的路线规划,通过爬取数据功能从外部获取热门路线信息,丰富系统内容。管理员还可以修改现有路线信息或删除不再适用的路线,确保旅游路线规划的实用性和时效性。如图5-7所示:

图5-7 旅游路线规划界面

管理员点击"看板"功能后,将进入一个数据可视化界面,直观展示江西旅游的核心业务数据。看板上可查看团游价格、江西景点总数、各景点门票价格、景点热度排名、景点评论数量与趋势、江西旅游攻略总数、热门旅游路线、团游评论情况以及团游的销售数据等。这些数据以图表和数字形式呈现,帮助管理员快速掌握业务动态,为决策提供数据支持。如图5-8所示:

图5-8看板界面

5. 关键代码

5.1 聚类分析

使用 PySpark 进行 KMeans 聚类,这可用于发现相似类型的景点,用于"看了又看"等推荐功能。

复制代码
from pyspark.ml.clustering import KMeans
from pyspark.sql import SparkSession

def cluster(table_name):
    '''
    Spark KMeans 聚类分析
    :param table_name: 数据表名
    :return: 聚类中心
    '''
    spark = SparkSession.builder.appName("flask").getOrCreate()
    # 读取数据(假设已格式化为libsvm或向量格式)
    dataset = spark.read.format("libsvm").table(table_name)

    # 训练 KMeans 模型,K=2
    kmeans = KMeans().setK(2).setSeed(1)
    model = kmeans.fit(dataset)

    # 获取聚类中心
    centers = model.clusterCenters()
    for center in centers:
        print(center)

    return centers

5.2 推荐排序接口 (main/Jiangxijingdian_v.py)

Django 视图函数,处理前端的推荐请求。这里展示了基于点击量 (clicknum) 和浏览时间 (clicktime) 的混合推荐逻辑。

复制代码
def jiangxijingdian_autoSort(request):
    '''
    智能推荐功能:
    如果有 web 浏览数据,根据 clicknum (点击次数) 或 clicktime (最近点击) 进行排序推荐。
    '''
    if request.method in ["POST", "GET"]:
        msg = {"code": normal_code, "msg": "success",  "data":{"list":[]}}
        req_dict = request.session.get("req_dict")
        
        # 获取所有列名
        columns = jiangxijingdian.getallcolumn(jiangxijingdian, jiangxijingdian)
        
        # 优先按点击次数倒序,其次按最近浏览时间
        if "clicknum" in columns:
            req_dict['sort'] = 'clicknum'
        elif "browseduration" in columns:
            req_dict['sort'] = 'browseduration'
        else:
            req_dict['sort'] = 'clicktime'
            
        req_dict['order'] = 'desc'
        
        # 调用分页查询方法获取推荐列表
        msg['data']['list'], _, _, _, _ = jiangxijingdian.page(
            jiangxijingdian, jiangxijingdian, req_dict
        )

        return JsonResponse(msg, encoder=CustomJsonEncoder)

5.3 线性回归预测 (util/spark_func.py)

利用线性回归算法对数据进行拟合预测。

复制代码
from pyspark.ml.regression import LinearRegression

def linear(table_name):
    '''
    线性回归分析
    '''
    spark = SparkSession.builder.appName("flask").getOrCreate()
    training = spark.read.format("libsvm").table(table_name)

    lr = LinearRegression(maxIter=20, regParam=0.01, elasticNetParam=0.6)
    lrModel = lr.fit(training)

    trainingSummary = lrModel.summary
    print(f"RMSE: {trainingSummary.rootMeanSquaredError}")
    print(f"r2: {trainingSummary.r2}")

    return trainingSummary.residuals.toJSON()

6. 总结与展望

本项目成功设计并实现了一个基于 Django 和 旅游推荐系统。

  1. 整合了大数据的能力:系统具备了处理大规模旅游数据的潜力,不再局限于简单的 CRUD 操作,引入了机器学习算法(聚类、回归)来挖掘数据价值。
  2. 全栈开发实践:涵盖了从爬虫数据采集、数据库设计、后端 API 开发到前端展示的完整流程。
  3. 实用性:推荐算法虽然基础,但结合了用户的点击和收藏行为,能够有效解决"信息过载"问题,提供热门和个性化的景点建议。

未来展望

  • 算法优化:目前主要依赖统计和基础 ML 算法,未来可以引入协同过滤 (Collaborative Filtering, ALS) 或基于内容的深度神经网络推荐 (DNN),进一步提高推荐准确率。
  • 实时性:实现实时的用户行为分析与推荐。
  • 界面交互:引入更丰富的前端交互框架(如 Vue3 + Vite),提升用户体验。

演示视频及代码资料下载:https://www.bilibili.com/video/BV1nXzKBUEcP****

相关推荐
深蓝电商API2 小时前
Selenium多窗口切换与Cookie管理
爬虫·python·selenium·测试工具
小北方城市网2 小时前
Spring Cloud 服务治理实战:构建高可用微服务体系
spring boot·python·rabbitmq·java-rabbitmq·数据库架构
写代码的【黑咖啡】2 小时前
Python中的Statsmodels:统计建模与假设检验
开发语言·python
程序员杰哥3 小时前
Pytest自动化测试框架实战
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
觉醒大王3 小时前
如何整理文献阅读笔记? (精读与泛读)
前端·css·笔记·深度学习·自然语言处理·html·学习方法
weixin_433179333 小时前
python - 函数 function
开发语言·python
renhongxia13 小时前
数字孪生国内外发展现状,数字孪生技术在工程项目上的应用情况及效益分析
人工智能·深度学习·机器学习·语言模型·制造
不吃鱼的小时喵3 小时前
【Python】关于python多进程
python
cocodameyou1323 小时前
从能量阻滞到流动:解码“被动学习”背后的家庭动能重构逻辑
笔记·学习·其他·百度·微信·重构·课程设计