python影评_用Python分析18万条《八佰》影评,看看观众怎么说?
大家好,我是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万条《八佰》影评,看看观众怎么说?相关推荐
- 深圳python如何评价_Python分析18万条《八佰》影评,看看观众怎么说?
原标题:Python分析18万条<八佰>影评,看看观众怎么说? 最近<八佰>这部电影比较火,上映仅15天就已斩获22亿票房.对于沉寂了半年.影院上座率仍限定在50%的电影市场而 ...
- python程序员爬取分析20万场吃鸡数据,带妹吃鸡,终成人生赢家
首先,神枪镇楼 python程序员爬取分析20万场吃鸡数据,带妹吃鸡,终成人生赢家 吃鸡,撩妹神器 吃鸡游戏受到很多年轻人的喜爱,用户量也非常大.有很多地图,场景逼真,技术玩法,增加了游戏可玩性.而且 ...
- 第一章 第一节:Python基础_认识Python
Python基础入门(全套保姆级教程) 第一章 第一节:Python基础_认识Python 1. 什么是编程 通俗易懂,编程就是用代码编写程序,编写程序有很多种办法,像c语言,javaPython语言 ...
- python的歌曲评论数据分析_用Python分析44万条数据,揭秘如何成为网易云音乐评论区的网红段子手...
有个段子讲"十年文案老司机,不如网易评论区,网易文豪遍地走,评论全部单身狗",网易云音乐的评论区也一直都是各类文案大神的聚集地. 那么我们普通用户到底如何成为网易云音乐评论里的热评 ...
- 讲python讲得好的评价_分析20万条弹幕告诉你,8.9分的高分剧《隐秘的角落》到底好看在哪儿?...
CDA数据分析师 出品作者:Mika 数据:真达 后期:泽龙 Show me data,用数据说话 今天我们聊一聊 <隐秘的角落> 点击下方视频,先睹为快: 最近这部<隐秘的角落&g ...
- python爬虫实战-python爬虫实战一:分析豆瓣中最新电影的影评
简介 刚接触python不久,做一个小项目来练练手.前几天看了<战狼2>,发现它在最新上映的电影里面是排行第一的,如下图所示.准备把豆瓣上对它的影评(短评)做一个分析. 目标总览 主要做了 ...
- Python 分析 9 万条数据告诉你复仇者联盟谁才是绝对 C 位!
<复联 4>国内上映第十天,程序员的江湖里开始流传这样一个故事,即: 漫威宇宙,其实就讲了一件事情.整个宇宙就好比一个项目组.其中有一群叫作美国队长.钢铁侠.惊奇队长.浩克.索尔等人在维护 ...
- Python分析9万条数据告诉你复仇者联盟谁才是绝对C位
作者 | 罗昭成 责编 | 唐小引 转载自CSDN(ID:CSDNnews) <复联 4>国内上映第十天,程序员的江湖里开始流传这样一个故事,即: 漫威宇宙,其实就讲了一件事情.整个宇宙就 ...
- 复仇者联盟谁才是绝对 C 位?Python分析9万条数据告诉你答案
作者 | 罗昭成 责编 | 唐小引 <复联 4>国内上映第十天,程序员的江湖里开始流传这样一个故事,即:漫威宇宙,其实就讲了一件事情.整个宇宙就好比一个项目组.其中有一群叫作美国队长.钢铁 ...
- Python 分析 10 万条弹幕告诉你:《古董局中局2》到底好不好看?
作者 | 泽龙.Mika 来源 | CDA数据分析师 今天我们聊一聊<古董局中局2> 点击下方视频,先睹为快: 上周日,有一部鉴宝题材的剧静悄悄上线了,那就是夏雨.魏晨等主演的古董局中局系 ...
最新文章
- 利用反射搭建orm框架
- python画笑脸图案-如何让这些代码中的一个在窗口中绘制不同大小的笑脸?
- 关联规则算法php,科学网—加权关联规则权值的计算 - 叶文菁的博文
- AutoML大提速,谷歌开源自动化寻找最优ML模型新平台Model Search
- kaggle为什么总是难以拿到金牌
- 小菜:Java异常处理的10个最佳实践
- Java TDD简介–第1部分
- 阿里巴巴使命、愿景、价值观、绩效管理中的六大价值观、
- HQL –Hibernate查询语言–示例教程
- [Node] 基础知识
- 个人学习java的真实经历!
- 网站微调是什么意思?能带来什么作用?
- 手撸MIPS32——5、利用Vivado IP设计指令存储器和数据存储器
- php如何把线条变粗,科学网—AutoCAD线条加粗秘诀(转载收藏) - 顿玉环的博文...
- 2020年中国滚刀行业产销及市场规模分析[图]
- 关于DVDScr, Screener,TS, TC等常见术语
- 服务器事件查看器根据登录id如何查找信息,Windows中如何查看日志(如查看远程登陆的IP地址)以及常用日志ID...
- SKNet: Selective Kernel Networks
- 理论+实操:K8S的pod健康检查——live、ready、startup
- 报错:Now you can provide attr `wx:key` for a `wx:for` to improve performance