哔哩哔哩弹幕内容分析

根据B站up:戴戴戴师兄的自学课程,自主完成,使用的数据为戴戴戴师兄自学课程2.0从2021.8-2022.12的弹幕数据进行内容分析

1.数据处理

首先将用户等级的Excel数据导入user_level的列表中

import pandas as pd
user_level=pd.read_excel('user_level.xlsx')

然后将五门课程的弹幕数据的Excel表格用for循环进行批量导入

import os
excel_list=[]#建立空表存储导入的Excel表格数据
for i in os.listdir('./'):
    #检查文件名是否包含xlsx且不包含user_level
    if'xlsx' in i and 'user_level' not in i:
        excel_list.append(i) #条件满足则将文件名添加到列表
excel_list

结果显示文件名已经存储到列表里了

接着将各表数据读出并拼接成一个表

danmu=pd.DataFrame()
#创建一个空的DataFrame用于存储合并后的数据
for i in excel_list:
#遍历excel_list中每个文件名
    excel=pd.read_excel(i,converters={'uid':str,'id':str})
    #读取excel文件,并将uid和id设置为字符串类型
    excel['数据来源']=i
    #在dataframe中添加一列数据来源,值为文件名
    danmu=pd.concat([danmu,excel],axis=0)
    #将danmu和excel表用concat方法纵向拼接
danmu

结果显示导入成功,五个表格数据中一共有28016条弹幕 

2.时间处理

由于需要分析各个时间段的弹幕数据,需要将表格中的时间数据使用datetime方法将弹幕的创建时间从时间戳格式转换为可读的日期和时间,并提取年、月、星期以及小时等详细时间

from datetime import datetime
danmu['弹幕创建时间']=danmu['ctime'].map(datetime.fromtimestamp)
#将ctime列中的时间戳转换为datetime对象,并存储到新列弹幕创建时间里

danmu['年']=danmu['弹幕创建时间'].map(lambda x:x.year)
danmu['月份']=danmu['弹幕创建时间'].map(lambda x:x.month)
danmu['小时']=danmu['弹幕创建时间'].map(lambda x:x.hour)
#使用lambda自定义函数求年、月、小时,并分别存储在新的列中

danmu['星期']=danmu['弹幕创建时间'].map(datetime.isoweekday)
#从弹幕创建时间列获取ISO标准的星期数,用1-7表示星期一到星期天

danmu

时间分析

由于弹幕数据获取的时间为2021.8-2022.12,本次分析就选取2022一整年的弹幕数据进行分析

danmu_year=danmu[danmu['年']==2022]
danmu_year.groupby('月份')[['id']].count().plot()
danmu_year.groupby('月份')[['uid']].nunique().plot()
danmu_year.groupby('星期')[['id']].count().plot()
danmu_year.groupby('星期')[['uid']].nunique().plot()

首先筛选在2022年发出的弹幕并存储到danmu_year中,然后分别按月份和星期分组,计算出每个月每个星期,弹幕id的数量以及uid降重后的数量,最后用plot()函数画出折线图

           

图一弹幕id和降重后的用户id在各个月份的弹幕数量之和

            

图二弹幕id和降重后的用户id在各个星期的弹幕数量之和

其中从月份以及id和uid来看,2022年3-4月份弹幕非常活跃,但是之后几个月份坡度下降

假设一:由于3-4月在求职季有金三银四之称,我猜测3-4月由于大家迫于找工作换工作的压力,大家的弹幕发送数量比其他月份多。

假设二:由于3-4月一般为春节假期后,大家经过一个春节的充电休息,变得活力满满。

由于python自带的画图太难用,我们使用pygwalker类tableau的第三方数据可视化包来看看其他数据。

import pygwalker as pyg
pyg.walk(danmu_year)

首先查看每个月各个星期的弹幕分布

经过分析发现工作日周一到周四,周天弹幕是最活跃的;周五周六活跃度下降

接下来我们查看一周内各个小时的弹幕数据

可以看出,从周一到周日的数据图像几乎一样,主要分为三个时间分别是早上10点,下午4点以及晚上9点,分析可得早上10点和下午四点都是大家在摸鱼,但是晚上下班学习的也不在少数

3.用户画像

通过分析经常发弹幕的几个用户,用户的B站等级来刻画用户画像

3.1用户处理

首先需要处理相关数据,先求出每个用户发出的弹幕总和

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

 接着用inner(内联)的方式链接B站用户等级表user_level和danmu表,通过uid链接左右表。

user_level['uid'] = user_level['uid'].astype(str)
#将user_level表里的uid更改成字符串类型,避免与danmu表中的uid因为类型不同而报错
danmu_level = pd.merge(danmu, user_level, on='uid', how='inner')
danmu_level

3.2弹幕内容

查看哪些用户发的弹幕数量比较多,都发了哪些内容,需要对弹幕等级中的数据按uid进行分组,然后计算每个用户发的弹幕数量,并按发的弹幕数量从多到少排列

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

查看排名第一的用户都发了什么弹幕

danmu_level[danmu_level['uid']=='6653485828143602809']

发送弹幕数量第一的用户一共发了214条内容,具体内容可以发现,他是一个上课非常积极的人,在课上有问有答。(可以使用上面的代码,更换uid即可查看其他用户的弹幕)

3.3等级分布

通过分析用户等级分布来分析用户的来源以及用户粘性

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

      

可以发现大部分弹幕来自4-6级用户发弹幕。自学课程发弹幕的观众都是B站的粘性用户,其中0级用户也有不少,一般0级用户为没有通过B站入站考试的,可以猜测是通过其他渠道被引流来B站的。

4.视频内容

通过查看弹幕在整个视频进度条的分布,来分析弹幕异常

4.1视频内容处理

看表发现时间和弹幕创建时间为时间戳格式,需要将它转变成时分秒格式更好观测

# 导入strftime和gmtime函数,用于格式化时间
from time import strftime
from time import gmtime

# 将danmu数据框中的'progress'列的值除以1000,将毫秒转换为秒
danmu['progress'] = danmu['progress']/1000

# 使用map函数和lambda表达式将'progress'列的每个值转换为时分秒格式
danmu['视频进度'] = danmu['progress'].map(lambda x: strftime('%H:%M:%S', gmtime(x)))

# 从'视频进度'列中提取前5个字符(时和分),并创建一个新列'视频进度【时分】'
danmu['视频进度【时分】'] = danmu['视频进度'].str[:5]

# 输出danmu数据框
danmu

4.2视频内容分析

4.2.1系统认识数据分析课程的数据分析

首先分析第一节课的内容分析,先筛选出1、系统认识数据分析.xlsx的弹幕数据,然后按照视频进度进行分组统计弹幕数量,最后按照弹幕多少降序排列,从而方便查看哪个时间点弹幕互动最频繁。

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

去掉开头结尾(B站有一些视频传统,开头结尾的数据大部分为脏数据没有实际研究意义)

p1[p1['视频进度【时分】']=='00:11']

11分钟有100条弹幕,但似乎并没有什么特殊的视频内容,弹幕进入节奏,大家发自己的专业,以及再看的举手导致弹幕数量激增

9分钟,是因为PPT内有提问,大家在互动,回答问题

4.2.2 excel基础操作课程的数据分析

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

在3小时06~07分,弹幕表达了对师兄excel课程的认可,满意度非常高

4.2.3 Tableau数据可视化的数据分析

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

2小时48分为结尾,我们查看57分的时候发生了什么,发现是师兄装卡,然后弹幕就开始激增

4.2.4 SQL从入门到实战课程的数据分析

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

在一小时零九分的时候,大家对师兄的代码产生了疑问,弹幕产生了激烈的讨论

4.2.5 Python课程的数据分析

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

首先可以看到1:13和00:00为结尾和开头,就不再研究

然后我们看到第21分钟的时候,师兄在播放人类高质量男性唱歌折磨弹幕,弹幕的同学们感到“不适”,纷纷言语激昂的“职责”师兄。

5.综述

5.1时序分析:

①从月份看,3-4月参与互动的用户积极度最高,可以认为3-4月学习人数最多,再结合求职季金三银四的传说,贺礼推测大家为了找工作换工作花了心思。

②从星期来看,大家周一都在忙于开会工作,没人看视频,周二到周四在摸鱼偷偷学习,周五周六放假看视频人数又减少了,周天人数又回暖。

③从小时来看,大部分用户根据在线时间可分为三类,大概为2-3类人群,早上10点和下午4点的可能为在校学生,晚上9点的可能为上班族。

5.2用户分析:

自学课程2.0主要活跃用户由4-5级的用户组成,粉丝大部分为B站高度粘性用户

建议:0级用户在分类占比不容小觑,是否旅游通过一系列可行性分析,分析出站外引流的空间有多大

5.3视频内容分析:

①优质的视频内容一定会得到大家的认可

②弹幕的氛围与活跃度,可以直观反映教学类内容的视频节奏和教学效果

5.4总结

本次项目通过自学,较为轻松的了解了数据分析的流程和方式,能熟练使用代码,但是对代码的具体意义尚不明确,后期在完成其他内容的情况下,可以加深对代码的深度理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值