當前位置:
首頁 > 科技 > 程序員用Python分析徐崢,竟研究出《我不是葯神》30億票房真正秘訣!

程序員用Python分析徐崢,竟研究出《我不是葯神》30億票房真正秘訣!

前言

前段時間嚮往的生活第二季中,托尼何老師給山爭大叔洗頭那一幕,著實給節目賺足了笑點。

而最近徐崢憑藉《我不是葯神》在電影院也收了不少觀眾眼淚,在這部電影裡面他顛覆了當初囧系IP電影和心花路放的搞笑印象。對於現實主義的題材作品,電影本身的成功不僅在題材的選取上,更是因為監製寧浩徐崢、導演文牧野和其他主演的一起合作。

《港囧》發布時,山爭哥另闢蹊徑,在發布會上化身「徐布斯」用大數據分析《港囧》,把觀眾笑聲次數換算成票房收入。

所以在徐崢的獨特眼光中,什麼樣的題材、導演、演員才是他的青睞?本文用Python爬取數據、並用R語言進行數據可視化處理來了解這位才子。

數據爬取

考慮到只有幾百條數據,就簡單地寫了爬蟲腳本,得到徐崢合作過的演員、合作次數、演員被收藏數、合作的作品名、作品導演、作品類型、作品評分。Python代碼如下:

1#-*- coding: utf-8-*-

2from bs4 import BeautifulSoup

3import requests

4import pandas

5importtime

6newarry = []

7user_agent ="*******"

8headers = {"User_Agent": user_agent}

9foriinrange(15):

10gradeUrl ="https://movie.douban.com/celebrity/1274297/partners?start="+str(i*10)

11res = requests.get(gradeUrl, headers)

12soup = BeautifulSoup(res.content,"html.parser").find(class_="article")

13foriteminsoup.find_all(class_="partners item"):

14partner = item.select("a")[1].text

15times = item.select("li")[1].text

16collect_num = item.select("li")[2].text

17url_list = item.select("li")[1]

18forurlinurl_list.find_all("a"):

19each_page = requests.get(url.get("href"), headers)

20sub_res = BeautifulSoup(each_page.content,"html.parser")

21info = sub_res.find(id="wrapper")

22movie_name = info.select("span[property="v:itemreviewed"]")[].text

23print(movie_name)

24director = info.find(class_="attrs").select("a")[].text

25types =" ".join([style.textforstyleininfo.select("span[property="v:genre"]")])

26ifinfo.find(class_="ll rating_num") is None:

27rate =

28else:

29rate = info.find(class_="ll rating_num").text

30newarry.append({

31"partner": partner.split(" ")[],

32"time": times[5],

33"collect_num": collect_num,

34"movie_name": movie_name,

35"director": director,

36"types": types,

37"rating": rate

38})

39time.sleep(2)

40print(newarry)

41

42new_df = pandas.DataFrame(newarry, columns=["partner","time","collect_num","movie_name","director","types","rating"])

43new_df.to_excel("D:partner.xlsx")

44print(new_df)

數據分析

首先來看看徐崢出演的電影中,評分排前10的電影名,《我不是葯神》是徐崢目前評分最高的電影,這成績完全可以算國產片里的現象級了。

還有極限挑戰和嚮往的生活,徐崢作為臨時嘉賓的那期節目也得到了不錯的反響。

既然徐崢讓觀眾又是悲傷湧起、又是捧腹大笑,那麼看看他出演的作品中不同類型的評分情況,果然還是喜劇排名比較靠前,徐崢出演驚悚懸疑類的電影排名靠後,看來搞笑大叔的深刻印象,不能讓大家接受他出演驚悚片。徐崢去的真人秀和脫口秀節目,也在當期取得不錯的收視率和口碑。

接下來看看徐崢和哪些導演合作比較緊密?徐崢出演自己自導的電影有4次,山爭大哥完全沒放過自己當主演的機會,和寧浩導演合作4次,《瘋狂的石頭》《無人區》《心花路放》《瘋狂的賽車》這四部,都是不錯的電影,除開合作夥伴的關係,這應該也是徐崢選擇出演電影的原因。《我不是葯神》也是寧浩監製、文牧野導演。

再來看看合作導演的作品評分情況,圖a是評分排名前15的導演名字,圖b是評分排名後15的導演名字,徐崢在2002年黃蜀芹導演的《上海滄桑》中並不是主演,排名第二的任靜是《極限挑戰》的導演,徐崢參加過的當期節目取得了9.0的豆瓣評分,看來他真的很適合參加真人秀。

圖 a

圖 b

再看看徐崢合作過的演員情況,圖c是和徐崢合作過的演員作品平均評分排名前10的演員,圖d是作品平均評分排名後10的演員。合作最多的演員是黃渤,一共有9次的合作,《瘋狂的石頭》《瘋狂的賽車》《無人區》《心花路放》《泰囧》等作品都取得了不錯的票房和評分,但是《愛情呼叫轉移Ⅱ:愛情左右》只有5.2的評分,導致黃渤沒有在這前10里,而張藝興、孫紅雷、羅志祥只和徐崢合作過一期《極限挑戰》就9.0靠前了,看來平均值有時候真的會掩蓋重要的信息。

圖 c

圖 d

最後再看看徐崢囧系IP電影選角的演員人氣情況,將演員豆瓣上被收藏的次數作為人氣的測量,對比《港囧》《泰囧》《人在囧途》的演員人氣,看來《港囧》的失敗確實很大因素歸因為選角,人氣明顯低於《泰囧》。

最後再將陶虹的合作演員表爬取下來,看看夫妻二人在電影圈的社交網路關係,陶虹和徐崢的共同出鏡次數還挺多,合作過的電影和演員也不少,不過徐崢的出演次數更多,圈子更大,夫妻二人很和諧的搭配方式。

附上R語言的可視化代碼:

1library(dplyr)

2library(plyr)# 這個包裡面的count函數才能統計文本的個數

3library(tidyverse)

4library(ggplot2)

5library(readxl)

6library(xlsx)

7library(RColorBrewer)

8

9movie_data

10# 徐崢合作夥伴評分排名前10和後10的演員

11left_data

12attach(left_data)

13ave_rate

14ave_rate$rate

15detach(left_data)

16ave_rate

17col

18pbbPalette

19cbbPalette

20ggplot(data = head(ave_rate,10), aes(x= reorder(Group.1,rate,median),y= rate)) + ylim(,10) + geom_bar(stat="identity",fill=pbbPalette) +

21labs(title ="rating of moives",x="合作演員",y="平均評分")

22ggplot(data = tail(ave_rate,10), aes(x= reorder(Group.1,rate,median),y= rate)) + ylim(,10) + geom_bar(stat="identity",fill=pbbPalette) +

23labs(title ="rating of moives",x="合作演員",y="平均評分")

24

25# 合作的導演的作品評分

26attach(left_data)

27dir_rate

28dir_rate$rate

29detach(left_data)

30dir_rate

31ggplot(data = head(dir_rate,15), aes(x= reorder(Group.1,x,median),y=x)) + ylim(,10) + geom_bar(stat="identity",fill="steelblue") +

32labs(title ="rating of director",x="導演",y="平均評分") +

33theme(axis.text.x = element_text(size =8, family ="myFont", face ="bold", vjust =.5, hjust =.5, angle =45)) +

34geom_text(aes(label = rate, vjust = -.8, hjust =.5), show.legend = TRUE)

35ggplot(data = tail(dir_rate,15), aes(x= reorder(Group.1,x,median),y=x)) + ylim(,10) + geom_bar(stat="identity",fill="steelblue") +

36labs(title ="rating of director",x="導演",y="平均評分") +

37theme(axis.text.x = element_text(size =8, family ="myFont", face ="bold", vjust =.5, hjust =.5, angle =45)) +

38geom_text(aes(label = rate, vjust = -.8, hjust =.5), show.legend = TRUE)

39

40# 合作的導演次數

41attach(left_data)

42dir_time %select(movie_name,director)

43dir_time

44dir_table

45detach(left_data)

46dir_table

47ggplot(data = dir_table[dir_table$freq>=2,], aes(x= reorder(x,freq,median),y= freq)) + geom_bar(stat="identity",fill="steelblue") +

48labs(title ="times of director",x="導演",y="合作次數") +

49theme(axis.text.x = element_text(size =8, family ="myFont", face ="bold", vjust =.5, hjust =.5, angle =45)) +

50geom_text(aes(label = freq, vjust = -.8, hjust =.5), show.legend = TRUE)

51

52# 徐崢評分排名前10的電影名

53attach(left_data)

54top_movie

55detach(left_data)

56rank_moive

57ggplot(data = tail(rank_moive,10), aes(x= reorder(Group.1,x,median),y=x)) + ylim(,10) + geom_bar(stat="identity",fill=pbbPalette) +

58labs(title ="top10 moives",x="電影",y="評分") +

59theme(axis.text.x = element_text(size =8, family ="myFont", face ="bold",vjust =.7, hjust =.7, angle =45))

60

61# 囧字IP電影的演員人氣對比

62jiong

63jiong$collection

64cbbPalette

65ggplot(data = jiong, aes(x= movie_name,y= collection)) + geom_boxplot(fill=cbbPalette) +

66labs(title ="collection in the movie of jiong IP",x="演員",y="人氣")

67

68# 徐崢電影類型對比

69attach(left_data)

70agg_data %select(movie_name,types,rating)

71agg_data

72View(agg_data)

73detach(left_data)

74li = list("喜劇","真人秀","愛情","劇情","懸疑","脫口秀","犯罪","動作","驚悚","古裝","奇幻","動畫")

75type = c()

76ave_rating =c()

77for(i in li){

78type_moive

79ave = mean(as.double(type_moive$rating))

80type = c(type, i)

81ave_rating = c(ave_rating, ave)

82}

83type_rating

84pbbPalette

85ggplot(data = type_rating, aes(x= reorder(type,ave_rating,median),y= ave_rating)) + ylim(,10) + geom_bar(stat="identity",fill=pbbPalette) +

86labs(title ="rating of types",x="類型",y="平均評分") +

87theme(axis.text.x = element_text(size =8, family ="myFont", face ="bold", vjust =.5, hjust =.5, angle =45)) +

88geom_text(aes(label = round(ave_rating,1), vjust = -.8, hjust =.5, color ="red"), show.legend = TRUE)

89

90

91library(igraph)

92#載入數據框

93attach(movie_data)

94agg_data %select(par_name,time)

95detach(movie_data)

96agg_data

97nrow(agg_data)

98centre

99graph_data

100write.xlsx(graph_data,"D:\mydata.xlsx")

101all_data

102g

103# 徐崢的關係網路圖

104#生成圖片,大小是800*800px

105jpeg(filename="D:\GRAPH1.jpg",width=800,height=800,units="px")

106plot(g,

107vertex.size=2,#節點大小

108layout=layout.kamada.kawai,#布局方式

109vertex.shape="none",#不帶邊框

110vertex.label.cex=1,#節點字體大小

111vertex.label.color="#CC79A7",#節點字體顏色

112edge.arrow.size=.2)#連線的箭頭的大小

113#關閉圖形設備,將緩衝區中的數據寫入文件

114dev.off()

115

116# 徐崢和陶虹的關係網路圖

117# install.packages("RcolorBrewer")

118library(RColorBrewer)

119col

120V(g)$label.color

121attach(all_data)

122all_data

123n3 6,])

124n2 =3&time

125n1

126detach(all_data)

127edge_col

128V(g)$size=degree(g)/12

129jpeg(filename="D:\GRAPH2.jpg",width=1000,height=1000,units="px")

130plot(g, layout = layout.fruchterman.reingold,vertex.label.cex=1,edge.color=edge_col,edge.arrow.mode="-")

131dev.off()

聲明:本文為作者投稿,版權歸對方所有。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

程序員該敬畏每一行代碼?填好每一個坑才是!
蘋果封殺加密貨幣!

TAG:CSDN |