项目二:戴师兄自学课程2.0之——弹幕内容分析

将使用师兄自学课程2.0从2021.8~2022.12的弹幕数据进行内容分析

从时间、用户、视频内容三个角度去进行分析

已有数据包括:

1-5表主要是每门课程的弹幕数据,以表1为例,主要包括以下字段:

user_level是用户等级相关信息,主要包括以下字段:

1.数据处理

import pandas as pd
import os

#导入表格数据
user_level = pd.read_excel('user_level.xlsx')
#批量读取表格1-5
excel_list=[]
#返回指定路径下都有哪些文件
for item in os.listdir('./'):
    if 'xlsx' in item and 'user_level' not in item:
        excel_list.append(item)
#拼接表格1-5
danmu = pd.DataFrame()
for item in excel_list:
    excel=pd.read_excel(item,converters={'uid':str,'id':str})
    excel['视频标题']=item#得知每一行数据来自哪个表格
    danmu=pd.concat([danmu,excel],axis=0)

此处单独导入了user_level表,将1-5个表批量导入,并拼接在了一起(每个表的字段都相同),结果如下

2.时间

2.1时间处理
from datetime import datetime
#fromtimestamp将时间戳转化为时间
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)

结果如下:

2.2时间分析
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']

此处是为了让中文可被识别,图形上中文不乱码

2.2.1月份
danmu_year=danmu[danmu['年']==2022]
danmu_year

基于2022年的弹幕数据进行时间分析

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

结果图如下

由图可分析出,22年,3月份的弹幕非常活跃

再来分析每个月份发弹幕的人数:

danmu_year.groupby('月份')[['uid']].nunique().plot()#nunique不会重复计算

由图可知22年,3月份,发弹幕的人也是最多的----->进行思考,为什么呢?

假设1:季节?
假设2:视频进入了推流池子?

2.2.2星期

继续分析寻找答案!

#发弹幕数量
danmu_year.groupby('星期')[['id']].count().plot()

#发弹幕人数
danmu_year.groupby('星期')[['uid']].nunique().plot()

惊奇的发现,工作日1-4,周天,弹幕是最活跃的;周五或者周六活跃度会下降

#导入pygwalker模块,是python的一个可视化工具,画图分析数据非常方便
import pygwalker as pyg
pyg.walk(danmu_year)

得出每个星期弹幕数量的折线图,再分析每个小时的(这里数据给的有问题,按理说小时也有折线图,但是做出了没有点,大概趋势同星期差不多)

chart2折线表没数据,可能是原表数据给的不对少了一部分。 按照师兄视频显示,

按照小时分析可得出,大家白天摸鱼看视频、晚上也看很勤奋

3. 用户画像

主要是用户属性分析(年龄、性别、地理位置、行为数据...)以及参与发送弹幕用户的b站等级

3.1用户处理
#按照用户uid进行分组,并计算出id数量
danmu['用户弹幕数']=danmu.groupby('uid')['id'].transform('count')
danmu

结果如下

根据uid合并danmu表和user_level表,注意合并时两个表的uid字段类型要一样,否则报错

user_level['uid']=user_level['uid'].astype(str)#因为danmu['uid']是str类型,二者要连接故需转化
danmu_level =pd.merge(danmu,user_level,on='uid',how='inner')
3.2弹幕内容
danmu_level.groupby('uid')[['id']].count().sort_values('id',ascending=False)

首先,得出每个用户发的弹幕数量,按照降序排列,得出结果如下

分析发的弹幕数最多的uid的具体弹幕内容

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

结果如下:

老大总共发了214条弹幕,具体内容可以发现,是一个上课非常积极的人,师兄在课程内有问,老大必有答--建议纳为《学习课代表》

#接下来分析第二多弹幕数用户的弹幕内容
pd.set_option('display.max_rows',300)
danmu_level[danmu_level['uid']=='6812827409839048297']

老二,发了187条弹幕,具体内容可以发现老二很有礼貌,嘴很甜,发了夸师兄的弹幕同时非常爱笑,建议纳为《课堂氛围组组长》

#第三多弹幕数用户的弹幕内容
pd.set_option('display.max_rows',300)
danmu_level[danmu_level['uid']=='-3260951504495839240']

老三一共发了176条弹幕,是一个实操小能手,还是个小黑子,发了一条:%o__o% 像不像师兄 黑师兄了,哈哈哈叫他卷王我觉得都二刷了我一刷还没看完呢

3.3 等级分布
#根据用户等级进行分组的,并画出不同等级所发弹幕数的柱状图
danmu_level.groupby('level')[['id']].count().plot(kind='bar')

可知大部分弹幕主要来自于4、5级用户,自学课程大部分发弹幕的观众,都是B站的粘性用户

#分析发弹幕的不同用户等级的用户uid,并画出不同等级的uid数量柱状图
danmu_level.groupby('level')[['uid']].nunique().plot(kind='bar')

4 视频内容

4.1 视频内容处理
from time import strftime
from time import gmtime
#progress为进度条,单位是毫秒,得除以1000
danmu['progress']=danmu['progress']/1000
#将弹幕进度条转化为00:00:00的格式
danmu['视频进度']=danmu['progress'].map(lambda x : strftime('%H:%M:%S',gmtime(x)))
#分析进度不用精准到秒,所以只考虑小时和分钟00:00
danmu['视频进度【时分】']=danmu['视频进度'].str[:5]
danmu

结果如下:

4.2 视频内容分析

对五个视频对应的五个表进度视频内容分析

4.2.1   p1、系统认识数据分析
#将不同视频进度的弹幕数据统计出来,降序排序
p1=danmu[danmu['视频标题']=='1、系统认识数据分析.xlsx']
p1.groupby('视频进度【时分】')[['id']].count().sort_values('id',ascending=False)

结果如下:

去掉开头和结尾(因为开头和结尾都有发弹幕的习惯) 11分钟时有100条弹幕,但似乎并没有什么特殊的视频内容; 9分钟,是因为ppt内有提问,大家在互动,所以弹幕数量很多

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

出现了节奏弹幕(在看的举个手),诱发了弹幕激增

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

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

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

57分钟师兄画面卡住了,导致弹幕的激增

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

1小时9分,是一个有争议的问答环节,大家各抒己见 

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

21分,师兄在折磨观众,导致弹幕激增

总结

时序

现象or猜想    

1、从月份角度看,3月份参与互动的用户积极度最高,也有可能3月得到了B站大量的曝光
2、从星期维度的角度看,大家每周的状态be like:周一都在忙着开会和工作,周二、三四都在狠狠の摸鱼!周五、六在疯狂爽玩,周天逐渐找回一点学习状态
3、从小时维度来看:自学2.0,发送弹幕的人,似乎能够分为2or3类不同的人群

用户

结论  

 自学课程2.0主要的活跃用户都是由4、5级用户组成,师兄的粉丝有可能大部分都是B站的高度用户(当然有可能DY和B站都玩)(6级大佬我就不多提了)

备注    

1、如果师兄的粉丝和观众真的大部分都是B站的高度用户,那么能否去进一步评估站外引流的空间有多大、以及可行性
2、在此畅想猜测,B站的用户等级分布 是否也呈现两头窄、中间宽的情况?

内容

结论    

1、优质的视频内容是一定能够得到大家的认可的
2、弹幕的氛围与活跃度,可以直观的衡量教学类内容的视频节奏、以及知识的传达情况

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值