B站视频弹幕数据分析

文章分析了B站小米汽车技术发布会的弹幕数据,包括爬取、数据处理、情感分析、词云图、时间和内容热点。结果显示网友对小米汽车期待与质疑并存,且用户活跃高峰在晚上18-23时,视频内容的电机和电池部分引发大量讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.背景

        B站上面一个  小米汽车技术发布会回放 的视频受到众多网友的浏览,用户浏览量达到了20W+,填充弹幕数量6000+。我对该视频也比较感兴趣,因此对该视频进行了弹幕爬取,进行数据分析。

二.获取弹幕数据

        1.通过python爬取该视频的弹幕信息(主要使用request)。

        

        2.将爬取的数据导出为excel文件。

        

        

        

        一共爬取到6010条弹幕。

三.数据处理与分析

        1.数据预处理

        

        可以看到现在所有数据的类型都是字符类型,为了后续的数据分析进行操作,使用astype方法对某些属性进行类型转换。

        2.弹幕词云图

        

        

        去掉了停用词后,得出上面的词云图。从词云图可以看出网友们对小米汽车还是很期待的,图中也出现了华为、比亚迪、特斯拉等关键词,看来网友也是将小米和其他车企进行了一番比较。同时还能看出雷总不愧是米粉以及众多网友心中小米最好的代言人之一。

        3.情感分析

        需要使用的是snownlp,返回弹幕评分越高表示越积极。

                           

       为了更直观的弹幕的总体情感倾向,将弹幕的情感评分>0.75的弹幕选作积极弹幕,<0.5的作为消极弹幕,如下:

        

        结合以上两图中可以看出(按情感评分>0.75的弹幕选作积极弹幕,<0.5的作为消极弹幕的标准),消极的弹幕比积极的弹幕数量要多。估计是网友们对小米第一次造汽车还持有怀疑的态度,或者是这次的技术发布会没有公布汽车的价格等原因。

                                

       根据sentiments对所有弹幕进行分析来看,平均值为0.53左右,标准差为0.28,总体数据评分比较离散,整体表现出网友对小米汽车的评价是褒贬不一。

        4.时间分析

        时间分析是很重要的,可以从中看出网友/用户的行为习惯,可以了解到他们不同时间段的偏好与活动,从而大致推断出这类视频发布的最佳时间、用户活跃高峰时间段、最受欢迎的服务/信息等等。

        将时间戳转换为常见的日期格式,然后根据转换后的日期信息进行数据时间分析。

        

        首先对日期信息进行分析,查看不同日期的弹幕数量变化。

        

        

        为了防止个别用户刷弹幕数量导致分析结果不准确的情况,分别根据用户id和弹幕id进行统计,从以上的图可以看出,统计的结果是相似的。弹幕数量从视频发布那天起,随着日期的增长一直下降的。可以大致的判断出这类视频的热度和流量基本是在视频发布的一周内的,热度的高点一般是前三天之内。

        

        根据小时进行数据分析。从上两图可以看到,弹幕从16时到20时,弹幕数量都在增加,到20时达到了顶峰,这个时刻的弹幕有1011条。从中可以大致推断出用户浏览此类视频大多数在18-23时之间,制作这种类型的视频,应该在18时之前发布视频,这样或许可以让视频的浏览量更多。

        (由于该视频弹幕内容主要在1周内,所有没有进行月/周/天的分析。月/周/天的分析过程跟小时相差无几)。

        5.内容分析

        根据发送弹幕的时间,对视频的内容进行分析,可以了解到什么时刻的什么内容引起网友发弹幕的兴趣,从而知道网友偏好什么信息。

                

        取 弹幕数/秒 前十的视频进度,对视频的内容进行分析,从上图看出,视频的弹幕数量较多的在11分钟和18分钟的时候,具体的视频内容看下图:

        

        在11分钟的时候,视频的主要内容是小米超级电机,也是这个发布会着重讲解的技术之一,看来网友们对小米汽车的电机充满期待。

        

        在18分钟的时候,视频的主要内容是小米汽车的电池,是这发布会的第二个要介绍的技术,小米汽车的电池引起的网友们的讨论。

        最后,查看一下法弹幕数量最多的前三位。

        

        发弹幕最多的用户发了67条,想必该位用户在观看这场发布会回放的时候,一定是表达了很多自己独到的见解。

        

### 数据采集与分析流程 #### 1. 弹幕数据的获取 B弹幕通常以XML或JSON格式存储。对于目标视频,可以通过其CID(Content ID)访问对应的弹幕文件。以下是具体操作: - **通过API抓取** B提供了公开接口用于获取弹幕数据。例如,`https://api.bilibili.com/x/v1/dm/list.so?oid=<cid>` 是一个常见的请求地址[^1]。将 `<cid>` 替换为目标视频的实际 CID 即可下载 XML 文件。 - **解析XML结构** 在 XML 文件中,每条弹幕由 `<d>` 标签表示,其中 `text` 部分为弹幕内容,而 `p` 属性包含了时间戳、颜色、模式等信息[^3]。可以使用 Python 的标准库 `xml.etree.ElementTree` 或第三方库 `lxml` 来解析这些字段。 ```python import xml.etree.ElementTree as ET def parse_danmu_xml(xml_file_path): tree = ET.parse(xml_file_path) root = tree.getroot() danmus = [] for child in root: p_values = child.attrib["p"].split(",") content = child.text.strip() if child.text else "" danmus.append({ "content": content, "timestamp": float(p_values[0]), "mode": int(p_values[1]), "fontsize": int(p_values[2]), "color": int(p_values[3]) }) return danmus ``` #### 2. JSON格式处理 如果弹幕是以 JSON 形式返回,则可以直接加载并提取所需字段。以下是一个基于 JSONPath 的例子[^4]: ```python import json from jsonpath import jsonpath with open('danmu.json', 'r', encoding='utf-8') as f: data = json.load(f) fields = jsonpath(data, '$..DanmakuElem[*].fields') for field in fields: print(field) ``` --- #### 3. 数据清洗与预处理 原始弹幕可能包含大量无意义的内容(如表情符号、广告语),需对其进行清理。常用的方法包括但不限于: - 去除空白字符和特殊符号。 - 过滤掉重复弹幕。 - 提取关键词或短语。 示例代码如下: ```python import re def clean_text(text): text = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9]', '', text) # 移除非中文/英文/数字字符 return text.lower().strip() cleaned_data = [clean_text(d['content']) for d in danmus if d['content']] ``` --- #### 4. 数据分析方法 完成数据收集后,可根据需求执行多种类型的分析: ##### (1)情感分析 利用自然语言处理技术评估弹幕的情感倾向。可以选择现成模型(如 SnowNLP 或 TextBlob)或者训练自定义分类器。 ```python from snownlp import SnowNLP sentiments = [(SnowNLP(clean).sentiments, clean) for clean in cleaned_data[:10]] print(sentiments) ``` ##### (2)词频统计 计算高频词汇及其分布情况,帮助了解观众关注点。 ```python from collections import Counter words = [word for sentence in cleaned_data for word in jieba.lcut(sentence)] counter = Counter(words) most_common_words = counter.most_common(10) print(most_common_words) ``` ##### (3)时间序列分析 观察特定时间段内的弹幕密度变化趋势。 ```python import matplotlib.pyplot as plt timestamps = [d['timestamp'] for d in danmus] plt.hist(timestamps, bins=50) plt.xlabel('Timestamp (seconds)') plt.ylabel('Number of Danmakus') plt.title('Distribution of Danmakus Over Time') plt.show() ``` --- #### 工具推荐 除了上述提到的技术外,还可以借助一些可视化工具提升效果展示能力: - Matplotlib 和 Seaborn:绘制图表。 - WordCloud:生成词云图。 - Pandas:高效管理大规模表格型数据。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值