用Python分析《阿凡达·水之道》的豆瓣短评

news2024/11/20 8:39:10

《阿凡达·水之道》于2022年12月16日上映。第一部的口碑、评分等都非常高,第二部是否能延续呢,本文获取了该电影的豆瓣短评,进行了初步的分析,看下观众都是如何评价的。

数据获取


打开豆瓣首页,搜索电影名,进入《阿凡达·水之道》的详情页。

然后向下滚动页面,找到豆瓣短评。

点击全部短评进入评论详情页面,每一页有20条评论。按F12,鼠标前后翻页抓取网页请求信息。

根据网页信息可以得到请求方式为GET,同时获取到Request URL,Request Headers,Cookies。有了这些信息,就可以写代码爬取短评内容了。

代码中使用requests库向豆瓣发送GET请求,一次请求可以获取一页评论数据,改变URL中的start,循环多次发送请求,即可获取所有的评论数据。

网页爬取成功后,用正则表达式匹配需要用到的数据,依次写到excel中。

本文共获取到了580条评论,豆瓣会优先把点赞(有用)数高的评论排在前面,这580条评论是相对点赞更多的,能满足本文的分析。

评论用户是否看过电影


def is_all_seen():
    """判断是否所有用户都看过"""
    df = pd.read_excel('afanda_water_sort_comments.xlsx')
    seen = df['是否看过']
    seen.value_counts().plot.pie(figsize=(5, 2.4), ylabel='', autopct='%.2f%%', colors=['c', 'b'],
          textprops={'fontsize': 12, 'color': 'b'}, pctdistance=1.3, labeldistance=1.8)
    plt.show()

在580条评论中,只有个别用户没有看过电影,基本都是看过电影后发表的评论。

评论用户的打星分布


def star_distribution():
    """星级分布"""
    df = pd.read_excel('afanda_water_sort_comments.xlsx')
    star = df['星级']
    four, five, three, two, one, zero = star.value_counts(dropna=False)
    star_num = {'0星': zero, '1星': one, '2星': two, '3星': three, '4星': four, '5星': five}
    fig = pd.Series(star_num).plot.barh(figsize=(5, 3), color='#FF9900', width=0.7)
    for a, b in zip(range(len(star_num)), star_num.values()):
        plt.text(b+2, a, '%.0f' % b, ha='left', va='center')
    plt.xticks(range(0, 300, 50))
    x_ticks = fig.xaxis.get_major_ticks()
    for i in range(len(x_ticks)):
        x_ticks[i].set_visible(False)
    for spine in fig.spines:
        fig.spines[spine].set_visible(False)
    fig.tick_params(bottom=False, top=False, left=False, right=False)
    plt.show()

从评分来看,大部分评分在3星至5星,其中最多的是4星。

评论内容词云图


def gen_word_cloud():
    """生成词云图"""
    df = pd.read_excel('afanda_water_sort_comments.xlsx')
    comment = df['评论内容']
    for i in range(500):
        with open('comment.txt', 'a', encoding='utf-8') as f:
            f.write(comment[i])
    with open('comment.txt', 'r', encoding='utf-8') as f:
        all_comment = f.read()
    cut_text = jieba.cut(all_comment)
    result = ' '.join(cut_text)
    exclude = {'的', '了', '是', '在', '有', '我', '和', '也', '都', '但'}
    gen_stylecloud(
        text=result, size=(800, 600), max_words=1000, max_font_size=100, font_path='simhei.ttf',
        icon_name='fas fa-dragon', output_name='afanda_water_comment.png',
        background_color='#05243F', custom_stopwords=exclude,
    )

评论的热词主要有电影名阿凡达,电影的背景设定潘多拉星球、海底世界,电影时长三个小时等,从热词中不能明显的看出大家的评论是好是坏。

评论点赞数分布


def likes_distribution():
    """评论点赞数分布"""
    df = pd.read_excel('afanda_water_sort_comments.xlsx')
    likes = df['赞同数']
    likes_division = {
        '少于100': len(likes[(0 <= likes) & (likes < 100)]),
        '100至500': len(likes[(100 <= likes) & (likes < 500)]),
        '超过500': len(likes[500 <= likes])
    }
    explode = (0, 0.05, 0.1)
    pd.Series(likes_division).plot.pie(figsize=(5, 3), ylabel='', autopct='%.0f%%', pctdistance=0.85,
              colors=['c', 'b', '#FF9900'], explode=explode, startangle=7.5, textprops={'fontsize': 14, 'color': 'm'})
    plt.pie([i for i in likes_division.values()], radius=0.7, colors='w', explode=explode, startangle=7.5)
    plt.pie([1], radius=0.7, colors='w')
    plt.show()

评论的点赞整体并不高,点赞超过500的评论只有3%,超过100的也只有8%。

热评的点赞数
 


def hot_comment_likes():
    """热评的点赞数"""
    df = pd.read_excel('afanda_water_sort_comments.xlsx')
    top_10_likes = df['赞同数'].sort_values(ascending=False).head(10)
    fig = top_10_likes.plot.bar(figsize=(5, 3), color='#0099CC', width=0.7, )
    for a, b in zip(range(len(top_10_likes)), top_10_likes):
        plt.text(a, b+100, '%.0f' % b, ha='center', va='bottom')
    plt.xticks(range(10), ['Hot{}'.format(i+1) for i in range(10)], rotation=0)
    plt.yticks([])
    fig.tick_params(axis='x', colors='#FF0033')
    for spine in fig.spines:
        fig.spines[spine].set_visible(False)
    fig.tick_params(bottom=False, top=False, left=False, right=False)
    plt.show()

点赞最高的评论获得了3千多次点赞,点赞数并不是很高,有可能跟电影上映时间不长、参与人数不多有关。

评论情感分析
 


def emotional_analysis():
    df = pd.read_excel('afanda_water_sort_comments.xlsx')
    df.fillna(0)
    # 情感分析
    print('【提示】正在进行情感分析中...')
    df['情感分析转换'] = df['评论内容'].apply(lambda x: str(x))
    df['情感分值'] = df['情感分析转换'].apply(lambda x: SnowNLP(x).sentiments)
    print('情感分析完成\n{}'.format('*'*30))
    # 情感分值分布
    df['情感分值'].plot.hist(figsize=(8, 4), bins=10)
    plt.xticks(ticks=[x/10 for x in range(11)], labels=[x/10 for x in range(11)])
    plt.yticks(range(0, 500, 100))
    plt.title('情感分值分布', fontsize=16)
    plt.xlabel("情感分值", fontsize=14)
    plt.ylabel('')
    s = df['情感分值'].copy()
    counts = [s[(i / 10 < s) & (s <= i / 10 + 0.1)].count() for i in range(10)]
    for a, b in zip([x/10 for x in range(11)], counts):
        plt.text(a+0.05, b+10, int(b), ha='center', va='center', fontsize=12)
    plt.show()
    # 情感分值积极和消极占比
    pos_neg_count = pd.Series({
        '消极倾向': s[(0 <= s) & (s <= 0.5)].count(),
        '积极倾向': s[(0.5 < s) & (s < 1)].count()
    })
    pos_neg_count.plot.pie(figsize=(8, 4), ylabel='', autopct='%.02f%%', startangle=150)
    plt.show()

情感分析是指通过文本来挖掘人们对于产品、服务、组织、个人、事件等的观点、情感倾向、态度等。根据不同文本内容的语义,每个词有不同的情感倾向,情感分析对不同的文本进行分析后返回对应的情感分值,情感分值在0到1之间,值越大表示倾向越积极。

本文对评论内容进行分析后,发现情感分值分布最多的区间是0.9-1,远高于其他区间,最积极的评论内容占比最多。

将情感分值小于等于0.5定义为消极倾向,情感分值大于0.5定义为积极倾向,积极倾向占了近8成,整体的评价是非常积极的。

从情感分析结果来看,大家的评论还不错。不过情感分析也有一定的局限性,仅供参考。从我个人的角度评论,我觉得一般。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring(三): 使用注解来存储和读取Bean对象

目录一、存储Bean对象1.1 配置扫描路径1.2 使用注解存储Bean对象1.3 通过上下文读取Bean对象1.4 Bean命名规则1.5 方法注解 Bean1.5 重命名Bean二、获取Bean对象2.1 属性注入2.2 Setter注入2.3 构造方法注入2.4 Resource注解2.5 Resource注解中name参数的作用一、存储Bean对象 …

说明书丨艾美捷Annexin-V-Cy3凋亡检测试剂盒

Cy3标记的重组人膜联蛋白V显示亮红色荧光&#xff08;Ex&#xff08;max&#xff09;:543nm&#xff1b;Em&#xff08;最大值&#xff09;&#xff1a;570nm&#xff09;。 艾美捷Annexin-V-Cy3凋亡检测试剂盒化学性质&#xff1a; Applications: Flow Cytometry, Fluorescen…

C++【修理之路】初识string

这里写目录标题为什么学习string类&#xff1f;标准库中的string类string的定义转换为C风格的字符串string类的输出和输出访问字符串中的字符字符串的拼接string 字符串的增删改查总结为什么学习string类&#xff1f; C语言中&#xff0c;字符串是以’\0’结尾的一些字符的集合…

3D数学之四元数 学习笔记

四元数有三个虚部&#xff0c;一个实部 [ w (x y z) ] w xi yj zk i j k ijk -1 用于表示&#xff0c;物体在空间中的任意角度旋转 四元数的模 Sqrt(pow(w, 2) pow(x, 2) pow(y, 2) pow(z, 2)) 四元数共轭&#xff1a;p a bi 共轭为&#xff1a; p a - bi …

一文梳理 | 电力企业网络安全管理及等级保护工作重点

前言 为加强电力行业网络安全监督管理&#xff0c;规范电力行业网络安全工作&#xff0c;国家能源局近日印发《电力行业网络安全管理办法》和《电力行业网络安全等级保护管理办法》&#xff08;以下简称“两办法”&#xff09;&#xff0c;有效期均为5年。随着这两部规范性文件…

门神 马丁内斯 要什么样的成就,才不枉这些年的颠沛流离

2022-12-18日 随着劳塔罗的最后一球波网而入 阿根廷成功获得了卡塔尔世界杯的冠军 结束后 所有人都去拥抱劳塔罗 只有梅西拉起了倒在地上的马丁内斯 很多人说 在这次比赛中 阿根廷有两个神 一个是球王梅西 另一个则是 门将 马丁内斯 当场上二比零时 所有人都以为阿根廷胜券在…

(二)汇编语言——寄存器

目录 通用寄存器 汇编指令 物理地址 接下来我们来介绍寄存器&#xff0c;同时会介绍一些基本的语句&#xff08;mov,add等)&#xff0c;好了&#xff0c;就让我们进入今天的学习吧&#xff01;同时&#xff0c;我们以8086为例子来介绍&#xff0c;参考来自王爽老师的书。 说…

JAVA架构与开发(从0开始搭建一个springCloud web项目)

从0开始搭建一个springCloud web项目。 一、首先需要的开发工具&#xff1a; 1、SpringToolSuite4 &#xff0c;个人目前用的最熟练的JAVA开发工具。 2、JDK1.8&#xff0c;按照网上安装jdk的步骤安装就行。 3、maven-3.6.1 4、springBoot官网 Spring Boot 5、配置中心 Apo…

架构师必读 —— 逻辑模型(14)

从"is/is not" "before / after”的角度思考 遇到问题时&#xff0c;为了研究“为什么会发生这种问题”&#xff0c;可以将问题发生之前和发生后做一个对比&#xff0c;这样效果会更明显。通过明确差距&#xff08;差异&#xff09;&#xff0c;可以比较"在…

前端学习-创建vue项目

1.下载vscode windows系统安装第一个 linux系统安装第二个 苹果系统安装第三个 vscode 官网下载地址 下载地址&#xff1a;https://code.visualstudio.com/Download 2.下载git 选择对应的系统下载&#xff0c;跟随官网提示操作 下载地址&#xff1a;https://git-scm.com/down…

C++多线程编程基础

1.创建线程Thread 首先要引入头文件#include&#xff0c;管理线程的函数和类在该头文件中声明&#xff0c;其中包括std::thread类。 语句"std::thread th1(proc1);"创建了一个名为th1的线程&#xff0c;并且线程th1开始执行。 实例化std::thread类对象时&#xff…

你知道什么是 @Component 注解的派生性吗?

对于 Component 注解在日常的工作中相信很多小伙伴都会使用到&#xff0c;作为一种 Spring 容器托管的通用模式组件&#xff0c;任何被 Component 注解标注的组件都会被 Spring 容器扫描。 那么有的小伙伴就要问了&#xff0c;很多时候我们并没有直接写 Component 注解呀&…

计算机毕设Python+Vue寻人系统设计(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Spring Boot日志文件

哈喽呀&#xff0c;你好呀&#xff0c;欢迎呀&#xff0c;快来看一下这篇宝藏博客吧~~~ 目录 1.日志快速扫盲 2.Spring Boot项目日志简单分析 3.自定义打印日志 4.通过设置日志的级别来筛选和控制日志输出的内容 5.日志持久化 1.日志快速扫盲 什么是日志?说白了就是控制…

Java学习笔记——Idea集成git

Idea集成git-创建本地仓库-提交代码

深入浅出pom.xml文件

前言 在每一个pom文件的开头都会有这样几行代码 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocatio…

Spring Boot3.0正式发布及新特性解读

Spring Boot 3.0 正式发布 同时发布更新的还有 2.7.x 和 2.6.x 两条版本线&#xff0c;Spring Boot 是我见过的发版最守时的技术框架之一。 Spring Boot 3.0 现已正式发布&#xff0c;它包含了 12 个月以来 151 个开发者的 5700 多次代码提交。这是自 4.5 年前发布 2.0 以来&a…

Live800:在线客服系统排名是怎么样的?

在线客服系统排名是怎么样的?在线客服系统提供商提供哪些服务?在线客服系统评测要点?这些都是企业很关心的问题,这里进行简要的解答。 在线客服系统排名是怎么样的? 客观来说在线客服系统没有统一的行业标准,因此也没有统一的排名。各在线客服系统厂商各有特色,行业竞争激…

【大数据】python连接并使用redis

文章目录redis安装redis连接python安装redis库conda下载及配置vs连接redisredis使用stringset设置getrange截取append追加内容strlen(key) 字节长度listlpush,rpush赋值lpushx,rpushx只给存在的键值赋值llen 列表个数linsert 在某一个值前或者后插入新值lset 对某一个索引位置赋…

Hive 源码解读 准备篇 Debug 讲解

使用 Hive 执行 HQL 查询时遇到 bug,解决办法无非几种,explain HQL、查看日志、远程 Debug,本文就将详细讲解如何使用 Idea 远程 Debug。 1. Debug 环境准备 下载 Hive 源码包,自行编译一下,建议在 Linux 环境下编译,然后将整个编译好的包全部拷贝到 IDEA 工作目录中并…