大家好,我是J哥。

最近《八佰》这部电影比较火,上映仅15天就已斩获22亿票房。对于沉寂了半年、影院上座率仍限定在50%的电影市场而言,这样的成绩出人意料。

从猫眼电影官网可以看到,《八佰》吸引了100万人的评论,获得了9.2分的高口碑。一向好奇的J哥产生了一些疑惑,这些人到底在评论些啥?哪些地方的人评论最多?针对不同演员角色的评论内容有什么不同?


于是,J哥用Python采集了《八佰》18万条观众影评并做可视化分析,数据采集区间为2020年8月21日9点至2020年8月30日24点。公众号后台回复八佰可获取本文完整数据集和代码。

数据获取

猫眼电影是简单的动态网页,数据格式为json,通过解析接口的方式即可轻松获取。如果您对动态网页爬虫感兴趣,可查看J哥往期原创文章《实战|Python轻松实现动态网页爬虫(附详细源码)》。本文不做赘述,仅提供核心代码:

def parse_page(html):try:data = json.loads(html)['cmts']  # 将str转换为json#print(data)comments = []for item in data:comment = {'id': item['id'],'nickName': item['nickName'],'cityName': item['cityName'] if 'cityName' in item else '',  # 处理cityName不存在的情况'content': item['content'].replace('\n', ' ', 10),  # 处理评论内容换行的情况'score': item['score'],'startTime': item['startTime']}comments.append(comment)return commentsexcept Exception as e:pass

数据清洗

读取影评数据

import pandas as pd
import numpy as np
data=[]
with open('comments.txt', 'r',encoding='utf-8-sig') as f_input:for line in f_input:data.append(list(line.strip().split(',')))
data

转为DataFrame并添加列名

df = pd.DataFrame(data).iloc[:, 0:6]
df.columns = ['观众ID','观众昵称','城市','评论内容','评分','评论时间']

删除重复记录和缺失值

df = df.drop_duplicates()
df = df.dropna()

预览并保存

df.sample(5)
df.to_csv("八佰.csv",index=False,encoding="utf_8_sig")

数据可视化

导入相关库

import jieba
import re
import matplotlib.pyplot as plt
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.globals import ThemeType
import stylecloud
from IPython.display import Image

整体评论词云

data = pd.read_csv("八佰.csv")
data['评论内容'] = data['评论内容'].astype('str')
# 定义分词函数
def get_cut_words(content_series):# 读入停用词表stop_words = [] with open("stop_words.txt", 'r', encoding='utf-8') as f:lines = f.readlines()for line in lines:stop_words.append(line.strip())# 添加关键词my_words = ['', '']  for i in my_words:jieba.add_word(i) # 自定义停用词my_stop_words = ['电影', '中国','一部']   stop_words.extend(my_stop_words)               # 分词word_num = jieba.lcut(content_series.str.cat(sep='。'), cut_all=False)# 条件筛选word_num_selected = [i for i in word_num if i not in stop_words and len(i)>=2]return word_num_selected# 绘制词云图
text1 = get_cut_words(content_series=data['评论内容'])
stylecloud.gen_stylecloud(text=' '.join(text1), max_words=500,collocations=False,font_path='字酷堂清楷体.ttf',icon_name='fas fa-square',size=653,#palette='matplotlib.Inferno_9',output_name='./1.png')
Image(filename='./1.png')


对18万条影评内容进行分词,并将频率最高的500个词抽离出来制作词云图,我们发现广大观众对《八佰》这部战争题材电影表现出强烈的情感。除了好看不错这些赞美之词以外,更多的是震撼感人历史勿忘国耻等代表着强烈民族色彩的词。

评论类型分布

data['评论类型'] = pd.cut(data['评分'],[0,3,4,6],labels=['差评','中评','好评'],right=False)
df1 = data.groupby('评论类型')['评论内容'].count()
df1 = df1.sort_values(ascending=False)
regions = df1.index.to_list()
values = df1.to_list()
c = (Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK)).add("", zip(regions,values),radius=["40%", "70%"]).set_global_opts(title_opts=opts.TitleOpts(title="评论类型占比",subtitle="数据来源:猫眼电影",pos_top="0.5%",pos_left = 'center')).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%",font_size=18)))
c.render_notebook()


超过90%的好评率,20亿+的票房不是没有道理。

差评抽样


差评虽不多,但集中在对《八佰》结局的轰炸。

评论数据量TOP10城市

df2 = data.groupby('城市')['评分'].count() #按菜系分组,对评分求平均
df2 = df2.sort_values(ascending=False)[:10]
# print(df2)
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
bar.add_xaxis(df2.index.to_list())
bar.add_yaxis("",df2.to_list()) #X轴与y轴调换顺序
bar.set_global_opts(title_opts=opts.TitleOpts(title="城市影评数量TOP10",subtitle="数据来源:猫眼电影",pos_top="2%",pos_left = 'center'),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改横坐标字体大小yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改纵坐标字体大小)
bar.set_series_opts(label_opts=opts.LabelOpts(font_size=16,position='top'))
bar.render_notebook()


成都人对《八佰》评论热情高涨,超过北上广深等大城市。

相关演员提及

result = []
for i in data['评论内容']:result.append(re.split('[::,,.。!!~·`\;; ……、]',i))def actor_comment(data,result):actors = pd.DataFrame(np.zeros(5 * len(data)).reshape(len(data),5),columns = ['欧豪/端午','王千源/羊拐','姜武/老铁','张译/老算盘','张俊一/小湖北'])for i in range(len(result)):words = result[i]for word in words:if '端午' in word or '欧豪' in word: actors.iloc[i]['欧豪/端午'] = 1if '羊拐' in word or '王千源' in word:              actors.iloc[i]['王千源/羊拐'] = 1 if '老铁' in word or '姜武' in word:              actors.iloc[i]['姜武/老铁'] = 1 if '老算盘' in word or '张译' in word: actors.iloc[i]['张译/老算盘'] = 1if '小湖北' in word or '张俊一' in word:              actors.iloc[i]['张俊一/小湖北'] = 1 final_result = pd.concat([data,actors],axis = 1)return final_result
df3 = actor_comment(data,result)
df3.sample(5)
df4 = df3.iloc[:,7:].sum().reset_index().sort_values(0,ascending = False)
df4.columns = ['角色','次数']
df4['占比'] = df4['次数'] / df4['次数'].sum()c = (Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK)).add_xaxis(df4['角色'].to_list()).add_yaxis("",df4['次数'].to_list()) .set_global_opts(title_opts=opts.TitleOpts(title="主演及其饰演的角色被提及次数",subtitle="数据来源:猫眼电影",pos_top="2%",pos_left = 'center'),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改横坐标字体大小yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改纵坐标字体大小).set_series_opts(label_opts=opts.LabelOpts(font_size=16,position='top')))
c.render_notebook()


观众评论中提及欧豪和端午的次数最多,不知是因为演技还是颜值?

关于端午的评论

ouhao = df3.loc[df3['欧豪/端午'] == 1,]
text = get_cut_words(content_series=ouhao['评论内容'])
stylecloud.gen_stylecloud(text=' '.join(text), max_words=500,collocations=False,font_path='字酷堂清楷体.ttf',icon_name='fas fa-camera',#palette='matplotlib.Inferno_9',size=653,output_name='./ouhao.png')
Image(filename='./ouhao.png')

关于老算盘的评论

zhangyi = df3.loc[df3['张译/老算盘'] == 1,]
text = get_cut_words(content_series=zhangyi['评论内容'])
stylecloud.gen_stylecloud(text=' '.join(text), max_words=500,collocations=False,font_path='字酷堂清楷体.ttf',icon_name='fas fa-video',#palette='matplotlib.Inferno_9',size=653,output_name='./zhangyi.png')
Image(filename='./zhangyi.png')

关于羊拐的评论

wangqianyuan = df3.loc[df3['王千源/羊拐'] == 1,]
text = get_cut_words(content_series=wangqianyuan['评论内容'])
stylecloud.gen_stylecloud(text=' '.join(text), max_words=500,collocations=False,font_path='字酷堂清楷体.ttf',icon_name='fas fa-thumbs-up',#palette='matplotlib.Inferno_9',size=653,output_name='./wangqianyuan.png')
Image(filename='./wangqianyuan.png')


欢迎关注公众号菜J学Python,我们坚持认真写Python基础,幽默写Python实战。你可在公众号后台免费领取相关学习资料或学习交流。

用Python可视化18万条《八佰》影评,看看观众怎么说?相关推荐

  1. 深圳python如何评价_Python分析18万条《八佰》影评,看看观众怎么说?

    原标题:Python分析18万条<八佰>影评,看看观众怎么说? 最近<八佰>这部电影比较火,上映仅15天就已斩获22亿票房.对于沉寂了半年.影院上座率仍限定在50%的电影市场而 ...

  2. 第六十七期:Python爬虫44万条数据揭秘:如何成为网易音乐评论区的网红段子手

    获取数据,其实逻辑并不复杂:爬取歌单列表里的所有歌单url.进入每篇歌单爬取所有歌曲url,去重.进入每首歌曲首页爬取热评,汇总. 作者:嗨学python来源:今日头条 获取数据 其实逻辑并不复杂: ...

  3. python的歌曲评论数据分析_用Python分析44万条数据,揭秘如何成为网易云音乐评论区的网红段子手...

    有个段子讲"十年文案老司机,不如网易评论区,网易文豪遍地走,评论全部单身狗",网易云音乐的评论区也一直都是各类文案大神的聚集地. 那么我们普通用户到底如何成为网易云音乐评论里的热评 ...

  4. 豆瓣影评爬虫:cutecharts数据可视化看看大家对八佰的评价如何

    一.前言 近期热播电影<八佰>,'1937年淞沪会战的最后一役,"八百壮士"奉命坚守上海四行仓库,以少敌多顽强抵抗四天四夜.电影<八佰>由管虎导演,是亚洲首 ...

  5. Python 分析 9 万条数据告诉你复仇者联盟谁才是绝对 C 位!

    <复联 4>国内上映第十天,程序员的江湖里开始流传这样一个故事,即: 漫威宇宙,其实就讲了一件事情.整个宇宙就好比一个项目组.其中有一群叫作美国队长.钢铁侠.惊奇队长.浩克.索尔等人在维护 ...

  6. Python分析9万条数据告诉你复仇者联盟谁才是绝对C位

    作者 | 罗昭成 责编 | 唐小引 转载自CSDN(ID:CSDNnews) <复联 4>国内上映第十天,程序员的江湖里开始流传这样一个故事,即: 漫威宇宙,其实就讲了一件事情.整个宇宙就 ...

  7. 复仇者联盟谁才是绝对 C 位?Python分析9万条数据告诉你答案

    作者 | 罗昭成 责编 | 唐小引 <复联 4>国内上映第十天,程序员的江湖里开始流传这样一个故事,即:漫威宇宙,其实就讲了一件事情.整个宇宙就好比一个项目组.其中有一群叫作美国队长.钢铁 ...

  8. python爬虫,扒上万条猫眼邪不压正影评------转载+排雷

    <邪不压正>评分持续走低,上万条网友评论揭秘,是救救姜文还是救救观众? 首先感谢原作者,写的是相当详尽了.但是其中还是有一些坑...特写此贴来帮助其他网友排雷... 万众期待的<邪不 ...

  9. Python分析10万条基金数据,探索基金定投的奥秘

    基金定投这个名词大家都不陌生,喜欢理财的朋友可能都尝试过,今天我想给大家分享是,用python模拟基金定投和普通投的过程,并进行简单比较,探索基金定投的奥秘. 1.分析单支基金定投收益情况 基金数据已 ...

  10. Python 分析 10 万条弹幕告诉你:《古董局中局2》到底好不好看?

    作者 | 泽龙.Mika 来源 | CDA数据分析师 今天我们聊一聊<古董局中局2> 点击下方视频,先睹为快: 上周日,有一部鉴宝题材的剧静悄悄上线了,那就是夏雨.魏晨等主演的古董局中局系 ...

最新文章

  1. 与应用程序松耦合的报表开发组织
  2. boost::mpl::plus相关的测试程序
  3. @Springboot搭建项目controller层接收json格式的对象失败
  4. 【蓝桥杯】历届试题 错误票据
  5. C#中的Dictionary字典类介绍(转载)
  6. 阿里专家常昊:新人如何上手项目管理?
  7. 动态改变类名_反调试之检测类名与标题名
  8. 程序员如何抓住工业互联网风口实现逆袭?
  9. CSS中filter滤镜的学习笔记
  10. Selenium自动登陆12306官网(解决图片验证码和滑块验证码问题)
  11. uni map 实时记录轨迹_无偏移、离线地图,追踪运动轨迹、户外旅行线路(GPS 轨迹)...
  12. 正则表达式和re模块
  13. 【C#】未能添加对“*.dll”的引用。请确保此文件可访问并且是一个有效的程序集或 COM 组件。
  14. 如何有效制服一个杠精
  15. 近视眼学计算机好吗6,近视又不戴眼镜,还经常对着电脑会怎么样
  16. 国标流媒体服务器以ROOT身份运行提示“permission denide”报错解决
  17. Java实现 LeetCode 174 地下城游戏
  18. IOS并发编程指南:Dispatch Queue任务执行与Dispatch Source
  19. 波斯顿房价 paddlepaddle 深度学习
  20. abb机器人负载配置设定_ABB机器人【 配置设定】大全 , 人手一份,建议永久收藏!...

热门文章

  1. Attention Mechanisms in Computer Vision: A Survey(四)
  2. postman 配置参数自动签名
  3. 谈论机器学习中,哪种学习算法更好有意义吗?
  4. Linux系统进程优化理论与方法
  5. linux端口健康检查,Smartmontools检查在Linux上的硬盘健康状况 | MOS86
  6. 360天擎彻底卸载的方法教程
  7. Golang学习日志 ━━ 调用系统默认浏览器打开指定链接(全平台)
  8. Win7小工具“美女报时”,搜道版,v1.0.4.0
  9. MongoDB实战-分片概念和原理
  10. 感恩—父亲节、母亲节由来及日期