基于回溯算法的旅行服务平台的设计与实现

144 篇文章 0 订阅
139 篇文章 0 订阅

基于回溯算法的旅行服务平台的设计与实现

摘要:随研究者对旅行服务平台的发展历程进行调研和分析,从预设阶段到自动爬取的时代,了解旅行服务领域的演变过程。近年来,列举较为有代表性、权威性的旅行服务软件和算法,分析在路线设计、成本效率等方面存在的不足之处。因此,需要对以往的旅行服务产品、算法、设计方案等进行反思和研究,使之能够适应新阶段的发展需求。这就是本论文研究的最基本目标。

旅行数据的来源多样,包括旅行者的个人信息、旅行景点的客流量、旅行路线的安排、旅行评价和评论等。这些数据的类型和结构各异,需要进行有效的整合和分析。基于回溯算法的旅行数据分析系统可以对这些数据进行处理和挖掘,从而为旅行行业提供全面、准确的数据支持。

本文设计了基于回溯算法的旅行网站后台分析系统,本系统的核心功能是通过爬取实海量旅行信息的原始数据,并通过回溯算法技术将原始数据存储、计算,并将分析的结果以可视化列表形式展示。

本论文的主要研究工作及取得的成果如下:

使用Flask等软件开发技术,设计并成功开发出了一套基于回溯算法的旅行网站后台软件系统,本后台系统的旅行信息数据源于旅行网站上爬取的旅行信息。对爬取到的原始数据进行数据清洗后存储到本地机器上,利用回溯算法分析技术,对采集的旅行数据进行深入挖掘。这包括识别游客的旅行偏好、需求、点赞、收藏等,以便更好地理解游客的行为特征和趋势。

针对旅行服务平台中的特定问题,提出基于回溯算法的解决方案。通过对旅行服务平台中相关数据进行建模和分析,从用户的视角优化算法或业务流程,为旅行服务领域提供有效的解决方案。

关键词:回溯算法;Python;景点推荐;旅行服务

Design and implementation of travel service platform based on backtracking algorithm

Abstract: With the research and analysis of the development process of travel service platform, from the preset stage to the era of automatic crawling, the evolution process of travel service field is understood. In recent years, more representative and authoritative travel service software and algorithms are listed to analyze the shortcomings in route design, cost efficiency and other aspects. Therefore, it is necessary to reflect and study the previous travel service products, algorithms, design schemes, etc., so that they can adapt to the development needs of the new stage. This is the most basic goal of this paper.

The sources of tourism data are various, including the personal information of tourists, the tourist flow of tourist attractions, the arrangement of tourist routes, tourism evaluation and comments. The types and structures of these data vary and require effective integration and analysis. The tourism data analysis system based on backtracking algorithm can process and mine these data, so as to provide comprehensive and accurate data support for the tourism industry.

This paper designs a back-office analysis system of tourism website based on backtracking algorithm. The core function of this system is to obtain the original data of massive tourism information by crawling, store and calculate the original data through backtracking algorithm technology, and display the analysis results in the form of a visual list.

The main research work and achievements of this paper are as follows:

By using Flask and other software development technology, a set of back-office software system of tourism website based on backtracking algorithm is designed and successfully developed. The tourism information data of this back-office system is derived from the tourism information crawled from the tourism website. After data cleaning, the original crawled data is stored on the local machine, and the backtracking algorithm is used to analyze the collected tourism data. This includes identifying tourist preferences, needs, likes, favorites, etc., in order to better understand tourist behavioral characteristics and trends.

Aiming at the specific problems in the travel service platform, a solution based on backtracking algorithm is proposed. By modeling and analyzing the relevant data in the travel service platform, algorithms or business processes can be optimized from the user's perspective to provide effective solutions for the travel service field.

Keywords: backtracking algorithm; Python; Travel recommendation; Travel service


1 绪论

1.1研究背景与现状

在如今的互联网时代下,景点旅行和个人游玩的也由传统的线下旅行会和校园旅行会转变为互联网旅行,目前市场上流行的旅行软件和网站种类繁多,旅行信息质量也参差不齐,相对比较知名且应用广泛的旅行信息发布平台有美团、连连周边游、58同城旅行等。在上述平台中每天都会发布海量的旅行信息和游玩的信息,然而由于网络信息存在一定的虛假性,这会给游玩的者带来一定的误导效果,导致网上游玩的过程的体验不佳。并且由于各平台之间的用户数据不互通,用户需要来回反复的进行注册登录操作,这一过程也会浪费大量时间和精力。

总而言之,从上述问题可以看出目前互联网旅行信息平台信息缺乏整合,用户在冗杂的旅行信息中难以筛选出有效的信息。本论文拟初步研究开发出一套完整的基于回溯算法平台的旅行平台信息分析系统,本系统主要用于对旅行信息和公司信息进行采集,通过回溯算法平台对数据进行存储和计算,将回溯算法分析结果以可视化形式给用户查询。这样,用户在使用本平台时只需一次注册操作,即可浏览各平台发布的旅行信息,并且可以根据用户的条件进行筛选,可极大的提高游玩的效率,给景点和游玩的者都带来一定的便利。

旅行业是全球经济活动中最重要的部分之一,也是世界上最大的行业之一。随着全球旅行市场的不断扩大和信息技术的快速发展,旅行数据呈现出爆炸式增长的趋势,旅行回溯算法应运而生。回溯算法技术可以从庞大的旅行数据中提取有价值的信息,为旅行行业提供更准确、更全面的决策支持。

目前,旅行推荐系统已成为旅行行业的研究热点。旅行推荐系统基于旅行回溯算法,通过分析用户历史行为、兴趣爱好、地理位置等多维度信息,为用户推荐个性化的旅行产品和服务,提高旅行体验和满意度。

在回溯算法旅行推荐系统的研究方面,国内外都有一定的进展。例如,在旅行景区推荐方面,研究者通过分析景区的历史游客数据、用户评价数据等,构建了基于用户偏好的景区推荐模型;在酒店推荐方面,研究者通过分析用户的住宿偏好、预算水平等,构建了个性化的酒店推荐系统。

同时,随着人工智能和深度学习技术的发展,旅行推荐系统也朝着更加智能化和精细化的方向发展。例如,结合语音识别、图像识别等技术,可以实现更加自然、便捷的旅行体验;利用深度学习技术,可以构建更加准确、高效的旅行推荐模型。

总之,回溯算法旅行推荐系统具有广阔的应用前景和研究价值。在未来,旅行行业将会越来越依赖回溯算法技术和旅行推荐系统,以提升旅行服务质量和用户满意度,推动旅行经济的可持续发展。

1.2 国内外研究现状

旅行推荐系统是一个涉及计算机科学、旅行管理、人工智能等多个领域的交叉研究领域,吸引了众多学者的关注。以下是旅行推荐系统在国内外研究现状的一些关键方面:

数据源和特征提取:国内外的研究者使用各种数据源来构建旅行推荐系统,包括用户历史行为数据、社交媒体数据、地理位置数据等。在特征提取方面,研究者通常将用户偏好、兴趣爱好、出行目的等作为重要特征进行分析。

推荐算法和模型:研究者在推荐算法和模型方面进行了大量的尝试和探索。传统的算法包括基于内容的推荐、协同过滤推荐等,而近年来,深度学习和强化学习等技术也被应用于旅行推荐系统中,例如使用神经网络模型进行推荐。

个性化推荐:个性化推荐是旅行推荐系统的核心目标之一。国内外的研究者都致力于提高个性化推荐的准确性和精度。一些研究者提出了基于用户偏好的推荐模型,例如通过分析用户历史行为和兴趣爱好,为用户推荐符合其个性化需求的旅行产品和服务。

实时推荐与在线学习:实时推荐是旅行推荐系统的发展方向之一。研究者积极探索如何利用实时数据来提供及时、个性化的推荐。此外,一些研究者还尝试将在线学习技术应用于旅行推荐系统中,以实现系统的自适应学习和优化。

用户体验和可解释性:除了推荐准确性,研究者也关注提高用户体验和可解释性。例如,一些研究者试图通过增加推荐结果的多样性和生动性,提高用户满意度。同时,也有一些工作着重于解释推荐结果的原因和依据,以增强用户对推荐系统的信任。

总体而言,国内外的研究者在旅行推荐系统领域取得了一定的进展,但仍面临一些挑战,如数据稀疏性、冷启动问题、推荐解释等。未来,旅行推荐系统研究将继续关注这些问题,并结合最新的技术发展,力求提供更准确、个性化、可解释的推荐服务。

1.3论文主要研究工作

本研究旨在基于回溯算法技术,结合旅行行业的实际需求,开展旅行推荐与个性化服务的分析与研究。对于推动旅行行业的技术创新和服务升级具有重要的意义。首先,通过对游客的旅行行为数据进行深入分析,可以帮助旅行企业更好地理解游客的需求和偏好,优化产品设计和服务流程,提升游客的满意度。其次,基于回溯算法旅行推荐系统可以为游客提供更加精准、个性化的服务,提高游客的旅行体验和忠诚度。最后,本研究可以为其他行业提供借鉴和参考,推动回溯算法技术在更多领域的应用和发展。

本系统首先需要提供给客户管理和使用的数据。本文使用基于Python语言的Scrapy框架的网络爬虫技术爬取用户使用率较高的旅行网站上实时的旅行信息以及公司信息作为数据来源,以此作为回溯算法分析的关键数据支撑。然后使用本地机器,生态圈中分布式运算模型词云框架对海量的旅行信息数据进行数据清洗,数据融合,计算,分析等流程,数据通过处理后持久化到MySQL数据库中存储。在计算出分析结果数据后,使用Flask等软件开发技术等框架完成基于回溯算法分析平台系统的后台的开发。

本文开发一套Web系统将市面上的旅行信息通过回溯算法技术进行存储、计算与智能化分析,将会给应聘人员提供巨大的好处。在提供旅行信息列表展示以及筛选功能的同时,还为用户提供个人推荐管理,注册修改等功能,这样做便使得该系统成为功能相对完整,业务逻辑清晰,可大幅度提高游玩的和旅行的效率。

2 技术总述

2.1 数据采集技术

Scrapy是目前较为成熟的爬虫技术框架,一般采用Python语言开发程序,Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

在本设计中,由于需要使用到旅行网站的原始数据,因此需要开发相应的网

络爬虫程序完成对旅行原始数据的采集,图2-1为爬取旅行网站的旅行数据的原理流程图。

图2-1 旅行网站爬虫原理流程图

2.2 Spark技术

Spark是Apache Software Foundation下的一个开源集群计算系统,最初是由加州伯克利大学AMP实验室开发。Spark使用Scala语言编写,其设计初衷是为了实现快速的回溯算法处理。与传统的Hadoop MapReduce相比,Spark采用了内存计算的方式,大大提升了处理速度,并且支持多种编程语言如Python、Scala、Python和R等。

图 2-2 Spark技术框架

在推荐系统中,Spark可以高效地处理大规模的用户行为数据和物品元数据。利用Spark的分布式计算能力,可以快速完成相似度计算、用户画像构建等任务,从而为用户生成个性化的推荐列表。Spark的流处理能力也使得实时推荐成为可能。

Hadoop是一个由Apache基金会所开发的分布式系统基础架构,主要解决海量数据的存储和海量数据的分析计算问题,广义上来说,HADOOP通常是指一个更广泛的概念,即HADOOP生态圈。

MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop

的数据分析应用”的核心框架; MapReduce核心功能是将用户编写的业务逻辑代

码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。|

Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。

图 2-3回溯算法集群机器

用户编写的程序分成三个部分: Mapper, Reducer, Driver(提交运行m程序的客户端)。

1.Mapper阶段

(1)用户自定义的Mapper要继承自己的父类

(2) Mapper 的输入数据是KV对的形式(KV 的类型可自定义)

(3) Mapper 中的业务逻辑写在map()方法中

(4) Mapper的输出数据是KV对的形式(KV 的类型可自定义)

(5) map()方法(maptask,进程) 对每一个<K, V>调用一次

2. Reducer 阶段

(1)用户自定义的Reducer要继承自己的父类

(2)Reducer的输入数据类型对应Mapper的输出数据类型,也是KV

(3) Reducer 的业务逻辑写在reduce()方法中

(4)Reducetask.进程对每一-组 相同k的<k, v>组调用一次reduce()方法

3.Driver 阶段

整个程序需要一个Drvier来进行提交,提交的是一个描述了各种必要信息的job对象。

2.3 推荐算法技术

推荐算法是旅行推荐系统的核心组成部分,它负责根据用户的历史行为、偏好和其他相关信息,为用户生成个性化的旅行推荐列表。在本系统中,我们采用了基于内容的推荐算法和协同过滤推荐算法相结合的方式,以提供更加精准和多样化的推荐结果。

在本系统中,我们将基于内容的推荐算法和协同过滤推荐算法相结合,以充分利用两种算法的优势。通过基于内容的推荐算法,我们可以为用户推荐与其历史行为数据相符合的商品;然后,通过协同过滤推荐算法,我们可以进一步挖掘用户的潜在兴趣和偏好,为用户推荐更加个性化和多样化的商品。通过这种方式,我们希望能够为用户提供更加精准、全面和高效的旅行推荐服务。

为了不断提高推荐算法的性能和准确度,我们还会不断引入新的算法和技术,如深度学习、强化学习等,以不断优化和完善我们的旅行推荐系统。

2.4 Flask技术

Flask是一个开放源代码Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Flask Reinhardt来命名的。2019年12月2日,Flask 3. 0发布 。

Flask是高水准的Python编程语言驱动的一个开源模型.视图,控制器风格的Web应用程序框架,它起源于开源社区。使用这种架构,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。这也正是OpenStack的Horizon组件采用这种架构进行设计的主要原因。另外,在Dj ango框架中,还包含许多功能强大的第三方插件,使得Flask具有较强的可扩展性 [2]  。Flask 项目源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。其工作流程主要可划分为以下几步:

1.用manage .py runserver 启动Flask服务器时就载入了在同一目录下的settings .py。该文件包含了项目中的配置信息,如前面讲的URLConf等,其中最重要的配置就是ROOT_URLCONF,它告诉Flask哪个Python模块应该用作本站的URLConf,默认的是urls .py

2.当访问url的时候,Flask会根据ROOT_URLCONF的设置来装载URLConf。

3.然后按顺序逐个匹配URLConf里的URLpatterns。如果找到则会调用相关联的视图函数,并把HttpRequest对象作为第一个参数(通常是request)

4.最后该view函数负责返回一个HttpResponse对象

2.5 本章小结

本章主要分析了系统开发过程中使用到的技术点和框架,通过研究这些技术的原理后,在本设计中加以应用,包括旅行信息采集的爬虫技术,数据持久化存储技术,以及基于Flask框架的系统后台技术,通过预研上述技术点并加以应用从而开发出基于回溯算法分析平台的旅行数据分析系统。

3 旅行数据系统设计

3.1 系统总体需求分析

图3-1 系统总体需求分析图

通过大数据分析,系统旨在为游客提供更准确、个性化的景点推荐结果,帮助游客选择更合适的景点路线,提高效率。系统将设计直观的用户界面和交互方式,让游客能够便捷地输入信息,了解推荐结果,并灵活地进行筛选和排序。通过精心设计的界面和功能,提升用户体验,使游客在选择景点路线时感到便利和满意。系统将收集和整理各个景点路线的相关信息可以在系统中获取全面而详细的信息,帮助他们更好地了解不同景点路线及其特点,做出更明智的选取决策。

3.2 旅行数据爬虫设计

数据采集和处理是系统的核心部分,需要根据需求来设计数据采集和处理方案。具体步骤如下:

1、确定数据来源:根据需求来确定数据来源,可以从各大旅行网站、政府数据发布平台等渠道获取数据。

2、设计数据采集方式:根据数据来源来设计数据采集方式,可以使用Python中的网络爬虫库(如Scrapy)来抓取数据。

3、数据清洗和转换:获取到的数据可能存在格式不一致、数据质量不高等问题,需要进行数据清洗、处理和转换,使其符合系统的数据分析需求。

这个项目我们的主要目的是爬取旅行网站网的旅行数据信息,包括旅行

位、景点名称和景点描述和规模等具体详情信息,下面描述本文爬虫工程主要设

计步骤。

  1. 创建项目

打开一个终端输入:scrapy startproiect python_ city _data,Scrapy框架将会在指定目录下生成整个工程框架。

(2)修改setting文件

如图3-1所示为修改后的setting文件主要内容,本设计主要修改三项内容,

第一个是不遵循机器人协议,第二个是下载间隙,由于下面的程序要下载多个页

面,所以需要给一个间隙(不给也可以,只是很容易被侦测到),第三个是请求

头,添加一个User-Agent。

表3-1 爬虫setting文件主要配置

BOT_NAME = 'python_city_data'
SPIDER_MODULES = ['python_city_data.spiders']
NEWSPIDER_MODULE = 'python_city_data.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'python_city_data (+http://www.yourdomain.com)'
#换伪造请求头
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
# Obey robots.txt rules
ROBOTSTXT_OBEY = False

(3)确认要提取的数据,item 项

item定义你要提取的内容(定义数据结构),比如我提取的内容为旅行信息的所在城市和景点旅行详情,于是需要在items类中新建对应的实体类,并需要设置相应的字段取出对应的数据。Field 方法实际上的做法是创建一个字典,给字典添加一个建,暂时不赋值,等待提取数据后再赋值。

表3-2 数据采集核心代码

class xiecheng_SeleniumMiddleware:

    def __init__(self):

        self.driver = creat_browser()

        self.winflag = 0

   # 释放资源

    def closemidd(self,request):

        if request.meta.get('closeid')==request.meta.get('id'):

            self.driver.quit()

    def process_request(self, request, spider):

        if request.meta.get('use_selenium'):

            self.driver.get(request.url)

        # 在这里使用Selenium进行页面交互,如点击按钮、填写表单等

            # 并等待页面加载完成

            # 获取页面内容

            # page_source = self.driver.page_source

            # 转换为字节格式,以避免一些编码错误

            # self.driver.implicitly_wait(5)  # 设置隐式等待时间为5秒

            try:

                # 显示等待确保能找到元素,显示等待3s

                # raise IgnoreRequest("强制取消")

                elements = WebDriverWait(self.driver, 3).until(

                    lambda x: x.find_elements(by=By.CSS_SELECTOR, value='.guide-main-item-bottom .title'))

                Similarity_score = []

                for element in elements:

                    title = element.text

                    oldtitle = request.url.split('=')[1]

                    # url 转码中文

                    oldtitle = urllib.parse.unquote(oldtitle)

                    Similarity_score.append(get_similarity(oldtitle, title))

                    # if Similarity_score[-1][4] >=50:

                    #     print(Similarity_score[-1])

                max_score = None

                max_index = None

                if Similarity_score!=[]:

                    for index, score in enumerate(Similarity_score):

                        if max_score == None or max_score[-1] < score[-1]:

                            max_score = score

                            max_index = index

                # 找到最匹配的选项

                # print('max', max_score)

                # print(max_index)

                # 若成功找到最匹配项,且各种匹配方式得分都大于50.点击该景点获取url

                if max_score != None and max_score[2] >= 50 and max_score[3] >= 50 and max_score[4] >= 50:

                    print('max', max_score)

                    elements[max_index].click()

                    print("click yes")

                    # self.winflag+=1

                    # thiswim=self.winflag

                    li = self.driver.window_handles  # 出现多个窗口,需要切换句柄,先获取句柄列表

                    if len(li)>=2:

                        self.driver.switch_to.window(li[-1])  # 切换句柄

                        # 显示等待热度数据,等待详情页显示完毕

                        hot = WebDriverWait(self.driver, 3).until(

                            lambda x: x.find_elements(by=By.CSS_SELECTOR, value='.heatView .heatScoreView .heatScoreText'))

                        # 将详情页信息发送到spider

                        body = to_bytes(self.driver.page_source, encoding='utf-8')

                        print('传入爬虫url')

                        print(self.driver.current_url)

                        # 修改中间件判断参数

                        request.meta['use_selenium'] = False

                        response = HtmlResponse(url=self.driver.current_url, body=body, encoding='utf-8',

                                                request=request)

                        # 关闭窗口句柄减一

                        self.driver.close()

                        # 切换至搜索页面窗口

                        if len(li) >= 1:

                            self.driver.switch_to.window(li[0])

                        # self.winflag-=1

                        self.closemidd(request)

                        return response

                else:

                    self.closemidd(request)

                    raise IgnoreRequest("未找到相似度合格的元素")

            except Exception as e:

                raise IgnoreRequest("中间件报错,或可能是显示等待的元素等待超时或是元素不存在。")

                spider.logger.error(f"Error: 中间件报错,{e}")

                # return None

        else:

            print('未进入携程的中间件,被转移')

            # 不使用 Selenium,直接返回 None,让 Scrapy 使用默认的下载器处理这个请求

            # pass

           return None

(4)开发爬虫程序,访问下载网页,使用Xpath语法提取内容

图3-3爬虫最终数据


4 数据存储

数据存储和管理是系统的另一个核心部分,需要根据需求来设计数据存储和管理方案。具体步骤如下:

1、确定数据存储方式:根据需求来确定数据存储方式,可以使用关系型数据库(如MySQL)或文档数据库(如MongoDB)来存储数据。

2、设计数据索引方式:根据数据查询需求来设计数据索引方式,可以使用数据库索引或全文索引等方式来进行数据检索。

3、数据备份和恢复:定期对数据进行备份,确保数据的可靠性和安全性。

4.1 数据库设计

数据库设计是系统设计中特别重要的一部分。数据库的好坏决定着整个系统的好坏,并且,在之后对数据库的系统维护、更新等功能中,数据库的设计对整个程序有着很大的影响。

根据功能模块的划分结果可知,本系统的用户由于使用账号和密码进行登录,因此在本系统中需要分别进行数据记录。首先根据如下个数据实体:用户、旅行景点等数据库表。

用户实体图4-4所示:

图4-4  用户实体图

景点实体图如图4-5所示:

图4-5  景点实体图

城市实体图如图4-6所示:

图4-6  城市实体图

点赞信息实体图如图4-7所示:

图4-7  点赞信息实体图

数据库表总共包含五个,具体信息如下:

(1) 用户信息表能够存储系统中的用户信息,用户信息表如表4-2所示。

表4-2  用户信息表

列名

数据类型

长度

主外键

注释

id

int

11

编号

username

varchar

45

名称

email

varchar

45

邮箱

password

varchar

45

密码

phone

varchar

45

电话

address

varchar

45

地址

(2)景点数据表 能够存储景点数据 如表4-2所示

表4-3  城市数据表

列名

数据类型

长度

主外键

注释

id

int

11

景点ID

Name

varchar

1

景点名称

Type

varchar

11

类型

tag

varchar

45

标签

area

varchar

45

地区

Describe

varchar

300

描述信息

(3)城市数据表存储城市信息 如表4-4所示。

表4-4  城市数据表

列名

数据类型

长度

主外键

注释

id

int

11

城市ID

name

varchar

50

城市名称

Tag

varchar

50

标签

Describe

varchar

200

描述

hot

char

20

城市热度

times

int

11

点击次数

(4)点赞数据表如表4-5所示

表4-5  点赞数据表

列名

数据类型

长度

主外键

注释

URL

varchar

50

URL

Start-lew

varchar

50

星级

Score

int

11

评分

Content

varchar

200

内容

Viewp-id

varchar

50

景点ID

User-id

varchar

50

用户ID

4.2 数据模型查询设计

3-2 数据库模型

class Case_item(models.Model):

    shiqu = models.CharField(verbose_name='城市',max_length=124)

    title = models.CharField(verbose_name='景点',max_length=124)

    details = models.CharField(verbose_name='详情页链接',max_length=424)

    pingfen = models.FloatField(verbose_name='评分')

    city = models.CharField(verbose_name='详细地址',max_length=424)

    heatdegree = models.FloatField(verbose_name='热度')

    img = models.CharField(verbose_name='图片链接',max_length=424)

    content = models.TextField(verbose_name='简介')

    openinghours = models.CharField(verbose_name='开放时间',max_length=424)

    count = models.FloatField(verbose_name='评论数量')

    def __str__(self):

        return self.title

    class Meta:

        verbose_name = u"数据表"

        verbose_name_plural = verbose_name

class PingLun(models.Model):

    case_item_id = models.ForeignKey(Case_item,on_delete=models.CASCADE)

    text = models.TextField(verbose_name='评论内容')

    class Meta:

        verbose_name = u"评论表"

        verbose_name_plural = verbose_name

class DianZhan(models.Model):

    case_item_id = models.ForeignKey(Case_item,on_delete=models.CASCADE)

    user_id = models.ForeignKey(Users,on_delete=models.CASCADE)

    class Meta:

        verbose_name = u"点赞表"

        verbose_name_plural = verbose_name

class JingDian(models.Model):

    name = models.CharField(verbose_name='景区名称', max_length=124)

    auth = models.CharField(verbose_name='评论者', max_length=124)

    pingfen = models.CharField(verbose_name='评分', max_length=124)

    text = models.TextField(verbose_name='评价文字')

    shijian = models.CharField(verbose_name='时间', max_length=124)

    laiyuan = models.CharField(verbose_name='数据来源', max_length=124)

    class Meta:

        verbose_name = u"景点表"

        verbose_name_plural = verbose_name

class SC_food(models.Model):

    景区id = models.CharField(verbose_name='景区id', max_length=524)

    景区名称 = models.CharField(verbose_name='景区名称', max_length=524)

    地区 = models.CharField(verbose_name='地区', max_length=524)

    评分 = models.CharField(verbose_name='评分', max_length=524)

    类型 = models.CharField(verbose_name='类型', max_length=524)

    景区url = models.CharField(verbose_name='景区url', max_length=524)

    景区imgUrl = models.CharField(verbose_name='景区imgUrl', max_length=524)

    评论条数 = models.CharField(verbose_name='评论条数', max_length=524)

    数据来源 = models.CharField(verbose_name='数据来源', max_length=524)

5 数据分析与预测

数据分析和可视化是系统的另一个重要功能,需要根据需求来设计数据分析和可视化方案。具体步骤如下:

1、确定数据分析方式:根据需求来确定数据分析方式,可以使用Python中的数据分析库(如Pandas、NumPy、SciPy等)进行数据分析。

2、设计数据可视化方式:根据数据分析结果来设计数据可视化方式,可以使用Python中的可视化库(如Matplotlib、Seaborn等)来进行数据可视化。

3、实现数据分析和可视化功能:根据需求来实现各种分析和可视化功能,如数据统计、数据挖掘、数据可视化等。

5.1 部署HDFS

(1)在master服务器上确定存在hadoop安装目录

[root@master ~]# ls  /usr/cstor/hadoop

(2)设置JDK安装目录

编辑文件“/usr/cstor/hadoop/etc/hadoop/hadoop-env.sh”,找到如下一行:

export JAVA_HOME=${JAVA_HOME}

将这行内容修改为:

export JAVA_HOME=/usr/local/jdk1.7.0_79/

(3) 指定HDFS主节点

编辑文件“/usr/cstor/hadoop/etc/hadoop/core-site.xml”,将如下内容嵌入此文件里最后两行的<configuration></configuration>标签之间:

<property>

  <name>hadoop.tmp.dir</name>

  <value>/usr/cstor/hadoop/cloud</value>

</property>

<property>

  <name>fs.defaultFS</name>

  <value>hdfs//master8020</value>

</property>

(4) 在master服务器上格式化主节点:

[root@master ~]# hdfs  namenode  -format

统一启动HDFS:

[root@master ~]#cd /usr/cstor/hadoop

[root@master hadoop]# sbin/start-dfs.sh

(5) 通过查看进程的方式验证HDFS启动成功

[root@master sbin]#  jps #jps查看java进程

若启动成功,会看到类似的如下信息:

6208 NameNode

6862 Jps

6462 SecondaryNameNode

图5-1  Hadoop启动成功效果图

5.2 部署Spark集群

(1) 在master上操作:确定存在spark。

[root@master ~]# ls /usr/cstor

spark/

[root@master ~]#

在master机上操作:进入/usr/cstor目录中。

[root@master ~]# cd /usr/cstor

[root@master cstor]#

进入配置文件目录/usr/cstor/spark/conf, 先拷贝并修改slave.templae为slave。

[root@master ~]# cd /usr/cstor/spark/conf

[root@master cstor]# cp  slaves.template slaves

(2) 在spark-conf.sh中加入JAVA_HOME。

[root@master cstor]# vim /usr/cstor/spark/sbin/spark-config.sh

加入以下内容

export JAVA_HOME=/usr/local/jdk1.7.0_79

(3) 启动Spark集群。

[root@master local]# /usr/cstor/spark/sbin/start-all.sh

图5-2  Spark启动成功效果图

5.3 景点推荐与数据分析

5.3.1景点推荐

使用了TF-IDF向量化景点描述,并通过计算余弦相似度来推荐与用户偏好相关的景点。在实际应用中,需要考虑更多因素,如用户行为数据、地理位置、季节等,以构建更加准确和个性化的推荐系旅行推荐系统代码如下表5-1所示:

图5-1 旅行景点推荐代码

import pandas as pdfrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.metrics.pairwise import linear_kernel

# 假设有一个包含景点信息的数据集,包括景点名称和描述

data = {

    '景点名称': ['景点A', '景点B', '景点C'],

    '描述': ['景点A的描述', '景点B的描述', '景点C的描述']

}

df = pd.DataFrame(data)

# 用户的偏好关键词,可以通过用户行为或问卷调查获取

user_preference = "山水风光"

# 使用TF-IDF向量化景点描述

tfidf = TfidfVectorizer(stop_words='chinese')

tfidf_matrix = tfidf.fit_transform(df['描述'])

# 计算景点之间的相似度

cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)

# 根据用户偏好计算推荐def recommend_places(user_preference, df, cosine_sim):

    idx = df.index[df['景点名称'] == user_preference][0]

    sim_scores = list(enumerate(cosine_sim[idx]))

    sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)

    sim_scores = sim_scores[1:4]  # 推荐3个最相关的景点

    place_indices = [i[0] for i in sim_scores]

    return df['景点名称'].iloc[place_indices]

recommendations = recommend_places(user_preference, df, cosine_sim)print("推荐的景点:")for place in recommendations:

    print(place)

5.3.2景点数据分析

用户登录时需要在登录界面输入用户名、密码进行身份认证,要求必须是表单认证、校验。其配置文件中配置了相应的Realm 类,当用户登录系统进行身份认证和权限控制时,比较用户输入的账号是否存在或者输入的密码与数据源中的密码是否匹配。旅行推荐系统的用户登录界面如下图所4-3所示:

图5-2 旅行景点数据分析代码

import pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns

# 读取旅行景点数据集

df = pd.read_csv('tourist_spots_data.csv')

# 查看数据集的基本信息print(df.info())

# 数据清洗:处理缺失值和异常值

df.dropna(subset=['评分'], inplace=True)

df = df[df['评分'] >= 0]  # 假设评分应该大于等于0

# 探索性数据分析# 统计评分分布

plt.figure(figsize=(10, 6))

sns.histplot(df['评分'], bins=10, kde=True)

plt.title('评分分布')

plt.xlabel('评分')

plt.ylabel('频数')

plt.show()

# 按地区统计景点数量

spots_by_region = df['地区'].value_counts()print(spots_by_region)

# 计算平均评分最高的前5个景点

top_rated_spots = df.groupby('景点名称')['评分'].mean().sort_values(ascending=False).head(5)print(top_rated_spots)

# 可视化不同地区景点数量

plt.figure(figsize=(12, 6))

sns.barplot(x=spots_by_region.index, y=spots_by_region.values)

plt.title('不同地区景点数量')

plt.xlabel('地区')

plt.ylabel('景点数量')

plt.xticks(rotation=45)

plt.show()

5.4 系统功能模块实现

5.4.1登录认证

主要由两部分组成,登录前的登录界面以及登录后的用户功能界面。登录界面,要求用户输入用户名和密码,当用户名和密码其中一个输入为空时,给出提示“用户名,密码不能为空”。获取用户名和密码后到数据库中查找,如果用户名存在,以及对应的密码正确,则登录成功,否则登录失败。登录失败后给出提示,并把焦点停在文本框中。登录成功后将该次会话的全局变量username设置为用户名。旅行推荐系统的用户登录界面如下图所4-3所示:

图4-3用户登录界面

登陆成功后,系统会成功跳转至首页,在首页中,位于上方的横栏是对本系统的基本信息的描述和欢迎登录效果,另外登录用户的用户名也会显示在首页中,可直接表明用户己成功登录。左侧则是本系统的导航菜单,可折叠展示,较为方便,右方则为欢迎页效果。提交景点信息列表后后台会自动生成景点信息列表列表。从session中取出该用户信息,前台发起请求,将对应的用户信息、jingdianpId参数信息从前台传递景点信息列表控制类里,匹配到create()方法,create()方法调用景点信息列表逻辑层的createjingdian()方法获取数据,调用本类的getCartjingdianItem()方法得到景点信息列表列表。旅行推荐系统景点分析界面如下图所4-4所示,有景点分析,景点推荐等功能:

图4-4旅行服务平台界面

5.4.2旅行信息推荐功能

旅行推荐管理功能是对旅行信息进行查询,删除等操作的功能集合,旅行信

息管理功能使用到了旅行信息表t_ lvyou ,旅行信息表t_lvyou 的主要数据字段,结构,类型及描述如下表4-2所示。

表4-2 旅行信息表字段

字段名称

数据类型

是否允许为空

描述

id

int

不允许

自增主键,唯一ID

cityname

String

允许

城市名称

company

String

允许

景点名称

company_size

String

允许

景点规模

education

String

允许

星级

experience

String

允许

评分

industry

String

允许

所属城市

recruiter

String

允许

所属省份

salary

String

允许

门票范围

旅行信息

推荐功能流程功能图如图3-6所示:

图4-6 旅行推荐管理功能流程图

 通过“旅行推荐管理”按钮,进入旅行推荐管理界面,用户可以看到旅行信息列表,例如:景点名称、所在城市、数量、旅行要求、门票待遇、旅行时间的详细信息。通过此界面,用户可以对旅行信息进行删除管理操作。

图4-7 旅行景点推荐界面

5.4.3旅行服务分析功能

数据可视化模块就是对我们采集和计算的分析结果的展示。数据分析模块的

数据进行一个精美而又直接的展示,我们采用大屏的方式进行展示,展示数据结

构分明,背景具有科技感,把相对复杂的、抽象的数据通过可视的、交互的方式

进行展示,从而形象直观地表达数据蕴含的信息和规律。旅行信息回溯算法看板界面如图4-7所示。

图4-8旅行服务分析界面

旅行信息回溯算法分析可视化开发的难点并不在于图表类型的多样化,而在于如何能在简单的一页之内让用户读懂旅行数据之间的层次与关联,这就关系到布局、色彩、图表、动效的综合运用。如排版布局应服务于业务,避免为展示而展示;配色一般以深色调为主,注重整体背景和单个视觉元素背景的一致性。本文使用Echarts中地图、线条等组件,将分析结果较为直观的展示给平台用户,使得用户能够简便的获取有效的信息。

5.5 本章小结

本章主要分析了基于回溯算法的旅行服务平台开发过程中使用到的技术和具体的实现步骤,这其中主要介绍了基于Flask框架的旅行推荐系统的搭建环境和开发步骤,包括程序中的一些数据库配置等。前端页面采用的是Echarts和HTML实现。

6 总结与展望

6.1 系统开发遇到的问题 

由于基于回溯算法旅行信息分析平台是由本人独立开发,因此在系统设计和业务逻辑方面更多地借鉴了目前市场上较为流行的框架和技术点,包括回溯算法技术,很多是不熟悉没接触过的,在开发过程中不断学习新知识。另外由于本人的时间和精力的原因,在系统开发过程中有很多地方可能并不能够完全尽如人意,还有许多需要补充的功能与模块。

6.2 总结与展望 

回溯算法旅行信息系统是在对相关管理范畴进行详细调研后,确定了系统涉及的领域,包括数据库设计、界面设计等,是一个具有实际应用意义的管理系统。根据本毕业设计要求,经过四个多月的设计与开发,回溯算法旅行信息系统基本开发完毕。其功能基本符合用户的需求。
    为保证有足够的技术能力去开发本系统,首先本人对开发过程中所用到的工

具和技术进行了认真地学习和研究,详细地钻研了基于Python的网络爬虫技术

以及Echarts, CSS, HTML等前端开发技术,同时还研究了回溯算法词云等。

从旅行数据回溯算法分析平台需求分析开始,到整体框架的设计以及各个详细功能的设计具体实现,最后基于回溯算法平台的旅行服务平台的基础架构和详细功能已经大致开发完毕,并将其部署在本地服务器当中运行,用户可以登录使用该系统进行旅行信息的筛选,同时查询回溯算法的分析结果。


参考文献

[1] 王家明,李湘.基于回溯算法分析的新疆智慧旅行网站的设计与实现[J].电脑知识与技术:学术版, 2021.

[2] 刘燕.基于回溯算法技术的智能旅行数据间的相关性分析及应用研究[J].林业调查规划, 2022(003):047.

[3] 吴开军,温锦婷,杨州,等.基于回溯算法文本分析的境外游客对粤港澳大湾区旅行形象感知研究[J].深圳社会科学, 2022, 5(1):11.

[4] 杨佳鹏,俎毓伟,纪佳琪,等.基于Spark框架的瀑布型融合旅行推荐系统[J].智能计算机与应用, 2023, 13(4):142-146.

[5] 闵冬梅,许正松,韩宸辰,等.基于回溯算法的亳州市国内旅行客源市场时空结构研究[J].  2021.DOI:10.3969/j.issn.1674-0874.2021.04.014.

[6] 张志雄.回溯算法助推"智慧"旅行发展研究[J].  2021(2019-7):34-40.

[7] 蔡绍博潘坛鲍玲玲蔡同建.基于回溯算法的文化旅行分析管理系统研究[J].科技创新与应用, 2022, 12(34):91-94.

[8] 翟娟,杜雨.基于回溯算法分析的智慧旅行模型系统[J].电子技术(上海), 2021(007):000.

[9] 吴开军温锦婷杨州郭莹莹.基于回溯算法文本分析的境外游客对粤港澳大湾区旅行形象感知研究[J].深圳社会科学, 2022, 5(1):14-24.

[10] 李伟.基于回溯算法挖掘技术的智慧旅行推荐系统的设计研究[J].现代计算机, 2021, 27(32):4.

[11]  Yang J , Zheng B , Chen Z .Optimization of Tourism Information Analysis System Based on Big Data Algorithm[J].Complexity, 2020, 2020.DOI:10.1155/2020/8841419.

[12]  Hao Y , Song N .Key Technologies and Discrete Dynamic Modeling Analysis of Online Travel Planning System Based on Big Data Scenario Aware Service[J].Discrete dynamics in nature and society, 2021(Pt.12):2021.

[13]  Jeong C S , Ryu K , Lee J Y ,et al.Deep Learning-based Tourism Recommendation System using Social Network Analysis[J].The Institute of Internet, Broadcasting and Communication, 2020.DOI:10.7236/IJIBC.2020.12.2.113.

谢  辞

时光飞逝,四年的本科生生涯即将结束。在这四年的时光里,有遇到难题时的手足无措,有获得专业进步时的开心。经历了许多的事情,自己也在不知不觉中成长了很多,心中充盈最多的仍是感激。

首先感谢我的导师,她严谨的治学态度深深地影响每位同学。我要感谢我的父母,他们总是默默的付出,在生活上给与我最大的帮助,在学习上也给我很多建议。

最后,由衷的感谢各位评审老师在百忙之中抽出时间来参与我的论文评审和答辨。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值