Bilibili综合分析

前言

最近在裸睡的猪上看到一篇关于B站的文章,觉得分析的很透彻,所以小试牛刀,自己也写了一些可视化程序和分析。
数据提供了B站视频排行榜中的各类信息,比如:‘作者’,‘硬币数’,'弹幕数’等共14项信息,很全面。
项目使用python3在Jupyter notebook上开发。开发过程中使用pandas、numpy对数据进行清洗,可视化使用的是pyecharts。
这里是pyecharts中文手册地址,可支持的图形有很多同时提供了不少案例和视图,而且相较于 Matplotlib更加美观。

一、分析角度

首先从总体情况进行分析,之后分析综合排名top100的视频类别。

1. 总体情况

总体情况部分包括:
1. 各分区播放量情况。
2. 各区三连(硬币、收藏、点赞)情况。
3. 弹幕、评论、转发情况。
4. 绘制综合词云图,查看关键词汇。

2. 综合排名top100

综合排名top100部分包括:
1. top100类别占比。
2. top100播放量情况。
3. 硬币、收藏、点赞平均人数分布。
4. 各分区平均评论、弹幕、转发量情况。

二、可视化分析

1. 前期准备

1.1) 导库

首先导入pandas、numpy、pyecharts相关包并读取文件

import pandas as pd
import numpy as np
from pyecharts.charts import Pie, Bar, Map, WordCloud,Line,Grid,Scatter,Radar,Page
from pyecharts import options as opts
from pyecharts.globals import SymbolType
from pyecharts.globals import ThemeType
from pyecharts.commons.utils import JsCode
df = pd.read_csv('bilibili.csv')
df.head()

修改列名称为中文,此处修改中文列名仅为便开发,工作中不推荐中文列名。

df.columns=['作者','硬币数','弹幕数','喜欢人数','视频编号',
            '点赞数','排名','区类别','评论数','分数',
            '转发数', '标签名称','视频名称','播放次数']

在这里插入图片描述

1.2) 数据处理

查看数据信息、空值、重复值以及数据类型,但由于数据很完整这里不再做过多操作。

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()

总体数据概览

gp_type

在这里插入图片描述

2.总体情况可视化

2.1) 各分区播放情况

开始使用了柱状图,但显示效果不佳,因此替换成饼图,相较于柱状图与折线图,饼图更能够体现出个体在总体中的占比。

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=
  • 12
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值