随着社会的发展,人们生活水平的提高,旅游逐渐成为人们生活中的重要活动,2019年国内旅游人数超过60亿人次。并且,旅游业已经成为了我国经济发展的一个重要支柱,近年来我国旅游业对GDP贡献值呈上升趋势。2019年,我国旅游业对GDP的贡献值接近11万亿元,占GDP总量十分之一。在2020年,由于这一年疫情的爆发使得全国旅游产业全面停止,对我国第一季度旅游业造成了重大冲击。但随着疫情的好转,旅游业逐渐复苏,在中秋节假日,旅游人数和旅游收入同比增长较大,增幅达到69.9%,在国庆节假日更是达到了79%。
旅游业的火爆加上信息时代的到来,产生了爆炸式的旅游信息,旅游者在选择旅游景点时,总会提前采用在线信息搜索的方式了解相关旅游信息,然后再制定出行计划。但大量信息产生的同时也附带了“信息过载”的问题,使得人们的需求不能得到很好的满足,那么就要思考,要采取什么方式来解决这一问题。
旅游推荐系统,针对目前旅游信息出现的问题,将满足用户的个性化需求作为创作点,主要为用户设计了旅游景点搜索查询功能、景点推荐功能,并且根据相关数据设计了可视化大屏。在数据处理阶段,利用Python爬虫技术对旅游数据进行相应采集,运用kettle对获取到的数据进行预处理,并将数据存储到MySQL数据库中进行管理。在推荐功能实现阶段,该系统设计了景点收藏等功能,通过记录用户的行为,利用协同过滤算法为用户进行旅游景点推荐,以达到更好的满足用户需求的目的。
在开发该系统之前要进行相应的可行性分析,分析该系统在制作过程中是否是可行的,该内容主要从技术、经济、社会、法律四个角度进行了分析。
该系统将Python作为开发语言,Python相对于其他编程语言入门简单,使用者更容易上手。使用Pycharm作为该系统的开发环境,该IDE支持Django框架,用户可通过该环境快速的使用Django框架进行web开发,整个系统实现的过程中,所涉及到的技术要求适中。
该系统为一个网站,因此它的经济性取决于开发时的成本。Python是一门开源的编程语言,以及使用的Django框架也是开源框架,整个系统的实现过程也是在开源的软件下进行实现的,因此在开发过程中涉及不到经费支出。
在当下多元的时代,人们的消费观念也开始发生变化,越来越多的人向高层次的行业进行消费,旅游作为人们日常生活中的一种休闲方式,因此得到了迅速的发展,加上近年来信息时代的到来,产生了爆炸式的旅游信息。旅游者在选择旅游景点时总会通过线上搜索的方式查阅相关信息,但目前旅游信息过多过杂,使得人们在查阅信息时不能得到很好的满足,那么就要思考要通过什么方式来解决这一问题。搭建该系统可以有效的解决这一问题,以达到用户、景区双方共赢的目的。
该系统涉及到的法律层面主要是在前期的数据获取阶段。在目前网络安全制度下,网络爬虫在一定的范围内是允许的。针对该系统要实现的功能进行相关数据的获取,对于一些敏感数据进行过滤,该系统使用的数据不触及任何敏感信息。因此,该系统在开发过程中不触碰任何法律问题。
需求分析是分析该系统的制作目的是否正确,设计出来的内容是否有用,是否能满足面向对象多方面的需求。该内容主要从用户以及旅游企业的角度进行了分析。
随着时代的进步,人们的思想也在发生着巨大的变化,目前人们在选择一件物品时总会进行多方面衡量,以达到自己的多元化需求。通过查阅资料和询问调查,了解到目前游客的实际需求,以便在功能设计时可以结合用户的需求进行设计,因此该系统的功能会符合使用者的需求。
对于旅游企业来说,他们的需求就是,如何为用户提供更好的服务以满足游客的需求,从而使得自己得到更好的发展。该系统在设计过程中会更具人性化,功能更个性化,因此会吸引越来越多的人使用,从而带动目前景区乃至旅游市场更好的发展。
从可行性分析以及需求分析的结果来看,开发该旅游推荐系统是可行的,因此要结合各个对象的需求对系统的整体内容进行设计。
该系统的功能主要分为三大模块,即数据管理模块、个性化功能模块、智慧推荐模块。
数据管理模块主要包含两方面内容,旅游数据管理,利用Python爬虫爬取到各地景点数据,使用kettle工具进行预处理后存储到MySQL数据库中,用来供此系统使用;用户数据管理,用户通过注册账号将个人信息存入到数据库。
个性化功能模块主要包含四方面内容,猜你喜欢,为用户随机推荐各地区的旅游景点;发表评论,用户可对每个旅游景点进行评价,并且支持打分,可供其他用户在浏览旅游景点时进行参考;指定搜索,方便用户可以快速的查询到自己想要找的旅游景点或城市;我的收藏,在浏览旅游景点时,可将喜欢的景点添加到收藏模块中,方便用户后期的选择,也为推荐功能做铺垫。
智慧推荐模块主要包含四方面内容,热门景点推荐,为用户提供一些比较热门的旅游景点;基于用户行为推荐,根据用户收藏等行为,采用合理的推荐算法为用户推荐感兴趣的旅游景点;途径景点推荐,为用户推荐一些比较热门的旅游路线;乘车方式推荐,根据用户所在地与目的地,为用户设计最优路径,从而使得用户可以更好的制定乘车方案。
系统整个功能模块如下图4.1所示。
图4.1 系统功能模块图
在系统还没有真正搭建之前,设计数据库的表是十分重要的,设计的是否合理直接决定系统在实现时的难易程度,并且还影响着系统最终功能效果的好坏。在设计表的分析过程中,要结合自己系统的功能,设计好各个实体对象所应具备的属性,并且要关联好各个实体对象之间的关系,所以数据库的设计实质就是把用户需求进行全面的分析,根据需求对实体对象的属性进行确定。
下图4.2为该旅游推荐系统的E-R图。
图4.2 旅游推荐系统E-R图
(1)login表
表4.1 login表
序号 | 字段名 | 字段类型 | 长度 | 不是null | 是否主键 |
1 | id | int | 11 | 是 | 是 |
2 | password | varchar | 30 | 是 | 否 |
3 | last_login | datetime | 6 | 否 | 否 |
4 | username | varchar | 40 | 是 | 否 |
5 | | varchar | 30 | 是 | 否 |
6 | date_joined | datetime | 6 | 是 | 否 |
如上表4.1所示,主要用来存储用户的登陆信息。包含的字段有id,用来区分用户;password,用来记录登陆密码;last_login,用来记录最后的登陆时间,username用来记录用户名;email,用来存储注册邮箱信息;date_joined,用来记录注册时间。
(2)tour_view表
表4.2 tour_view表
序号 | 字段名 | 字段类型 | 长度 | 不是null | 是否主键 |
1 | id | varchar | 40 | 是 | 是 |
2 | view_name | varchar | 25 | 是 | 否 |
3 | area | varchar | 20 | 否 | 否 |
4 | province | varchar | 20 | 是 | 否 |
5 | city | varchar | 20 | 是 | 否 |
6 | view_desc | longtext | 是 | 否 | |
7 | view_rate | varchar | 5 | 是 | 否 |
8 | advise_time | varchar | 20 | 是 | 否 |
如上表4.2所示,主要用来存储爬取到的旅游数据。包含的字段有id,用来区分景点;view_name,用来存储景点名称;area,用来存储地理位置;province,用来存储所在省份;city,用来存储所在城市;view_desc,用来存储景点描述; view_rate,用来存储评分;advise_time,用来存储建议游玩时间。
(3)tour_score表
表4.3 tour_score表
序号 | 字段名 | 字段类型 | 长度 | 不是null | 是否主键 |
1 | id | int | 11 | 是 | 是 |
2 | rate | int | 11 | 是 | 否 |
3 | comment_date | datetime | 6 | 是 | 否 |
4 | user_id | int | 11 | 是 | 否 |
5 | view_id | varchar | 40 | 是 | 否 |
如上表4.3所示,主要用来存储该系统用户对景点的评分数据。包含的字段有id,用来区分不同用户的评分;rate,用来存储分数;comment_date,用来记录评分时间; user_id,用来存储评分者id;view_id,用来存储评分景区id。
(4)tour_comment表
表4.4 tour_comment表
序号 | 字段名 | 字段类型 | 长度 | 不是null | 是否主键 |
1 | id | int | 11 | 是 | 是 |
2 | comment | varchar | 255 | 是 | 否 |
3 | comment_date | datetime | 6 | 是 | 否 |
4 | user_id | int | 11 | 是 | 否 |
5 | view_id | varchar | 40 | 是 | 否 |
如上表4.4所示,主要用来存储该系统用户对景点的评论内容。包含的字段有id,用来区分不同用户的评论;comment,用来存储评论内容;comment_date,用来记录评论时间;user_id,用来存储评论者id;view_id,用来存储评论景区id。
(5)tour_collection表
表4.5 tour_collection表
序号 | 字段名 | 字段类型 | 长度 | 不是null | 是否主键 |
1 | id | int | 11 | 是 | 是 |
2 | comment_date | datetime | 6 | 是 | 否 |
3 | user_id | int | 11 | 是 | 否 |
4 | view_id | varchar | 40 | 是 | 否 |
如上表4.5所示,主要用来存储用户收藏的旅游景点数据。包含的字段有id,用来区分不同用户的收藏内容;comment_date,用来记录收藏时间;user_id,用来记录收藏者id;view_id,用来记录收藏景区id。
(6)tour_extuser表
表4.6 tour_extuser表
序号 | 字段名 | 字段类型 | 长度 | 不是null | 是否主键 |
1 | number | int | 11 | 是 | 是 |
2 | sex | varchar | 2 | 否 | 否 |
3 | register_date | datetime | 6 | 是 | 否 |
4 | user_id | int | 11 | 是 | 否 |
5 | address | varchar | 30 | 否 | 否 |
6 | age | int | 11 | 否 | 否 |
如上表4.6所示,用来存储用户信息。包含的字段有number,用来区分用户;sex,用来存储用户性别; register_date,用来记录注册时间;user_id,用来记录使用者id;address,用来存储用户地址;age,用来存储用户年龄。
本章内容首先从技术、经济、社会、法律方面对系统设计的可行性进行分析,并且从用户、企业的角度进行需求分析,判断该系统的实现是可行的;接着论述了该系统的各个功能模块,主要包含三大功能模块;最后通过构思该系统的E-R图,来对该系统使用到的数据库表进行合理设计。
数据处理覆盖了该系统的整个搭建流程,主要分为五个阶段。数据采集阶段,通过python爬虫爬取旅游网站来获得该系统的数据集;数据预处理阶段,对于获取到的数据集进行一些处理,例如对缺失值、重复值的处理;数据存储阶段,将处理后的数据集存储到MySQL数据中来实现管理操作;数据分析阶段,通过记录用户的行为,利用基于用户的协同过滤算法为目标用户推荐景点;数据可视化阶段,针对获取到的数据利用echarts技术设计旅游信息可视化大屏,将数据信息清晰直观地展示给用户。
数据采集是搭建该系统的基础,比较重要。目前爬虫技术的兴起,大部分网站都会有自己独特的反爬机制,这就使得在爬取数据时会遇到很多困难。针对这一问题,在爬取数据时采用代理IP的方法,利用bs4爬虫技术解析网页,通过对相关平台的爬取,获得对该系统有用的数据进行爬取。下图5.1是该系统爬虫代码的部分截图。
图5.1爬虫部分代码图
此次爬取到的内容主要包括景点名称,景点介绍,景点评分,所在区域,所在省份,所在城市,建议游玩时间,将爬取到数据首先存放在Excel表格中。
爬取到的这些数据会存在很多问题,例如会出现数据缺失、数据错误、数据多余等问题。因此,这就需要我们在使用这些数据之前要进行一些处理,将数据规范化。
数据预处理的好坏直接影响着该系统数据的准确性,因此这一步也非常重要。在数据能用于该系统的前提下,通过这一方式为数据分析做准备,可以有效的提高分析结果的准确性,这是数据预处理的重要目的。数据预处理主要分为以下四类,数据清理的目的是对异常数据进行处理,例如处理对该系统无用或造成干扰的数据;数据集成的目的是通过拼接技术扩大数据集;数据变化的目的是对数据进行规范化处理以达到使用方便的效果;数据规约的目的是通过一些处理方法减少冗余信息,提高数据整体的可靠性。下图5.2是该系统利用kettle工具对爬取到的数据进行数据预处理的操作图。
图5.2 kettle数据处理图
将处理后的数据直接通过kettle工具传入到MySQL数据库的指定表中,用于该系统前后端交互使用,表的具体字段前文有所说明。
该系统设计了收藏景点功能,其作用一方面是方便用户再次查看自己感兴趣的景点,另一方面也为用户推荐景点功能做基础。该系统的推荐功能是利用基于用户行为的协同过滤算法进行实现的,用户每次的收藏行为都会记录在数据库中,当目标用户进行自己的收藏行为时,系统就会利用相应的计算方法,在所有用户中寻找到与他最为相似的一类用户,提取这些用户收藏的全部景点,并且对目标用户收藏的景点进行剔除,计算用户对每一个候选景点的感兴趣程度,最终为用户推荐几个最为感兴趣的旅游景点。下图5.3是基于用户行为的协同过滤算法部分代码截图。
图5.3 基于用户行为的协同过滤算法代码图
在如今的信息时代中,数据本身蕴含着巨大的价值,但是这些价值更多时候是隐藏起来的,如果要让这些数据充分的发挥出作用,那么还需要采用适当的方法进行实现,数据可视化这方式在此发挥着重要的作用。数据可视化是采用图表的形式来为用户展示数据,它的使用可以让用户们更准确的了解到数据。
该系统特意为用户制作了旅游信息可视化大屏,让用户可以直观的了解到目前哪些旅游城市最为热门,哪些旅游类型是人们比较青睐的,哪些旅游景点深受游客们的喜爱,全方面为用户展示近期旅游景点的情况,以便用户在选择旅游景点时做出更好的决定。下图5.4是该可视化大屏部分代码截图。
图5.4 可视化大屏部分代码图
本章节结合该系统的整个制作流程,从数据处理的五个方面分别进行了详细的叙述,将整个系统制作流程清晰的展示出来。
该系统前端功能设计丰富,可以将划分为三大功能模块,即登陆注册模块、个性化功能模块、推荐功能模块。
该模块主要包含注册功能、登陆功能、修改信息功能。此模块是使用该系统的通行证,只有进行登陆注册操作才能体验到该系统的功能。
用户在初次使用该系统时要进行账号注册,注册的信息包括用户名称、邮箱、密码。通过设置自己的名称,系统会根据用户独有的名称设置ID,这样在使用该系统时,用户的行为数据会存放到自己的ID下。具体功能如下图6.1所示。
图6.1 注册功能图
用户只有通过使用自己注册过的信息进行系统登陆,才能进入到该系统体验其功能。具体功能如下图6.2所示。
图6.2登陆功能图
用户进入到该系统后可以完善或修改自己的个人信息。具体功能如下图6.3所示。
图6.3 更改信息功能图
为了丰富该系统的功能,并更好的方便用户使用,因此设计了此模块,该模块主要包含搜索旅游信息、收藏旅游景点、景点评论功能。
此功能的目的是用于筛选旅游景点,使用者可通过图6.4所展示的搜索框,搜索自己想要了解的旅游景点或城市。例如搜索城市大连,系统就会为用户展示大连这所城市所有的旅游景点,具体效果如图6.5所示。
图6.4 搜索功能主页图
图6.5 搜索功能效果图
用户在查看旅游景点时,可以将喜爱的景点添加至我的收藏中,该功能的作用是一方面方便用户再次查看;另一方面用户收藏的景点也会存储到数据库中,用户这一行为在为推荐功能做基础。具体效果如下图6.6所示。
图6.6 收藏效果图
用户在浏览景点时,可以发表自己的观点,并且可以为该景点进行打分,其他用户在使用该系统时可以根据评论和评分来决定是否选择这一景点。具体功能如下图6.7所示。
图6.7 评论功能图
此模块是该系统的核心内容,主要包含热门景点推荐功能、为你推荐功能、猜你喜欢功能、乘车推荐功能、景点推荐功能、热门路线推荐功能。
通过设定某一省份,为用户推荐该省份评分靠前的热门景区,此块设置的省份为沈阳。具体效果如下图6.8所示。
图6.8 热门推荐效果图
该功能是基于用户行为的协同过滤算法实现的,当用户有收藏行为时,系统会寻找与该用户比较相似的其他用户,计算该用户对候选景点的感兴趣程度,最后为目标用户进行景点推荐;当用户没有收藏行为时,此处推荐的内容为随机推荐的景点。具体效果如下图6.9所示。
图6.9 为你推荐效果图
用户可通过图6.11所展示的功能主页设定出发点和目的地,从而为用户进行乘车路线推荐。此功能的原理是使用各地的高铁票价矩阵,计算两地之间的票价,选择票价较低、行程较短的乘车路线进行推荐。例如出发地填写为天津,目的地填写为重庆,其效果展示如下图6.12所示。
图6.11 乘车路线推荐主页图
图6.12 乘车路线推荐效果图
此功能是结合用户浏览行为进行推荐的,推荐的景点是与浏览内容同一城市的其他旅游景点。具体效果如下图6.13所示。
图6.13 景点推荐效果图
此功能是为用户展示比较热门的旅游路线,主要包括旅游所需时间、途径城市。具体效果如下图6.14所示。
图6.14 热门路线效果图
为了让用户可以更直观的了解到近期旅游景点数据,因此制作了旅游数据可视化大屏。该大屏的数据来源于人民网,展示的内容为2021年五一期间各省份招待游客人数、热门景区类型以及十大热门景点,通过此大屏让用户可以更好的选择要去的城市或景点。具体效果如下图6.15所示。
图6.15 旅游可视化大屏