大数据旅游数据分析:基于Python旅游数据采集可视化分析推荐系统
文章目录基于Python旅游数据采集可视化分析推荐系统一、项目概述二、项目说明三、开发环境四、功能实现五、系统页面实现用户登录注册系统首页数据操作管理价格与销量分析旅游城市和景点等级分析旅游数据评分情况分析旅游数据评论情况分析旅游景点用户评论评分机器学习算法旅游景点及路线推荐Django系统后台管理六、结语源码文档等资料基于Python旅游数据采集可视化分析推荐系统一、项目概述在互联网时代各行各业的人们都在寻求增长点人们的日常生活越来越离不开互联网。以旅游信息为例线下大量的各种旅游信息基本只会出现在旅游会上但是现如今人们越来越重视时间成本所以越来越多的年轻人在网上查找自己想要查找的旅游就业信息。然而在互联网信息和海量数据源混合的情况下如何快速精确的找到自己想要的数据是一个值得探讨的问题。本系统主要针对解决获取旅游信息滞后、参加线下旅行社和人工检索时间成本高等问题运用网络爬虫信息技术设计思想实现了一个基于Python的旅游信息推荐系统。本系统以Python语言为基础使用 requests爬虫对去哪儿旅行网站信息源进行抓取,针对网页信息编写抽取规则对旅游信息进行必要的过滤和提取使用MySql对旅游信息进行数据存储。然后使用 Python 开源web框架 Django进行系统搭建基于旅游信息采用机器学习协同过滤推荐算法完成对用户的旅游信息推荐完成整个爬取以及数据检索到成功进行旅游推荐的网页端操作展示。二、项目说明基于python旅游采集数据分析可视化推荐系统是基于Django框架开发的一个旅游信息采集和推荐的应用。该系统通过爬虫技术从各个旅游网站抓取旅游信息并利用推荐算法对用户进行个性化推荐同时提供可视化展示界面。以下是该系统的主要功能和组成部分的介绍旅游信息采集系统通过编写爬虫程序定期从各大旅游网站抓取旅游景点、酒店、机票等相关信息包括价格、评价、位置等。这些采集到的数据会被保存到数据库中供后续使用。用户注册与登录用户可以注册自己的账号并通过登录来获取个性化推荐和享受更多功能。个性化推荐系统会根据用户的历史浏览记录、收藏记录以及其他行为数据利用推荐算法生成个性化推荐结果。推荐算法使用协同过滤、内容过滤方法根据用户的兴趣和偏好为其推荐最相关的旅游信息。可视化展示界面系统会将采集的旅游信息以可视化方式展示给用户包括地图标记、图片展示、价格对比等功能。用户可以通过地图选择感兴趣的地区查看该地区的旅游景点、酒店等信息。用户交互和反馈系统提供用户评价、评论和收藏等功能用户可以对自己的旅游经历进行评价同时也可以保存自己喜欢的旅游信息以便日后查看。后台管理系统提供一个后台管理界面管理员可以对用户信息、采集的数据、推荐算法参数等进行管理和配置。三、开发环境开发环境版本/工具PYTHON3.9.0开发工具PyCharm2021.2.1操作系统Windows 10内存要求16GB浏览器Firefox数据库MySQL 8.0.26数据库工具Navicat 15 for MySQL项目技术栈Python语言、Django框架、MySQL数据库、requests网络爬虫技术、机器学习算法、BootStrap、数据可视化四、功能实现爬取数据源——去哪儿旅行 https://www.qunar.com/系统爬虫部分核心代码def spiderMain(self,resp,province): respJSONresp.json()[data][sightList]forindex,travelinenumerate(respJSON): print(正在爬取该页第%s数据% str(index 1))time.sleep(2)detailAddresstravel[address]discounttravel[discount]shortIntrotravel[intro]pricetravel[qunarPrice]saleCounttravel[saleCount]try: leveltravel[star]景区except: level未评价titletravel[sightName]covertravel[sightImgURL]sightIdtravel[sightId]# 详情爬取detailUrlself.detailUrl % sightId respDetailXpathetree.HTML(self.send_request(detailUrl).text)scorerespDetailXpath.xpath(//span[idmp-description-commentscore]/span/text())ifnot score: score0star0else: scorescore[0]starint(float(score)*10)commentsTotalrespDetailXpath.xpath(//span[classmp-description-commentCount]/a/text())[0].replace(条评论,)detailIntrorespDetailXpath.xpath(//div[classmp-charact-intro]//p/text())[0]img_listrespDetailXpath.xpath(//div[classmp-description-image]/img/src)[:6]# 评论爬取commentSightIdrespDetailXpath.xpath(//div[classmp-tickets-new]/data-sightid)[0]commentsUrlself.commentUrl % commentSightId comments[]try: commentsListself.send_request(commentsUrl).json()[data][commentList]forcincommentsList:ifc[content]!用户未点评系统默认好评。:authorc[author]contentc[content]datec[date]scorec[score]comments.append({author:author,content:content,date:date,score:score})except: comments[]resultData[]这里代码创建了一个 spider 类的实例对象 spiderObj然后依次调用了该对象的 start() 方法和 save_to_sql() 方法。spiderObj.start()方法用于启动爬虫程序即开始采集数据。spiderObj.save_to_sql()方法用于将爬取到的数据保存到 MySQL 数据库中。if__name____main__:spiderObjspider()#spiderObj.init()spiderObj.start()#采集数据spiderObj.save_to_sql()#保存爬取的旅游数据到MySQL数据库爬取数据过程截图如下机器学习算法推荐部分是基于用户的协同过滤推荐算法用于根据用户的评分数据推荐其可能喜欢的其他景点。基于用户的协同过滤算法部分核心代码defuser_bases_collaborative_filtering(user_id,user_ratings,top_n20):# def user_bases_collaborative_filtering(user_id, user_ratings, top_n3):# 获取目标用户的评分数据target_user_ratingsuser_ratings[user_id]# 初始化一个字段用于保存其他用户与目标用户的相似度得分user_similarity_scores{}# 将目标用户的评分转化为numpy数组target_user_ratings_listnp.array([ratingfor_,ratingintarget_user_ratings.items()])# 计算目标用户与其他用户之间的相似度得分foruser,ratingsinuser_ratings.items():ifuseruser_id:continue# 将其他用户的评分转化为numpy数组user_ratings_listnp.array([ratings.get(item,0)foritemintarget_user_ratings])# 计算余弦相似度similarity_scorecosine_similarity([user_ratings_list],[target_user_ratings_list])[0][0]user_similarity_scores[user]similarity_score# 对用户相似度得分进行降序排序sorted_similar_usersorted(user_similarity_scores.items(),keylambdax:x[1],reverseTrue)# 选择 TOP N 个相似用户喜欢的景点 作为推荐结果recommended_itemsset()forsimilar_user,_insorted_similar_user[:top_n]:recommended_items.update(user_ratings[similar_user].keys())# 过滤掉目标用户已经评分过的景点recommended_items[itemforiteminrecommended_itemsifitemnotintarget_user_ratings]returnrecommended_itemsuser_bases_collaborative_filtering函数接受三个参数user_id: 目标用户的ID。user_ratings: 包含用户评分信息的字典其中键是用户ID值是包含景点及其评分的字典。top_n: 选择推荐结果的前N个景点默认为20。target_user_ratings user_ratings[user_id]获取目标用户的评分数据即目标用户对各个景点的评分。user_similarity_scores {}初始化一个空字典用于保存其他用户与目标用户的相似度得分。target_user_ratings_list np.array([...])将目标用户的评分转换为 NumPy 数组以便后续计算余弦相似度。遍历user_ratings中的每个用户计算目标用户与其他用户之间的相似度得分将其他用户的评分转化为 NumPy 数组。使用余弦相似度计算两个用户之间的相似度得分。将相似度得分存储在user_similarity_scores字典中。sorted_similar_user sorted(user_similarity_scores.items(),keylambda x:x[1],reverseTrue)对用户相似度得分进行降序排序得到一个包含用户ID和相似度得分的元组列表。recommended_items set()初始化一个集合用于保存推荐的景点。遍历排序后的相似用户列表选择前top_n个相似用户喜欢的景点将这些景点添加到recommended_items集合中。recommended_items [item for item in recommended_items if item not in target_user_ratings]过滤掉目标用户已经评分过的景点得到最终的推荐结果。返回recommended_items即推荐给目标用户的景点列表。这个函数接受目标用户ID、用户评分字典以及要返回的推荐结果数量作为参数。它计算目标用户与其他用户的相似度得分然后选择相似度最高的用户喜欢的景点作为推荐结果。– 获取目标用户的评分数据– 初始化一个字典用于保存其他用户与目标用户的相似度得分– 将目标用户的评分转化为numpy数组– 计算目标用户与其他用户之间的相似度得分余弦相似度– 对用户相似度得分进行降序排序– 选择TOP N个相似用户喜欢的景点作为推荐结果– 过滤掉目标用户已经评分过的景点五、系统页面实现启动项目在终端窗口输入命令这里我设置的端口在8091python manage.py runserver8091用户登录注册系统首页数据操作管理价格与销量分析旅游城市和景点等级分析旅游数据评分情况分析旅游数据评论情况分析旅游景点用户评论评分机器学习算法旅游景点及路线推荐Django系统后台管理http://127.0.0.1:8091/admin六、结语如需项目源码文档解析等资料/解析/商业合作/交流探讨~等可以评论留言/添加下面个人名片感谢各位的喜欢与支持后面有时间和精力也会分享更多优质内容喜欢的小伙伴可以点赞收藏加关注感谢各位的喜欢与支持源码文档等资料如需项目源码、部署文档、功能解析、二次开发、界面优化、项目定制、课程设计或毕业设计辅导可通过评论区、私信或个人主页方式交流。支持全栈系统开发与技术咨询。