基于python旅游推荐系统 协同过滤算法 爬虫 Echarts可视化 Django框架(源码)✅

news/2024/7/19 12:27:30 标签: python, 旅游, 算法, 毕业设计, 大数据, 爬虫, 旅游推荐

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)

毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、项目介绍

(1)技术栈:
Django框架、基于用户协同过滤推荐算法、requests爬虫、MySQL数据库、去哪儿网站、Echarts可视化
(2)介绍
本系统主要针对解决获取旅游信息滞后、参加线下旅行社和人工检索时间成本高等问题,运用网络爬虫信息技术设计思想,实现了一个基于Python的旅游信息推荐系统。本系统以Python计算机设计语言为基础,使用 requests对去哪儿旅游信息源进行抓取,针对网页信息编写抽取规则,对旅游信息进行必要的过滤和提取,使用MySql对旅游信息进行数据存储。然后使用 Python 开源web框架 Django进行系统搭建,基于旅游信息采用协同过滤推荐算法完成对用户的旅游信息推荐,完成整个爬取以及数据检索到成功进行旅游推荐的网页端操作展示。

2、项目截图

1、首页—数据概况

在这里插入图片描述

2、价格与销量分析

在这里插入图片描述

3、城市与景点等级分析

在这里插入图片描述

4、评分情况分析

在这里插入图片描述

5、景点推荐---------协同过滤推荐算法

在这里插入图片描述

6、景点数据管理

在这里插入图片描述

7、后台管理

在这里插入图片描述

3、项目说明

Django旅游采集可视化推荐系统是基于Django框架开发的一个旅游信息采集和推荐的应用。该系统通过爬虫技术从各个旅游网站抓取旅游信息,并利用推荐算法对用户进行个性化推荐,同时提供可视化展示界面。

以下是该系统的主要功能和组成部分的介绍:

旅游信息采集:系统通过编写爬虫程序,定期从各大旅游网站抓取旅游景点、酒店、机票等相关信息,包括价格、评价、位置等。这些采集到的数据会被保存到数据库中供后续使用。

用户注册与登录:用户可以注册自己的账号,并通过登录来获取个性化推荐和享受更多功能。

个性化推荐:系统会根据用户的历史浏览记录、收藏记录以及其他行为数据,利用推荐算法生成个性化推荐结果。推荐算法可以使用协同过滤、内容过滤、混合推荐等方法,根据用户的兴趣和偏好为其推荐最相关的旅游信息。

可视化展示界面:系统会将采集的旅游信息以可视化方式展示给用户,包括地图标记、图片展示、价格对比等功能。用户可以通过地图选择感兴趣的地区,查看该地区的旅游景点、酒店等信息。

用户交互和反馈:系统提供用户评价、评论和收藏等功能,用户可以对自己的旅游经历进行评价和分享,同时也可以保存自己喜欢的旅游信息以便日后查看。

后台管理:系统提供一个后台管理界面,管理员可以对用户信息、采集的数据、推荐算法参数等进行管理和配置。

Django旅游采集可视化推荐系统的目标是为用户提供便捷的旅游信息获取和个性化推荐,并通过可视化展示使用户更好地了解和选择适合自己的旅游产品。它可以帮助用户节省时间和精力,提高旅行的满意度。

4、核心代码

python">import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
import os
import json
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE','travel.settings')
django.setup()
from app.models import TravelInfo


def getUser_ratings():
    user_ratings = {}
    for travel in TravelInfo.objects.all():
        comments = json.loads(travel.comments)
        for com in comments:
            try:
                com['userId']
            except:
                continue
            if user_ratings.get(com['userId'],-1) == -1:
                user_ratings[com['userId']] = {travel.title:com['score']}
            else:
                user_ratings[com['userId']][travel.title] = com['score']
    return user_ratings

def user_bases_collaborative_filtering(user_id,user_ratings,top_n=20):
# def user_bases_collaborative_filtering(user_id, user_ratings, top_n=3):
    # 获取目标用户的评分数据
    target_user_ratings = user_ratings[user_id]

    # 初始化一个字段,用于保存其他用户与目标用户的相似度得分
    user_similarity_scores = {}

    # 将目标用户的评分转化为numpy数组
    target_user_ratings_list = np.array([
        rating for _ , rating in target_user_ratings.items()
    ])

    # 计算目标用户与其他用户之间的相似度得分
    for user,ratings in user_ratings.items():
        if user == user_id:
            continue
        # 将其他用户的评分转化为numpy数组
        user_ratings_list = np.array([ratings.get(item,0) for item in target_user_ratings])
        # 计算余弦相似度
        similarity_score = cosine_similarity([user_ratings_list],[target_user_ratings_list])[0][0]
        user_similarity_scores[user] = similarity_score

    # 对用户相似度得分进行降序排序
    sorted_similar_user = sorted(user_similarity_scores.items(),key=lambda x:x[1],reverse=True)

    # 选择 TOP N 个相似用户喜欢的景点 作为推荐结果
    recommended_items = set()
    for similar_user,_ in sorted_similar_user[:top_n]:
        recommended_items.update(user_ratings[similar_user].keys())

    # 过滤掉目标用户已经评分过的景点
    recommended_items = [item for item in recommended_items if item not in target_user_ratings]

    return recommended_items


if __name__ == '__main__':
    user_id =1
    user_ratings = getUser_ratings()
    recommended_items = user_bases_collaborative_filtering(user_id,user_ratings)

5、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻


http://www.niftyadmin.cn/n/5337483.html

相关文章

将项目上传到github

1.通过 Git Bash 进入到需要上传的项目所在的目录中,然后执行以下命令: git init 此时项目文件就会新建一个.git文件夹。 2.将项目所有文件添加到 Git 仓库中。执行以下命令: git add . 该命令会将项目中所有未被忽略的文件都添加到 Git…

matlab抽取与插值

什么是抽取? 我们假设一个数字信号 x ( n ) , n 1 , 2 , . . . , N x(n),n1,2,...,N x(n),n1,2,...,N共有 N N N个点,抽取就是每个几个点抽1个点,比如2倍抽取,那么抽取后的信号为 y ( n ) , y ( 1 ) x ( 1 ) , y ( 2 ) x ( 3 …

力扣:494. 目标和(动态规划)(01背包)

题目: 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 例如,nums [2, 1] ,可以在 2 之前添加 ‘’ ,在 1 之前添加…

gin中间件篇

1. 全局中间件 所有请求都经过此中间件 package mainimport ("fmt""time""github.com/gin-gonic/gin" )// 定义中间 func MiddleWare() gin.HandlerFunc {return func(c *gin.Context) {t : time.Now()fmt.Println("中间件开始执行了&quo…

JUC-Java内存模型JMM

JMM概述 Java Meory Model java内存模型。在不同的硬件和不同的操作系统上,对内存的访问方式是不一样的。这就造成了同一套java代码运行在不同的操作系统上会出问题。JMM就屏蔽掉硬件和操作系统的差异,增加java代码的可移植性。这是一方面。 另一方面JM…

利用wireshark lua扩展能力增加自定义解析器[注释解读版]

前言 Wireshark提供了lua扩展能力,可以定制一些Listner和Dissector,用于一些自定义的使用场景,例如: lua插件适应场景Listener报文统计、内容抽取等Dissector协议树解析,在wireshark中立等可看 已在以前的文档中积累了对于List…

【大数据分析与挖掘技术】Mahout推荐算法

目录 一、推荐的定义与评估 (一)推荐的定义 (二)推荐的评估 二、Mahout中的常见推荐算法 (一)基于用户的推荐算法 (二)基于物品的推荐算法 (三)基于S…

【AI】深度学习在图像编码中的应用(1)

视频行业在AI技术的推动下正在经历前所未有的变革,不仅传统的娱乐、媒体、教育等领域得到深度渗透,更在工业、安防、生产办公等垂直市场中开辟出众多新型应用场景。 一、新型视频应用场景 1. 工业制造 关键技术: 计算机视觉:用…