3天破9億!上萬條評論解讀《西虹市首富》是否值得一看
前言:
縱觀近幾年的國產(chǎn)電影市場,“開心麻花“似乎已經(jīng)成為了票房的保證。從《夏洛特?zé)馈贰ⅰ缎咝叩蔫F拳》到最新上映的《西虹市首富》都引爆了票房。本期我們會(huì)根據(jù)從貓眼電影網(wǎng)爬取到的上萬條評論為你解讀《西虹市首富》是否值得一看。
數(shù)據(jù)爬取:
此次數(shù)據(jù)爬取我們參考了之前其他文章中對于貓眼數(shù)據(jù)的爬取方法,調(diào)用其接口,每次取出部分?jǐn)?shù)據(jù)并進(jìn)行去重,最終得到上萬條評論,代碼如下:
- tomato = pd.DataFrame(columns=['date','score','city','comment','nick'])
- for i in range(0, 1000):
- j = random.randint(1,1000)
- print(str(i)+' '+str(j))
- try:
- time.sleep(2)
- = 'http://m.maoyan.com/mmdb/comments/movie/1212592.json?_v_=yes&offset=' + str(j)
- html = requests.get(url=url).content
- data = json.loads(html.decode('utf-8'))['cmts']
- for item in data:
- tomato = tomato.append({'date':item['time'].split(' ')[0
- ],'city':item['cityName'], 'score':item['score'],'comment':item[
- 'content'], 'nick':item['nick']},ignore_index=True)
- tomato.to_csv('西虹市首富4.csv',index=False)
- except:
- continue
數(shù)據(jù)分析:
我們看一下所得到的數(shù)據(jù):
數(shù)據(jù)中我們可以得到用戶的昵稱,方便后面進(jìn)行去重。后面的部分主要圍繞評分、城市、評論展開。
首先看一下,評論分布熱力圖:
京津翼、江浙滬、珠三角等在各種榜單長期霸榜單的區(qū)域,在熱力圖中,依然占據(jù)著重要地位。同時(shí),我們看到東三省和四川、重慶所在區(qū)域也有著十分高的熱度,這也與沈騰自身東北人&四川女婿的身份不謀而合(以上純屬巧合,切勿較真)。
下面我們要看的是主要城市的評論數(shù)量與打分情況:

打出最高分4.77分的正是沈騰家鄉(xiāng)的省會(huì)城市哈爾濱(沈騰出生于黑龍江齊齊哈爾),看來沈騰在黑龍江還是被廣大父老鄉(xiāng)親所認(rèn)可的。最低分和次低分來自于合肥和鄭州,今后的開心麻花可以考慮引入加強(qiáng)在中部地區(qū)的宣傳。
我們按照打分從高到底對城市進(jìn)行排序:
在評論數(shù)量最多的二十個(gè)城市中,評分前七名的城市中東北獨(dú)占四席,而分?jǐn)?shù)相對較低的城市中武漢、合肥、鄭州都屬于中部地區(qū),可見不同地區(qū)的觀眾對影評的認(rèn)可程度有著一定差異。
我們把城市打分情況投射到地圖中:(紅色表示打分較高,藍(lán)色表示較低)
進(jìn)一步,我們把城市劃分為評分較高和較低兩部分
較高區(qū)域:
較低區(qū)域:
可以看到對于“西紅柿”,南北方觀眾的評價(jià)存在一定差異,這與每年春晚各個(gè)地區(qū)收視率似乎有一些吻合知乎。沈騰本身也是春晚的常客,電影中自然會(huì)帶一些“春晚小品味”,這似乎可以一定程度上解釋我們得到的結(jié)果。
看過了評分,我們看一下評論生成的詞云圖,以下分別是原圖和據(jù)此繪制的詞云圖:
不知道大家的想法如何,至少在我看到了這樣的詞云,搞笑、笑點(diǎn)、值得、開心、不錯(cuò),甚至是哈哈都會(huì)激起我強(qiáng)烈的看片欲望。同時(shí),沈騰也被大家反復(fù)提起多次,可以預(yù)見其在片中有著非常不錯(cuò)的表演,也會(huì)一定程度上激發(fā)大家看片的欲望。
部分代碼展示:
熱力圖:
- tomato_com = pd.read_excel('西虹市首富.xlsx')
- grouped=tomato_com.groupby(['city'])
- grouped_pct=grouped['score'] #tip_pct列
- city_com = grouped_pct.agg(['mean','count'])
- city_com.reset_index(inplace=True)
- city_com['mean'] = round(city_com['mean'],2)
- data=[(city_com['city'][i],city_com['count'][i]) for i in range(0,
- city_com.shape[0])]
- geo = Geo('《西虹市首富》全國熱力圖',
- title_color="#fff", title_pos="center", width=1200,
- height=600, background_color='#404a59')
- attr, value = geo.cast(data)
- geo.add("", attr, value, type="heatmap", visual_range=[0, 200],visual_text_color="#fff", symbol_size=10, is_visualmap
- =True,is_roam=False)
- geo.render('西虹市首富全國熱力圖.html')
折線圖+柱形圖組合:
- city_main = city_com.sort_values('count',ascending=False)[0:20]
- attr = city_main['city']
- v1=city_main['count']
- v2=city_main['mean']
- line = Line("主要城市評分")
- line.add("城市", attr, v2, is_stack=True,xaxis_rotate=30,yaxis_min=4.2, mark_point=[
- 'min','max'],xaxis_interval =0,line_color='lightblue', ine_width=4,mark_point_textcolor='black',mark_point_color='lightblue', is_splitline_show=False)
- bar = Bar("主要城市評論數(shù)")
- bar.add("城市", attr, v1, is_stack=True,xaxis_rotate=30,yaxis_min =4.2, xaxis_interval =0,is_splitline_show=False)
- overlap = Overlap()
- # 默認(rèn)不新增 x y 軸,并且 x y 軸的索引都為 0
- overlap.add(bar)
- overlap.add(line, yaxis_index=1, is_add_yaxis=True)
- overlap.render('主要城市評論數(shù)_平均分.html')
詞云:
- tomato_str=' '.join(tomato_com['comment'])
- words_list = []
- word_generator = jieba.cut_for_search(tomato_str)
- for word in word_generator:
- words_list.append(word)
- words_list = [k for k in words_list if len(k)>1]
- back_color = imread('西紅柿.jpg') # 解析該圖片
- wc = WordCloud(background_color='white',# 背景顏色
- max_words=200,# 最大詞數(shù)
- mask=back_color, # 以該參數(shù)值作圖繪制詞云,這個(gè)參數(shù)不為空時(shí),width和height會(huì)被忽略
- max_font_size=300, # 顯示字體的最大值
- stopwords=STOPWORDS.add('茍利國'),# 使用內(nèi)置的屏蔽詞,再添加'茍利國'
- font_path="C:/Windows/Fonts/STFANGSO.ttf",
- random_state=42,# 為每個(gè)詞返回一個(gè)PIL顏色
- # width=1000, # 圖片的寬
- # height=860 #圖片的長
- )
- tomato_count = Counter(words_list)
- wc.generate_from_frequencies(tomato_count)
- # 基于彩色圖像生成相應(yīng)彩色
- image_colors = ImageColorGenerator(back_color)
- # 繪制詞云
- plt.figure()
- plt.imshow(wc.recolor(color_func=image_colors))
- plt.axis('off')
票房預(yù)估:
最后我們來大膽預(yù)估下《西虹市首富》的票房,我們?nèi)粘T诠ぷ髦袝?huì)選取標(biāo)桿來對一些即將發(fā)生的事情進(jìn)行預(yù)估。這次我們選擇的標(biāo)桿就是《羞羞的鐵拳》:
基于以下幾點(diǎn)我們選擇《羞羞的鐵拳》作為標(biāo)桿:
- 均是開心麻花出品、題材相似
- 演員陣容重合度高
- 豆瓣粉絲認(rèn)可程度相似(評分均為6.9,處于喜劇片中位數(shù)水平)
- 貓眼粉絲認(rèn)可程度相似(鐵拳評分9.1,西紅柿評分9.3)
我們看一下兩部影片前三天的走勢:
前三天兩部片子的票房走勢十分相似,基于之前我們的平均,我們可以嘗試性(比隨機(jī)準(zhǔn)一點(diǎn))預(yù)測一下“西紅柿”最終的票房。“西紅柿”票房預(yù)測值≈“鐵拳”總票房/“鐵拳”前三天票房*“西紅柿”前三天票房=22.13/5.25*8.62≈36,考慮到鐵拳上映是在國慶假期,西紅柿的票房預(yù)估需要相應(yīng)的下調(diào)。
綜上所述,我們給出30億票房的預(yù)估。大家來和我們一起見證本公眾號“章魚保羅”般神奇的預(yù)測的or“球王貝利”般被啪啪打臉的預(yù)測。