《狄仁杰之四大天王》影评分析(爬虫+词云+热力图)

栏目: 编程工具 · 发布时间: 5年前

内容简介:作为徐老怪的忠实影迷,《狄仁杰之四大天王》肯定是要去看的,看豆瓣评分和前两部相差不多,但其实胡萝卜酱并不是很喜欢前两部,所以在犹豫要不要去看,受到糖甜甜甜的《我不是药神》推送影响,于是也简单去分析了一下《狄仁杰》的影评。本来小编是打算爬取豆瓣的全部影评,但是很不幸,数据爬取到一半,我的账号被封了(建议大家改为动态IP进行爬取,代码可用,可加QQ群获取),于是转战于猫眼。猫眼的短评不能直接通过源码获得,需要寻找他的数据接口,如下:

作为徐老怪的忠实影迷,《狄仁杰之四大天王》肯定是要去看的,看豆瓣评分和前两部相差不多,但其实胡萝卜酱并不是很喜欢前两部,所以在犹豫要不要去看,受到糖甜甜甜的《我不是药神》推送影响,于是也简单去分析了一下《狄仁杰》的影评。

《狄仁杰之四大天王》影评分析(爬虫+词云+热力图)

01 数据爬取

本来小编是打算爬取豆瓣的全部影评,但是很不幸,数据爬取到一半,我的账号被封了(建议大家改为动态IP进行爬取,代码可用,可加QQ群获取),于是转战于猫眼。猫眼的短评不能直接通过源码获得,需要寻找他的数据接口,如下:

http://m.maoyan.com/mmdb/comments/movie/341516.json?_v_=yes&offset=1

其中341516属于电影的专属id,offset代表页数且只展示1000页的内容,同时仅限于当日的评论。此文只为做影评分析演示,所以小编只爬取了今日的评论,去重后仅为几百条,建议大家多爬取今天的数据,在做分析。

代码如下:

import requests 
import json 
import time 
import random 
 
#下载一页数据 
def get_one_page(url): 
    headers = { 
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36' 
    } 
    response = requests.get(url,headers=headers) 
    if response.status_code == 200:  #页面正常响应 
        return response.text # 返回页面源代码 
    return None 
 
#解析一页数据 
def parse_ono_page(html): 
    data = json.loads(html)['cmts'] #评论以json形式存储,故以json形式截取 
    for item in data: 
        yield{ #该方法返回一个字典 
            'comment':item['content'], 
            'date':item['time'].split(' ')[0], 
            'rate':item['score'], 
            'city':item['cityName'], 
            'nickname':item['nickName'] 
        } 
 
#保存数据到文本文档 
def save_to_txt(): 
    for i in range(1, 1001): 
        url='http://m.maoyan.com/mmdb/comments/movie/341516.json?_v_=yes&offset=' + str(i) 
        html = get_one_page(url) 
        print('正在保存第%d页.'% i) 
        for item in parse_ono_page(html): 
            with open('狄仁杰.txt','a',encoding='utf-8') as f: 
                f.write(item['date'] + ',' + item['nickname'] + ',' + item['city'] + ',' +str(item['rate'])+','+item['comment']+'\n') 
        #反爬 
        time.sleep(5 + float(random.randint(1,100)) /20)  
 
# 获取的评论可能有重复,为了最终统计的真实性,需做去重处理 
def delete_repeat(old,new): 
    oldfile = open(old,'r',encoding='UTF-8') 
    newfile = open(new,'w',encoding='UTF-8') 
    content_list = oldfile.readlines() #读取的数据集 
    content_alreadly_ditinct = [] #存储不重复的评论数据 
    for line in content_list: 
        if line not in content_alreadly_ditinct: #评论不重复 
            newfile.write(line+'\n') 
            content_alreadly_ditinct.append(line) 
 
if __name__ =='__main__': 
    save_to_txt() 
    delete_repeat(r'狄仁杰.txt', r'狄仁杰_new.txt') 

爬取数据如下:

《狄仁杰之四大天王》影评分析(爬虫+词云+热力图)

02 数据分析

直观来看,有用的数据仅为城市,评分和评论。我们分别采用热力图,柱状图和云图来进行可视化分析。

观影者分布热力图

根据观影者的城市,我们画出了观影者分布情况,如下图:

《狄仁杰之四大天王》影评分析(爬虫+词云+热力图)

可明显发现东部地区,尤其是北京、上海、广东,成都等城市更为突出,当然,这和经济发展有着重要的联系,也符合我们的常规想法。

代码如下:

from wordcloud import WordCloud, STOPWORDS 
import pandas as pd 
import jieba 
import matplotlib.pyplot as plt 
import seaborn as sns 
from pyecharts import Geo 
 
f = open('狄仁杰_new.txt',encoding='UTF-8') 
data = pd.read_csv(f,sep=',',header=None,encoding='UTF-8',names=['date','nickname','city','rate','comment']) 
 
city = data.groupby(['city']) 
rate_group = city['rate'] 
city_com = city['city'].agg(['count']) 
city_com.reset_index(inplace=True) 
data_map = [(city_com['city'][i],city_com['count'][i]) for i in range(0,city_com.shape[0])] 
geo = Geo("狄仁杰",title_color="#fff",title_pos="center",width=1200, 
          height=600,background_color="#404a59") 
 
while True:  
    try: 
        attr, val = geo.cast(data_map) 
        geo.add("", attr, val, visual_range=[0, 50], visual_text_color="#fff", is_geo_effect_show=False, 
                is_piecewise=True, visual_split_number=6, symbol_size=15, is_visualmap=True) 
 
    except ValueError as e: 
        e = str(e) 
        e = e.split("No coordinate is specified for ")[1]  # 获取不支持的城市名称 
        for i in range(0,len(data_map)): 
            if e in data_map[i]: 
                data_map.pop(i) 
                break 
    else: 
        break 
geo.render('狄仁杰.html') 

评分柱状图

相较于豆瓣的评分机制,在猫眼的评分机制允许给出半星的评价,于是通过简单的柱状图来大概看一下评分情况。

《狄仁杰之四大天王》影评分析(爬虫+词云+热力图)

大部分的评分都高于3分,尤其是给出满分的最多,只有少数的观影者给出了低分,看来徐克这部电影的口碑还行,至少在及格线以上。那大家观完影,最直观的感受是什么呢,接下来就通过短评分析来看看。

代码如下:

#评分分析 
rate = data['rate'].value_counts() 
 
sns.set_style("darkgrid") 
bar_plot = sns.barplot(x=rate.index,y=(rate.values/sum(rate)),palette="muted") 
plt.xticks(rotation=90) 
plt.show() 

短评词云图

为了分析短评,我们采用jieba对短评进行了分词,然后做出词云图。

背景图:

《狄仁杰之四大天王》影评分析(爬虫+词云+热力图)

词云图:

《狄仁杰之四大天王》影评分析(爬虫+词云+热力图)

和前两部一样,最突出的是特效,剧情和徐老怪,看来在这部电影里面,徐克肯定也将特效做的很棒,个人风格也肯定展示的淋漓尽致。同时,也能发现好看,不错,推荐也是观影者的主要感受,看来还是蛮值得去看的。

代码如下:

#分词 
comment = jieba.cut(str(data["comment"]),cut_all=False) 
wl_space_split= " ".join(comment) 
#导入背景图 
backgroud_Image = plt.imread('xuke.jpg') 
stopwords = STOPWORDS.copy() 
print(" STOPWORDS.copy()",help(STOPWORDS.copy())) 
#可以自行加多个屏蔽词,也可直接下载停用词表格 
stopwords.add("电影") 
stopwords.add("一部") 
stopwords.add("一个") 
stopwords.add("没有") 
stopwords.add("什么") 
stopwords.add("有点") 
stopwords.add("这部") 
stopwords.add("这个") 
stopwords.add("不是") 
stopwords.add("真的") 
stopwords.add("感觉") 
stopwords.add("觉得") 
stopwords.add("还是") 
stopwords.add("特别") 
stopwords.add("非常") 
stopwords.add("可以") 
stopwords.add("因为") 
stopwords.add("为了") 
stopwords.add("比较") 
print (stopwords) 
#设置词云参数 
#参数分别是指定字体/背景颜色/最大的词的大小,使用给定图作为背景形状 
wc =WordCloud(width=1024,height=768,background_color='white', 
              mask = backgroud_Image,font_path='C:/Windows/Fonts/simkai.ttf', 
              stopwords=stopwords,max_font_size=400, 
              random_state=50) 
#将分词后数据传入云图 
wc.generate_from_text(wl_space_split) 
plt.imshow(wc) 
plt.axis('off')#不显示坐标轴 
plt.show() 
#保存结果到本地 
wc.to_file(r'xuke_wordcloud.jpg') 

03 结语

本文只是做了简单的数据爬取和分析,主要是用以学习如何进行分词,词云和热力图,建议大家可以基于此进行练习。(胡萝卜酱要抽空去看狄仁杰了,开熏)


以上所述就是小编给大家介绍的《《狄仁杰之四大天王》影评分析(爬虫+词云+热力图)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python算法教程

Python算法教程

[挪威] Magnus Lie Hetland 赫特兰 / 凌杰、陆禹淳、顾俊 / 人民邮电出版社 / 2016-1-1 / 69.00元

本书用Python语言来讲解算法的分析和设计。本书主要关注经典的算法,但同时会为读者理解基本算法问题和解决问题打下很好的基础。全书共11章。分别介绍了树、图、计数问题、归纳递归、遍历、分解合并、贪心算法、复杂依赖、Dijkstra算法、匹配切割问题以及困难问题及其稀释等内容。本书在每一章结束的时候均有练习题和参考资料,这为读者的自我检查以及进一步学习提供了较多的便利。在全书的最后,给出了练习题的提......一起来看看 《Python算法教程》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具