基于Python實現的影視數據智能分析系統(tǒng)
1. 前言
數據分析與可視化是當今數據分析的發(fā)展方向,大數據時代,數據資源具有海量特征,數據分析和可視化主要通過Python數據分析來實現。
基于Python的數據分析可視化和技術實現是目前Python數據分析的主要目的,Python可以為數據分析可視化提供思路,在體現數據價值方面發(fā)揮著重要作用。因此,在研究數據分析、可視化的過程中,我們可以看到Python具有重要的應用價值。
本文具有影視數據智能分析系統(tǒng)的簡單雛形,以不同流媒體電影數據為背景,通過調研、分析數據, 完成數據預處理、數據分析和數據可視化等操作,掌握相關的智能數據處理與智能系統(tǒng)開發(fā)的知識,培養(yǎng)智能信息系統(tǒng)項目開發(fā)過程中的分析、設計和工程文檔編寫能力,提高工程應用能力和綜合分析、解決實際問題的能力。
2.設計目的及任務描述
影視數據分析應用統(tǒng)計分析方法對收集來的大量數據進行分析,提取有用信息和形成結論而對數據加以詳細研究和概括總結的過程。這一過程也是質量管理體系的支持過程。影視數據分析可幫助人們做出觀看影視的選擇及投入更合適的影視,尤其對視頻管理平臺有很好的幫助。影視數據分析是建立在數基礎,20世紀早期就已確立,但直到計算機的出現才使得實際操作成為可能,并使得數據分析得以推廣。同時,在數據獲取、處理和分析過程中考慮數據安全、技術經濟、工程倫理、行業(yè)規(guī)范等要素。
本設計內容涉及的數據一部分來自Reelgood.com
網站,其中包括四種流媒體平臺上可用電影的綜合列表;另一部分來自IMDB
數據集。要求應用pands
對下列問題進行數據分析:
- 你可以在哪個流媒體平臺上找到這部電影?
- 在某個國家/地區(qū)/IMDB制作的電影的平均IMDb收視率?
- 每個目標年齡段所感興趣的電影,以及他們所感興趣的流媒體應用程序。
- 電影的發(fā)行年份以及數量。
- 電影和導演的受歡迎程度分析。
通過該課程設計的實踐訓練,使學生掌握相關的智能數據處理與智能系統(tǒng)開發(fā)的知識,培養(yǎng)智能信息系統(tǒng)項目開發(fā)過程中的分析、設計和工程文檔編寫能力,提高工程應用能力和綜合分析、解決實際問題的能力。
3. 總體設計
本系統(tǒng)主要分為四個部分,分別為爬蟲抓取、數據處理分析可視化、GUI界面展示、啟動運行,分別對應getData.py
、pyec.py
、GUI.py
、main.py
四個文件。并且包含data文件夾用于存儲系統(tǒng)所需或產生的數據文件。
系統(tǒng)結構如圖所示:
4.系統(tǒng)實現
4.1 爬蟲抓取
getData.py
該文件主要功能是抓取和讀取電影數據,共包含8個函數,代碼如下:
recently()
這一函數主要是抓取最近上映票房排名前十名的電影信息。
def recently(): url = "https://ys.endata.cn/enlib-api/api/movie/getMovie_BoxOffice_Day_Chart.do" header = { "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36', "Cookie": 'JSESSIONID=b2685bfa-aa4f-4359-ae96-57befaf8d1ec; route=4e39643a15b7003e568cadd862137cf3; Hm_lvt_82932fc4fc199c08b9a83c4c9d02af11=1649834963,1649852471,1649859039,1649900037; Hm_lpvt_82932fc4fc199c08b9a83c4c9d02af11=1649917933' } post_BoxOffice_Day_data = { 'r': 0.7572955414768414, 'datetype': 'Day', 'date': datetime.now().strftime('%Y-%m-%d'), 'sdate': datetime.now().strftime('%Y-%m-%d'), 'edate': datetime.now().strftime('%Y-%m-%d'), 'bserviceprice': 1 }
以上代碼塊是運行爬蟲前的準備工作,包含抓取的網址url、爬蟲所需的請求頭、請求時需要附帶的數據。
res = requests.post(url, headers=header, data=post_BoxOffice_Day_data).text json_data = json.loads(res) data0 = json_data['data']['table0'] data1 = json_data['data']['table1']
以上代碼塊是運行爬蟲并將其解析為json形式,方便后面對數據進行取出。
movie_rank = [] movie_details_MovieName = [] movie_details_BoxOffice = [] movie_details_ShowCount = [] movie_details_AudienceCount = [] movie_details_Attendance = [] movie_percent_BoxOfficePercent = [] movie_percent_ShowCountPercent = [] movie_percent_AudienceCountPercent = []
以上代碼是部分定義的所需的數據字段。
for i in range(10): movie_rank.append(data0[i]['Irank']) movie_details_MovieName.append(data0[i]['MovieName']) movie_details_BoxOffice.append(data0[i]['BoxOffice']) movie_details_ShowCount.append(data0[i]['ShowCount']) movie_details_AudienceCount.append(data0[i]['AudienceCount']) movie_details_Attendance.append(data0[i]['Attendance'])
以上是從json數據中取數據的過程。
showing()
這一函數主要抓取最近正在上映的所有電影的基本信息。history()
這一函數主要是讀取歷史電影數據并返回列表格式
def history(): data = pd.read_csv("data/moviesBoxOffice.csv", encoding='gbk') data = np.array(data[:100]).tolist() return data
利用pandas庫讀取csv文件,numpy對DataFrame形式數據轉換為list格式的過程。
predict_data()
這一函數主要是讀取歷史電影數據進行建模,建模完成后,讀取需要預測的在映電影數據,對其進行票房預測并返回。hotMovies()
這一函數主要是抓取當前在映票房前五的電影七天內的票房數據。
special()
這一函數主要抓取的是當前電影市場特效影廳種類及其票房占比的數據。champion_year()
這一函數主要抓取的是近十年來中國電影市場每年票房冠軍影片的票房數據,還抓取了近十年國內電影市場的票房和上映影片數量等相關數據。
Tablets()
這一函數主要是對近期在映電影的排片數據進行抓取并返回。
4.2 GUI界面運行
GUI.py
該文件主要是為系統(tǒng)構建GUI界面,共有15個函數,具體代碼如下:create_tree_showing
該函數主要是為正在上映的電影數據創(chuàng)建數據表格。代碼塊先是確定數據表頭,然后創(chuàng)建表格并設置其父窗體,表格一次性顯示數據行數,是否顯示表頭等參數,然后分別設置表格數據列及每列的寬度。代碼塊設置表頭文本信息,再設置該信息表的垂直滾動條。
create_tree_tablets
該函數主要是為在映電影的排片數據創(chuàng)建數據表格。create_tree_history
該函數主要是為歷史電影數據創(chuàng)建數據表格。
create_tree_predict
該函數主要是為在映電影票房預測結果數據創(chuàng)建數據表格。clear_tree
該函數主要功能是在切換展示數據表格時,對已展示表格數據進行清除。
該函數有一個tree參數,首先對tree進行銷毀,再對該表格的垂直滾動條進行銷毀。
showing
該函數對應按鈕’在映電影’,用于實現獲取在映電影數據功能。history
該函數對應按鈕’歷史電影’,用于實現獲取歷史電影數據功能。
predict
該函數對應按鈕’在映電影票房預測’,用于實現對在映電影票房預測并展示。tablets
該函數對應按鈕’拍片分析’,用于實現獲取排片分析數據功能。
center_window
該函數是創(chuàng)建整個GUI窗體的函數。clicking
該函數對應’在映電影分析’按鈕,用于跳轉在映電影分析網頁。先調用getData.py下的recently函數獲取在映電影數據,再調用pyec.py文件下的Showing函數進行統(tǒng)計圖表制作,最后跳轉到數據圖表網頁。
clicked
該函數對應’歷史數據分析’按鈕,用于跳轉電影票房分析網頁。industry
該函數對應’數據大盤’按鈕,用于跳轉數據大盤網頁。
ui_process
該函數主要是對GUI窗體控件等進行布局。創(chuàng)建根窗體,設置GUI的名稱,大小,整體高亮顏色,對內部子窗體進行了初始化并且在子窗體的左上角添加了一張logo圖片。在子窗體設置了各個功能對應的按鈕。設置了整體窗體的布局,以及各個子窗體控件的設置,設置了窗體列參數及運行了整個窗體。
4.3 啟動運行
main.py
該函數是整個系統(tǒng)的GUI入口,調用并運行了GUI。
from GUI import uiob if __name__ == '__main__': ui = uiob() ui.ui_process()
5.可視化設計
pyec.py
該文件主要是對getData.py文件獲取到的數據進行可視化操作,共有3個函數,代碼功能詳解如下:
History()
該函數主要是對歷史電影數據進行可視化,具體代碼如下:
csv_file = 'data/moviesBoxOffice.csv' # 設置csv文件的路徑 data = pd.read_csv(csv_file, encoding='gbk') # 使用pandas讀取csv文件中的數據 data_type = data['影片主分類'].value_counts() # 統(tǒng)計影片主分類的各類別數量 data_BoxOffice = data['總票房(萬)'][:10] # 獲取前10部電影的總票房數據
該代碼塊主要是讀取歷史電影票房數據為畫圖做前期準備工作。
# 創(chuàng)建柱狀圖a,展示票房TOP1000類型統(tǒng)計 a = ( Bar(init_opts=opts.InitOpts(height="450px", width="900px", theme=ThemeType.MACARONS, bg_color='white')) # 設置圖表的基本參數 .add_xaxis(list(data_type.index)) # 設置x軸數據 .add_yaxis("類型", list(data_type)) # 設置y軸數據 .set_global_opts( title_opts=opts.TitleOpts(title="票房TOP1000類型統(tǒng)計"), # 設置圖表標題 # datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")], # 設置數據縮放選項 ) ) # 創(chuàng)建柱狀圖b,展示票房TOP10總票房統(tǒng)計 b = ( Bar(init_opts=opts.InitOpts(height="450px", width="900px", theme=ThemeType.LIGHT)) # 設置圖表的基本參數 .add_xaxis(list(data['影片名稱'][:10])) # 設置x軸數據 .add_yaxis("票房", list(data_BoxOffice)) # 設置y軸數據 .set_global_opts( title_opts=opts.TitleOpts(title="票房TOP10總票房統(tǒng)計"), # 設置圖表標題 # datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")], # 設置數據縮放選項 xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate": 20}) # 設置x軸標簽旋轉角度 ) ) # 創(chuàng)建折線圖c,展示票房TOP10各類票房統(tǒng)計 c = ( Line(init_opts=opts.InitOpts(height="450px", width="900px", theme=ThemeType.LIGHT)) # 設置圖表的基本參數 .add_xaxis(list(data['影片名稱'][:10])) # 設置x軸數據 .add_yaxis("總票房(萬)", list(data['總票房(萬)'][:10]), is_smooth=True) # 設置y軸數據并進行平滑處理 .add_yaxis("首日票房(萬)", list(data['首日票房(萬)'][:10]), is_smooth=True) # 設置y軸數據并進行平滑處理 .add_yaxis("首周票房(萬)", list(data['首周票房(萬)'][:10]), is_smooth=True) # 設置y軸數據并進行平滑處理 .add_yaxis("首周末票房(萬)", list(data['首周末票房(萬)'][:10]), is_smooth=True) # 設置y軸數據并進行平滑處理 .add_yaxis("點映票房(萬)", list(data['點映票房(萬)'][:10]), is_smooth=True) # 設置y軸數據并進行平滑處理 .set_series_opts(label_opts=opts.LabelOpts(is_show=True), # 設置數據標簽顯示選項 linestyle_opts=opts.LineStyleOpts(width=3)) # 設置線條樣式 .set_global_opts( title_opts=opts.TitleOpts(title="票房TOP10各類票房統(tǒng)計", pos_left='top'), # 設置圖表標題及位置 # datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")], # 設置數據縮放選項 xaxis_opts=opts.AxisOpts(name="影片名稱", axislabel_opts={"rotate": 20}), # 設置x軸標簽及標簽旋轉角度 yaxis_opts=opts.AxisOpts(name="票房(萬)") # 設置y軸標簽 ) ) # 由于文章篇幅的問題,部分代碼省略
以上代碼主要是針對各種數據指標進行數據可視化,最后將其顯示到網頁供程序調用。兩個柱形圖分別對票房Top1000的電影類型和票房Top10的總票房進行統(tǒng)計。五個折線圖分別是對票房Top10電影的各類票房、場次人次、票價、輿情、口碑五個方面的統(tǒng)計。最后兩個圖為電影名稱詞云圖和電影分類餅圖。
Showing()
該函數主要是對正在上映的電影進行數據分析,包含在映電影的票房、場次、人次、上座率五個柱形統(tǒng)計圖,影片票房占比、場次占比、人次占比三個餅狀統(tǒng)計圖,影片地域分布票房、場次、人次三個層疊柱形圖。
Industry()
該函數主要是對近期電影行業(yè)及電影行業(yè)歷史數據的可視化,主要包括熱門電影票房趨勢折線統(tǒng)計圖,特效廳票房占比分布餅狀圖。
6.總結
通過該課程設計的實踐訓練,使學生掌握相關的智能數據處理與智能系統(tǒng)開發(fā)的知識,培養(yǎng)智能信息系統(tǒng)項目開發(fā)過程中的分析、設計和工程文檔編寫能力,提高工程應用能力和綜合分析、解決實際問題的能力。
下面是該系統(tǒng)的主要功能及技術指標:
數據獲取和預處理:
使用pandas讀取數據文件;拆分不同的屬性信息,形成列表、元組、字典或集合;刪除空列或行;觀察數據并清洗錯誤數據;
-使用pandas對數據整理,方便之后的分析和可視化。
數據分析:
使用numpy和pandas對數據預處理后的數據進行分析,設計七種以上的數據分析場景。
數據可視化:
利用Matplotlib和seaborn分別對每種分析場景可視化。
數據涉及的數據項:-ID -Title -Year -Age -IMDb -Rotten Tomatoes -Netflix -Hulu -Prime Video -Disney+ -Type -Directors -Genres -Country -Language -Runtime
使用到的庫包括:numpy、pandas、matplotlib、seaborn等。開發(fā)工具選用jupyter notebook或python IDE等Python開發(fā)工具。
以上就是基于Python實現的影視數據智能分析系統(tǒng)的詳細內容,更多關于Python影視數據分析系統(tǒng)的資料請關注腳本之家其它相關文章!
相關文章
python中的import、from import及import as的區(qū)別解析
在Python中,如果import的語句比較長,導致后續(xù)引用不方便,可以使用as語法,這篇文章主要介紹了python中的import、from import以及import as的區(qū)別,需要的朋友可以參考下2022-10-10python+elasticsearch實現標簽匹配計數操作
這篇文章主要介紹了python+elasticsearch實現標簽匹配計數操作,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2024-04-04