Python 分析 10 万条弹幕告诉你:《古董局中局2》到底好不好看?

部署运行你感兴趣的模型镜像

作者 | 泽龙、Mika

来源 | CDA数据分析师

今天我们聊一聊《古董局中局2》

点击下方视频,先睹为快: 

上周日,有一部鉴宝题材的剧静悄悄上线了,那就是夏雨、魏晨等主演的古董局中局系列第二部《古董局中局2鉴墨寻宝》(下文简称为《古2》)。

这部剧制作团队是《怒晴湘西》《龙岭迷窟》等网剧的经典配置——管虎监制+费振翔导演。按理说有了《龙岭迷窟》的成功,费振翔导演应该更加得心应手,但是《古2》的就完全没有《龙岭迷窟》给人带来的惊艳感了,有些地方还有点不尽人意。

 

经典鉴宝题材IP,从小说到桌游

 

首先要给不知道《古董局中局》的小伙伴们科普下,《古董局中局》一共4部,是马伯庸执笔的,小说连载后就引起了热潮,备受追捧。

因为题材和剧情设置,被知名桌游公司改编成了桌游,更在当时风靡一时,各大桌游店都在玩古董局中局,最后腾讯出手,买下版权,改编成了电视剧。

关于《古董局中局》桌游的玩法,简单介绍下就是分为红黑两个阵营,红方以许愿为代表,家族遭到黑方陷害,想为家族平冤昭雪,以打败黑方为己任。黑方以老朝奉为代表,想统治古玩市场,势力通天,双方谁都不知道对方的真实身份,在各种古玩案件里面斗智斗勇。

豆瓣7.1分,《古2》拍的怎么样?

 

其实这并不是《古董局中局》第一次影视化,在2018年时就由夏雨、乔振宇、蔡文静主演了第一部,剧情较原著改编幅度较大,而且后期剧情较为冗杂拖沓,无关紧要、可有可无的场面和对话太多,导致剧情崩坏,最终豆瓣评分只有6.7分。

本次第二部依旧夏雨饰演主角许愿,而其他配角都大换血,药不然和黄烟烟分别换成了阿丽亚。

故事主要根据原著第二部和第四部的内容,讲的是夏雨饰演的许愿是北京潘家园小古董店"四悔斋"的老板,古董鉴宝界最具权威的"五脉梅花"家族之一许家,唯一的传人。为了楸出隐藏在五脉之中的"老朝奉"造假势力,许愿孤身一人入局破局,与庞大的古董造假集团展开层层较量,却被设局指引牵扯出两幅《清明上河图》真赝难辨的惊天秘密。

夏雨的痞劲真是高度还原原著书中许愿,一看就是胡同串子,但是第二部女主换人,看看网上的评价,吐槽不少。

剧情方面虽然也存在各种槽点,但是这部剧后面还是高度还原小说的,现在豆瓣评分也稳定在7.1分,成绩还是不错的。

我们分析整理了《古2》在豆瓣的评分数据:

总体评分情况

首先看到总体评分情况,其中给四星的最多,共占31.8%,其次20.8%的人给出了3星,19.6%的人给出了2星。

短评词云

在豆瓣大家对这部剧的评价如何呢?

通过分析豆瓣的短评可以看到,讨论最多的就是夏雨的演技,夏雨的演技还是有保障的。同时女主黄烟烟也是讨论的焦点之一,在许多书迷看来,黄烟烟本是个冰山美人,现在怎么变成一这么活泼的北京妞儿?实在是有点不符合人设。

除此之外,词云针对“剧情”“原著”方面的讨论很多,除了吐槽,评论中表示“喜欢”“不错”等肯定的声音也不少。

 

看《古2》时,弹幕中大家都在讨论些什么

 

接着我们来分析下这部剧在腾讯视频的弹幕数据,这次我们还是用的Python,我们总共收集整理了107570 条弹幕。

弹幕字数分布

下面看到分析结果,首先在弹幕发送的数据上很有意思,发送弹幕字数最多的不是5字以下,而是5-10字,这部分弹幕共有38107条,其次10-15字的弹幕也不少,为27948条。

单人弹幕发送量

看剧时大家发弹幕的习惯又如何呢?通过分析可以发现,高达58.73%的人都只发了一条弹幕。17.95%的人发了两条弹幕。

弹幕关注人物分布

发弹幕时,大家讨论的主要人物都有哪些呢?经过数据分析整理可以发现,讨论最多的当然是我们的男主夏雨。其次分别是魏晨、老朝奉、阿丽亚等演员。

人物弹幕画像

夏雨饰演--许愿

先看到夏雨饰演的许愿这一角色弹幕画像,弹幕中观众们都对夏雨的演技表示了肯定,“厉害”“好看”“喜欢”等都是高频词。夏雨不必多说,影帝就是影帝,演技一如既往得稳。总之,夏雨把许愿这个有点吊儿郎当但是内心又充满着正义感和使命感的北京小青年演绎得淋漓尽致。

魏晨饰演--药不然

关于魏晨饰演的药不然,观众们认为,虽然比起第一部少了点贵公子的感觉,但魏晨版药不然也还不错,药不然的玩世不恭、混不吝都变现的很有分寸。评论中感叹魏晨演技还不错,演出了“痞帅”的感觉,还挺令人眼前一亮。同时也有跟第一部乔振宇版进行对比的。

阿丽亚饰演--黄烟烟

最后看到阿丽亚饰演的黄烟烟角色词云,这个角色的争议就很大了。比起第一部冷若冰霜的冰山美人,这一部版的黄烟烟转眼变成了活泼的北京大妞。这方面还是让观众们挺难接受的。在词云中感叹“一言难尽”“出戏”“失望”的词频出。

教你用Python分析《古2》腾讯视频弹幕

 

关于数分析部分,我们获取了腾讯弹幕的数据并进行了以下的分析,以下为部分分析代码。

  1. 弹幕发送字数分布

  2. 单人弹幕发送总量分布

  3. 弹幕情感评分分布

  4. 弹幕主要关注人物分布

  5. 弹幕人物画像(代码暂略)

首先导入数据处理和相关的绘图库。

# 导入库
import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt 
import jieba
import jieba.analyse
from snownlp import SnowNLP

from pyecharts.charts import Bar, Pie, Line, WordCloud, Page
from pyecharts import options as opts 

01 弹幕基本概况

爬取到的弹幕是这样子的,一共包含了以下信息:集数、评论ID、用户名、vip等级、评论内容、评论时间点和评论点赞。

# 读入数据
df_1 = pd.read_csv('./data/古董局中局2腾讯弹幕.csv', encoding='utf-8', engine='python')
df_1.head() 

一共有107570条弹幕数据。

df_1.info() 
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 107570 entries, 0 to 107569
Data columns (total 7 columns):
episodes      107570 non-null int64
comment_id    107570 non-null int64
oper_name     25539 non-null object
vip_degree    107570 non-null int64
content       107570 non-null object
time_point    107570 non-null int64
up_count      107570 non-null int64
dtypes: int64(5), object(2)
memory usage: 5.7+ MB

02 弹幕字数分布

# 计算字数
word_num = df_1['content'].apply(lambda x:len(x)) 

# 分箱
bins = [0,5,10,15,20,25,30,35,40,45,50,549]
word_num_cut = pd.cut(word_num, bins).value_counts().sort_index()

# 柱形图
bar1 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))
bar1.add_xaxis(word_num_cut.index.astype('str').tolist())
bar1.add_yaxis("", word_num_cut.values.tolist(), category_gap='4%')
bar1.set_global_opts(title_opts=opts.TitleOpts(title="弹幕发送字数分布"), 
                     visualmap_opts=opts.VisualMapOpts(max_=38107)
                    )
bar1.render() 

03 弹幕情感分析

def nlp_score(x):
    """
    功能:获取情感评分
    """
    sn = SnowNLP(x)
    return sn.sentiments

# 计算情感得分
df_1['nlp_score'] = df_1['content'].map(lambda x: nlp_score(x))

# 分箱
score_bins = [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1]
score_cut = pd.cut(df_1['nlp_score'], bins=score_bins)
score_cut = score_cut.value_counts().sort_index()

# 绘制折线图
line1 = Line(init_opts=opts.InitOpts(width='1350px', height='750px'))
line1.add_xaxis(score_cut.index.astype('str').tolist())
line1.add_yaxis('', score_cut.values.tolist(),
                areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
                label_opts=opts.LabelOpts(is_show=False))
line1.set_global_opts(title_opts=opts.TitleOpts(title='弹幕情感评分分布[0~1]'),
#                       toolbox_opts=opts.ToolboxOpts(),
                      visualmap_opts=opts.VisualMapOpts(max_=22288))
line1.set_series_opts(linestyle_opts=opts.LineStyleOpts(width=4))
line1.render() 

04 弹幕关注人数数量占比

def calculate_nums(words_list):
    """
    功能:给定关键词列表,计算弹幕出现次数
    """
    pattern = '|'.join(words_list)
    num = int(df_1['content'].str.contains(pattern).sum())
    return num

# 关键词
xiayu = ['许愿', '夏雨', '下雨']
weichen = ['药不然', '魏晨', '药二爷', '晨晨', '老魏', '晨哥', '晨'] 
laochaofeng = ['老朝奉', '老朝凤', '老朝', '老嘲讽', '老巢']
Aliya = ['黄烟烟', '阿丽亚', '烟烟'] 
liangjing = ['梁静', '素姐']
liuyiming = ['一鸣', '毕彦君'] 

all_list = [xiayu, weichen, laochaofeng, Aliya, liangjing, liuyiming]

danmu_name = ['夏雨', '魏晨', '老朝奉', '阿丽亚', '梁静', '刘一鸣']
danmu_num = [calculate_nums(i) for i in all_list]

# 柱形图
bar2 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))
bar2.add_xaxis(danmu_name)
bar2.add_yaxis('数量', danmu_num) 
bar2.set_global_opts(title_opts=opts.TitleOpts('弹幕主要关注人物分布'), 
                     visualmap_opts=opts.VisualMapOpts(max_=20000))
bar2.render() 

目前这部《古2》还在更新中,大家可以等都更新完了在看,毕竟免费看剧难道不香吗?同时C君在这里还是很推荐大家去玩下这个《古董局中局》的桌游,的确比较烧脑的。

《古董局中局2》数据分享:

链接: https://pan.baidu.com/s/1bqpPDCcoBUNKPK4m15iE1g 提取码: 9ywa

更多精彩推荐
☞登 GitHub 趋势榜首德国疫情追踪 App 号称可保疫情隐私数据无忧,你信吗?
☞百度否认退市;微信官方回应「个人影响度报告」;微软公布 C# 9.0 计划 | 极客头条
☞200 万年薪请不到!清华姚班到底有多牛?| 原力计划
☞出任 Twitter 独立董事,AI 女神李飞飞的传奇人生
☞我们已经不用AOP做操作日志了!| 原力计划
☞从特斯拉CEO到推特CEO ,细数这9位持有比特币的顶级富豪
你点的每个“在看”,我都认真当成了喜欢

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

考虑柔性负荷的综合能源系统低碳经济优化调度【考虑碳交易机制】(Matlab代码实现)内容概要:本文围绕“考虑柔性负荷的综合能源系统低碳经济优化调度”展开,重点研究在碳交易机制下如何实现综合能源系统的低碳化与经济性协同优化。通过构建包含风电、光伏、储能、柔性负荷等多种能源形式的系统模型,结合碳交易成本与能源调度成本,提出优化调度策略,以降低碳排放并提升系统运行经济性。文中采用Matlab进行仿真代码实现,验证了所提模型在平衡能源供需、平抑可再生能源波动、引导柔性负荷参与调度等方面的有效性,为低碳能源系统的设计与运行提供了技术支撑。; 适合人群:具备一定电力系统、能源系统背景,熟悉Matlab编程,从事能源优化、低碳调度、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究碳交易机制对综合能源系统调度决策的影响;②实现柔性负荷在削峰填谷、促进可再生能源消纳中的作用;③掌握基于Matlab的能源系统建模与优化求解方法;④为实际综合能源项目提供低碳经济调度方案参考。; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解过程,重点关注目标函数设计、约束条件设置及碳交易成本的量化方式,可进一步扩展至多能互补、需求响应等场景进行二次开发与仿真验证。
<think>根据用户的问题,用户想知道在Python中如何定义部变量。在Python中,变量作用域分为部作用域、闭包函数外的函数作用域(嵌套作用域)、全作用域和内置作用域。部变量是在函数内部定义的变量,只能在函数内部访问。 根据引用[1][3][4],我们可以总结出定义部变量的方法: 1. 在函数内部直接赋值(使用global或nonlocal声明)的变量就是部变量。 2. 部变量只在函数内部有效,函数外部无法访问。 此外,引用[2]和[3]提到了使用nonlocal和global关键字来改变变量的作用域,但这两个关键字并是用来定义部变量的,而是用来声明变量引用的是外层作用域的变量(nonlocal)或全作用域的变量(global)。 因此,定义部变量的方法就是在函数内部直接赋值,例如: ```python def my_function(): x = 10 # x是部变量 print(x) # 在函数内部可以访问 my_function() # print(x) # 这里会报错,因为x是部变量,外部无法访问 ``` 下面我将详细解释部变量的定义和使用。</think>在 Python 中,**部变量**是在函数内部定义的变量,其作用域仅限于该函数内部。定义方法如下: ### 定义部变量的方法 1. **在函数内部直接赋值** 在函数内部通过赋值语句 `变量名 = 值` 创建变量,该变量自动成为部变量: ```python def my_function(): x = 10 # 部变量 x name = "Alice" # 部变量 name print(x, name) # 函数内部可访问 my_function() # 输出: 10 Alice # print(x) # 报错!外部无法访问部变量 ``` 2. **函数参数也是部变量** 函数的形参会自动成为部变量: ```python def calculate(a, b): # a, b 是部变量 result = a * b # result 是部变量 return result ``` ### ⚠️ 关键特性 1. **作用域隔离** 部变量与外部同名变量互影响(即使同名): ```python x = 100 # 全变量 def test(): x = 200 # 部变量(与全x无关) print("内部:", x) # 输出 200 test() print("外部:", x) # 输出 100 ``` 2. **生命周期** 部变量在函数调用时创建,函数结束时销毁: ```python def counter(): count = 0 # 每次调用都会重新创建 count += 1 return count print(counter()) # 1 print(counter()) # 1(2!) ``` ### 常见错误场景 ```python def error_example(): print(y) # 尝试访问未定义的部变量 → 报错! y = 5 # 赋值语句使 y 成为部变量 error_example() # UnboundLocalError ``` ### 与全变量的区别 | 特性 | 部变量 | 全变量 | |--------------|------------------------------|------------------------| | **定义位置** | 函数内部 | 函数外部 | | **作用域** | 仅限定义它的函数 | 整个程序 | | **生命周期** | 函数开始执行到结束 | 程序运行期间一直存在 | | **修改方式** | 直接赋值 | 需 `global` 声明 | > 📌 **关键原则**:在函数内部直接赋值的变量默认为部变量(无需特殊声明),优先使用部变量可避免命名冲突并提高代码可维护性[^1][^3][^4]。 --- ### 相关问题 1. 如何在函数内部修改全变量? 2. `nonlocal` 关键字的作用是什么?与 `global` 有何区别? 3. Python 的闭包函数中局部变量如何保存状态? 4. 为什么在函数内部访问外部变量有时会报 `UnboundLocalError`? 5. Python 的变量作用域规则遵循 LEGB 原则,具体指什么?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值