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

3天干完6个月的活,Claude把模型搬上AMD 一条挺刺激的消息:Anthropic 给投资人的材料里有一张幻灯片,写着它的 Claude Mythos Preview 只花了大约​,就摸清了怎么让另一个 Claude 模型在 AMD 的 MI355X 上跑起来。同一处还写了个对照数字:过去给一块新芯片做推理适配,通常要几十名工程师、​。3 天对 6 个月,这个比值太扎眼,当天中文互联网上就冒出一堆「英伟达的护城河塌了」的说法。我把能翻到的材料都翻了一遍,越看越觉得,塌掉的那一小块是真的,可塌的位置和很多人想的不一样。 阅读详情

b3f2a582d31d6b8cbb9e55d9f9744b1d.png

《阿凡达·水之道》于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()

1027bca5218ba15d2907dc08c11fe6c1.png

在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()

3eb1adf880de6c21f4a0f42b08444629.png

从评分来看,大部分评分在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,
    )

6d9639b8049a11dcd690ae79fad9513c.png

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

评论点赞数分布


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()

07a625d0e62fa6a2fd11c14a34b86fb4.png

评论的点赞整体并不高,点赞超过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()

a64ebc808f26027e63802f24160fcbe9.png

点赞最高的评论获得了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之间,值越大表示倾向越积极。

e24848459d3654c703e8404b83f873e2.png

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

67131f7f715e6de399fd6e0fdaf90ed7.png

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

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

以上就是本文的全部内容,本文内容仅供学习分享,勿作他用。需要数据和可视化代码可以在公众号后台回复“阿凡达”获取。


 

 

 

 

 

推荐阅读:

入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径

干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影

趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!

AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影

小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

年度爆款文案
1).卧槽!Pdf转Word用Python轻松搞定!
2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃
3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密 
4).80行代码!用Python做一个哆来A梦分身 
5).你必须掌握的20个python代码,短小精悍,用处无穷 
6).30个Python奇淫技巧集 
7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货 
8).再见Python!我要学Go了!2500字深度分析!
9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片

点阅读原文,看B站50个Python实战视频!
如何处理动态语言(Python / JS)的“隐形”调用链? 本文揭示动态语言(Python/JS)中静态AST解析导致调用链“断链”的核心问题,提出通过运行时追踪补全图谱的解决方案。基于Code-Graph-RAG的cgr trace机制,分别利用pytest插件与V8 Profiler捕获真实调用路径,将动态边合并至静态图谱,并在权重体系中提升动态边优先级。实践表明,该方法可显著提升图谱覆盖率,实现“结构+行为”双视角理解代码,为MCP与Rerank系统提供可靠支持。 阅读详情

相关推荐

阿里云人工智能工程师ACA认证免费课程学习笔记

阿里云人工智能工程师ACA认证免费课程学习笔记

engchina的专栏 2014

python:爬虫(爬取评论)内附代码以及豆瓣评分最高的电影链接,很适合找情感语料的码友

python:爬取豆瓣评分很高的电影评论(内附代码以及豆瓣评分最高的电影链接,很适合找情感语料的码友)

weixin_44871998的博客 1141

从厘米级到公里级:北斗网格10级精度在ArcPro中的完整应用指南

本文提供了北斗网格十级精度体系在ArcGIS Pro中的完整应用指南。详细解析了从660公里到1.5厘米的十级网格尺度及其编码逻辑,并重点演示了如何在ArcPro中生成网格、计算编码,以及根据项目需求(如滑坡监测)选择合适精度层级的实战策略。指南旨在帮助GIS专业人士利用这套统一的网格框架,高效管理多尺度空间数据并优化分析工作流。

Black的专栏 475

小试爬虫之豆瓣电影TOP250

import re from urllib.request import urlopen def getPage(url): response = urlopen(url) return response.read().decode('utf8') def parsePage(s): com = re.compile( '&lt;div class="i...

weixin_42324313的博客 1012

第三节: 串口通信(用CubeMX学习STM32)

用CubeMX学习STM32, 串口通信学习, 通过轮询方式和中断方式两种方式进行通信演示。 STM32F407zgt6

Kevin_8_Lee的博客 8904

【亲测有效】OpenClaw Gateway 出现 “(no output)“ 卡死问题完整解决指南:从手动重启到 systemd Watchdog 自动恢复

最近在使用 OpenClaw(自托管 AI 助手框架,前身 Clawdbot/Moltbot)时,遇到了一个非常常见的顽疾:TUI(终端界面)或 Telegram 等通道经常显示 "(no output)",消息发出去后机器人完全没反应,看起来像是卡死了。

hampeter的博客 8612

基于python豆瓣电影爬虫数据评论情感分析可视化分析推荐系统(完整源码+数据库+详细开发文档+万字论文等资料)

Django(发音为"jan-go")是一个高级的Python web框架,它鼓励快速开发和干净、可重用的设计。Django 遵循经典的 Model-View-Controller(MVC)软件设计模式,但采用了稍微不同的结构。在Django中,这个模式被称为Model-View-Template(MVT)。负责数据存储和检索。定义数据模型,通过对象关系映射(ORM)将数据模型映射到数据库表。处理用户请求,从模型中检索数据,并将数据传递给模板进行渲染。定义如何呈现数据。

今天再多学会儿博客 3684

lvgl 实现表格table,并且固定表头

嵌入式实现table,lvgl 实现原生表格table组件

m0_61704502的博客 1273

python 豆瓣评论分析方法_基于Python的豆瓣影评分析——数据预处理

一、数据抓取利用python软件,抓取豆瓣网上关于《向往的生活》的影视短评,进行网页爬虫,爬虫代码如下:import requestsimport recookies=[cookie1,cookie2,cookie3]url1='https://movie.douban.com/subject/26873657/comments?start=' #《向往的生活 第1季》豆瓣短评网址url2='h...

weixin_42292183的博客 3919

在Pycharm中配置Pyqt5工具(2023年新版教程)

在Pycharm中配置Pyqt5相关的三个工具:QtDesigner、PyUIC、PYRCC

网络技术和Python 2万+

SAP CBC 集成质量系统初始化接入实战指南

摘要 本文探讨了SAP S/4HANA Cloud Public Edition项目中质量系统的初始接入过程。质量系统并非开箱即用,而是需要经过SAP Central Business Configuration(CBC)的Scope and Organizational Structure阶段部署后才能具备完整功能。文章重点分析了几个关键环节:CBC里程碑确认的时机选择、Identity Authentication的初始管理员设置、Business Role Template的创建规范等。实施过程中需特

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1413

豆瓣短评大数据分析:探索用户观影趋势与情感倾向

首先,我们编写Mapper函数和Reducer函数,然后对短评数据执行Map和Reduce操作,最终得到各个评分的评论数量统计并保存为CSV文件。我们首先利用Python的Pandas库加载豆瓣短评数据,并统计不同IP属地的评论数量。在本文中,我们将结合Python编程和大数据分析的技术,对豆瓣短评数据进行探索性分析,以洞察用户的地域分布、评分偏好以及对影片的情感倾向。最后,我们利用词云技术对豆瓣短评中的评论文本进行可视化。通过对评论文本的词频统计,生成词云图展示了用户在评论中提及频率较高的关键词。

lhyandlwl的博客 934

挖矿病毒解决实例(隐藏进程,文章较好)(入侵)

CPU起飞了 最近有朋友在群里反馈,自己服务器的CPU一直处于高占用状态,但用top、ps等命令却一直找不到是哪个进程在占用,怀疑中了挖矿病毒,急的团团转。 根据经验,我赶紧让他看一下当前服务器的网络连接,看看有没有可疑连接,果然发现了有点东西: 上Shodan查一下这IP地址: 反向查找,发现有诸多域名曾经解析到这个IP地址: 这是一个位于德国的IP地址,开放了4444,5555,7777等数个特殊的服务端口: 其中这位朋友服务器上发现的连接到的是7777端口,

墨痕诉清风的博客 1万+

利用Python爬取《囧妈》豆瓣短评数据,并进行snownlp情感分析

snownlp中文本积极评论和消极评论所在的位置 关于训练 训练是更好地完善现有的语料库,现在提供训练的包括分词,词性标注,情感分析。以分词为例 分词在snownlp/seg目录下 # 分词训练 from snownlp import seg seg.train('data.txt') seg.save('seg.marshal') # 词性标注训练 # from snownlp import...

quantam的博客 7093

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

豆瓣电视剧评论的爬取以及进行情感分析+生成词云

很多时候我们要了解一部电视剧或电影的好坏时都会去豆瓣上查看评分和评论,本文基于豆瓣上对某一部电视剧评论的爬取,然后进行SnowNLP情感分析,最后生成词云,给人一个直观的印象 1. 爬取评论 以前段时间比较火热的《猎场》为例,因豆瓣网有反爬虫机制,所以在爬取时要带登录后的cookie文件,保存在cookie.txt文件里,具体代码及结果如下: import requests, codec

The Bog of Acamy 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

weixin_53637133的博客 184

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【第 009 讲】全面掌握 Python 注释:注释的定义与作用 | 单行注释 | 三引号与多行注释 | 注释使用的最佳实践

本文系统讲解 Python 注释的完整知识体系:从注释的定义与作用讲起,梳理单行注释的书写位置、临时屏蔽用法与 PEP 8 排版规范,剖析注释被忽略的底层机制;进而说明三引号字符串的本质与嵌套问题;最后给出注释使用的三条实践原则,帮助读者写好可读性高的注释。

大模型全栈工程师 · Thanks_ks 1074

Python 的 yield from 到底转发了什么:拆开 send、throw 和那个 return 值

很多人把yield from记成「省一层 for 循环的语法糖」。写和写,结果看着一样,于是就当它只是少敲几个字。这个理解会在三个地方翻车:调用方.send()的值送不进去、子生成器return的值拿不到、异常和close()传不下去。yield from真正做的事是,外层生成器退成一个透明通道。本文所有输出来自本机 CPython 3.13.14 实测。yield from不是循环,是委托——nextsendthrowclose四个方向的流量全部直通子生成器,并且子生成器return。

小小张说故事的博客 155

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 438

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 246

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 432

yolo 和 deft 算法的区别

你应该是打错了:是,不是 defrat;

曾大强博客 266

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级 备考:莫队算法离线区间查询详解

备赛进行时:第十八届蓝桥杯软件赛报名已于 2026-10-08 10:00 开启、12-18 14:00 截止,省赛定在 2027-04-10(C/C++·Python 程序设计 9:00–13:00);中国电子学会 2026 年 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名 9/23–12/2 16:00、统考 12-12;全国青少年信息素养大赛 2026—2027 赛季算法应用主题赛也已进入复盘练兵窗口。

IT_Scratch的博客 182
上一篇: 学到一招!PyCharm连接MySQL竟如此简单!
下一篇: 推荐一个设计神器工具!真心好用!
菜鸟学Python
博客等级 码龄9年 8089粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值