大家好,我是J哥。

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

从猫眼电影官网可以看到,《八佰》获得了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 comments

except 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][

'欧豪/端午'] =

1

if

'羊拐'

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][

'张译/老算盘'] =

1

if

'小湖北'

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')

近期文章

分享

”和“

在看

”是更好的支持!

python影评_用Python分析18万条《八佰》影评,看看观众怎么说?相关推荐

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

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

  2. python程序员爬取分析20万场吃鸡数据,带妹吃鸡,终成人生赢家

    首先,神枪镇楼 python程序员爬取分析20万场吃鸡数据,带妹吃鸡,终成人生赢家 吃鸡,撩妹神器 吃鸡游戏受到很多年轻人的喜爱,用户量也非常大.有很多地图,场景逼真,技术玩法,增加了游戏可玩性.而且 ...

  3. 第一章 第一节:Python基础_认识Python

    Python基础入门(全套保姆级教程) 第一章 第一节:Python基础_认识Python 1. 什么是编程 通俗易懂,编程就是用代码编写程序,编写程序有很多种办法,像c语言,javaPython语言 ...

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

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

  5. 讲python讲得好的评价_分析20万条弹幕告诉你,8.9分的高分剧《隐秘的角落》到底好看在哪儿?...

    CDA数据分析师 出品作者:Mika 数据:真达 后期:泽龙 Show me data,用数据说话 今天我们聊一聊 <隐秘的角落> 点击下方视频,先睹为快: 最近这部<隐秘的角落&g ...

  6. python爬虫实战-python爬虫实战一:分析豆瓣中最新电影的影评

    简介 刚接触python不久,做一个小项目来练练手.前几天看了<战狼2>,发现它在最新上映的电影里面是排行第一的,如下图所示.准备把豆瓣上对它的影评(短评)做一个分析. 目标总览 主要做了 ...

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

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

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

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

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

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

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

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

最新文章

  1. 利用反射搭建orm框架
  2. python画笑脸图案-如何让这些代码中的一个在窗口中绘制不同大小的笑脸?
  3. 关联规则算法php,科学网—加权关联规则权值的计算 - 叶文菁的博文
  4. AutoML大提速,谷歌开源自动化寻找最优ML模型新平台Model Search
  5. kaggle为什么总是难以拿到金牌
  6. 小菜:Java异常处理的10个最佳实践
  7. Java TDD简介–第1部分
  8. 阿里巴巴使命、愿景、价值观、绩效管理中的六大价值观、
  9. HQL –Hibernate查询语言–示例教程
  10. [Node] 基础知识
  11. 个人学习java的真实经历!
  12. 网站微调是什么意思?能带来什么作用?
  13. 手撸MIPS32——5、利用Vivado IP设计指令存储器和数据存储器
  14. php如何把线条变粗,科学网—AutoCAD线条加粗秘诀(转载收藏) - 顿玉环的博文...
  15. 2020年中国滚刀行业产销及市场规模分析[图]
  16. 关于DVDScr, Screener,TS, TC等常见术语
  17. 服务器事件查看器根据登录id如何查找信息,Windows中如何查看日志(如查看远程登陆的IP地址)以及常用日志ID...
  18. SKNet: Selective Kernel Networks
  19. 理论+实操:K8S的pod健康检查——live、ready、startup
  20. 报错:Now you can provide attr `wx:key` for a `wx:for` to improve performance

热门文章

  1. 如何阻止windows 联网自动激活,避免笔记本无法退货。
  2. 群体遗传学瓶颈效应bottleneck effect
  3. SYSLINUX 6.03不支持64bit的ext4
  4. 用布尔代数简化下列各逻辑表达式
  5. 大连理工大学软件学院2022年秋季学期《矩阵与数值分析》上机作业
  6. BacNet IP开发过程
  7. 浙江大学计算机学院就业办,浙江大学就业信息网
  8. SpringCloud--鸿鹄Cloud分布式微服务云系统
  9. 马哥教育——第十四周作业
  10. 【新手入门】自己动手搭建云服务器