大數據旅游數據分析:基于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、數據可視化

四、功能實現

系統爬蟲部分核心代碼

  def spiderMain(self,resp,province):respJSON = resp.json()['data']['sightList']for index,travel in enumerate(respJSON):print('正在爬取該頁第%s數據' % str(index + 1))time.sleep(2)detailAddress = travel['address']discount = travel['discount']shortIntro = travel['intro']price = travel['qunarPrice']saleCount = travel['saleCount']try:level = travel['star'] + '景區'except:level = '未評價'title = travel['sightName']cover = travel['sightImgURL']sightId = travel['sightId']# ================================= 詳情爬取detailUrl = self.detailUrl % sightIdrespDetailXpath = etree.HTML(self.send_request(detailUrl).text)score = respDetailXpath.xpath('//span[@id="mp-description-commentscore"]/span/text()')if not score:score = 0star = 0else:score = score[0]star = int(float(score)*10)commentsTotal = respDetailXpath.xpath('//span[@class="mp-description-commentCount"]/a/text()')[0].replace('條評論','')detailIntro = respDetailXpath.xpath('//div[@class="mp-charact-intro"]//p/text()')[0]img_list = respDetailXpath.xpath('//div[@class="mp-description-image"]/img/@src')[:6]# ================================= 評論爬取commentSightId = respDetailXpath.xpath('//div[@class="mp-tickets-new"]/@data-sightid')[0]commentsUrl = self.commentUrl % commentSightIdcomments = []try:commentsList = self.send_request(commentsUrl).json()['data']['commentList']for c in commentsList:if c['content'] != '用戶未點評,系統默認好評。':author = c['author']content = c['content']date = c['date']score = c['score']comments.append({'author': author,'content': content,'date': date,'score': score})except:comments = []resultData = []

在這里插入圖片描述

基于用戶的協同過濾推薦算法,用于根據用戶的評分數據推薦其可能喜歡的其他景點。

基于用戶的協同過濾算法部分核心代碼:

在這里插入圖片描述

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
  1. user_bases_collaborative_filtering 函數接受三個參數:
    • user_id: 目標用戶的ID。
    • user_ratings: 包含用戶評分信息的字典,其中鍵是用戶ID,值是包含景點及其評分的字典。
    • top_n: 選擇推薦結果的前N個景點,默認為20。
  2. target_user_ratings = user_ratings[user_id]:獲取目標用戶的評分數據,即目標用戶對各個景點的評分。
  3. user_similarity_scores = {}:初始化一個空字典,用于保存其他用戶與目標用戶的相似度得分。
  4. target_user_ratings_list = np.array([...]):將目標用戶的評分轉換為 NumPy 數組,以便后續計算余弦相似度。
  5. 遍歷 user_ratings 中的每個用戶,計算目標用戶與其他用戶之間的相似度得分:
    • 將其他用戶的評分轉化為 NumPy 數組。
    • 使用余弦相似度計算兩個用戶之間的相似度得分。
    • 將相似度得分存儲在 user_similarity_scores 字典中。
  6. sorted_similar_user = sorted(user_similarity_scores.items(),key=lambda x:x[1],reverse=True):對用戶相似度得分進行降序排序,得到一個包含用戶ID和相似度得分的元組列表。
  7. recommended_items = set():初始化一個集合,用于保存推薦的景點。
  8. 遍歷排序后的相似用戶列表,選擇前 top_n 個相似用戶喜歡的景點,將這些景點添加到 recommended_items 集合中。
  9. recommended_items = [item for item in recommended_items if item not in target_user_ratings]:過濾掉目標用戶已經評分過的景點,得到最終的推薦結果。
  10. 返回 recommended_items,即推薦給目標用戶的景點列表。

這個函數接受目標用戶ID、用戶評分字典以及要返回的推薦結果數量作為參數。它計算目標用戶與其他用戶的相似度得分,然后選擇相似度最高的用戶喜歡的景點作為推薦結果。

– 獲取目標用戶的評分數據

– 初始化一個字典,用于保存其他用戶與目標用戶的相似度得分

– 將目標用戶的評分轉化為numpy數組

– 計算目標用戶與其他用戶之間的相似度得分(余弦相似度)

– 對用戶相似度得分進行降序排序

– 選擇TOP N個相似用戶喜歡的景點作為推薦結果

– 過濾掉目標用戶已經評分過的景點

五、系統頁面實現

啟動項目,在終端窗口輸入命令,這里我設置的端口在8091:

python manage.py runserver 8091

在這里插入圖片描述

用戶登錄注冊

在這里插入圖片描述

系統首頁

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

數據操作管理

在這里插入圖片描述

價格與銷量分析

在這里插入圖片描述

旅游城市和景點等級分析

在這里插入圖片描述

旅游數據評分情況分析

在這里插入圖片描述

旅游數據評論情況分析

在這里插入圖片描述

旅游景點推薦

在這里插入圖片描述

Django系統后臺管理

http://127.0.0.1:8091/admin

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

六、結語

基于python旅游采集數據分析可視化推薦系統的目標是為用戶提供便捷的旅游信息獲取和個性化推薦,并通過可視化展示使用戶更好地了解和選擇適合自己的旅游產品。它可以幫助用戶節省時間和精力,提高旅行的滿意度。

需項目資料/商業合作/交流探討等可以添加下面個人名片,后續有時間會持續更新更多優質內容,感謝各位的喜歡與支持!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/710891.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/710891.shtml
英文地址,請注明出處:http://en.pswp.cn/news/710891.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

centos7 安裝python3.8運行導入ssl報錯,親測驗證有效版

centos安裝python3.7時遇到如下問題,查閱知需要的openssl版本最低為1.0.2,但是centos 默認的為1.0.1,所以需要重新更新openssl import _ssl # if we cant import it, let the error propagate ImportError: No module named _ssl1、安…

【前端早早聊直播回顧】Harmony 時代的跨端方案

上周末,凡泰極客CTO - 徐鵬受邀出席「前端早早聊」直播活動,并以【跨端新挑戰-鴻蒙時代的跨端】為主題進行演講。 摘取部分分享實錄: 終端系統的數量和種類不斷增長,開發者面臨著多平臺開發的挑戰。以往開發者一般只需要維護iOS、…

2024年3月阿里云服務器大規模價格下調后優惠折扣表

阿里云服務器ECS等核心產品價格全線下調,最高幅度達55%,2024年3月1日生效,針對ECS部分在售產品的官網折扣價、ECS計算型節省計劃進行調整,生效后,基于官網折扣價的新購和續費,將按照新的價格進行計費。阿里…

程序媛的mac修煉手冊-- Node.js入門篇

最近因為參與一個微信小程序的開發,開始摸索JavaScript。期間,需要基于Node.js安裝微信開發工具的依賴項,所以又順帶學習了Node.js的包管理工具npm(Node Package Manager)。不過,之前看到國外的全棧大佬??…

flutter學習(一) 安裝以及配置環境

首先需要下載flutter,然后解壓 然后配置環境變量,配置到bin目錄就行 配置完之后cmd運行flutter doctor 你就會發現,都是錯 此時腦海里響起,臥槽,怎么回事,咋辦 別著急,我教你。。。 問題 這…

RK3568 RK809電源管理 RTC功能使能 定時喚醒

概述 RK809 是一款高性能 PMIC,RK809 集成 5 個大電流 DCDC、9 個 LDO、2 個 開關SWITCH、 1個 RTC、1個 高性能CODEC、可調上電時序等功能。 系統中各路電源總體分為兩種:DCDC 和 LDO。兩種電源的總體特性如下(詳細資料請自行搜索): DCDC:輸入輸出壓差大時,效率高,但…

python學習筆記 - 標準庫常量

Python 中有一些內置的常量,它們是一些特殊的值,通常不會改變。以下是其中一些常見的內置常量及其詳細解釋以及使用示例: True: 表示布爾值真。給 True 賦值是非法的并會引發 SyntaxError。 x True print(x) # 輸出&#xff1a…

內網穿透 nas/樹莓派+ipv4服務器 (ipv6)

nas 1.有個服務器 2.有個nas https://github.com/snail007/goproxy/blob/master/README_ZH.md https://github.com/snail007/proxy_admin_free/blob/master/README_ZH.md 2個官網一個是程序,一個是網站 手冊 https://snail007.host900.com/goproxy/manual/zh/#/?i…

Unity3D Shader事項法線貼圖功能詳解

前言 Unity3D它提供了豐富的功能和工具,使開發人員能夠輕松創建出色的游戲和應用程序。其中Shader是Unity3D中非常重要的一部分,它可以幫助開發人員實現各種視覺效果,包括法線貼圖功能。 對惹,這里有一個游戲開發交流小組&#…

rocketmq+rocket-dashboard win10安裝部署+注冊為Windows服務

1.1 首先去官網下載zip包 選擇自己需要的版本 下載 | RocketMQ 1.2 、下載后,解壓到指定目錄 1.3、配置RocketMQ環境變量 注意,看對應的版本需要jdk版本 1.4、啟動mqnameserver 進入bin目錄下,雙擊啟動mqnamesrv.cmd 啟動后,…

灰度圖像轉化為黑白圖像、轉化圖像為一位位深度的圖像(僅保留黑色)

/// <summary> /// 灰度圖像處理 /// </summary> public class PicGray {/// <summary>/// 獲取pic圖像對應的黑白圖像/// </summary>/// <param name"pic"></param>/// <param name"NumGray">像素灰度值</p…

webpack5基礎--02_基本配置( 5 大核心概念)

基本配置 在開始使用 Webpack 之前&#xff0c;我們需要對 Webpack 的配置有一定的認識。 5 大核心概念 entry&#xff08;入口&#xff09; 指示 Webpack 從哪個文件開始打包 output&#xff08;輸出&#xff09; 指示 Webpack 打包完的文件輸出到哪里去&#xff0c;如何…

Vue項目構建時遇到的問題

Vue項目構建時遇到的問題與上線相關問題 項目構建遇到的問題構建指令關于JavaScript文件無法識別的問題關于element-plus組件庫中的模塊顯示找不到的問題關于路由懶加載時組件路徑報錯問題關于項目靜態資源基準路徑的設置關于路由模式的問題 關于nginx服務器的使用 項目構建遇到…

事物管理(黑馬學習筆記)

事物回顧 在數據庫階段我們已學習過事務了&#xff0c;我們講到&#xff1a; 事物是一組操作的集合&#xff0c;它是一個不可分割的工作單位。事務會把所有的操作作為一個整體&#xff0c;一起向數據庫提交或者是撤銷操作請求。所以這組操作要么同時成功&#xff0c;要么同時…

java實現根據 表索引 批量新增或更新數據信息

目的 通過數據庫名、表名實現動態添加活更新數據。添加或更新由唯一索引判斷。 實現 思路 查詢數據庫表的唯一索引-CSDN博客 根據數據庫表名動態查詢表字段-CSDN博客 達夢數據庫根據唯一索引批量新增或更新數據-CSDN博客 將數據轉換為sql語句需要的格式 完善代碼&#xff0c;實…

maven常用打包命令

1.背景 2.代碼 1 mvn常用命令 一般情況下對于一個maven項目&#xff0c;cd切換到當前項目路徑下&#xff0c;執行如下示例命令即可對項目進行打包。 mvn clean install mvn -U clean package -Dmaven.test.skiptrue mvn clean package -Dmaven.test.skiptrue -P prod mvn cle…

JavaScript數組操作指南:20個精通操作技巧指南

splice、 slice、 pop 和 shift。數組的排序方法是穩定且非原地算法的嗎&#xff1f;要記住所有 JavaScript 數組方法以及它們之間的區別并不容易。它們的名稱相似&#xff0c;就好像直接從同義詞詞典中提取一樣。 這個數組速查表列出了 JavaScript 中通常需要的所有數組方法&…

Gson使用Object接收長數字問題

近期發現公司同事在使用Gson對數字進行反序列列化時出現丟失精度的問題&#xff0c;在這里搬運一下&#xff0c;做個記錄~ 現象 使用Gson反序列化長Long數字(大于16位),如果用Object類型來接收則會丟失精度。 Gson會將數字反序列化為double類型,double類型本身就容易丟精度。…

小程序基礎

小程序基礎 1. 認識什么是小程序 什么是微信小程序 微信小程序是一種運行在微信內部的 輕量級 應用程序。 在使用小程序時 不需要下載安裝&#xff0c;用戶 掃一掃 或 搜一下 即可打開應用。它也體現了 “用完即走” 的理念&#xff0c;用戶不用關心安裝太多應用的問題。它…

weak的實現原理

iOS 在運行時維護著一個全局的弱引用表&#xff0c;該表是一個 hash 表&#xff0c;hash表的 key 是 對象本身&#xff0c;value 是指向該對象的所有 weak 指針的地址數組。 /**全局的弱引用表&#xff0c;本質是一個hash結構&#xff0c;對象本身作為key, 存儲weak修飾的指…