豆瓣電影Top250的探索性分析

豆瓣電影Top250的探索性分析

4 人贊了文章

最近在看《數據挖掘導論》,發現很多看書的時候明白,但是實際遇到問題中就蒙圈,其中第三章的探索性分析,講述的是用圖表可視化對數據進行探索,分析。工作中用到Python的機會不多,但是很喜歡這門語言,也處於練習的目的,就爬取了豆瓣電影Top250並對其進行簡單分析。

經高人提醒,下面的分析結論只基於豆瓣電影的數據分析出來的結論。

一、數據描述

本次爬取了豆瓣Top250的電影信息,對每部電影,一共收集了17個原始數據欄位,分別是:

  • rank:電影排名
  • movieName:電影名
  • movieShortShow :電影封面的介紹
  • Introduction:電影劇情概要
  • director:導演
  • mainActor :主演
  • score :電影評分
  • year:上映年份
  • type :電影類型
  • country :製片國家
  • language :語言
  • review:評論數
  • starFive starFour starThree starTwo starOne :對電影分別打5,4,3,2,1星的佔比。

以排名第19的亂世佳人為例:

有些電影的導演和主演有多個,分析的時候每出現一次就計數一次。

二 、探索性分析

本次分析都基於jupyter notebook上進行。我也非常推薦這個軟體,非常nice!

導入所需庫:

%matplotlib inlineimport pandas as pd import numpy as npimport matplotlib.pyplot as plt import seaborn as seaimport matplotlib as mplfrom wordcloud import WordCloudmpl.rcParams[font.sans-serif] = [KaiTi]mpl.rcParams[font.serif] = [KaiTi]

然後用Pandas導入爬取後的數據。

movie_data=pd.read_excel(rmovieData.xlsx,header=1,index_col=0)movie_data.head()

看一下有哪些原始數據

(一)電影年份分析

眾所周知,電影1994年是電影史的奇蹟元年,在這一年有《肖申克的救贖》,《阿甘正傳》,我最喜歡的《大話西遊》等出色電影。那麼看看除了1994年還有哪些年份是出現大量好電影的電影元年。下面對豆瓣Top250電影榜單按照上映的年份做一個統計,按照當年上映的上榜電影數據降序排列,前15名分別是:

#電影的年份分別以數量,評分取平均方式聚合。data=pd.DataFrame(movie_data.groupby([year]).agg({rank:count,score:mean}))data.columns=[yearNum,avgscore]year_df=data.sort_values([yearNum],ascending=False)year_df[:15]

以柱狀圖的形式可能會更直觀些。

fig,ax=plt.subplots(1,1,figsize=(20,10))rect=ax.bar(np.arange(len(data.index)),data[yearNum],width_=0.5)for rec in rect: x=rec.get_x() height=rec.get_height() ax.text(x+0.1,1.02*height,str(height),fontsize=20)ax.set_xticks(np.arange(len(data.index)))ax.set_xticklabels(data.index,size=18,rotation=60)ax.set_yticklabels(np.arange(0,14,2),size=25)ax.set_xlabel(year,size=25)ax.set_ylabel(movieYearNum,size=25)

通過分析發現,上榜電影數量排名前四的年份是2010,2009,2004,1994,2001年。並且上榜的電影都集中在和現在距離不遠的年份,這也從數據上證實了電影這種藝術形式和年代歷史背景很大關係,大眾的審美會不斷地隨歲月變化。其實不止電影,還有很多例如音樂,人們的打扮穿著都和年代歷史很有關聯。

接下來分別看看上榜電影數多的年份有哪些大家耳熟能詳的電影。

2010年:

2009年:

2004年:

1994年:

2001年:

另外,隨著年代的發展,越來越多的科技手段加入到了電影,讓電影特效等製作技術也越來越成熟,我們看看隨著年代發展電影的品質有沒有顯著的提升,可以通過每年的上榜電影平均體現這一點。

(二)電影導演分析

現在的觀眾看電影,第一時間首先是看演員,第二看IP。其實一部好的電影更是離不開導演,有些導演就會厲害到觀眾是沖著導演的名號去的,就如我喜歡的諾蘭,李安,每次都新作我都會去關注,當然也還有很多其他厲害的電影,下面對上榜的電影的導演進行統計分析:

那些導演入圍的電影數量最多?排名前15名的電影導演是:

directors=list(movie_data[director])dir_dict = {}for director in directors: director_array=director.split(/) for item in director_array: dir_dict[item]=dir_dict.get(item,0)+1dir_pd=pd.DataFrame.from_dict(dir_dict,orient=index)dir_pd.columns=[count]dir_pd[per]=dir_pd[count]/sum(dir_pd[count])dir_pd.sort_values([count],axis=0,inplace=True,ascending=False)dir_pd[:15]

不出所料,排在前面的導演都是大家熟知的導演。宮崎駿動畫大師在豆瓣的Top250竟然有7部上榜,這能說明老爺子的功力所在,也側面反映了豆瓣對動畫這個類型也是比較認可的,電影類型分析我們接下來還會說。上榜的名單中一共有5位華人,這證明咱們華人在電影還是有很大的貢獻的。

這兒必須提到一點,這是基於豆瓣電影的數據,而豆瓣本身是中國人的網站,所以會對華人有所傾向。

下面看看排在前面的導演的作品:

宮崎駿老爺子:

諾蘭:

史蒂文·斯皮爾伯格:

王家衛(墨鏡王):

(三)電影演員分析

前文說到,當代觀眾看電影第一是沖著演員去的,現在就看看上榜的電影中都有哪些演員參演,按照參演的上榜電影數組降序排列,排前15的分別是:

acts=list(movie_data[mainActor])act_dict = {}for act in acts: try: act_array=act.split(/) for item in act_array: act_dict[item]=dir_dict.get(item,0)+1 except Exception as e: print(e)dir_pd=pd.DataFrame.from_dict(act_dict,orient=index)dir_pd.columns=[count]dir_pd[per]=dir_pd[count]/sum(dir_pd[count])dir_pd.sort_values([count],axis=0,inplace=True,ascending=False)dir_pd

試把這裡演員的數據和導演的數據對比,發現在上榜電影中,參演電影數目排在前面的演員的入圍電影數量遠遠不及導演同類指標。參演電影最多的是演員雅克·貝漢,一共3部,而最多的導演有7部。這從數據上說明一部電影是否出色,導演的作用比演員的作用要大。怪不得小李子努力了這麼多年才在去年拿到小金人呢。

(四)電影類型分析

任何事物都有其受眾範圍,電影更是這樣。一部電影的類型決定它的喜愛人群,有的人喜歡看像《動作與激情》類動作大戲,有的人喜歡看《復仇者聯盟》類科幻電影,有的人喜歡看《記憶碎片》類懸疑片,更有人喜歡看《咒樂園》等恐怖片。

接下來用數據說明普遍受大眾接受的電影類型,統計入圍電影的各類型數量,前15名分別是:

經過分析後發現觀眾十分喜愛有完整情節結構的電影,之前在知乎看到有位知友評論的評論讓我印象很深刻,他說人們喜愛電影是因為在短短的兩個小時內能讓自己代入電影的角色,以兩個小時的時間過完別人的一生,從數據上也充分反映 這一點。從數據上來看,人們還是更喜歡愛情,喜劇讓人開心的電影。同樣受大眾喜歡的是扣人心弦的犯罪冒險類電影,讓人大叫過癮。

(五)電影口碑一致性

前幾天在看B站Up主木魚水心的最新木魚說,他說最流行的東西不一定是最受歡迎的,因為每件事物都有其受眾群體。若在其受眾群體里,口碑當然會很好,但是當事物流行起來,越來越多的人去關注他,隨之而來不是受眾群體的人也越來越多,事物的口碑宏觀看起來就不會一致了。

下面看看哪些電影的口碑是不一致,為了量化電影的不一致性,需要計算兩個指標:

  • 平均星級:用各個星級所佔的比例對星級進行加權平均,求出加權平均星級,作為衡量電影質量的指標。之所以不使用豆瓣的評分指標,是因為豆瓣評分綜合考慮了電影的評價、評分人數等指標,並不只單純衡量了電影質量;
  • 星級標準差:在平均星級的基礎上,我們可以計算出星級評價的標準差,這個指標可以量化電影口碑的不一致程度,標準差越大,則電影的口碑越不一致。

在分析過程中,我們用starMean,starStd分別表示平均星級,星級標準差。

計算這兩個指標的代碼:

def f(x): return float(x.strip(%))/100g=lambda x: 5*f(x[0])+4*f(x[1])+3*f(x[2])+2*f(x[3])+f(x[4])calstd=lambda x: np.sqrt(sum(list(map(f,x[:5]))*(np.arange(5,0,-1)-x[5])**2))movie_data[starMean]=movie_data[[starFive,starFour,starThree,starTwo,starOne]].apply(g,axis=1)movie_data[starStd]=movie_data[[starFive,starFour,starThree,starTwo,starOne,starMean]].apply(calstd,axis=1)

適當解釋下starStd如何算,在starMean基礎上,假設有N個人參與打分, star_{i} 為打i顆星的人數佔比。那麼

starStd=frac{sum_{i=0}^{4}N*star_i *{(5-i - starMean)^2}}{N} =sum_{i=0}^{4}star_i *{(5-i - starMean)^2}

看看口碑一致性最高的電影前5部是:

口碑最不一致的前5部是:

其中最大爭議的是大衛·林奇導演的作品《穆赫蘭道》,這部電影一直都存在著巨大爭議,喜歡這部電影的人稱其為神作,認為劇情設置很巧妙,並寫了很多文章對其中的情節進行分析。不喜歡的人認為這部作品是在故弄玄虛,浪費觀眾的時間。

下面畫出 平均星級-星級標準差的散點圖,用圖直觀展示電影的打星和口碑一致性的關係。

可以看到當平均星級增加,星級標準差在降低,也就是觀眾對電影的評價也越一致。

三、參考

1.幫你選電影—對豆瓣電影Top250榜單的數據分析:zhuanlan.zhihu.com/p/29

2.豆瓣的電影評分靠譜嗎?zhuanlan.zhihu.com/p/24

3.爬蟲和上述分析代碼地址:github.com/SwimSweet/My

推薦閱讀:

豆瓣電影 數據分析
1月豆瓣電影口碑榜Top 20
2016上半年豆瓣電影口碑榜Top 50
豆瓣IMdb大PK,中美觀眾巔峰對決!
這款油猴腳本發布僅1月就登頂同類榜首,每日下載量領先第2名6倍之多!

TAG:數據分析 | 電影 | 豆瓣電影 |