濟南哪家公司做網(wǎng)站微信指數(shù)是搜索量嗎
文章目錄
- 基于Python旅游數(shù)據(jù)采集可視化分析推薦系統(tǒng)
- 一、項目概述
- 二、項目說明
- 三、開發(fā)環(huán)境
- 四、功能實現(xiàn)
- 五、系統(tǒng)頁面實現(xiàn)
- 用戶登錄注冊
- 系統(tǒng)首頁
- 數(shù)據(jù)操作管理
- 價格與銷量分析
- 旅游城市和景點等級分析
- 旅游數(shù)據(jù)評分情況分析
- 旅游數(shù)據(jù)評論情況分析
- 旅游景點推薦
- Django系統(tǒng)后臺管理
- 六、結(jié)語
基于Python旅游數(shù)據(jù)采集可視化分析推薦系統(tǒng)
一、項目概述
在互聯(lián)網(wǎng)時代,各行各業(yè)的人們都在尋求增長點,人們的日常生活越來越離不開互聯(lián)網(wǎng)。以旅游信息為例,線下大量的各種旅游信息基本只會出現(xiàn)在旅游會上,但是現(xiàn)如今,人們越來越重視時間成本,所以越來越多的年輕人在網(wǎng)上查找自己想要查找的旅游就業(yè)信息。然而,在互聯(lián)網(wǎng)信息和海量數(shù)據(jù)源混合的情況下,如何快速精確的找到自己想要的數(shù)據(jù)是一個值得探討的問題。
本系統(tǒng)主要針對解決獲取旅游信息滯后、參加線下旅行社和人工檢索時間成本高等問題,運用網(wǎng)絡爬蟲信息技術設計思想,實現(xiàn)了一個基于Python的旅游信息推薦系統(tǒng)。本系統(tǒng)以Python語言為基礎,使用 requests爬蟲對去哪兒旅游信息源進行抓取,針對網(wǎng)頁信息編寫抽取規(guī)則,對旅游信息進行必要的過濾和提取,使用MySql對旅游信息進行數(shù)據(jù)存儲。然后使用 Python 開源web框架 Django進行系統(tǒng)搭建,基于旅游信息采用機器學習協(xié)同過濾推薦算法完成對用戶的旅游信息推薦,完成整個爬取以及數(shù)據(jù)檢索到成功進行旅游推薦的網(wǎng)頁端操作展示。
二、項目說明
基于python旅游采集數(shù)據(jù)分析可視化推薦系統(tǒng)是基于Django框架開發(fā)的一個旅游信息采集和推薦的應用。該系統(tǒng)通過爬蟲技術從各個旅游網(wǎng)站抓取旅游信息,并利用推薦算法對用戶進行個性化推薦,同時提供可視化展示界面。
以下是該系統(tǒng)的主要功能和組成部分的介紹:
旅游信息采集:系統(tǒng)通過編寫爬蟲程序,定期從各大旅游網(wǎng)站抓取旅游景點、酒店、機票等相關信息,包括價格、評價、位置等。這些采集到的數(shù)據(jù)會被保存到數(shù)據(jù)庫中供后續(xù)使用。
用戶注冊與登錄:用戶可以注冊自己的賬號,并通過登錄來獲取個性化推薦和享受更多功能。
個性化推薦:系統(tǒng)會根據(jù)用戶的歷史瀏覽記錄、收藏記錄以及其他行為數(shù)據(jù),利用推薦算法生成個性化推薦結(jié)果。推薦算法使用協(xié)同過濾、內(nèi)容過濾方法,根據(jù)用戶的興趣和偏好為其推薦最相關的旅游信息。
可視化展示界面:系統(tǒng)會將采集的旅游信息以可視化方式展示給用戶,包括地圖標記、圖片展示、價格對比等功能。用戶可以通過地圖選擇感興趣的地區(qū),查看該地區(qū)的旅游景點、酒店等信息。
用戶交互和反饋:系統(tǒng)提供用戶評價、評論和收藏等功能,用戶可以對自己的旅游經(jīng)歷進行評價,同時也可以保存自己喜歡的旅游信息以便日后查看。
后臺管理:系統(tǒng)提供一個后臺管理界面,管理員可以對用戶信息、采集的數(shù)據(jù)、推薦算法參數(shù)等進行管理和配置。
三、開發(fā)環(huán)境
開發(fā)環(huán)境 | 版本/工具 |
---|---|
PYTHON | 3.9.0 |
開發(fā)工具 | PyCharm2021.2.1 |
操作系統(tǒng) | Windows 10 |
內(nèi)存要求 | 16GB |
瀏覽器 | Firefox |
數(shù)據(jù)庫 | MySQL 8.0.26 |
數(shù)據(jù)庫工具 | Navicat 15 for MySQL |
項目技術棧 | Python語言、Django框架、MySQL數(shù)據(jù)庫、requests網(wǎng)絡爬蟲技術、機器學習算法、BootStrap、數(shù)據(jù)可視化 |
四、功能實現(xiàn)
系統(tǒng)爬蟲部分核心代碼
def spiderMain(self,resp,province):respJSON = resp.json()['data']['sightList']for index,travel in enumerate(respJSON):print('正在爬取該頁第%s數(shù)據(jù)' % 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'] + '景區(qū)'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'] != '用戶未點評,系統(tǒng)默認好評。':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 = []
基于用戶的協(xié)同過濾推薦算法,用于根據(jù)用戶的評分數(shù)據(jù)推薦其可能喜歡的其他景點。
基于用戶的協(xié)同過濾算法部分核心代碼:
def user_bases_collaborative_filtering(user_id,user_ratings,top_n=20):
# def user_bases_collaborative_filtering(user_id, user_ratings, top_n=3):# 獲取目標用戶的評分數(shù)據(jù)target_user_ratings = user_ratings[user_id]# 初始化一個字段,用于保存其他用戶與目標用戶的相似度得分user_similarity_scores = {}# 將目標用戶的評分轉(zhuǎn)化為numpy數(shù)組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# 將其他用戶的評分轉(zhuǎn)化為numpy數(shù)組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 個相似用戶喜歡的景點 作為推薦結(jié)果recommended_items = set()for similar_user,_ in sorted_similar_user[:top_n]:recommended_items.update(user_ratings[similar_user].keys())# 過濾掉目標用戶已經(jīng)評分過的景點recommended_items = [item for item in recommended_items if item not in target_user_ratings]return recommended_items
user_bases_collaborative_filtering
函數(shù)接受三個參數(shù):user_id
: 目標用戶的ID。user_ratings
: 包含用戶評分信息的字典,其中鍵是用戶ID,值是包含景點及其評分的字典。top_n
: 選擇推薦結(jié)果的前N個景點,默認為20。
target_user_ratings = user_ratings[user_id]
:獲取目標用戶的評分數(shù)據(jù),即目標用戶對各個景點的評分。user_similarity_scores = {}
:初始化一個空字典,用于保存其他用戶與目標用戶的相似度得分。target_user_ratings_list = np.array([...])
:將目標用戶的評分轉(zhuǎn)換為 NumPy 數(shù)組,以便后續(xù)計算余弦相似度。- 遍歷
user_ratings
中的每個用戶,計算目標用戶與其他用戶之間的相似度得分:- 將其他用戶的評分轉(zhuǎn)化為 NumPy 數(shù)組。
- 使用余弦相似度計算兩個用戶之間的相似度得分。
- 將相似度得分存儲在
user_similarity_scores
字典中。
sorted_similar_user = sorted(user_similarity_scores.items(),key=lambda x:x[1],reverse=True)
:對用戶相似度得分進行降序排序,得到一個包含用戶ID和相似度得分的元組列表。recommended_items = set()
:初始化一個集合,用于保存推薦的景點。- 遍歷排序后的相似用戶列表,選擇前
top_n
個相似用戶喜歡的景點,將這些景點添加到recommended_items
集合中。 recommended_items = [item for item in recommended_items if item not in target_user_ratings]
:過濾掉目標用戶已經(jīng)評分過的景點,得到最終的推薦結(jié)果。- 返回
recommended_items
,即推薦給目標用戶的景點列表。
這個函數(shù)接受目標用戶ID、用戶評分字典以及要返回的推薦結(jié)果數(shù)量作為參數(shù)。它計算目標用戶與其他用戶的相似度得分,然后選擇相似度最高的用戶喜歡的景點作為推薦結(jié)果。
– 獲取目標用戶的評分數(shù)據(jù)
– 初始化一個字典,用于保存其他用戶與目標用戶的相似度得分
– 將目標用戶的評分轉(zhuǎn)化為numpy數(shù)組
– 計算目標用戶與其他用戶之間的相似度得分(余弦相似度)
– 對用戶相似度得分進行降序排序
– 選擇TOP N個相似用戶喜歡的景點作為推薦結(jié)果
– 過濾掉目標用戶已經(jīng)評分過的景點
五、系統(tǒng)頁面實現(xiàn)
啟動項目,在終端窗口輸入命令,這里我設置的端口在8091:
python manage.py runserver 8091
用戶登錄注冊
系統(tǒng)首頁
數(shù)據(jù)操作管理
價格與銷量分析
旅游城市和景點等級分析
旅游數(shù)據(jù)評分情況分析
旅游數(shù)據(jù)評論情況分析
旅游景點推薦
Django系統(tǒng)后臺管理
http://127.0.0.1:8091/admin
六、結(jié)語
基于python旅游采集數(shù)據(jù)分析可視化推薦系統(tǒng)的目標是為用戶提供便捷的旅游信息獲取和個性化推薦,并通過可視化展示使用戶更好地了解和選擇適合自己的旅游產(chǎn)品。它可以幫助用戶節(jié)省時間和精力,提高旅行的滿意度。
需項目資料/商業(yè)合作/交流探討等可以添加下面?zhèn)€人名片,后續(xù)有時間會持續(xù)更新更多優(yōu)質(zhì)內(nèi)容,感謝各位的喜歡與支持!