《邪不壓正》評分持續走低,上萬條網友評論揭秘,是救救姜文還是救救觀眾?
萬眾期待的《邪不壓正》已上映有一周時間。
但上映當日早上開畫8.2,上映不到一天閃崩到7.1的評分好像已經給這部片子本該大展拳腳的片子,戴上了一個結結實實的囚具。
首日票房雖然過億,卻依舊不敵多日日票房冠軍《我不是藥神》;難道姜文又搞砸了?不管如何,姜文的電影總能掀起影評人高漲的評論熱情;
今天就跟著我們看看網友對這部姜文電影的感受到底怎么樣。
接下來,我們將會跟你一起用貓眼上萬條評論數據來分析,網友對這部電影的反響究竟如何?整體思路,將會從數據獲取、數據處理、數據可視化三部曲來進行:
一、數據獲取
關于如何獲取網頁的數據,我們一直也是推薦三步走:下載數據、解析數據、保存數據。在下載數據之前,我們看看貓眼官網的網頁結構,看看網友的評論數據接口究竟在哪?
然而,打開貓眼網頁只有寥寥幾個評論,那它的數據會不會是通過json格式保存到服務器中呢?無奈只能通過抓包貓眼APP來找其數據接口
貓眼網頁:http://maoyan.com/films/248566
最后,發現其數據接口為:
http://m.maoyan.com/mmdb/comments/movie/248566.json?_v_=yes&offset=1
其中258566屬于電影的專屬id,offset代表頁數。
最后檢驗,這個接口只給展示1000頁數據,如下:
接口找到后,開始寫爬取數據代碼,詳情代碼如下:
- import requests
- import json
- import time
- import random
- #下載第一頁數據
- def get_one_page(url):
- headers = {
- 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'
- }
- response = requests.get(url,headersheaders=headers)
- if response.status_code == 200:
- return response.text
- return None
- #解析第一頁數據
- def parse_one_page(html):
- data = json.loads(html)['cmts']
- for item in data:
- yield{
- 'comment':item['content'],
- 'date':item['time'].split(' ')[0],
- 'rate':item['score'],
- 'city':item['cityName'],
- 'nickname':item['nickName']
- }
- #保存數據到文本文檔
- def save_to_txt():
- for i in range(1,1001):
- url = 'http://m.maoyan.com/mmdb/comments/movie/248566.json?_v_=yes&offset=' + str(i)
- html = get_one_page(url)
- print('正在保存第%d頁。'% i)
- for item in parse_one_page(html):
- with open('xie_zheng.txt','a',encoding='utf-8') as f:
- f.write(item['date'] + ',' + item['nickname'] + ',' + item['city'] + ',' +str(item['rate'])+','+item['comment']+'\n')
- time.sleep(5 + float(random.randint(1, 100)) / 20)
- if __name__ == '__main__':
- save_to_txt()
二、數據處理
獲取數據后發現,會有一些數據重復,如下圖:
因此需要腳本批量對數據進行去重處理,詳情代碼如下:
- def xie_zheng(infile,outfile):
- infopen = open(infile,'r',encoding='utf-8')
- outopen = open(outfile,'w',encoding='utf-8')
- lines = infopen.readlines()
- list_l = []
- for line in lines:
- if line not in list_l:
- list_l.append(line)
- outopen.write(line)
- infopen.close()
- outopen.close()
- if __name__ == '__main__':
- xie_zheng('文本原路徑','目標路徑')
每天可以不定時(每隔四五小時獲取一次數據,基本每次可獲取900多條數據),最終我們獲取到7/15-7/18之間上萬條來作為數據集分析。
三、數據可視化
今天我們就用pyecharts將清理過后的萬條評論數據來實現可視化。pyecharts 是一個用于生成 Echarts 圖表的類庫。Echarts 是百度開源的一個數據可視化 JS 庫。用 Echarts 生成的圖可視化效果非常棒,pyecharts 是為了與 Python 進行對接,方便在 Python 中直接使用數據生成圖。
詳情請看:http://pyecharts.org/
1. 粉絲北上廣及沿海一帶居多
由上圖,可以看出北上廣一帶的用戶相對較多,這些地方的互聯網用戶基數本來就大,同時沿海一代的三四線城市也成為票房貢獻者的一部分
詳情代碼如下:
- from pyecharts import Style
- from pyecharts import Geo
- #讀取城市數據
- city = []
- with open('xie_zheng.txt',mode='r',encoding='utf-8') as f:
- rows = f.readlines()
- for row in rows:
- if len(row.split(',')) == 5:
- city.append(row.split(',')[2].replace('\n',''))
- def all_list(arr):
- result = {}
- for i in set(arr):
- result[i] = arr.count(i)
- return result
- data = []
- for item in all_list(city):
- data.append((item,all_list(city)[item]))
- style = Style(
- title_color = "#fff",
- title_pos = "center",
- width = 1200,
- height = 600,
- background_color = "#404a59"
- )
- geo = Geo("《邪不壓正》粉絲人群地理位置","數據來源:戀習Python",**style.init_style)
- attr,value= geo.cast(data)
- geo.add("",attr,value,visual_range=[0,20],
- visual_text_color="#fff",symbol_size=20,
- is_visualmap=True,is_piecewise=True,
- visual_split_number=4)
- geo.render()
2. 評論兩極分化相對嚴重
獲取到近幾日的網友上萬條評論數據后,我們切換到今天主題,看看網友對這部電影究竟評論如何?
我們將數據集中的評論內容提取出來,將評論分詞后制作如下詞云圖:
可以看出,排名靠前的熱詞分別是姜文、不錯、好看、彭于晏、劇情、看不懂等,可以看出大家對電影的評價還不錯,同時估計還有一大部分粉絲是專門看國民老公彭于晏的裸奔與八塊腹肌的(哈哈哈)
至于劇情方面,相對于《讓子彈飛》,《邪不壓正》用了更“姜文”更癲狂的方式來講了一個相對簡單的故事。
從砰砰砰幾槍打出片名的那一刻起,影片就在一個極度亢奮的節奏之下不停向前推進著,伴隨著應接不暇的戲謔臺詞,姜文無時無刻不在釋放自己的任性,太瘋了,甚至有些極端。對于普通觀眾來說,太難消化了,上一秒還沒琢磨明白,下一秒又迎來了一個亢奮且莫名的環境和臺詞中(也驗證評論中一部分網友對劇情看不懂的評價)。
詳情代碼如下:
- import pickle
- from os import path
- import jieba
- import matplotlib.pyplot as plt
- from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
- comment = []
- with open('quan.txt',mode='r',encoding='utf-8') as f:
- rows = f.readlines()
- for row in rows:
- if len(row.split(',')) == 5:
- comment.append(row.split(',')[4].replace('\n',''))
- comment_after_split = jieba.cut(str(comment),cut_all=False)
- wl_space_split= " ".join(comment_after_split)
- #導入背景圖
- backgroud_Image = plt.imread('C:\\Users\\Administrator\\Desktop\\1.jpg')
- stopwords = STOPWORDS.copy()
- #可以加多個屏蔽詞
- stopwords.add("電影")
- stopwords.add("一部")
- stopwords.add("一個")
- stopwords.add("沒有")
- stopwords.add("什么")
- stopwords.add("有點")
- stopwords.add("這部")
- stopwords.add("這個")
- stopwords.add("不是")
- stopwords.add("真的")
- stopwords.add("感覺")
- stopwords.add("覺得")
- stopwords.add("還是")
- #設置詞云參數
- #參數分別是指定字體、背景顏色、最大的詞的大小、使用給定圖作為背景形狀
- wc = WordCloud(width=1024,height=768,background_color='white',
- mask=backgroud_Image,font_path="C:\simhei.ttf",
- stopwordsstopwords=stopwords,max_font_size=400,
- random_state=50)
- wc.generate_from_text(wl_space_split)
- img_colors= ImageColorGenerator(backgroud_Image)
- wc.recolor(color_func=img_colors)
- plt.imshow(wc)
- plt.axis('off')#不顯示坐標軸
- plt.show()
- #保存結果到本地
- wc.to_file('保存路徑')
(1) 星影評占比高達20%
圖中可以看出,五星級比例接近40%,而一星級比例與四星級比例幾乎差不多,幾乎為都為20%。(備注:一星級數量等于1與0.5的總和,以此類推)
很明顯,姜文再次掀起了影評人和觀眾的論戰,盡管姜文對影評人并不友好,但影評人還是愿意去袒護姜文。其實,姜文的電影關鍵在于你期待什么?類型片?姜文拍的從來都不是類型片。藝術片?姜文的電影里的藝術不是一遍就可以看懂的。他的電影就是帶著一種“后搖風格”,濃烈、生猛。
姜文和觀眾都很自我,姜文端著,不肯向市場低頭;觀眾正是因為沒端著,所以看姜文的電影過于疲憊。誰都沒錯,誰都不用救。
詳情代碼如下:
- from pyecharts import ThemeRiver
- rate = []
- with open('quan.txt',mode='r',encoding='utf-8') as f:
- rows = f.readlines()
- for row in rows:
- if len(row.split(',')) == 5:
- rate.append(row.split(',')[3].replace('\n',''))
- print(rate.count('5')+rate.count('4.5'))
- print(rate.count('4')+rate.count('3.5'))
- print(rate.count('3')+rate.count('2.5'))
- print(rate.count('2')+rate.count('1.5'))
- print(rate.count('1')+rate.count('0.5'))
- #餅狀圖
- from pyecharts import Pie
- attr = ["五星", "四星", "三星", "二星", "一星"]
- #分別代表各星級評論數
- v1 = [3324,1788,1293,553,1653]
- pie = Pie("餅圖-星級玫瑰圖示例", title_pos='center', width=900)
- pie.add("7-17", attr, v1, center=[75, 50], is_random=True,
- radius=[30, 75], rosetype='area',
- is_legend_show=False, is_label_show=True)
- pie.render()
關于《邪不壓正》網友評論數據就分析到此結束!
你覺得《邪不壓正》不好看是對的,因為它太姜文了。你若覺得《邪不壓正》好看也是對的,因為它真的太姜文了。成也姜文,敗也姜文!但這也許就是他孤傲的世界吧。