当前位置: 首页 > 后端技术 > Python

《囧妈》口碑扑街?Python告诉你为什么这次观众不买账

时间:2023-03-25 23:25:06 Python

CDA数据分析师出品【导读】:今天我们要说的是另类春节档唯一的电影《囧妈》,第三部可以直接看对于Python技术部分。2020年春节档此前被称为神仙大战,各显神通。可以说是史上最强春节档。没想到,一场疫情改变了局面。为配合疫情防控,春节档电影全部撤档。本以为不会了,没想到徐峥打了一张牌:免费在线看《囧妈》。作为发行人的欢喜传媒股票当天也大涨42%。今天我们要说的是另类春节档唯一的一部电影《囧妈》。1另类春节档《囧妈》绕过影院,在线免费观看。就在《姜子牙》《唐人街探案3》等影片已经撤档春节档的时候,《囧妈》突然宣布从大年初一零点开始,将在抖音、西瓜视频、今日头条、欢喜上映首映等App免费发布,成为史上首部绕开院线直接在线播出的春节档电影。《囧妈》主要故事是年轻的老板伊万卷入了商业纠纷,却意外地和妈妈登上了开往俄罗斯的火车。在旅途中,他与母亲发生了激烈的冲突,同时又要与竞争对手斗智斗勇。为了最终到达莫斯科,他不得不与母亲一起克服困难,面对他一直回避的家庭生活问题。徐峥这次让《囧妈》免费提供给观众的举动,在惨淡的春节期间赚取了《囧妈》足够的人气,字节跳动也收获了不小的流量。影片三天总播放量突破6亿,观看总人数1.8亿。2敢做第一个吃螃蟹的人回顾中国电影“大票房”时代,中国第一部票房过10亿的国产电影是徐峥2012年的作品《人再囧途之泰囧》,达到1.267十亿。就像打了鸡血一样,一个接一个创出新高。C君当然觉得50%的功劳应该归功于2010年以前拍的《人在囧途》的精彩,让影迷觉得囧系列和徐峥都是品质保证。C君记得在看完《人在囧途》之后,说徐峥下次拍囧系列一定要去电影院支持。这种口碑效应在电影中尤为明显。可能是因为如此高的艺术水平,他才大胆。这次《囧妈》直接选择了网络首映,同时赚了钱,电影院联名声讨。如果你了解这个过程,你就会明白。原来的形式是发行方欢喜传媒制作电影卖给横店影视,保底票房24亿。然后横店影视去了全国的电影院,你们帮我放映这部电影。最后肯定至少能赚到24亿的票房,大家一起分享。把六亿多给发行商欢喜传媒是一笔不错的生意,剩下的十八亿我们再瓜分。而现在,今日头条已经直接取代了横店影视的位置。我给你六亿多。我不需要在电影院播放它。利率高了,钱就赚回来了,说不定还能养成用APP看电影首映礼的习惯。发行方欢喜传媒,徐峥也没什么可输的。电影院已经被今日头条取代。能不谴责吗?3但观众看完后的反应如何?虽然《囧妈》已经赚够了流量,但是口碑呢?目前,《囧妈》在豆瓣的评分仅为5.9分,差评居多。我们收集整理了豆瓣上的评论数据,并用Python进行了分析。整个数据分析过程分为三步:获取数据数据预处理数据可视化下面是具体步骤和代码实现:01获取数据豆瓣从2017年10月开始全面限制爬取数据,最多可以获取200条数据在非登录状态。在登录状态下,最大数量为500,这次我们一共获取了698条数据。为了解决登录问题,这次使用Selenium+BeautifulSoup来获取数据。如下图,本次数据爬取的主要内容有:评论用户ID评论用户主页评论内容评论星级评论日期用户城市代码实现:#导入需要的包importrequestsfrombs4importBeautifulSoupimportnumpyasnpiimportpandasaspdimporttimefromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.common.keysimportKeysfromselenium.webdriver.chrome.optionsimportOptions#定义登录函数defuban:'login_'function:自动登录豆瓣website'''globalbrowser#设置为全局变量browser=webdriver.Chrome#进入登录页面login_url='https://accounts.douban.com/passport/login?source=movie'browser.get(login_url)#点击密码登录browser.find_element_by_class_name('account-tab-account').click#输入账号和密码username=browser.find_element_by_id('username')username.send_keys('18511302788')password=browser.find_element_by_id('password')password.send_keys('12349148feng')#点击登录browser.find_element_by_class_name('btn-account').click#定义获取单页数据的函数defget_one_page(url):'''功能:传入url,豆瓣电影一部页面上的短评信息'''#进入短评页面browser.get(url)#使用bs解析网页数据bs=BeautifulSoup(browser.page_source,'lxml')#getusernameusername=[i.find('a').textforiinbs.findAll('span',class_='comment-info')]#getuserurluser_url=[i.find('a')['href']foriinbs.findAll('span',class_='comment-info')]#获取推荐星级=foriinbs.findAll('span',class_='comment-info'):try:one_rating=i.find('span',class_='rating')['title']rating.append(one_rating)except:rating.append('recommended')#Commenttimetime=[i.find('span',class_='comment-time')['title']foriinbs.findAll('span',class_='comment-info')]#短评论信息short=[i.textforiinbs.findAll('span',class_='short')]#votesvotes=[i.textforiinbs.findAll('span',class_='votes')]#创建一个空DataFramedf_one=pd.DataFrame#存储信息df_one['用户名']=usernamedf_one['用户主页']=user_urldf_one['推荐星']=ratingdf_one['评论时间']=timedf_one['短评论信息']=shortdf_one['Votingtimes']=votesreturndf_one#定义一个函数来获取25页数据(目前可获取的最大页数)defget_25_page(movie_id):'''功能:传入电影ID,获取电影第25页豆瓣短评信息'''#创建一个空的DataFramedf_all=pd.DataFrame#Loopappendforiinrange(25):url="https://movie.douban.com/subject/{}/comments?start={}&limit=20&sort=new_score&status=P".format(movie_id,i*20)print('我抢第一个{}page'.format(i+1),end='\r')#调用函数df_one=get_one_page(url)df_all=df_all.append(df_one,ignore_index=True)#程序休眠一秒.sleep(1.5)returndf_allif__name__=='__main__':#先运行登录函数login_douban#程序休眠两秒time.sleep(2)#然后运行循环翻页函数movie_id=30306570#囧妈df_all=get_25_page(movie_id)爬取的数据以数据框的形式存储,结果如下:从用户主页的地址可以获取到用户的城市信息。这一步比较简单。这里代码省略。02数据预处理对于得到的数据,我们需要进行如下处理,以便后续分析:·推荐星级:转换为1-5分。·评论时间:转换为时间类型,提取日期信息·城市:有城市空缺,海外城市,涂鸦和pyecharts仍然4.不支持的城市需要处理短评论信息:需要分词和关键词代码提取实现:#deftransform_star(x):ifx=='强烈推荐':return5elifx=='recommended':return4elifx=='okay':return3elifx=='comparable'Poor':return2else:return1#星号转换df_all['star']=df_all.recommendedstar.map(lambdax:transform_star(x))#转换日期类型df_all['commenttime']=pd.to_datetime(df_all.commenttime)#提取日期df_all['date']=df_all.commenttime.dt.date#定义函数-获取短评论信息关键字defget_comment_word(df):'''函数:传入df,提取短评论信息关键字'''#导入库importjieba.analyseimportos#去除停用词stop_words=set#加载停用词cwd=os.getcwdstop_words_path=cwd+'\\stop_words.txt'withopen(stop_words_path,'r',encoding='utf-8')assw:forlineinsw.readlines:stop_words.add(line.strip)#添加停用词stop_words.add('6.3')stop_words.add('one')stop_words.add('one')stop_words.add('徐峥')stop_words.add('徐导')stop_words.add('电影')stop_words.add('电影票')#合并评论信息df_comment_all=df['short评论信息'].str.cat#使用TF-IDF算法提取关键词word_num=jieba.analyse.extract_tags(df_comment_all,topK=100,withweight=True,allowPOS=)#做一步筛选word_num_selected=#过滤掉word_num中i的停用词:ifi[0]notinstop_words:word_num_selected.append(i)else:passreturnword_num_selectedkey_words=get_comment_word(df_all)key_words=pd.DataFrame(key_words,columns=['words','num'])03数据可视化Python可视化分析的工具有很多。pyecharts目前比较好用,可以实现动态可视化。我们主要对以下几个方面的信息进行可视化分析:·总体评论评分分布·评分时间趋势·城市分布·评论内容总体评分分布《囧妈》截至目前,豆瓣综合评分5.9分,仅优于19%的喜剧电影。从得分分布来看,3分占比最高,为36.39%,其次是2分,占比为32.09%,5分占比最低,仅为6.88%。代码实现:#总分百分比score_perc=df_all.star.value_counts/df_all.star.value_counts.sumscore_perc=np.round(score_perc*100,2)#importrequiredpackagefrompyechartsimportoptionsasoptsfrompyecharts.chartsimportPie,Page#绘制柱状图pie1=Pie(init_opts=opts.InitOpts(width='1350px',height='750px'))pie1.add("",[*zip(score_perc.index,score_perc.values)],radius=["40%","75%"])pie1.set_global_opts(title_opts=opts.TitleOpts(title='总分分布'),legend_opts=opts.LegendOpts(orient="vertical",pos_top="15%",pos_left="2%"),toolbox_opts=opts.ToolboxOpts)pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{c}%"))pie1.render('总分分布.html')评分时间趋势chart影评时间趋势图与电影热度一致,在大年初一免费上映时达到最高值。代码实现:#时间排序time=df_all.date.value_countstime.sort_index(inplace=True)frompyecharts.chartsimportLine#绘制时间图表line1=Line(init_opts=opts.InitOpts(width='1350px',height='750px'))line1.add_xaxis(time.index.tolist)line1.add_yaxis('评论流行度',time.values.tolist,areastyle_opts=opts.AreaStyleOpts(opacity=0.5),label_opts=opts.LabelOpts(is_show=False))line1.set_global_opts(title_opts=opts.TitleOpts(title="时间趋势图"),toolbox_opts=opts.ToolboxOpts)line1.render('评论时间趋势图.html')接下来分析评论用户的城市分布城市。首先是用条形图粗略展示了前十名的热门影迷城市。代码实现:#domesticcitytop10city_top10=df_all.cityprocessing.value_counts[:12]city_top10.drop('foreign',inplace=True)city_top10.drop('unknown',inplace=True)frompyecharts.chartsimportBar#itemsBar1=Bar(init_opts=opts.InitOpts(width='1350px',height='750px'))bar1.add_xaxis(city_top10.index.tolist)bar1.add_yaxis("city",city_top10.values.tolist)bar1.set_global_opts(title_opts=opts.TitleOpts(title="ReviewerTop10CityDistribution"),toolbox_opts=opts.ToolboxOpts)bar1.render('ReviewerTop10CityDistributionBarChart.html')柱状图的展示不是很好直觉是不全面。在包含地理位置的数据中,我们往往会采用地图的形式来更直观的展示给大家。选取观看电影最多的前30个城市作为动态展示,如下图:代码实现:city_num=df_all.Cityprocessing.value_counts[:30]city_num.drop('Foreign',inplace=True)city_num.drop('Unknown',inplace=True)c1=Geo(init_opts=opts.InitOpts(width='1350px',height='750px'))c1.add_schema(maptype='china')c1.add('geo',[list(z)forzinzip(city_num.index,city_num.values.astype('str'))],type_=ChartType.EFFECT_SCATTER)c1.set_series_opts(label_opts=opts.LabelOpts(is_show=False)))c1.set_global_opts(visualmap_opts=opts.VisualMapOpts,title_opts=opts.TitleOpts(title='评论者城市分布'),toolbox_opts=opts.ToolboxOpts)c1.render('评论者城市分布图.html')分词云图可以看出云图,“喜剧”、“和解”、“母子”、“微笑”、“家庭”等词占了很大比重,表达更进一步。但也有不少观众反映,该片被迫煽情,被迫抬高,被迫搞笑,被迫延续剧情,被迫出现中年婚姻危机。代码实现:frompyecharts.chartsimportWordCloudfrompyecharts.globalsimportSymbolType,ThemeTypeword=WordCloud(init_opts=opts.InitOpts(width='1350px',height='750px'))word.add("",[*zip(key_words.words,key_words.num)],word_size_range=[20,200])word.set_global_opts(title_opts=opts.TitleOpts(title="囧妈影评词云图"),toolbox_opts=opts.ToolboxOpts)word.render(‘囧妈影评词云图.html’)在热评中,网友阿暖表示:“很平庸,很无聊,不好笑,对原生家庭的讨论也只是皮毛。”它获得了5560个赞。同时C君还查了:2010年《人在囧途》,豆瓣7.7分。主演是徐峥,导演是叶伟民。2012年《人在囧途之泰囧》,豆瓣评分7.4,徐峥自导自演。2015年《港囧》,豆瓣评分5.7,徐峥自导自演。2018年《我不是药神》,豆瓣评分9.0,徐峥主演,文牧野导演。2020年《囧妈》,豆瓣评分5.9,徐峥自导自演。所以徐峥肯定是个好演员,但是作为导演,就不好说了。有人说,徐峥这次的比赛是要做中国版的Netflix。现在大家都知道Netflix是世界上最好的流媒体平台之一。它是一个视频网站,也可以在电视上观看。所以从口碑来看,《囧妈》只能算是正式开始,就像徐峥开启了华语电影的大票房时代,但真正的票房王还是吴京,让我们一起期待吧.