利用Python实现《姜子牙》和《哪吒》的票房对比和评价分析

python

前言

 


随着国内疫情得到有效控制,每个地区的电影院都陆陆续续的开放了,而很多本应该在春节档上映的电影因为疫情撤档,现在也重新上映了。

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤
QQ群:623406465

想必和不少小伙伴一样,我一直对《姜子牙》满怀期待。于是,国庆第2天我便杀入影院。而关于《姜子牙》的评价呈现了两极分化,而它也经常被拿来和去年上映的《哪吒》对比。关于电影本身,我不做过多评价,主要是从数据的角度出发,把《姜子牙》和《哪吒》进行一个对比分析。

一、票房对比分析

两部电影的基本情况如下:

姜子牙哪吒2020年10月1日(上映10天)2019年7月26日(上映443天)

1、获取票房数据

为了使得数据统一,我选取上映的前9日的票房数据(将持续更新):

 


注:票房数据来源于网络,不保证完全准确

2、票房走势分析

利用pandas库对票房数据进行分析,并绘制折线图:

import pandas as pd

import matplotlib.pyplot as plt

# 票房分析

plt.rcParams["font.sans-serif"] = ["SimHei"] # 用来正常显示中文标签

data = pd.read_excel("票房数据.xlsx",index_col=0)

data.plot(style=".-.")

plt.title("票房数据")

plt.ylabel("票房(亿元)")

plt.xlabel("上映时间")

plt.savefig("票房数据.png")

其中,index_col=0表示将第一列作为索引。运行结果如下:

 


从图可以看出(仅代表个人观点):

  1. 首映当日《姜子牙》票房明显高于《哪吒》。这大概是源于观众的期待,这也说明前期的宣传工作做到位了;
  2. 从走势来看,《姜子牙》呈现出明显下滑。这大概是因为上映后口碑上出现了两级分化,电影本身没有到达观众原本的期待;
  3. 从走势来看,《哪吒》后续走势强劲有力。这大概是因为上映后《哪吒》作为国产动漫的代表口口相传,吸引了越来越多的观众

二、评价对比分析

这一部分主要是对观众的影评进行分析,评价数据来源于某瓣。

Tip:本文仅供学习与交流,切勿用于非法用途!!!

1.爬取影评

在网站简单搜索之后可以发现一个电影短评的接口:

https://movie.douban.com/subject/26794435/comments?start=20&limit=20&status=P&sort=new_score

其中,26794435表示电影的编号;start参数表示评论起始位置;limit表示每次请求的评论数。

1.1 获取评论页面

def get_comment(mid,page):

"""

获得评论页面的HTML

"""

start = (page-1)*20

url = "https://movie.douban.com/subject/%s/comments?start=%d&limit=20&status=P&sort=new_score"%(mid,start)

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0",

"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",

"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",

"Connection": "keep-alive",

"Upgrade-Insecure-Requests": "1"}

cookies = {}

res = requests.get(url,headers=headers,cookies=cookies)

html = res.text

return html

注:请求需要带上登陆后的cookies,否则将只能获取10页的评论

1.2 解析页面中的评论

def parse_comment(html):

"""

解析HTML中的评论

"""

comment = re.findall("<span class="short">(.*?)</span>",html)

return comment

这里就是一个简单的正则匹配,就不过多解释了

1.3 定义爬取函数

def crawl_comment(mid,N,name):

"""

爬取指定页数的评论,并保存在本地

"""

comments = []

for p in range(1,N+1):

html = get_comment(mid,p)

comment = parse_comment(html)

comments.extend(comment)

print("《%s》第%d页评论爬取完成(%d条)"%(name,p,len(comment)))

time.sleep(random.uniform(3,5))

with open("%s.txt"%name,"w") as f:

f.write(json.dumps(comments))

注:time.sleep()很重要,否则请求过于频繁将触发安全机制,导致403

1.4 完整代码

# -*- coding: utf-8 -*-

"""

Created on Sat Oct 1012:01:352020

@author: kimol_love

"""

import re

import time

import json

import random

import requests

# 定义相关函数

def get_comment(mid,page):

"""

获得评论页面的HTML

"""

start = (page-1)*20

url = "https://movie.douban.com/subject/%s/comments?start=%d&limit=20&status=P&sort=new_score"%(mid,start)

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0",

"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",

"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",

"Connection": "keep-alive",

"Upgrade-Insecure-Requests": "1"}

cookies = {}

res = requests.get(url,headers=headers,cookies=cookies)

html = res.text

return html

def parse_comment(html):

"""

解析HTML中的评论

"""

comment = re.findall("<span class="short">(.*?)</span>",html)

return comment

def crawl_comment(mid,N,name):

"""

爬取指定页数的评论,并保存在本地

"""

comments = []

for p in range(1,N+1):

html = get_comment(mid,p)

comment = parse_comment(html)

comments.extend(comment)

print("《%s》第%d页评论爬取完成(%d条)"%(name,p,len(comment)))

time.sleep(random.uniform(3,5))

with open("%s.txt"%name,"w") as f:

f.write(json.dumps(comments))

# 爬取姜子牙评论

crawl_comment("25907124",25,"姜子牙")

# 爬取哪吒评论

crawl_comment("26794435",25,"哪吒")

2.词云分析

利用python的jieba库和wordcloud库对评论进行分析,绘制出词云。其中相应库的安装如下:

pip install jieba

pip install wordcloud

 

2.1 完整代码

# -*- coding: utf-8 -*-

"""

Created on Sat Oct 1012:22:532020

@author: kimol_love

"""

import json

import jieba

from wordcloud import WordCloud

# 定义相关函数

def create_wordcloud(comments,name):

"""

根据评论列表创建词云

"""

content = "".join(comments)

wl = jieba.cut(content,cut_all=True)

wl_space_split = "".join(wl)

wc = WordCloud("simhei.ttf",

background_color="white", # 背景颜色

width=1000,

height=600,).generate(wl_space_split)

wc.to_file("%s.png"%name)

# 词云数据分析

with open("姜子牙.txt","r") as f:

comments_jiang = json.loads(f.read())

create_wordcloud(comments_jiang,"姜子牙评论")

with open("哪吒.txt","r") as f:

comments_ne = json.loads(f.read())

create_wordcloud(comments_ne,"哪吒评论")

先利用jieba对评论进行分词处理,再利用wordcloud对词频进行统计并绘制出词云

2.2 结果展示

  • 《姜子牙》评论词云:

 



可以看出:在关于《姜子牙》的评论中,往往会伴随着与《哪吒》的比较。同时,其中的剧情、故事也是大家比较关注的一个问题

  • 《哪吒》评论词云:

 


可以看出:在关于《哪吒》的评论中,大家往往涉及到了国产、动画等关键词,而这也与大家对《哪吒》的主流定位不谋而合。

彩蛋

本篇文章的原创并不是我,是CSDN@不正经的kimol君。说实话我接触的python内容并不多,当我在日常闲逛CSDN的过程中,无意发现了这篇“学以致用的典范”,于是与kimol君简单闲聊,获得了转载的权限。

 


看着别人的代码执行得相当顺利,自己也跟着操作了一遍,但是发现了不少问题,想到肯定还有好多小伙伴也避不开踩坑的过程,于是我就将问题及对应的解决方案记录了下来。

First

首先科普一下:

python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库

因为我们的票房数据是存放在以.xlsx结尾的excel文件,当我们没有事先安装过xlrd模块,直接通过pandas对象.read_excel方法去读取文件就会出现以下异常:

ImportError: Missing optional dependency ‘xlrd’. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd.

解决方法相当简单,通过pip安装一下xlrd模块即可

pip install xlrd

Second

大家在将评论数据写入到 txt 文本文件的时候,打开会发现里面是类似这样的字符:

u5367u69fdu5c45u7136u770bu54edu4e86uff0cu8fd9

作为萌新,一开始我也是相当纳闷,python默认的编码就是 ‘UTF-8’,没问题啊
后面在向度娘询问之后终于发现了问题:

中文写入txt、json文件是无非就是open()文件时,需要添加utf-8,dump()时,需要添加ensure_ascii=False,防止ascii编码

好吧,果然一看之前的代码,json.dumps果然没有指定 ensure_ascii ,指定完之后运行后文件中的内容就正常了。

这里给大家展示一些评论:

哪吒.txt

卧槽居然看哭了,这才是货真价实的国漫新希望,终于不再是假大空的中国风堆砌,而开始借神话寓言塑造真正的“小人物”

背负原罪的出身,命中注定的死期,对存在的笃定和身份的动摇,竟指向《刺客聂隐娘》的内核:一个人,没有同类。

完整的世界观构建,父子母子师徒兄弟友敌,每一段关系都处理的有血有肉全无敷衍。美术剪辑配乐动作设计,处处都是亮点,就连喜剧部分也绝非装疯卖傻而存在无数细节作为支撑。

海边夕阳踢毽和社稷图虚幻仙境两部分堪称绝美段落,飞驰想象力和一流制作实力的结合,值得一刷再刷。

严格说是四星电影,但愿意加满五星狂推鼓励!

牛逼!牛逼!牛逼!4年前翻着白眼看完了《大圣归来》,4年后热泪盈眶地看完这部《哪吒之魔童降世》。

没想到2019不仅仅是中国科幻大片元年,本片更是和《白蛇:缘起》一块儿创造了国产动漫作品前所未有的高潮。

扎实的故事,生动的角色,饱满的情绪,炸裂的场面,这一切都构成了110分钟云霄飞车式的、畅快淋漓的观影体验,

表面上是哪吒的传奇,骨子里面是《绝代双骄》+《悟空传》,毁天灭地的逆天气势更是燃破天际,

好一曲震撼人心的“冰与火之歌”!都给老子去看!,

姜子牙.txt

申公豹:“姜子牙,你保护世界,我保护你。

我再说一遍,画面再好都是虚的,能撑起一部电影的内涵最重要的绝不是特效,而是故事内涵和剧情。各位对国漫真是太宽容了,这么多年依旧如此。

比《哪吒》成熟度高很多,平衡得也更好。天朝终于有了一部高级的3D动画电影了。

既然是全新的故事和设定那就不要披封神演义的皮啊。

听导演专访本片是删减后的次成品,想阐释的主题是神需被贬入凡间以人的视角经历苍生,才能明白苍生。

此片本质上已是成人动画,甚至有点暗黑恐怖元素。

剧本确实与主题撕裂,不知道是否是时长阉割妥协于资本排片的缘故,有种商业与文艺片之间强行掺杂的模糊感!

但片中那些对生灵与普罗大众的悲悯情节着实升华了此片的立意!

不知道大家看完有什么感想,欢迎在评论区留言~

Third

我们在将评论数据保存在.txt文本的时候,如果指定了encoding=“utf-8”,那么我们在读取的时候也要指定with open("xxx.txt", "r", encoding="utf-8"),否则就会报错~

UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xaf in position

结语

本篇文章就到这里,有任何好的想法或者建议都可以在评论区留言。在最美的年华,做最好的自己,我是00后Alice,我们下一期见~~

一键三连,养成习惯~

以上是 利用Python实现《姜子牙》和《哪吒》的票房对比和评价分析 的全部内容, 来源链接: utcz.com/z/529846.html

回到顶部