文章目录
0 数据分析目标
今天向大家介绍如何使用大数据技术,对B站的视频数据进行分析,得到可视化结果。
这里学长分为两个部分描述:
- 1 对B站整体视频进行数据分析
- 2 对B站的具体视频进行弹幕情感分析
🧿 选题指导, 项目分享:见文末
1 B站整体视频数据分析
分析方向:首先从总体情况进行分析,之后分析综合排名top100的视频类别。
总体情况部分包括:
- 各分区播放量情况。
- 各区三连(硬币、收藏、点赞)情况。
- 弹幕、评论、转发情况。
- 绘制综合词云图,查看关键词汇。
综合排名top100部分包括:
5. top100类别占比。
6. top100播放量情况。
7. 硬币、收藏、点赞平均人数分布。
8. 各分区平均评论、弹幕、转发量情况。
1.1 数据预处理
这里主要是进行查看数据信息、空值、重复值以及数据类型,但由于数据很完整这里不再做过多操作。
对数据进行拆分、聚合,方便之后各项分析,由于“区类别”列中的“全站”是各分类中排名靠前的视频,会出现重复数据,因此对其进行去除。
df.info()
df.isnull().count()
df.nunique().count()
df.dtypes
#剔除全区排名
df_nall=df.loc[df['区类别']!='全站']
df_nall['区类别'].value_counts()
#按分数进行排序asc
df_top100 = df_nall.sort_values(by='分数',ascending=False)[:100]
df_type = df_nall.drop(['作者','视频编号','标签名称','视频名称','排名'],axis=1)
gp_type = df_type.groupby('区类别').sum().astype('int')
type_all = gp_type.index.tolist()
1.2 数据可视化
各分区播放情况
play = [round(i/100000000,2) for i in gp_type['播放次数'].tolist()]
# bar = (Bar()
# .add_xaxis(type_all)
# .add_yaxis("", play)
# .set_global_opts(
# title_opts=opts.TitleOpts(title="各分区播放量情况"),
# yaxis_opts=opts.AxisOpts(name="次/亿"),
# xaxis_opts=opts.AxisOpts(name="分区",axislabel_opts={"rotate":45})
# )
# )
# bar.render_notebook()
pie = (
Pie()
.add(
"",
[list(z) for z in zip(type_all,
play)],
radius=["40%", "75%"],
)
.set_global_opts(
title_opts=opts.TitleOpts(title="各分区播放量情况 单位:亿次"),
legend_opts=opts.LegendOpts(
orient="vertical", pos_top="15%", pos_left="2%"
),
)
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
pie.render_notebook()
播放量排名前三的分别是生活类、动画类、鬼畜类。其中动画类和鬼畜类,这两个是B站的特色。
第三、四位是音乐类和科技类。
各区三连量情况可视化
coin_all = [round(i/1000000,2) for i in gp_type['硬币数'].tolist()]
like_all = [round(i/1000000,2) for i in gp_type['点赞数'].tolist()]
favourite_all = [round(i/1000000,2) for i in gp_type['喜欢人数'].tolist()]
def bar_base() -> Bar:
c = (
Bar()
.add_xaxis(type_all)
.add_yaxis("硬币", coin_all)
.add_yaxis("点赞", like_all)
.add_yaxis("收藏", favourite_all)
.set_global_opts(title_opts=opts.TitleOpts(title="各分区三连情况"),
yaxis_opts=opts.AxisOpts(name="次/百万"),
xaxis_opts=opts.AxisOpts(name="分区",
axislabel_opts={
"rotate":45}))
)
return c
bar_base().render_notebook()
虽然生活类投币和点赞数依然是不可撼动的,但是收藏数却排在动画之后,科技类收藏升至第四位。
弹幕、评论、三联情况
danmaku_all = [round(i/100000,2) for i in gp_type['弹幕数'].tolist()]
reply_all = [round(i/100000,2) for i in gp_type['评论数'].tolist()]
share_all = [round(i/100000,2) for i in gp_type['转发数'].tolist()]
line = (
Line()
.add_xaxis