B站某合集视频弹幕探索分析

数据获取,通过爬虫获取该合集视频的所有弹幕。

使用的工具是 jupyter notebook

1.数据处理:

将获取到的数据通过pandas库读取成DataFrame,对象

import pandas as pd
import os
# 读取用户等级
user_level = pd.read_excel('data_弹幕分析/user_level.xlsx',converters={'uid':str})
user_level

 

# 批量读取另外的五个文件
os.listdir('./data_弹幕分析')
excel_list = []
for item in os.listdir('./data_弹幕分析'):
    if 'xlsx' in item and 'user_level' not in item:
        excel_list.append(item)
excel_list

读取完所有的数据以后,我们对ctime也就是弹幕创建时间进行处理,将时间戳转换为正常的时间格式:

from datetime import datetime
# 将时间戳格式的数据转换为年月日时分秒格式
danmu['弹幕创建时间'] = danmu['ctime'].map(datetime.fromtimestamp)
# 将年,月,小时,周几分割出来
danmu['年'] = danmu['弹幕创建时间'].map(lambda x:x.year)
danmu['月份'] = danmu['弹幕创建时间'].map(lambda x:x.month)
danmu['星期'] = danmu['弹幕创建时间'].map(datetime.isoweekday)
danmu['小时'] = danmu['弹幕创建时间'].map(lambda x:x.hour)
danmu

 

2. 从时间这个维度对弹幕数据进行分析:

弹幕数量随月份走势图:

取到2022年一整年的弹幕数据进行绘制

import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
danmu_year = danmu[danmu['年']==2022]
danmu_year

将数据按照月份聚合分组,生成折线图:

danmu_year.groupby('月份')[['id']].count().plot()

 

 22年三月份的弹幕数量非常多,然后弹幕数量持续走低
此图并不能说明三月份的用户非常活跃,因为单人可以发送多条弹幕,不排除有人恶意刷弹幕
我们现在对发弹幕的用户做一个折线图

# 这里不再使用count做计数方法是因为一个人可以发多条弹幕,nunique方法可以对计数的进行去重,避免同一个uid被计算多次
danmu_year.groupby('月份')[['uid']].nunique().plot()

 

 由此可见三月份发弹幕的人数也是最多的,那么是什么原因导致的弹幕数量激增呢?

看看星期几对弹幕数量的影响:
 

danmu_year.groupby('星期')[['id']].count().plot()

 

 再绘制一个用户数量的折线图:

danmu_year.groupby('星期')[['uid']].nunique().plot()

综合两幅折线图,我们可以得出结论:周一到周四是弹幕最活跃的时间段

 再绘制每月每周弹幕分布情况:

import pygwalker as pw
pw.walk(danmu_year)

从每月每周弹幕的分布情况看也坐实了上面的结论

接着绘制每天每小时的弹幕分布情况:

import pygwalker as pw
pw.walk(danmu_year)

观察图像,实际上不管是周几弹幕主要活跃的时间段都是,上午:9~11点,下午:14~17点,晚上:20~22点。看得出来大家都很喜欢上班时间学习,非常的勤奋。

 3.用户画像:

统计用户弹幕数量:

danmu['弹幕数量'] = danmu.groupby('uid')['id'].transform('count')
danmu

将其和用户等级进行横向拼接:

danmu_level = pd.merge(danmu,user_level,on='uid',how='inner')
danmu_level

 让我们看看哪些用户爱发弹幕:

danmu_level.groupby('uid')[['id']].count().sort_values('id',ascending=False)

具体看看这三个发弹幕最多的用户都发了些什么:

pd.set_option('display.max_rows',300)
danmu_level[danmu_level['uid']=='6653485828143602809']

 

仔细查看其弹幕内容,发现该用户的弹幕大多是用来回复UP主提出的问题,是好学的活跃用户呢!

看看排名第二的用户的弹幕具体内容:

pd.set_option('display.max_rows',300)
danmu_level[danmu_level['uid']=='6812827409839048297']

 

仔细查看其弹幕内容,发现该用户的弹幕很有礼貌情绪价值拉满,妥妥的氛围组选手。

pd.set_option('display.max_rows',300)
danmu_level[danmu_level['uid']=='-3260951504495839240']

该用户的弹幕文字很多,大都是发表对视频提问的解答,也是好学的选手。

等级分布:

 

danmu_level.groupby('level')[['id']].count().plot(kind='bar')

据上图猜测我们可以认为,爱发弹幕的是B站的粘性用户
我们再对不同等级的用户做一个柱状图,以此为验证 

danmu_level.groupby('level')[['uid']].nunique().plot(kind='bar')

和弹幕数量的那幅图趋势几乎一样,结论合理

4.视频内容分析:

 处理弹幕在视频的哪一秒发送的progress这个字段

from time import strftime
from time import gmtime
danmu
#由于progress这个字段单位是毫秒,所以需要除以1000变换为秒
danmu['progress'] = danmu['progress']/1000
danmu
danmu['progress'].map(gmtime)
danmu['视频进度'] = danmu['progress'].map(lambda x: strftime('%H:%M:%S',gmtime(x)))
danmu['视频进度【时分】'] =  danmu['progress'].map(lambda x: strftime('%H:%M',gmtime(x)))
danmu

视频内容分析,看看每个弹幕数量多的时间点发生了什么

视频1

p1 = danmu[danmu['视频标题']=='1、系统认识数据分析.xlsx']
p1.groupby('视频进度【时分】')[['id']].count().sort_values('id',ascending=False)

 

由于开头和结尾大家都有发弹幕的习惯不做讨论,但是11分钟虽然弹幕很多但是视频内容并不特别但是9分钟时弹幕数量多的原因是因为UP进行了提问
我们来具体看看第11分钟的弹幕内容有什么

pd.set_option('display.max_rows',300)
p1[p1['视频进度【时分】']=='00:11']

 

根据弹幕内容我们发现,是有人带了节奏,并且有人回复导致了弹幕小高峰
视频2

p2 = danmu[danmu['视频标题']=='2、EXCEL基础操作.xlsx']
p2.groupby('视频进度【时分】')[['id']].count().sort_values('id',ascending=False)

 

在3小时7,6分到7分这个时间段,UP主表达了视频制作不易,得到了大家的认可,纷纷发弹幕响应

视频3

p3 = danmu[danmu['视频标题']=='3、Tableau数据可视化.xlsx']
p3.groupby('视频进度【时分】')[['id']].count().sort_values('id',ascending=False)

 

57分钟时,UP演示了怎样可以迅速吸引人们的注意,他假装视频卡住了,弹幕也是纷纷响应

视频4

p4 = danmu[danmu['视频标题']=='4、SQL从入门到实战.xlsx']
p4.groupby('视频进度【时分】')[['id']].count().sort_values('id',ascending=False)

 

 

01:09这个时间点UP提出了一个有争议的问题,用户发弹幕表达自己的意见

视频5

p5 = danmu[danmu['视频标题']=='5、Python.xlsx']
p5.groupby('视频进度【时分】')[['id']].count().sort_values('id',ascending=False)

 

21分Up放了一个鬼畜视频,折磨观众导致弹幕激增

至此内容分析完毕,我们在分析过程中发现了很多有趣的现象,比如用户的活跃时间等,也看到了UP主的内容对弹幕数量造成的影响,还有很多有趣的东西藏在数据当中 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值