今天要去看电影《八佰》了,我用Python爬了14.4万条评论看看大家都在聊啥~

八佰

《八佰》是由华谊兄弟电影有限公司和北京七印象文化传媒有限公司出品,腾讯影业文化传播有限公司、北京光线影业有限公司和阿里巴巴影业(北京)有限公司联合出品,导演管虎执导,黄志忠、欧豪、王千源、姜武、张译、杜淳、魏晨、李晨、俞灏明等主演的战争题材影片。该片取材1937年淞沪会战期间,讲述了史称“八百壮士”的中国国民革命军第三战区88师524团的一个加强营,固守苏州河畔的四行仓库、阻击日军的故事。该片于2020年8月21日上午9点在中国大陆正式上映~

由于今年新冠疫情,电影院也是在最近一段时间才“解封”,《八佰》算是“开年”截止目前热度最高的电影了。朋友圈很多人看完容易沉浸在其气氛中、激发心中的民族感,当然也有一些网友持负面看法。那究竟大家都在有着什么样的观后感呢,我们来通过评论数据看看给予不同评分的观众都怎么说吧。

0.前言

这里我们主要是通过python进行猫眼电影评论内容获取,然后再导入数据库使用superset进行基础数据统分及看板生成,最后用jiebawordcloud做词云分析。

本次数据统计周期为:2020年8月21日9点——8月27日24点
共采集到评论数据量:144,098条

本文主要分为三部分:

  1. 三类(好评、中评和差评)评价用户数据统分
    本部分主要根据评分对用户进行分组,然后统计不同分组下用户数及这些用户评价内容的词云分析
  2. 评价数据分布详情
    本部分主要是对爬取的全部数据按照日期、评分及用户地区进行基础的数据统计处理,并用supset进行可视化展示
  3. 评论数据爬虫过程
    本部分详细介绍猫眼电影评论内容爬取的过程,大家可以参考代码对自己喜欢的电影做类似处理

1.三类(好评、中评和差评)评价用户数据统分

1.1.总体评价词云

在评论中,高频词汇是“勿忘国耻”、“震撼”、“铭记历史”、“国人如此”和“感动”等等,都是比较贴近该部剧作主题和正向的褒义词。
全部评论词云

1.2.三类用户数据

评价分数区间为0-5分,按照3分以内为差评,3分为中评,4分以上为好评的分类标准,我们统计结果如下:

# 分箱
data['评价类型'] = pd.cut(data['评分'], [0,3,4,6], labels=["差评", "中评", "好评"],right=False)
# 分组计算各评价类型 评价数量
data_star = data.groupby('评价类型')['评分'].count().to_frame('数量').reset_index()
# 计算占比
data_star['占比'] = data_star['数量']/data_star['数量'].sum()
data_star
评价类型数量占比
0差评78300.054338
1中评54350.0377174
2好评1308330.907945

可以看到,超过90%的用户给予了4星以上好评,低于3星的差评仅占5.4%,绝大部分人还是给予了很高的评价。

1.3.三类用户的观后感差异

通过对不同评价类型用户的评论关键词分析,我们可以发现好评用户主要表达的是观影后的电影带来的情感共鸣,中评用户则对影片的评价关键点比较分散,差评用户似乎更多关注在导演、剧情和电影院上面。

1.3.1好评用户给予的评论内容词云

一共13万条好评评论,“勿忘国耻”、“感动”、“不错”、“中国”、“震撼”和“可以”等传递的情感非常鲜明。
好评评论词云

1.3.2中评用户给予的评论内容词云

在一共5千余条中评评论中,我们看到这部分评论的内容维度参差不齐,有不少认为一般般的,但也有不少觉得可以、好看。
中评评论词云

1.3.3差评用户给予的评论内容词云

在7千多条差评中,我们发现还是有不少认为好看、可以的,除此之外评价“垃圾”的用户占比较高,评价关键词也更多的转向了“导演”、“剧情”和“电影院”等。
差评评论词云我们抽样10条差评看看:

print(data[data['评价类型']=='差评'].sample(10)[['评价类型','点评内容']].to_markdown())
评价类型点评内容
47405差评宣传太夸大了,真心感觉很一般
63554差评歪曲历史,不值得看
100325差评稀乱影院,第一次带一米二以下小孩子要补票的,订票时什么提示也没有,进场时搞句小孩子要补票(全票)
106843差评有事没看成,还退不了钱
37476差评好好的历史事件,拍成这种德行,期望越高失望越大!拍此片的价值观就有问题。
143066差评不如集结号!
130137差评剧情衔接不好 煽情的部分就是差一点意思
71936差评垃圾 不推荐看
95015差评拍的什么玩意啊!煽情的戏太多了!
20194差评情绪渲染镜头过多。剧情不紧凑,人物塑造不鲜明。枪战场面混沌。结局与真实历史不符合。管虎的风格不适合这样战斗风格啊

2.评价数据分布详情

从正式上映到8月27日24点,猫眼累计有评论内容评价14.4万,评分高达9.24分,我们通过supset制作看板如下:
八佰评价看板

2.1.评分分布

在14.4万条评论中,有超过75%的用户给予了5星满分的评价,而超过4星的评价占比也高达90%+。
评分分布

2.2.上映首周每日评价数分布

上映当天是周五早上9点,我有个同事以为是0点场,然后发现是早上9点便没考虑去追首场。我们可以看到,评价数走势其实比较平稳,除了首周周日那天有明显提升之外,工作日也很平稳(8月27日周四除外)。不过,一般次周周末会又有一个高峰,比如我和小伙伴就决定今天去看来着~
每日评价分布

2.3.每日分时评价数分布

从评价数分时分布的走势来看,周末和工作日其实没有啥太大差异,都集中在凌晨2点前(夜猫子居多),下午4-6点晚上9-12点。这也比较符合正常情况,毕竟吃饭时间不能占用,一般排片上也吃饭前1-2小时和吃饭时间后的排片较多。
首周

2.4.评价用户城市分布

我记得之前应该是北上广深评价用户分布占前四,这次疫情原因,各地电影院“解封”条件不一样吧。从《八佰》首周的用户评价地区分布来看,成都高居第一位!!不得不说,咱们湖北武汉也进了前10 ,感动~
评价用户城市分布

3.评论数据爬虫过程

评论数据爬虫过程主要分为 接口数据请求、数据处理和数据存储三部分,其中数据格式是简单的json格式,整个爬虫过程比较简单,我们不做详细讲解。
评论数据接口地址

http://m.maoyan.com/mmdb/comments/movie/346210.json?v=yes&offset=0&startTime=2020-08-25%2011:48:06

数据请求结果(截取部分):

{“cmts”:[{“approve”:1,“approved”:false,“assistAwardInfo”:{“avatar”:"",“celebrityId”:0,“celebrityName”:"",“rank”:0,“title”:""},“avatarurl”:“https://img.meituan.net/maoyanuser/e4308d29872520d06a8d65b01f55dc206358.jpg”,“cityName”:“西安”,“content”:“让人哭的不是悲情,就好像上学的时候我自己做错了事情,结果老师罚了全班人这种感觉。家国大义凛然正气。”,“filmView”:false,“id”:1103548562,“isMajor”:false,“juryLevel”:0,“majorType”:0,“movieId”:346210,“nick”:“🐋”,“nickName”:“🐋”,“oppose”:0,“pro”:false,“reply”:0,“score”:5.0,“spoiler”:0,“startTime”:“2020-08-26 10:51:11”,“supportComment”:true,“supportLike”:true,“sureViewed”:1,“tagList”:{“fixed”:[{“id”:1,“name”:“好评”},{“id”:4,“name”:“购票”}]},“time”:“2020-08-26 10:51”,“userId”:1029449566,“userLevel”:3,“videoDuration”:0,“vipType”:0},…}

爬虫代码:(大家可自行优化)

import requests
import json
import datetime
import pandas as pd
from fake_useragent import UserAgent 


start_time = '2020-08-27  23:59:59'
end_time = '2020-08-21  09:00:00'  # 电影上映时间

lis = []
while start_time > end_time:
    url = 'http://m.maoyan.com/mmdb/comments/movie/346210.json?_v_=yes&offset=0&startTime=' + start_time.replace('  ', '%20')
    headers = {"User-Agent": UserAgent(verify_ssl=False).random}
    r = requests.get(url, headers=headers)
    data = r.text
    # 转为为字典
    data = json.loads(data)
    data = data['cmts']
    
    for li in data:
       dic = {}
       dic['昵称'] = li['nickName']
       dic['城市'] = li['cityName']
       dic['评价内容'] = li['content']
       dic['评分'] = li['score']
       dic['评价时间'] = li['startTime']
       
       lis.append(dic)
       
    start_time = dic['评价时间']
    
    start_time = datetime.datetime.strptime(start_time, '%Y-%m-%d  %H:%M:%S') + datetime.timedelta(seconds=-1)
    start_time = datetime.datetime.strftime(start_time, '%Y-%m-%d  %H:%M:%S')

df = pd.DataFrame(lis)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值