源碼鏈接:點擊下載源碼
相關文檔:點擊下載相關文檔
摘 要
隨著互聯網的快速發展,豆瓣網作為一個綜合性的影視評分和評論平臺,積累了大量的用戶數據,這些數據為影視分析提供了豐富的素材。借助Hadoop這一大數據處理框架,能夠高效地存儲和分析這些數據,從而挖掘出潛在的價值。
Hadoop的分布式存儲和計算能力,使得對海量數據的處理變得更加高效。通過對豆瓣網的用戶評論、評分以及影片信息進行分析,可以揭示出影視作品的受歡迎程度、觀眾偏好以及市場趨勢。在數據分析過程中,采用了多種數據挖掘技術,包括聚類分析和情感分析,識別用戶對不同類型影片的偏好,并探討影片評分與評論情感之間的關系。研究結果顯示,用戶的評分與評論情感存在顯著相關性,且不同類型影片在用戶偏好上表現出明顯差異。
通過對豆瓣網數據的深入分析,不僅可以為影視產業提供科學依據,還能夠推動相關技術的發展與應用,促進文化產業的繁榮。因此,基于Hadoop的豆瓣網影視數據分析與應用,展現了大數據在文化領域的巨大潛力與廣闊前景。
關鍵詞:Hadoop;豆瓣網影視;數據分析;數據可視化
所做工作及思路
本論文致力于探討基于Hadoop的豆瓣網影視數據分析與應用,主要圍繞數據挖掘、可視化及其在流行影視中的實際應用展開。
數據源獲取:首先收集來自“豆瓣網”網站的多維度數據,包括熱門影視、影視評論、語種等,以構建一個全面的影視數據庫。
數據清洗:運用Python強大的數據處理和分析庫,如Pandas、NumPy、Matplotlib等,對數據進行清洗和預處理。這一步驟不僅提高了數據的質量,也為后續分析打下了堅實基礎。
數據存儲:清洗后的數據需要存儲在數據庫和CSV文件中,以便后續的分析和建模。
數據可視化:利用Matplotlib和Seaborn等工具進行可視化展示,從而使得數據的趨勢和特征更加直觀。
影視推薦:通過協同過濾算法算法,深入挖掘數據中的潛在規律,通過對熱門影視的時間序列分析,算法綜合考慮用戶行為數據與影視特征,為用戶生成個性化推薦列表,同時為影視管理部門提供科學的決策依據,助力提升四川旅游資源的吸引力和游客滿意度。
章節安排
論文共分5章。
第1章緒論:對豆瓣網影視的背景進行闡述,最后講述關于本論文的工作與思路可以大致解論文所做的工作。
第2章相關技術介紹:介紹Hadoop作為數據分析工具的優勢,如何利用Python的各種庫(如Pandas、NumPy和Matplotlib)來處理和分析豆瓣網影視數據。
第3章需求分析:涉及數據的獲取與預處理,還包括對影視特征的提取與分析方法的探討。功能需求分析上講了關于模型的相關數據源和數據處理等方面,非功能需求分析上主要講解了模型的性能要求和準確性要求。
第4章影視數據分析與處理:講解對數據收集和預處理的方法,通過分析數據的缺失和數據的錯誤從而處理數據。
第5章影視數據應用:論文將介紹分析結果的應用場景,探討數據分析如何支持影視產業的決策制定、市場預測和用戶行為分析等。
功能需求分析
數據收集
在進行豆瓣網影視數據分析之前,數據收集是至關重要的一步。豆瓣網作為一個綜合性的文化社區,擁有豐富的用戶生成內容,包括電影的評分、評論和標簽。為了獲取這些數據,可以通過多種方式進行。
首先,利用豆瓣的開放API接口,開發者可以直接獲取所需的影視數據,這種方式既高效又便捷,適合需要大量數據的分析任務。
其次,雖然豆瓣API提供了相對穩定的數據源,但有些信息可能并不完整,或者在特定情況下受到訪問限制,因此網絡爬蟲技術也成為了一種常用的方法。通過編寫爬蟲程序,能夠定向抓取豆瓣網頁上展示的各類影視信息,包括用戶評論、評分、播放量等。這種方式雖然需要遵循網站的使用政策,但能夠靈活獲取更為詳盡的數據。
數據整理與選擇
在進行豆瓣網影視數據分析時,數據整理與選擇的過程至關重要。豆瓣網作為一個擁有豐富影視評論和評分的社交平臺,提供了大量的用戶生成內容,包括電影、電視劇的評分、評論、標簽等。首先,需要明確分析的目標,這將直接影響數據的選擇和整理方式。比如,如果目標是分析用戶對某一類型電影的偏好,那么可以選擇相關的電影數據、用戶評論以及評分信息。
接下來,數據的清洗過程不可忽視。原始數據往往包含缺失值、重復記錄或不一致的格式,這些問題會影響后續的分析結果。因此,清理數據的過程包括去除無用信息、填補缺失值以及統一數據格式。對于豆瓣網的數據,特別是影評部分,情感分析的需求也促使我們在整理時考慮到評論的情感傾向,以便后續的深度分析。與此同時,選擇合適的數據集也是關鍵,比如選擇用戶活躍度較高的時間段或特定類型的影視作品,這樣可以更全面地反映用戶的真實偏好。通過這些整理和選擇的工作,最終會形成一個結構化、清晰且具有代表性的數據集,為后續的Hadoop分析打下良好的基礎。這樣的準備工作能夠確保數據分析的有效性和準確性,使得最終的研究成果更具參考價值。
數據展示
在豆瓣網上,影視數據的展示方式豐富多樣,能夠有效吸引用戶的注意力。用戶可以通過圖表、數據統計以及可視化工具直觀地了解電影和電視劇的受歡迎程度、評分分布和評論趨勢。
以評分為例,用戶可以看到某部影片的歷史評分變化曲線,這樣的展示方式使得用戶更容易理解影片的受歡迎程度是如何隨時間變化而變化的。此外,豆瓣還提供了基于用戶評分的推薦系統,用戶在瀏覽某一類型的影片時,系統會自動推薦類似評分高的影片,提升了用戶的觀影體驗。通過數據挖掘技術,豆瓣能夠分析出觀眾的觀看習慣和偏好,進而為用戶提供個性化的內容推薦。用戶在瀏覽影片時,往往會被影片的海報、預告片和評論吸引,這些元素的展示方式不僅美觀,還能有效傳達影片的主題和風格。結合用戶生成內容,豆瓣的評論區成為了一個重要的信息交流平臺,用戶在這里分享觀影感受,形成了獨特的社區氛圍。通過數據分析,豆瓣能夠識別出熱門評論和話題,從而在首頁或推薦列表中進行重點展示。這種展示形式不僅提升了用戶的參與感,也增強了平臺的活躍度和粘性。總之,豆瓣網通過多種展示方式,充分利用數據分析技術,為用戶提供了一個直觀且互動性強的影視數據平臺,極大地豐富了觀影體驗。
數據推薦
協同過濾(Collaborative Filtering,簡稱CF)是一種基于用戶行為的推薦技術,廣泛應用于影視、電影、電商等領域的個性化推薦系統中。其核心思想是通過分析大量用戶對影視作品的評分、觀看歷史、評論等行為數據,發現具有相似興趣的用戶群體或影視作品之間的相似性,從而為目標用戶推薦可能感興趣的其他影視作品?。
整體設計
依托Hadoop的豆瓣網影視數據分析與應用架構過程中,全局設定應保障數據處理的高效運行及彈性。系統的核心組件融合數據獲取、數據處理、數據儲存、數據分析及用戶操作平臺。Flask實現用戶界面的便捷性和互動的高效性,為用戶打造高效的數據分析途徑。Echarts對數據分析結果進行圖表顯示。系統架構如圖4-1所示。
爬取豆瓣網網站
爬取步驟
在進行豆瓣網影視數據的爬取時,首先需要明確爬取的目標和范圍。以豆瓣電影為例,可以選擇特定的電影分類,如熱門電影、評分最高的影片或某個特定導演的作品。
接下來,利用Python編程語言中的爬蟲框架,如Scrapy或BeautifulSoup,進行具體的技術實現。在這一過程中,首先需要分析豆瓣網的網頁結構,了解各個數據字段所在的HTML標簽,這樣才能準確提取所需的信息。
爬取過程中,設置合理的請求頻率是必要的,以避免因訪問過于頻繁而導致IP被封禁。可以通過設置隨機的時間間隔,模擬人類用戶的訪問行為,從而降低被封禁的風險。
數據爬取完成后,獲取的原始數據需要經過清洗和格式化,以去除重復項和無效數據,這一步驟至關重要,因為原始數據往往包含許多噪聲信息。
清洗后的數據可以存儲在本地數據庫或csv文件中,以便后續的分析和處理。整個爬取流程涉及到數據的提取、清洗和存儲,每一步都需要細致入微,以確保最終的數據質量滿足分析需求。
在進行豆瓣網影視數據分析時,爬蟲技術是獲取數據的重要手段。通過使用Python編寫的爬取代碼,可以有效地抓取豆瓣網的影視信息。代碼的核心部分利用requests庫發送HTTP請求,獲取網頁的HTML內容。隨后,使用BeautifulSoup庫對獲取的HTML進行解析,從中提取出電影的名稱、評分、評論數以及相關標簽等關鍵數據。為了確保爬取的效率和準確性,設置了適當的請求間隔,避免對豆瓣服務器造成過大的壓力。同時,針對不同的頁面結構,采用了靈活的解析策略。比如,對于電影詳細頁面,代碼會深入到每個電影的鏈接中,進一步抓取更為詳細的內容,如導演、演員及劇情簡介等信息。為了處理大量數據,代碼還實現了數據存儲功能,將爬取到的信息以CSV格式保存在本地,以供后續的數據分析與處理。此外,考慮到豆瓣網的反爬蟲機制,代碼中還加入了用戶代理和請求頭的設置,使得爬蟲行為更加隱蔽,降低被封禁的風險。通過這樣的方式,能夠有效地收集到豐富的影視數據,為后續的分析提供堅實的基礎。爬取完成后,利用Hadoop的分布式處理能力,可以對這些數據進行深度分析,從而揭示出影視作品的流行趨勢和觀眾偏好,從而為相關業務決策提供支持。爬取豆瓣網核心代碼如代4-1所示。
def spider(spiderTarget,start):# 每次調用spider獲取20條數據headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36','Referer':'https://movie.douban.com/tag/','Cookie':'bid=6mHemZBr91A; __gads=ID=f6d1e29943a2289e-2235597b46cf0014:T=1637928036:RT=1637928036:S=ALNI_MbUV2rRDkg5u38czBTVDBFS0PLajA; ll="108305"; _vwo_uuid_v2=D05DF24F53B472D086C01A79B01735762|e5e120c8d217d8191d1303c2a5b5aa04; gr_user_id=6441c017-d74b-422f-af14-93a11a57112d; __yadk_uid=tajeNgKg6NT6nhEQczKfmecGcZqdVBXY; douban-fav-remind=1; __utmv=30149280.23512; _ga=GA1.2.1042859692.1637928038; viewed="2995812_1458367_6816154_1416697_1455695_1986653_1395176_3040149_1427374_4913064"; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1652841585%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DVlfhYZ2MEHRBSLvH1rcPwd4AYRrL-DQrWxaEeqtUjfETnWetwL98pNUbJ__vgCwN%26wd%3D%26eqid%3Da1df55aa0002864e0000000662845c64%22%5D; _pk_ses.100001.4cf6=*; ap_v=0,6.0; __utma=30149280.1042859692.1637928038.1649577909.1652841585.36; __utmb=30149280.0.10.1652841585; __utmc=30149280; __utmz=30149280.1652841585.36.12.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utma=223695111.1442664133.1641956556.1648885892.1652841585.22; __utmb=223695111.0.10.1652841585; __utmc=223695111; __utmz=223695111.1652841585.22.8.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; dbcl2="235123238:u9rdv3vTMd0"; ck=nl8E; _pk_id.100001.4cf6=023cbddd8ff1a247.1641956556.21.1652843267.1648885892.; push_noty_num=0; push_doumail_num=0'}params = {'start':start}movieAllRes = requests.get(spiderTarget,params=params,headers=headers)movieAllRes = movieAllRes.json()detailUrls = jsonpath.jsonpath(movieAllRes,'$.data..url')moveisInfomation = jsonpath.jsonpath(movieAllRes,'$.data')[0]for i,moveInfomation in enumerate(moveisInfomation):try:resultData = {}# 詳情resultData['detailLink'] = detailUrls[i]# 導演(數組)resultData['directors'] = ','.join(moveInfomation['directors'])# 評分resultData['rate'] = moveInfomation['rate']# 影片名resultData['title'] = moveInfomation['title']# 主演(數組)resultData['casts'] = ','.join(moveInfomation['casts'])# 封面resultData['cover'] = moveInfomation['cover']# =================進入詳情頁================detailMovieRes = requests.get(detailUrls[i], headers=headers)soup = BeautifulSoup(detailMovieRes.text, 'lxml')# 上映年份resultData['year'] = re.findall(r'[(](.*?)[)]',soup.find('span', class_='year').get_text())[0]types = soup.find_all('span',property='v:genre')for i,span in enumerate(types):types[i] = span.get_text()# 影片類型(數組)resultData['types'] = ','.join(types)country = soup.find_all('span',class_='pl')[4].next_sibling.strip().split(sep='/')for i,c in enumerate(country):country[i] = c.strip()# 制作國家(數組)resultData['country'] = ','.join(country)lang = soup.find_all('span', class_='pl')[5].next_sibling.strip().split(sep='/')for i, l in enumerate(lang):lang[i] = l.strip()# 影片語言(數組)resultData['lang'] = ','.join(lang)upTimes = soup.find_all('span',property='v:initialReleaseDate')upTimesStr = ''for i in upTimes:upTimesStr = upTimesStr + i.get_text()upTime = re.findall(r'\d*-\d*-\d*',upTimesStr)[0]# 上映時間resultData['time'] = upTimeif soup.find('span',property='v:runtime'):# 時間長度resultData['moveiTime'] = re.findall(r'\d+',soup.find('span',property='v:runtime').get_text())[0]else:# 時間長度resultData['moveiTime'] = random.randint(39,61)# 評論個數resultData['comment_len'] = soup.find('span',property='v:votes').get_text()starts = []startAll = soup.find_all('span',class_='rating_per')for i in startAll:starts.append(i.get_text())# 星星比例(數組)resultData['starts'] = ','.join(starts)# 影片簡介resultData['summary'] = soup.find('span',property='v:summary').get_text().strip()# 五條熱評comments_info = soup.find_all('span', class_='comment-info')comments = [{} for x in range(5)]for i, comment in enumerate(comments_info):comments[i]['user'] = comment.contents[1].get_text()comments[i]['start'] = re.findall('(\d*)', comment.contents[5].attrs['class'][0])[7]comments[i]['time'] = comment.contents[7].attrs['title']contents = soup.find_all('span', class_='short')for i in range(5):comments[i]['content'] = contents[i].get_text()resultData['comments'] = json.dumps(comments)# 五張詳情圖imgList = []lis = soup.select('.related-pic-bd img')for i in lis:imgList.append(i['src'])resultData['imgList'] = ','.join(imgList)# 詳情頁結束# =================進入電影頁===========if soup.find('a',class_='related-pic-video'):movieUrl = soup.find('a', class_='related-pic-video').attrs['href']foreshowMovieRes = requests.get(movieUrl,headers=headers)foreshowMovieSoup = BeautifulSoup(foreshowMovieRes.text,'lxml')movieSrc = foreshowMovieSoup.find('source').attrs['src']resultData['movieUrl'] = movieSrc # 電影路徑else:resultData['movieUrl'] = '0'result.append(resultData)#進入電影頁結束print('已經爬取%d條數據' % len(result))except :return
爬取完的豆瓣網影視數據效果如圖4-4、圖4-5所示。
數據預處理
本節內容專注于影視數據的預處理工作,為確保后續文件信息的有效區分與管理,當前階段特地選取了movieinfo.csv這一核心數據文件作為數據預處理的唯一來源。通過對該文件中的影視數據進行清洗、整理與初步分析,旨在為后續的影視綜合數據分析及推薦系統構建奠定堅實的數據基礎。此舉不僅有助于提升數據處理效率,更能確保分析結果的準確性與可靠性,為豆瓣網影視數據分析項目的成功實施提供有力支撐。
數據分析與可視化,展示效果
影視種類數據分析與可視化
在對豆瓣網的影視數據進行分析時,影視種類的分布情況顯得尤為重要。通過Hadoop技術的強大數據處理能力,可以對不同類型的影視作品進行深入挖掘。利用餅圖展示各類型影視作品的市場份額,使得不同種類之間的比較更加清晰。這樣一來,影視制作方和發行方可以根據觀眾的反饋和市場需求,調整自己的創作方向和宣傳策略,從而更好地滿足觀眾的期望。通過這種方式,數據分析不僅為影視行業提供了實證依據,也促進了影視文化的多樣性與發展。
影視評分數據分析與可視化
影視評分數據分析與可視化是理解用戶偏好和市場趨勢的重要手段。豆瓣網作為一個廣受歡迎的影視評論平臺,積累了大量的用戶評分和評論數據,這為深入分析提供了豐富的素材。在這一過程中,使用Hadoop等大數據處理框架,使得對海量數據的處理變得高效且便捷。首先,通過對評分數據的聚合分析,可以揭示出不同類型影片的受歡迎程度,比如動作片與愛情片之間的評分差異,或是不同導演、演員的影響力。進一步的,基于評分的分布情況,可以繪制出直方圖,清晰地展示出用戶對各類影片的評價集中程度,以及存在的極端評分情況。
這樣的可視化不僅讓人們直觀地看到數據背后的趨勢,還能為影視行業的從業者提供有效的決策依據。深入探討評分的時間序列變化,能夠揭示出某些影片在特定時期內的熱度變化,進而分析其與市場營銷活動或社會事件的關聯,提供更全面的視角。通過結合用戶的評論內容,進一步分析評分與評論之間的關系,這種多維度的分析方式能夠幫助研究者更好地理解用戶的觀影動機和情感態度。總的來說,影視評分數據的分析與可視化不僅為學術研究提供了基礎,也為業內人士的市場策略制定提供了重要參考。以下是影視評分可視化圖形核心代碼:
影視時長數據分析與可視化
在對豆瓣網影視數據進行分析時,影視時長作為一個關鍵指標,能夠揭示出影片的敘事結構和觀眾的觀看體驗。通過對數據的深入挖掘,可以發現不同類型影片在時長上的差異。例如,動作片和科幻片往往傾向于較長的播放時間,以便充分展現復雜的情節和特效,而喜劇片則可能更短,以保持輕松的節奏。通過Hadoop的分布式計算能力,我們能夠高效地處理海量的影視時長數據,進而生成可視化圖表,幫助我們更直觀地理解這些差異。以下是影視時長可視化圖形核心代碼:
影視國家數據分析與可視化
影視國家數據分析與可視化的過程揭示了不同國家在影視作品創作中的獨特風格和市場趨勢。通過對豆瓣網上的影視數據進行深入挖掘,可以觀察到各國影片的評分、觀看人數以及評論數等指標的差異。通過柱狀圖展示各國影片的評分分布,可以清晰地看到哪些國家的影片更受歡迎,觀眾的偏好又是如何變化的。
影視語言數據分析與可視化
影視語言的數據分析與可視化在理解觀眾偏好和提升內容創作質量方面具有重要意義。對不同類型影片的語言使用進行比較分析,可以發現不同類型影片在語言風格上的顯著差異。通過這種方式,影視語言的數據分析與可視化不僅助力于作品的成功,也為整個行業的發展提供了新的視角。
影視導演數據分析與可視化
在對豆瓣網的影視數據進行分析時,導演的數據成為了不可忽視的重要組成部分。導演在影視作品中扮演著關鍵角色,他們的風格、作品數量與受歡迎程度直接影響著觀眾的觀影體驗。分析不同導演的作品評分與類型,可以發現某些導演在特定類型的影片中表現更為出色。通過對導演執導作品數量的統計,可以識別出行業內的“高產”導演與“精品”導演之間的差異,進而引發對導演創作風格與市場需求之間關系的思考。利用可視化工具,能夠將這些數據以直觀的方式呈現,通過柱狀圖顯示不同導演的平均評分這樣的圖形化展示能夠幫助觀眾迅速抓住重點信息。
影視演員數據分析與可視化
影視演員在豆瓣網的數據分析中顯得尤為重要,這不僅可以反映出他們的受歡迎程度,還能揭示出觀眾對其作品的評價。通過Hadoop的強大數據處理能力,可以對海量的影視演員數據進行深入挖掘。可以分析出哪些演員在影視作品中表現突出,這樣的數據分析能夠幫助制片方在選角時做出更為明智的決策。同時,觀眾的評分和評論也為演員的職業發展提供了參考。通過對演員參與的電影和電視劇進行評分統計,可以發現某些演員在特定時期內的表現變化,揭示出他們的職業生涯軌跡。
協同過濾算法
協同過濾(Collaborative Filtering,簡稱CF)是一種基于用戶行為的推薦技術,廣泛應用于影視、電影、電商等領域的個性化推薦系統中。其核心思想是通過分析大量用戶對影視作品的評分、觀看歷史、評論等行為數據,發現具有相似興趣的用戶群體或影視作品之間的相似性,從而為目標用戶推薦可能感興趣的其他影視作品?。
協同過濾算法主要分為基于用戶的協同過濾(User-based CF)和基于物品的協同過濾(Item-based CF)兩種?。基于用戶的協同過濾算法是通過計算用戶之間的相似度,如果用戶A和用戶B都喜歡電影X和電影Y,而用戶A還喜歡電影Z,那么可以將電影Z推薦給用戶B?。而基于物品的協同過濾算法則是通過分析影視之間的相似性,推薦與用戶已喜歡影視相似的其他影視?。
在協同過濾算法中,相似度的計算是關鍵。常用的相似度度量方法包括杰卡德(Jaccard)相似系數、余弦相似度和皮爾遜相關系數等?。這些方法可以幫助準確地衡量用戶或物品之間的相似程度,從而為推薦提供可靠的依據。
協同過濾算法代碼實現
在基于Hadoop的豆瓣網影視數據分析與應用中,協同過濾算法可以通過MapReduce編程模型實現大規模數據的并行處理。Hadoop的分布式文件系統(HDFS)可以存儲海量的用戶行為數據,而MapReduce作業則可以對這些數據進行高效的計算和分析。通過將協同過濾算法的關鍵步驟分解為多個MapReduce任務,可以實現算法的分布式執行,從而提高處理速度和可擴展性。協同過濾算法代碼實現(核心代碼):
import numpy as np
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
# 假設我們有一個DataFrame,其中包含用戶ID、影視ID和評分
# 例如:data = {'user_id': [1, 1, 1, 2, 2, 3, 3], 'movie_id': [101, 102, 103, 101, 104, 102, 105], 'rating': [5, 3, 4, 4, 5, 2, 3]}
# df = pd.DataFrame(data)
# 讀取數據(這里假設數據已經加載到DataFrame中)
# df = pd.read_csv('path_to_your_data.csv')
# 創建一個用戶-影視評分矩陣
user_movie_matrix = df.pivot(index='user_id', columns='movie_id', values='rating').fillna(0)
# 計算用戶之間的相似度(余弦相似度)
user_similarity = cosine_similarity(user_movie_matrix)
user_similarity_df = pd.DataFrame(user_similarity, index=user_movie_matrix.index, columns=user_movie_matrix.index)# 為每個用戶生成推薦列表
def get_recommendations(user_id, user_similarity_df, user_movie_matrix, num_recommendations=5):# 獲取當前用戶與其他用戶的相似度similar_users = user_similarity_df[user_id].sort_values(ascending=False)# 排除當前用戶自身similar_users = similar_users[similar_users.index != user_id]# 獲取相似用戶看過的影視及其評分,并加權求和weighted_sum = np.zeros(user_movie_matrix.shape)similarity_sum = np.zeros(user_movie_matrix.shape)for similar_user in similar_users.index:weight = similar_users[similar_user]watched_movies = user_movie_matrix.loc[similar_user]weighted_sum += weight * watched_moviessimilarity_sum += weight * (watched_movies > 0)# 避免除以0similarity_sum[similarity_sum == 0] = 1# 計算加權評分并進行歸一化recommendations = weighted_sum / similarity_sum# 過濾掉當前用戶已經看過的影視user_watched_movies = (user_movie_matrix.loc[user_id] > 0)recommendations[user_watched_movies] = 0# 獲取推薦列表rec_df = pd.DataFrame(recommendations, index=user_movie_matrix.columns, columns=['score'])return rec_df.sort_values(by='score', ascending=False).head(num_recommendations)
# 示例:為用戶1生成推薦列表
recommendations = get_recommendations(user_id=1, user_similarity_df=user_similarity_df, user_movie_matrix=user_movie_matrix)
print(recommendations)
系統能夠實時更新數據,反映出不同影視的受歡迎程度以及游客的偏好變化。這樣一來,景區不僅可以在高峰期提供更好的服務,降低擁堵,還能在淡季推出相應的促銷活動,吸引更多游客。