1. 前言
數(shù)據(jù)分析與可視化是當(dāng)今數(shù)據(jù)分析的發(fā)展方向,大數(shù)據(jù)時(shí)代,數(shù)據(jù)資源具有海量特征,數(shù)據(jù)分析和可視化主要通過Python數(shù)據(jù)分析來實(shí)現(xiàn)。
基于Python的數(shù)據(jù)分析可視化和技術(shù)實(shí)現(xiàn)是目前Python數(shù)據(jù)分析的主要目的,Python可以為數(shù)據(jù)分析可視化提供思路,在體現(xiàn)數(shù)據(jù)價(jià)值方面發(fā)揮著重要作用。因此,在研究數(shù)據(jù)分析、可視化的過程中,我們可以看到Python具有重要的應(yīng)用價(jià)值。
本文具有影視數(shù)據(jù)智能分析系統(tǒng)的簡單雛形,以不同流媒體電影數(shù)據(jù)為背景,通過調(diào)研、分析數(shù)據(jù), 完成數(shù)據(jù)預(yù)處理、數(shù)據(jù)分析和數(shù)據(jù)可視化等操作,掌握相關(guān)的智能數(shù)據(jù)處理與智能系統(tǒng)開發(fā)的知識,培養(yǎng)智能信息系統(tǒng)項(xiàng)目開發(fā)過程中的分析、設(shè)計(jì)和工程文檔編寫能力,提高工程應(yīng)用能力和綜合分析、解決實(shí)際問題的能力。
由于文章篇幅的限制,這里只展示了部分代碼。完整的設(shè)計(jì)說明書,任務(wù)書以及代碼已經(jīng)上傳到主頁資源部分,點(diǎn)擊下載。
2.設(shè)計(jì)目的及任務(wù)描述
影視數(shù)據(jù)分析應(yīng)用統(tǒng)計(jì)分析方法對收集來的大量數(shù)據(jù)進(jìn)行分析,提取有用信息和形成結(jié)論而對數(shù)據(jù)加以詳細(xì)研究和概括總結(jié)的過程。這一過程也是質(zhì)量管理體系的支持過程。影視數(shù)據(jù)分析可幫助人們做出觀看影視的選擇及投入更合適的影視,尤其對視頻管理平臺有很好的幫助。影視數(shù)據(jù)分析是建立在數(shù)基礎(chǔ),20世紀(jì)早期就已確立,但直到計(jì)算機(jī)的出現(xiàn)才使得實(shí)際操作成為可能,并使得數(shù)據(jù)分析得以推廣。同時(shí),在數(shù)據(jù)獲取、處理和分析過程中考慮數(shù)據(jù)安全、技術(shù)經(jīng)濟(jì)、工程倫理、行業(yè)規(guī)范等要素。
本設(shè)計(jì)內(nèi)容涉及的數(shù)據(jù)一部分來自Reelgood.com
網(wǎng)站,其中包括四種流媒體平臺上可用電影的綜合列表;另一部分來自IMDB
數(shù)據(jù)集。要求應(yīng)用pands
對下列問題進(jìn)行數(shù)據(jù)分析:
- 你可以在哪個(gè)流媒體平臺上找到這部電影?
- 在某個(gè)國家/地區(qū)/IMDB制作的電影的平均IMDb收視率?
- 每個(gè)目標(biāo)年齡段所感興趣的電影,以及他們所感興趣的流媒體應(yīng)用程序。
- 電影的發(fā)行年份以及數(shù)量。
- 電影和導(dǎo)演的受歡迎程度分析。
通過該課程設(shè)計(jì)的實(shí)踐訓(xùn)練,使學(xué)生掌握相關(guān)的智能數(shù)據(jù)處理與智能系統(tǒng)開發(fā)的知識,培養(yǎng)智能信息系統(tǒng)項(xiàng)目開發(fā)過程中的分析、設(shè)計(jì)和工程文檔編寫能力,提高工程應(yīng)用能力和綜合分析、解決實(shí)際問題的能力。
3. 總體設(shè)計(jì)
本系統(tǒng)主要分為四個(gè)部分,分別為爬蟲抓取、數(shù)據(jù)處理分析可視化、GUI界面展示、啟動(dòng)運(yùn)行,分別對應(yīng)getData.py
、pyec.py
、GUI.py
、main.py
四個(gè)文件。并且包含data文件夾用于存儲系統(tǒng)所需或產(chǎn)生的數(shù)據(jù)文件。
系統(tǒng)結(jié)構(gòu)如圖所示:
4.系統(tǒng)實(shí)現(xiàn)
4.1 爬蟲抓取
getData.py
該文件主要功能是抓取和讀取電影數(shù)據(jù),共包含8個(gè)函數(shù),代碼如下:
recently()
這一函數(shù)主要是抓取最近上映票房排名前十名的電影信息。
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
}
以上代碼塊是運(yùn)行爬蟲前的準(zhǔn)備工作,包含抓取的網(wǎng)址url、爬蟲所需的請求頭、請求時(shí)需要附帶的數(shù)據(jù)。
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']
以上代碼塊是運(yùn)行爬蟲并將其解析為json形式,方便后面對數(shù)據(jù)進(jìn)行取出。
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 = []
以上代碼是部分定義的所需的數(shù)據(jù)字段。
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數(shù)據(jù)中取數(shù)據(jù)的過程。
showing()
這一函數(shù)主要抓取最近正在上映的所有電影的基本信息。history()
這一函數(shù)主要是讀取歷史電影數(shù)據(jù)并返回列表格式
def history():
data = pd.read_csv("data/moviesBoxOffice.csv", encoding='gbk')
data = np.array(data[:100]).tolist()
return data
利用pandas庫讀取csv文件,numpy對DataFrame形式數(shù)據(jù)轉(zhuǎn)換為list格式的過程。
predict_data()
這一函數(shù)主要是讀取歷史電影數(shù)據(jù)進(jìn)行建模,建模完成后,讀取需要預(yù)測的在映電影數(shù)據(jù),對其進(jìn)行票房預(yù)測并返回。hotMovies()
這一函數(shù)主要是抓取當(dāng)前在映票房前五的電影七天內(nèi)的票房數(shù)據(jù)。
special()
這一函數(shù)主要抓取的是當(dāng)前電影市場特效影廳種類及其票房占比的數(shù)據(jù)。champion_year()
這一函數(shù)主要抓取的是近十年來中國電影市場每年票房冠軍影片的票房數(shù)據(jù),還抓取了近十年國內(nèi)電影市場的票房和上映影片數(shù)量等相關(guān)數(shù)據(jù)。
Tablets()
這一函數(shù)主要是對近期在映電影的排片數(shù)據(jù)進(jìn)行抓取并返回。
4.2 GUI界面運(yùn)行
GUI.py
該文件主要是為系統(tǒng)構(gòu)建GUI界面,共有15個(gè)函數(shù),具體代碼如下:create_tree_showing
該函數(shù)主要是為正在上映的電影數(shù)據(jù)創(chuàng)建數(shù)據(jù)表格。代碼塊先是確定數(shù)據(jù)表頭,然后創(chuàng)建表格并設(shè)置其父窗體,表格一次性顯示數(shù)據(jù)行數(shù),是否顯示表頭等參數(shù),然后分別設(shè)置表格數(shù)據(jù)列及每列的寬度。代碼塊設(shè)置表頭文本信息,再設(shè)置該信息表的垂直滾動(dòng)條。
create_tree_tablets
該函數(shù)主要是為在映電影的排片數(shù)據(jù)創(chuàng)建數(shù)據(jù)表格。create_tree_history
該函數(shù)主要是為歷史電影數(shù)據(jù)創(chuàng)建數(shù)據(jù)表格。
create_tree_predict
該函數(shù)主要是為在映電影票房預(yù)測結(jié)果數(shù)據(jù)創(chuàng)建數(shù)據(jù)表格。clear_tree
該函數(shù)主要功能是在切換展示數(shù)據(jù)表格時(shí),對已展示表格數(shù)據(jù)進(jìn)行清除。
該函數(shù)有一個(gè)tree參數(shù),首先對tree進(jìn)行銷毀,再對該表格的垂直滾動(dòng)條進(jìn)行銷毀。
showing
該函數(shù)對應(yīng)按鈕’在映電影’,用于實(shí)現(xiàn)獲取在映電影數(shù)據(jù)功能。history
該函數(shù)對應(yīng)按鈕’歷史電影’,用于實(shí)現(xiàn)獲取歷史電影數(shù)據(jù)功能。
predict
該函數(shù)對應(yīng)按鈕’在映電影票房預(yù)測’,用于實(shí)現(xiàn)對在映電影票房預(yù)測并展示。tablets
該函數(shù)對應(yīng)按鈕’拍片分析’,用于實(shí)現(xiàn)獲取排片分析數(shù)據(jù)功能。
center_window
該函數(shù)是創(chuàng)建整個(gè)GUI窗體的函數(shù)。clicking
該函數(shù)對應(yīng)’在映電影分析’按鈕,用于跳轉(zhuǎn)在映電影分析網(wǎng)頁。先調(diào)用getData.py下的recently函數(shù)獲取在映電影數(shù)據(jù),再調(diào)用pyec.py文件下的Showing函數(shù)進(jìn)行統(tǒng)計(jì)圖表制作,最后跳轉(zhuǎn)到數(shù)據(jù)圖表網(wǎng)頁。
clicked
該函數(shù)對應(yīng)’歷史數(shù)據(jù)分析’按鈕,用于跳轉(zhuǎn)電影票房分析網(wǎng)頁。industry
該函數(shù)對應(yīng)’數(shù)據(jù)大盤’按鈕,用于跳轉(zhuǎn)數(shù)據(jù)大盤網(wǎng)頁。
ui_process
該函數(shù)主要是對GUI窗體控件等進(jìn)行布局。創(chuàng)建根窗體,設(shè)置GUI的名稱,大小,整體高亮顏色,對內(nèi)部子窗體進(jìn)行了初始化并且在子窗體的左上角添加了一張logo圖片。在子窗體設(shè)置了各個(gè)功能對應(yīng)的按鈕。設(shè)置了整體窗體的布局,以及各個(gè)子窗體控件的設(shè)置,設(shè)置了窗體列參數(shù)及運(yùn)行了整個(gè)窗體。
4.3 啟動(dòng)運(yùn)行
main.py
該函數(shù)是整個(gè)系統(tǒng)的GUI入口,調(diào)用并運(yùn)行了GUI。
from GUI import uiob
if __name__ == '__main__':
ui = uiob()
ui.ui_process()
5.可視化設(shè)計(jì)
pyec.py
該文件主要是對getData.py文件獲取到的數(shù)據(jù)進(jìn)行可視化操作,共有3個(gè)函數(shù),代碼功能詳解如下:
History()
該函數(shù)主要是對歷史電影數(shù)據(jù)進(jìn)行可視化,具體代碼如下:
csv_file = 'data/moviesBoxOffice.csv' # 設(shè)置csv文件的路徑
data = pd.read_csv(csv_file, encoding='gbk') # 使用pandas讀取csv文件中的數(shù)據(jù)
data_type = data['影片主分類'].value_counts() # 統(tǒng)計(jì)影片主分類的各類別數(shù)量
data_BoxOffice = data['總票房(萬)'][:10] # 獲取前10部電影的總票房數(shù)據(jù)
該代碼塊主要是讀取歷史電影票房數(shù)據(jù)為畫圖做前期準(zhǔn)備工作。
# 創(chuàng)建柱狀圖a,展示票房TOP1000類型統(tǒng)計(jì)
a = (
Bar(init_opts=opts.InitOpts(height="450px", width="900px", theme=ThemeType.MACARONS, bg_color='white')) # 設(shè)置圖表的基本參數(shù)
.add_xaxis(list(data_type.index)) # 設(shè)置x軸數(shù)據(jù)
.add_yaxis("類型", list(data_type)) # 設(shè)置y軸數(shù)據(jù)
.set_global_opts(
title_opts=opts.TitleOpts(title="票房TOP1000類型統(tǒng)計(jì)"), # 設(shè)置圖表標(biāo)題
# datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")], # 設(shè)置數(shù)據(jù)縮放選項(xiàng)
)
)
# 創(chuàng)建柱狀圖b,展示票房TOP10總票房統(tǒng)計(jì)
b = (
Bar(init_opts=opts.InitOpts(height="450px", width="900px", theme=ThemeType.LIGHT)) # 設(shè)置圖表的基本參數(shù)
.add_xaxis(list(data['影片名稱'][:10])) # 設(shè)置x軸數(shù)據(jù)
.add_yaxis("票房", list(data_BoxOffice)) # 設(shè)置y軸數(shù)據(jù)
.set_global_opts(
title_opts=opts.TitleOpts(title="票房TOP10總票房統(tǒng)計(jì)"), # 設(shè)置圖表標(biāo)題
# datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")], # 設(shè)置數(shù)據(jù)縮放選項(xiàng)
xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate": 20}) # 設(shè)置x軸標(biāo)簽旋轉(zhuǎn)角度
)
)
# 創(chuàng)建折線圖c,展示票房TOP10各類票房統(tǒng)計(jì)
c = (
Line(init_opts=opts.InitOpts(height="450px", width="900px", theme=ThemeType.LIGHT)) # 設(shè)置圖表的基本參數(shù)
.add_xaxis(list(data['影片名稱'][:10])) # 設(shè)置x軸數(shù)據(jù)
.add_yaxis("總票房(萬)", list(data['總票房(萬)'][:10]), is_smooth=True) # 設(shè)置y軸數(shù)據(jù)并進(jìn)行平滑處理
.add_yaxis("首日票房(萬)", list(data['首日票房(萬)'][:10]), is_smooth=True) # 設(shè)置y軸數(shù)據(jù)并進(jìn)行平滑處理
.add_yaxis("首周票房(萬)", list(data['首周票房(萬)'][:10]), is_smooth=True) # 設(shè)置y軸數(shù)據(jù)并進(jìn)行平滑處理
.add_yaxis("首周末票房(萬)", list(data['首周末票房(萬)'][:10]), is_smooth=True) # 設(shè)置y軸數(shù)據(jù)并進(jìn)行平滑處理
.add_yaxis("點(diǎn)映票房(萬)", list(data['點(diǎn)映票房(萬)'][:10]), is_smooth=True) # 設(shè)置y軸數(shù)據(jù)并進(jìn)行平滑處理
.set_series_opts(label_opts=opts.LabelOpts(is_show=True), # 設(shè)置數(shù)據(jù)標(biāo)簽顯示選項(xiàng)
linestyle_opts=opts.LineStyleOpts(width=3)) # 設(shè)置線條樣式
.set_global_opts(
title_opts=opts.TitleOpts(title="票房TOP10各類票房統(tǒng)計(jì)", pos_left='top'), # 設(shè)置圖表標(biāo)題及位置
# datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")], # 設(shè)置數(shù)據(jù)縮放選項(xiàng)
xaxis_opts=opts.AxisOpts(name="影片名稱", axislabel_opts={"rotate": 20}), # 設(shè)置x軸標(biāo)簽及標(biāo)簽旋轉(zhuǎn)角度
yaxis_opts=opts.AxisOpts(name="票房(萬)") # 設(shè)置y軸標(biāo)簽
)
)
# 由于文章篇幅的問題,部分代碼省略
以上代碼主要是針對各種數(shù)據(jù)指標(biāo)進(jìn)行數(shù)據(jù)可視化,最后將其顯示到網(wǎng)頁供程序調(diào)用。兩個(gè)柱形圖分別對票房Top1000的電影類型和票房Top10的總票房進(jìn)行統(tǒng)計(jì)。五個(gè)折線圖分別是對票房Top10電影的各類票房、場次人次、票價(jià)、輿情、口碑五個(gè)方面的統(tǒng)計(jì)。最后兩個(gè)圖為電影名稱詞云圖和電影分類餅圖。
Showing()
該函數(shù)主要是對正在上映的電影進(jìn)行數(shù)據(jù)分析,包含在映電影的票房、場次、人次、上座率五個(gè)柱形統(tǒng)計(jì)圖,影片票房占比、場次占比、人次占比三個(gè)餅狀統(tǒng)計(jì)圖,影片地域分布票房、場次、人次三個(gè)層疊柱形圖。
Industry()
該函數(shù)主要是對近期電影行業(yè)及電影行業(yè)歷史數(shù)據(jù)的可視化,主要包括熱門電影票房趨勢折線統(tǒng)計(jì)圖,特效廳票房占比分布餅狀圖。
6.總結(jié)
通過該課程設(shè)計(jì)的實(shí)踐訓(xùn)練,使學(xué)生掌握相關(guān)的智能數(shù)據(jù)處理與智能系統(tǒng)開發(fā)的知識,培養(yǎng)智能信息系統(tǒng)項(xiàng)目開發(fā)過程中的分析、設(shè)計(jì)和工程文檔編寫能力,提高工程應(yīng)用能力和綜合分析、解決實(shí)際問題的能力。
下面是該系統(tǒng)的主要功能及技術(shù)指標(biāo):
數(shù)據(jù)獲取和預(yù)處理:
- 使用pandas讀取數(shù)據(jù)文件;
- 拆分不同的屬性信息,形成列表、元組、字典或集合;
- 刪除空列或行;
- 觀察數(shù)據(jù)并清洗錯(cuò)誤數(shù)據(jù);
-使用pandas對數(shù)據(jù)整理,方便之后的分析和可視化。
數(shù)據(jù)分析:
- 使用numpy和pandas對數(shù)據(jù)預(yù)處理后的數(shù)據(jù)進(jìn)行分析,設(shè)計(jì)七種以上的數(shù)據(jù)分析場景。
數(shù)據(jù)可視化:
- 利用Matplotlib和seaborn分別對每種分析場景可視化。
數(shù)據(jù)涉及的數(shù)據(jù)項(xiàng):-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ā)工具。文章來源:http://www.zghlxwxcb.cn/news/detail-786015.html
我是大橙子,下期見!文章來源地址http://www.zghlxwxcb.cn/news/detail-786015.html
到了這里,關(guān)于基于Python的影視數(shù)據(jù)智能分析系統(tǒng)開發(fā)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!