基于豆瓣评价的文本分析

——以《流浪地球》为例

项目背景
在电影行业飞速发展的当今,电影已经成为了非常普遍的娱乐选择,中国电影最近几年也是突飞猛进,越来越多的人走进电影院。而信息媒体的发展也使得所有人都拥有了随时随地与世界各地的人讨论电影的机会,电影无疑已经进入了全民关注,全民讨论时代。
但是随着越来越多的电影上映,越来越大的阅片量,大家对电影质量和制作水平的要求也越来越高。电影出品方想要斩获高票房,就要把握好消费者的喜好,制作出符合市场期待的电影。
在国内,豆瓣、淘票票、猫眼三家网站都有自己所属平台的评分功能,俨然形成了国内的“电影评分三巨头”。电影评分网站上蕴含了大量的电影评论、排行、评分等信息,是消费者择片困难时的重要参考依据,也是电影出品方了解用户喜好的有效途径。
一份科学的电影消费者数据分析报告,是预测票房的重要依据之一,也能够帮助出品方规划未来电影拍摄计划,对出品方投资有着重要意义。所以,如何分析消费者喜好信息是电影出品方非常关注的事情。

文章目录

  • 基于豆瓣评价的文本分析
    • 一.了解影评数据并明确项目目标
    • 二.对影评数据进行预处理
    • 三.读取停用词库并对数据进行处理
    • 四.对评论数据进行分词、去除停用词
    • 五.词频统计
    • 六. 绘制词云图
    • 七.时间分析
    • 八.用户发表短评数量随时刻的变化分析
    • 九.评分随日期变化分析

一.了解影评数据并明确项目目标

项目目标
本项目通过Python对主流电影评分网站豆瓣网上关于《流浪地球》评论用户的基本信息、影评内容等数据进行处理,对这些影评数据进行简单的文本分析,帮助出品方了解用户偏好。对不同类别的用户进行特征分析,比较不同类别用户的价值。
分析流程如下:

项目流程

二.对影评数据进行预处理

任务描述
数据预处理的目的是提高数据质量,便于后续进行分析。通过观察数据,发现网络获取的原始影评数据存在异常值,需要进行修正清洗,另外由于我们对评论内容处理时需要找出关键词进行分析,所以需要对评论数据进行分词、去除停用词,以便后面分析时进行词频统计和绘制词云图。

任务分析
对“流浪地球”评论数据进行预处理可以分为以下4个步骤:
(1)读取评论数据
(2)读取停用词库,并进行切片、返回列表
(3)对评论数据进行分词
(4)去除停用词

主流技术
本项目主要涉及技术为jieba,jieba是python写成的一个分词开源库,专门用于中文分词,将待分词的内容与分词词库进行比对,通过图结构和动态规划方法找到最大概率的词组。除了分词,jieba还提供增加自定义中文单词的功能。

Jieba库支持三种分词模式:
1.精确模式:把文本精确地切分开,不存在冗余单词;
2.全模式:把文本中所有可能的词语都扫描出来,有冗余;
3.搜索引擎模式:在精确模式基础上,对长词再次切分。
这里我们使用精确模式,将文本进行精确的切分开,不存在冗余单词。

读取评论数据
原始数据存储为excel格式,所以需要将数据从Excel表格中读入python。除了可使用xlrd库或者xlwt库进行对excel表格的读写操作外, 也可使用pandas库进行excel的操作,且pandas操作更加简介方便。这里运用pandas库中的read_excel()读取表格,并形成一个480×7的数据框。读入过程如代码所示:

#读入原始数据
data = pd.read_excel(r"D:\Wandering_Earth\/流浪地球.xlsx")

三.读取停用词库并对数据进行处理

停用词是指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词表。但是,并没有一个明确的停用词表能够适用于所有的工具。
通常意义上,停用词大致为如下两类:

1、应用十分广泛,在Internet上随处可见。比如“Web”一词几乎在每个网站上均会出现,对这样的词搜索引擎无法保证能够给出真正相关的搜索结果,难以帮助缩小搜索范围,同时还会降低搜索的效率;
2、在文本中出现频率很高,但实际意义又不大的词,包括语气助词、副词、介词、连接词等,通常自身并无明确的意义,只有将其放入一个完整的句子中才有一定作用,如常见的“的”、“在”等。

这里,我们使用已有的停用词库。此停用词库为文本形式,而我们在去除停用词时,停用词库应该为列表形式,因此,读入停用词库后需对词库进行切片和列表转换。停用词库文本中每行一个停用词,方便了我们进行切分。Str.split()函数很有效的帮助我们解决了这个问题,通过指定分隔符对字符串进行切分,并且返回值为字符串列表。由此,我们可以通过换行符(\n)作为分隔符,对文本进行切分,得到一个停用词列表。如代码所示:

#读入停用词库并进行切片和列表转换
with open(r"D:\Wandering_Earth\stoplist.txt",'r',encoding='utf-8') as f:stoplist = f.read()
stoplist = stoplist.split() + ['\n','',' ']

四.对评论数据进行分词、去除停用词

分词
分词是文本信息处理的基础环节,是将一个单词序列切分成一个一个单词的过程。准确的分词可以极大的提高计算机对文本信息的是被和理解能力。相反,不准确的分词将会产生大量的噪声,严重干扰计算机的识别理解能力,并对这些信息的后续处理工作产生较大的影响。
对于一段英文文本,例如“China is a great country”,如果希望提取其中的单词,只需要使用split()函数即可。然而,对于一段中文文本,例如,“中国是一个伟大的国家”,获得其中的单词十分困难,因为英文文本可以通过空格或者标点符号分隔,而中文单词之间缺少分隔符,这是中文及类似语言独有的“分词”问题。上例中,分词能够将“中国是一个伟大的国家”分为“中国”、“是”、“一个”、“伟大”、“的”、“国家”等一系列词语。jieba分词开源库能很好的进行中文分词。本项目对的分词方法如代码所示:

#分词
data_cut = data['content'].apply(jieba.lcut)

去除停用词
因为之前我们已经将停用词库做成了一个列表,这里只需要去除停用词即可取得需要的影评关键词。

#去除停用词
data_new = data_cut.apply(lambda x:[i for i in x if i not in stoplist])

五.词频统计

由于本项目的目标是对电影《流浪地球》的影评进行分析,类似“推荐”,“还行”,“力荐”等评论虽然表达了对电影的情感倾向,但是实际上无法根据这些评论提取出观影者对此影片的集体感官。评论中只有出现明确的名词,如电影细节,演员及特效等名词时,评论才有意义,因此需要对分词后的词语进行词频统计。

利用_flatten()函数将列表展评,转换为Series之后利用value_counts()方法进行特征统计描述。如代码所示:

#词频统计
pd.Series(_flatten(list(data_new))).value_counts()

六. 绘制词云图

进行词频统计后,可绘制词云查看统计效果,词云会将文本中出现频率较高的“关键词”予以视觉上的突出。可使用wordcloud模块的WordCloud绘制词云。
首先从原文件中提取出评分(scores)与评论(contents)两列,利用pd.pivot_table()方法以scores列为索引创建透视表。如代码所示:

# 创建透视表
evaluate = pd.pivot_table(data[['scores','content']],index='scores',aggfunc = np.sum)# 绘制词云图
good = evaluate.iloc[3:5]
not_bad = evaluate.iloc[2:3]
terrible = evaluate.iloc[0:2]
def word_cloud(Data=None):data_cut = Data.apply(jieba.lcut)  data_new = data_cut.apply(lambda x: [i for i in x if i not in stoplist])  total = pd.Series(_flatten(list(data_new))).value_counts()plt.figure(figsize=(10,10))mask = plt.imread('rec.jpg')wc = WordCloud(font_path='C:/Windows/Fonts/simkai.ttf',mask=mask,background_color='white')wc.fit_words(total)plt.imshow(wc)
plt.axis('off')word_cloud(Data=good['content'])    # 好评词云
word_cloud(Data=not_bad['content']   # 中评词云
word_cloud(Data=terrible['content'])   # 差评词云

分别得到词云图如下:

图6-1 好评词云图

图6-2 中评词云图

图6-3差评词云图

从好评与差评的关键信息展示上可以看得出该影片是中国难得的科幻类型的影片,讲述了人类带着地球流浪的事情,好评主要包含特效以及中国元素,差评主要集中在剧情等因素。

七.时间分析

进行时间分析之前,需对豆瓣评分有如下了解:豆瓣评分在电影没上映前即可评分,但不会显示出来,需在上映后评分人数达到指定数量,才会显示出来。

用户发表短评数量随日期的变化分析
times列数据是用户评论发表时间,如“2019-02-05 00:24:35”,既有年月日,也有时分秒,十分详尽,利于进行时间分析。该时间数据为字符串格式,需先进行字符串分割处理。通过进行时间分析,可以发现该电影在不同时间段或时间点的热度分布情况。如代码所示,我们首先分析了用户发表短评数量随日期的变化情况。

# 用户发表短评数量随日期的变化情况
dates = data['times'].apply(lambda x: x.split(' ')[0])
dates = dates.value_counts().sort_index()
plt.figure(figsize=(10,4))
plt.plot(range(len(dates)), dates)
plt.xticks(range(len(dates)), dates.index,rotation=60)
plt.title('用户发表短评数量随日期的变化情况')
plt.ylabel("用户发表短评数量")
plt.show()

用户发表短评数量随日期的变化分布图

由上图我们可以看到,2019年2月5日之后的折线图呈长尾分布,持续3个月。在电影刚上映阶段,其热度是最高的,高评论量在一定程度上说明电影本身带给人们的求影响。在电影行业中,一般情况下,映后的口碑与最终的票房动力成正相关,即口碑越好的影片,长尾效应越明显,有一定比例的观众会因为购票网站评分较高而去选择观看一部影片。目前《流浪地球》的豆瓣评分是7.9,曾冲击到8.6的高分,实属是一个不错的影片。在图中,我们也可以看到在影片上映前,就有较多的评论量,这说明此影片在上映前就受到了较大的关注。

八.用户发表短评数量随时刻的变化分析

要进行时刻分析,需取出时间数据中表时刻的字段。所以这一步与5.1不同,需将时间数据从字符串列转化为日期列,才可取出所需数据。Pandas是处理时间序列的利器,有强大的日期数据处理功能,继承和使用了datatime64格式,可以按日期筛选数据、按日期显示数据,按日期统计数据。在这里,运用了.hour取出时刻数据。具体分析过程如代码所示:

# 用户发表短评数量随时刻的变化情况
time = pd.to_datetime(data['times']).apply(lambda x: x.hour)
time = time.value_counts().sort_index()
plt.figure(figsize=(10,4))
plt.plot(range(len(time)), time)
plt.xticks(range(len(time)), time.index)
plt.title('用户发表短评数量随时刻的变化情况')
plt.ylabel("用户发表短评数量")
plt.xlabel("时刻")
plt.show()


从上图中,我们可以看到,在24小时中,都有用户在发表短评,但更多的分布在晚上21:00之后,这个时间段处于下班时间,人们具有充足的时间去观看影片,并发表评论,这与实际相符合。

九.评分随日期变化分析

评分在一定程度上反映了电影的口碑,表现该电影的需求热度。有相当大比例的观众会因为购票网站评分较高而去选择观看一部影片,所以在电影行业中,一般情况下,映后的口碑与最终的票房动力成正相关。分析用户对该电影的评分是十分有必要的。在这里,我们是分析评分随日期变化情况,处理方法如代码所示:

# 评分随日期变化的情况
data['times'] = data['times'].apply(lambda x: x.split(' ')[0])
new = pd.DataFrame(0,index=data['times'].drop_duplicates().sort_values(),columns=data['scores'].drop_duplicates().sort_values())
for i, j in zip(data['times'], data['scores']):new.loc[i, j] += 1
new = new.iloc[:, :-1]
#可视化
plt.figure(figsize=(10,4))
plt.plot(new)#,label = "10.0","20.0","30.0","40.0","50.0")
plt.title('评分随日期变化的情况')
plt.xticks(rotation=90)
plt.legend(["10.0","20.0","30.0","40.0","50.0"],loc="best")
plt.show()


按时间统计各个星级的打分数量,得到了评分随日期变化的情况分布,如上图。我们已经知道,10分对应1星,20分对应2星,以此类推。可以看到自《流浪地球》于2019年2月5日上映以来,3星一直是大众的主流评分,而4星、5星在5到10号之间也占有极大比重。另外,我们可以看到,在电影上映前的部分折线图中,4星、5星十分突出,这说明大家一开始对电影的期望值很高,这一方面是刘慈欣小说本身所带有的IP效应,另一方面是自《战狼》系列后大家对吴京抱有极大的期待。但在上映后3星却成为了主流评分,应是看完电影后有点失望,所以评分才会低于预期。

https://blog.csdn.net/weixin_46726459

基于豆瓣评价的文本分析 ——以《流浪地球》为例相关推荐

  1. 基于python的智能文本分析 豆瓣_长文干货 | 基于豆瓣影评数据的完整文本分析!...

    原标题:长文干货 | 基于豆瓣影评数据的完整文本分析! 作者:沂水寒城,CSDN博客专家,个人研究方向:机器学习.深度学习.NLP.CV Blog: http://yishuihancheng.blo ...

  2. 【文本分析】基于粤港澳大湾区博物馆访客评价的文本分析

    此文是2021年初在深圳大学文化产业研究院黄老师的指导下,与吴同学合作完成的,且于2021年4月发表于<文化深圳>杂志第一期. 文章目录 1 背景 2 研究思路 3 数据来源 4 数据基本 ...

  3. 基于python的智能文本分析 书_推荐一本Python数据分析必备工具书

    身处大数据领域,我们每天都不得不与各种各样的数据打交道,无论是围绕数据去进行计算还是分析,它们都分属大数据领域的一个细分领域.在数据分析领域,Python语言一直一枝独秀,本文作者在数据分析领域深耕多 ...

  4. 基于大数据做文本分析

    在对大数据的认识中,人们总结出它的4V特征,即容量大.多样性.生产速度快和价值密度低,为此产生出大量的技术和工具,推动大数据领域的发展.为了利用好大数据,如何有效的从其中提取有用特征,也是重要的一方面 ...

  5. 对爬取的电影《唐人街探案3》豆瓣短评做文本分析,并利用stylecloud制作词云图

    上一节,我们爬取了豆瓣上电影<唐人街探案3>的评论,并将评论保存成了txt文档,爬虫过程可参考:爬取某瓣上电影<唐人街探案3>的评论 本节,我们将对电影短评做文本分析,并利用s ...

  6. 基于python的智能文本分析 书_Python文本分析

    译者序 前言 第1章自然语言基础 11自然语言 111什么是自然语言 112语言哲学 113语言习得和用法 12语言学 13语言句法和结构 131词 132短语 133从 ...

  7. 基于贝叶斯算法文本分析之新闻分类

    文本分析中的重要概念 1 停用词:用来缩小语料 停用词是指在语料中大量出现,但对分文本的分析没啥大用的文本.这种词我们一般称为停用词.现在有好多停用词表,网上都可以搜到. 2 TF-idf:用来提取关 ...

  8. 基于聚类算法的文本热点问题挖掘算例实现(文本聚类)

    在现实生活中,有时候我们可能得到一大堆无标签文本,这时候可能需要对文本进行聚类挖掘,找出热点问题是什么. 文本聚类 第一步:数据读取 import pandas as pd import re imp ...

  9. 大数据文本分析的应用场景有哪些?

    https://www.pmcaff.com/discuss/index/480966354177088?from=related&pmc_param%5Bentry_id%5D=100000 ...

最新文章

  1. 嵌入式开发入门(2)
  2. 天翼云从业认证(4.8)高性能计算解决方案
  3. 2020 操作系统第一天复习(习题总结)
  4. 利用Python Matplotlib库做简单的视觉化
  5. (并查集) Wireless Network --POJ --2236
  6. 蚂蚁金服井贤栋:用技术联手金融机构,形成服务小微的生态合力
  7. 阿里云服务器租用费用清单表(CPU内存带宽磁盘)
  8. qcloud windows rtx cpu 100%定位
  9. C/C++面试高频知识点八股文
  10. Linux命令:lp
  11. ITOM(IT运维管理软件)
  12. python --安装pylab
  13. linux 如何解压缩 .tar.gz文件
  14. 985毕业,工作3年,分享从阿里辞职到了国企的一路辛酸和经验
  15. 全干式光缆与普通光缆的区别
  16. 新品上市!麦当劳中国首款半鸡;明星精酿啤酒品牌VEDETT;和府捞面“小面小酒”华北首店落地...
  17. 前瞻性队列、回顾性队列、病例对照研究
  18. Flappy Bird开发者接受采访,解释上瘾的危害
  19. 电机驱动芯片替换传统驱动器方案
  20. Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or us

热门文章

  1. 科学计算机可以带上飞机吗,笔记本电脑可以随身带上飞机吗
  2. [游戏]求生之路新地图下载安装说明
  3. mansory自适应label高度
  4. 去哪儿网一面:工厂方法模式
  5. 大型会议的礼仪(2)
  6. 在anaconda中git找不到命令,可能是设置的git环境变量路径包含中文
  7. Integrated Data Network (IDN) and Thomson Reuters Elektron
  8. 影视剪辑高清视频素材怎么找?附全网视频下载工具使用教程方法
  9. maven同一个项目中,一个子模块引用另一个子模块的类的方法
  10. R | 可视化 | 热图(Heatmap)