大数据项目开发案例_大数据分析技术——项目案例1(猫眼电影数据分析上)...
壹
貓眼Top100電影數據分析概述
從這一節開始,我們就綜合利用已學到的一些分析技術來嘗試做一些比較復雜的實際數據分析項目。在這些實際的項目案例中,我們將會看到一個完整的數據分析流程:數據清理——數據分析——數據可視化(即數據解釋)。最終使得用戶能夠一眼看清楚一批復雜數據中所蘊含的知識。
本節所要講的一個案例是:對利用爬蟲手段從貓眼網站所爬下來的Top100的電影數據展開分析。在爬下來的電影數據集中,最重要的數據包括影片的主演、影片的上映時間、制作國、影評分等。
而我們想知道的是:在這批數據中,主要有哪些國家制作了這些膾炙人口的影片、最著名的演員都有哪些、不同的年份或不同的月份下影片的上映情況、不同影評分下的影片數量分布情況等信息。通過這些信息我們就知道,哪些國家發型的大片最多,哪些年份上映的好看影片最多,通常都會集中在哪些月份進行集中上映,同時我們還能知道最受觀眾喜愛的演員都有哪些。最后我們還能夠清楚地看到,在這100部影片中,大部分影片的一個打分情況。
現在,就讓我們來具體分析一下這批影片數據。關于影片數據集如何獲取的,大家可以利用我們所介紹過的爬蟲技術從貓眼網站進行爬取,這里就不再單獨介紹。
此外,我們在本項目中采用了百度開發出來的pyecharts庫來開展可視化操作,它在當前項目中要比Matplotlib庫更加好用,尤其是在折線圖的展示上。
如果沒有安裝過這個可視化庫的,可以參考一下下面這個網址所提供的一個安裝思路:
https://blog.csdn.net/zqs305082800/article/details/84581299
另外一個庫:collections,則可用于快速統計不同數據出現的次數。非常方便。
感興趣的小伙伴們可以考慮對pyecharts庫和collections庫做一個深入了解,必將對你的數據分析工作有莫大幫助。
PS:本項目案例中的代碼都是成段出現,并非是連一片出現的,這是因為我在測試的過程中發現:若把這些片段的代碼集中到一起,最終只能展示出最后的那個分析結論的可視化效果圖,其余分析結論的可視化展示就會失效。故而我這里選擇了分段來講解。
再有一點需要說明的是:本項目案例中,有些處理邏輯參考借鑒了一丟丟前輩們的有益思路。因此,如果你覺得這里的分析處理邏輯似曾相識,請不要過于驚訝,哈哈哈!但我會盡可能地把我對這個項目分析案例的理解以及對這些理解的實現展示地更透徹一些!
貳
展示數據集的基本信息
首先,我們將數據導入到代碼中,并查看一下這批數據集的基本信息以及一些基本的統計量分析結果。對于影評分,我們可以查看它的平均分、最大值、最小值等。然后我們就開始對數據集中的一些數據做進一步的分析處理,并以可視化的形式展示給大家。這里所要分析的數據就是影片的上映日期,先看看不同年份下所上映的影片數的一個分布情形,以折線圖進行展示:
import pandas as pd
import numpy as np
from pyecharts.charts import Line,Bar,Pie
import pyecharts.options as opts
from collections import Counter
#設置字段對齊
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
#設置最大顯示列數與顯示寬度,以防止出現不必要的換行輸出現象
pd.set_option('display.max_columns',500)
pd.set_option('display.width',1000)
data = pd.read_csv('maoyan.csv',encoding='utf-8')
print('前10部影片信息:')
print(data.head(10))
#查看數據基本信息
print('查看影片數據基本信息:')
print(data.info())
#查看數據集中的基本統計分析
print('查看影片數據基本統計結果:')
print(data.describe())
#獲得電影的平均分
print('獲得所有影片的平均分:')
print(data['star'].mean())
#提取日期的年份與月份,這里沒有采用Pandas庫中的to_datatime()
#主要是考慮到原始數據中的日期沒有包含天,只有年和月
#且采用字符串分割操作更顯得方便些
data['year'] = data['pub_time'].str.split('-').str[0]
data['month'] = data['pub_time'].str.split('-').str[1]
year = data.groupby('year')['year'].count()
attr_year = list(year.index)
num_year = list(year)
#以下是pyecharts庫中繪制折線圖的基本套路
#先聲明一個Line對象,然后添加X軸坐標
#然后添加y軸坐標,如果需要給y軸坐標起名字的話,可添加名字
#利用is_smooth可以設置折現是光滑曲線還是不光滑的折線
#最后設置一下折線圖的一些全局屬性,比如標題,位置是居中還是
#左對齊或右對齊等
line = (
? ? Line()
? ? .add_xaxis(attr_year)
? ? .add_yaxis('',num_year,is_smooth=True)
? ? .set_global_opts(title_opts=opts.TitleOpts(,pos_left='center'))
? ? ? ? )
#下面這一行代碼讓折線圖在Jupyter Notebook上顯示的
#一條必備命令,缺少它,我們所繪制的折線圖
#將不會在Notebook上顯示。
line.render_notebook()
其運行結果截圖如下:
從這個折線圖上我們不難看出這么一個信息:在1993年到2013年這11年間,上映的大片普遍比較多(個別年份除外)。當然,這個訊息的背后還能進一步得出什么樣的結論,比如是否可以進一步判定在這11年間內,大片的行情普遍比較火等,這就要靠更專業的人士結合他們所處行業的綜合信息來作出這方面的判斷了。
叁
查看不同月份上映的影片數
通常,電影的上映時間是很有講究的,比如一些大片會選在黃金周來上映,因為那個時期觀影人數會更多;再比如,影片的排擋也會綜合考慮不同月份下的行情。因此,我們可以對這批影片數據做進一步分析,看看通常在哪些月份上映的影片數最多:
month = data.groupby('month')['month'].count()
attr_month = list(month.index)
v_month = list(month)
#以下是利用pyecharts庫制作柱狀圖的基本思路
bar = (
? ? Bar()#聲明一個Bar對象
? ? .add_xaxis(attr_month)#添加X坐標
? ? .add_yaxis('',v_month)#添加y坐標值,也可以再加個標題
? ? .set_global_opts(title_opts=opts.TitleOpts(,pos_left='center'))#設置好柱狀圖的全局信息,包括圖標題、位置等!
? ? ? ? )
#這一步非常重要,千萬不能省略,否則
#無法在NoteBook上顯示
bar.render_notebook()
其運行結果如下:
從這個柱狀圖來看,我們可以看出一個大體的趨勢:步入到下半年之后,影片通常都會扎堆放映了。這可以被電影從業人員視作是一個影片檔期排擋規律。比如我們國家每年都會有一個賀歲檔,我想大概也是因為這個原因吧。至于為什么會有這么一個神奇的規律,這就需要深度分析人們的社會行為、消費習慣規律等數據才能得出一個準確答案,而不是從這一批數據中就能得到的。
肆
影片發行國分布情況分析
弄明白影片上映時間的規律之后,我們接下來就會想著這些最受歡迎的影片大多來源于哪些國家。通過這樣的分析,我們就可以看出當前哪些國家制作的影片最受歡迎,或者還可以這么說:哪些國家在制作這種受歡迎大片上的實力最牛掰。
#本段代碼的作用是分析出不同國家所制作的影片數的一個占比情況
def get_country(country):
? ? #首先要做的就是提取所有的國家信息
? ? country_str = ''
? ? if country.find('(') < 0 or country.find('中國香港') > 0 :
? ? ? ? #這里的條件判斷并不特別嚴謹,是因為滿足上述
? ? ? ? #條件的第一個判斷,也可能是來自國外的影片,比如
? ? ? ? #數據集中的泰坦尼克號這部影片就來自國外,但我們會依據
? ? ? ? #這里的判斷而將其歸類于中國電影
? ? ? ? #獲取國家這個API實際上還需要做進一步的分析,
? ? ? ? #但就目前數據集中有限的信息,我們很難做出最完美的判斷。
? ? ? ? #因此,這就說明采集數據時,保證數據信息的完整性
? ? ? ? #是多么的重要。
? ? ? ? country_str = '中國'
? ? elif country.find('法國戛納') > 0:
? ? ? ? country_str = '法國'
? ? else:
? ? ? ? country_str = country.split('(')[1].strip(')')
? ? return country_str
data['country'] = data['pub_time'].map(get_country)
country = data.groupby('country')['country'].count()
attr_country = list(country.index)
num_country = list(country)
#以下是pyecharts庫繪制餅狀圖的基本思路
pie = Pie()#聲明一個Pie圖對象
pie.add(
? ? "國家",#設置餅狀圖名稱
? ? #設置一下餅狀圖中要顯示的數據
? ? [list(z) for z in zip(attr_country?,num_country?)],
? ? # center為圓心坐標
? ? center=["20%", "50%"],
? ? # 60為內半徑,80為外半徑
? ? radius=[60, 80],
)
? ? ? ?#設置餅狀圖的全局屬性,包括標題、位置信息等
pie.set_global_opts(
? ? ? ? title_opts=opts.TitleOpts(,pos_left='left'),
? ? ? ? legend_opts=opts.LegendOpts(
? ? ? ? ? ? type_="scroll", pos_top="200%", pos_left="80%", orient="vertical"
? ? ? ? ),
? ? )
# 設置顯示百分比
pie.set_series_opts(
? ? ? ? tooltip_opts=opts.TooltipOpts(
? ? ? ? ? ? trigger="item", formatter="{a}
: {c} (ozvdkddzhkzd%)"
? ? ? ? ))
? ? ? ?#下面這行代碼是確保餅狀圖能夠在Notebook上顯示的必備代碼
pie.render_notebook()
其運行結果如下:
從這個國家分布的餅狀圖上來看,中美兩國所發布的大片受到的喜愛程度最高,尤其是中國。這個原因我想主要還是在于發布這個貓眼Top100的網站里參與影片評分的人絕大多數還是以中國人為主。這里邊多少有一些愛國情懷的作用,哈哈哈。
壹
小結
這一節我們簡單地分析了一下貓眼Top100電影數據集中的一些基本信息,包括影片上映時間規律、影片發行國規律等信息。在這些分析過程中,我們利用了所學習到的分組分析、基本統計分析等分析技術。在分析影片發行國規律時我們還對數據做了比較復雜的處理,這屬于數據清理的范疇。最后我們利用可視化的形式展示了我們所分析出來的結論,并對這個結論做了一些基本的解釋。
因此,我們可以從這個實際的小項目中就能夠完整地看到數據分析的三個主要環節——數據清理、數據分析、分析結果解釋等。
當然,對于這批數據集的分析我們還沒結束,還有一些重要的信息有待提取,這就留待下一節的項目案例分享中繼續為大家分享。
本節的數據分析項目案例分享就到此為止,謝謝大家!我們下一節的分享中,不見不散!
總結
以上是生活随笔為你收集整理的大数据项目开发案例_大数据分析技术——项目案例1(猫眼电影数据分析上)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac定时执行python_Python
- 下一篇: navicat 只对比一张表的数据_Ex