一、前言
最近上映的电影中,最大的票房黑马无疑就是国漫《哪吒之魔童降世》了。自其7月26日上映以来,票房疯涨,好评不断。截止8月20日,累计票房43.25亿。于是我爬取了猫眼的评论数据,对其进行简单的数据分析。
数据来源:猫眼电影
使用工具:pandas matplotlib pyecharts wordcloud
二、数据分析
因为使用Pyecharts 1.0版,只支持Python3.6环境。且在JupyterLab上工作,需要设置一些额外参数。具体使用见Pyecharts官网。
1.引包
import pandas as pd
import pyecharts
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
from pyecharts import options as opts
from pyecharts.charts import Page, Pie,Bar
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
%matplotlib inline
2.读取数据
截止8月14日,抓取了猫眼评论近58万数据,数据维度包含性别、城市、评分以及评论内容。链接:https://pan.baidu.com/s/1hFAwzeCj0HCGroUGiNU0iA 提取码:um60
>>> df = pd.read_csv("1211270.csv")
>>> df.shape
(578760, 7)
>>> df.head()
3.数据分析
① 性别差异
>>> gender = df.groupby("性别")["昵称"].count().reset_index()
>>> gender.columns=["性别",'数量']
>>> gender
性别 数量
0 0 251373
1 1 148054
2 2 176611
其中,0是性别未填写,1是性别男,二是性别女。使用饼图进行可视化(1.在第一次渲染的时候调用 load_javascript() 会预先加载基本 JavaScript 文件到 Notebook 中.2.load_javascript() 和 render_notebook() 方法需要在不同的 cell 中调用.)
>>> data = [["未知",251373],["男",148054],["女",176611]]
>>> pie = Pie().add("",data).set_global_opts(title_opts=opts.TitleOpts(title="性别分布差异")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
>>> pie.load_javascript()
>>> pie.render_notebook()
从评论性别分布数据可以看出,有不到一半的人不愿透露性别,从已知性别的这部分人来看,观影男女比例约为1:1,女性稍高一些但不多。
② 城市分布
选取观影人数前二十的热门城市作为数据展示。
>>> city_rank = df.groupby("城市")["昵称"].count().reset_index().sort_values(by="昵称",ascending=False)[:20]
>>> city_rank
# 添加横轴、纵轴数据
>>> b = Bar().add_xaxis(list(city_rank["城市"])).add_yaxis("城市",list(city_rank["昵称"]))
# 设置主标题,副标题
>>> b.set_global_opts(title_opts=opts.TitleOpts(title="城市分布",subtitle="来源:猫眼电影"))
># 反转横纵轴
>>> b.reversal_axis().set_series_opts(label_opts=opts.LabelOpts(position="right"))
>>> b.render_notebook()
前五名依旧是熟悉的“北上广深”,因为影片中出现的四川话,可能导致成都、重庆等四川地域观影人数较为靠前。
③ 评分
评分数据,0分最低,5分最高
>>> score = df.groupby("评分")["昵称"].count().reset_index()
>>> score.columns=["评分","数量"]
>>> score
>>> list=[]
>>> for k,v in zip(score["评分"],score["数量"]):
list.append([k,v])
>>> c= Pie().add("",list,radius=["40%", "75%"])
>>> c.set_global_opts(title_opts=opts.TitleOpts(title="评分分布图"), legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"))
>>> c.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
>>> c.render_notebook()
从图中可以明显看出,绝大多数人都给了5分,占了总人数的84%。三分及三分以下的人占了2.15%。可以看出这部影片真的非常受到大众的喜欢!
④ 评论词云
>>> comments = df[df["评论内容"].notnull()]["评论内容"].values.tolist()
>>> words =",".join(comments)
>>> key = jieba.cut(words, cut_all=False)
>>> keys = " ".join(key) # 列表转字符串
>>> mask = plt.imread("哪吒.jpeg") # 背景图
>>> my_wordcloud = WordCloud(background_color="white",width=1000,height=860,font_path="simsun.ttf",mask=mask).generate(keys)
# 展示词云图
>>> plt.imshow(my_wordcloud)
>>> plt.axis("off")
>>> plt.show()
可以看出,“好看”出现次数是最多的,其他类如“国漫”、“国产”频次也较高。