数据分析-45-B站每周必看数据分析

关注公众号:『AI学习星球
算法学习4对1辅导论文辅导核心期刊可以通过公众号滴滴我


一、项目介绍

获取B站每周必看栏目累计100期数据

二、数据说明

数据一共2500条数据,字段共7个分别是:期数标题up主播放量点赞视频标签视频链接

部分表数据如下
在这里插入图片描述

三、分析数据

# 导入包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
import re
from warnings import filterwarnings
filterwarnings("ignore")

# win系统用这个
# sns.set(font='Microsoft YaHei',font_scale = 1.5)

# mac系统用这个
sns.set(font='Arial Unicode MS',font_scale = 1.5)
# 导入数据
bdf = pd.read_excel("B站热门100期.xlsx")
bdf.head()

在这里插入图片描述

1. 数据特征

bdf.info()

在这里插入图片描述

bdf.isnull().sum()

在这里插入图片描述

bdf.describe()

在这里插入图片描述

bdf.duplicated().sum()

0

print('每周必看总期数:',bdf.期数.nunique())
print('打印期数名称:',bdf.期数.unique())

在这里插入图片描述

2. 自定义函数转换数据

# 自定义函数转换数值
def t_values(s):
    if '万' in s:
        x = s.replace(r'万','')
        x = float(x)*10000
        return x
    else:
        return s
bdf['播放量'] = bdf.播放量.apply(lambda x :t_values(x)).astype('int')
bdf['点赞'] = bdf.点赞.apply(lambda x :t_values(x)).astype('int')

查看数据是否转换成功

bdf.head()

在这里插入图片描述

3. 统计每期上榜up主

# 统计每期上榜up主
top_up = bdf.groupby('期数').up主.nunique().reset_index()
top_up.columns = ['期数','上榜人数']
top_up.head()

在这里插入图片描述

top_up['期数'] = top_up['期数'].str.replace("第",'').str.replace("期",'').astype('int')
top_up.sort_values(by='期数',inplace=True)
# 添加辅助平均值
m = np.mean(top_up.上榜人数)
fig = plt.figure(figsize=(16,8))
sns.lineplot(x=top_up.期数,y = top_up.上榜人数,color='#DFD620')
plt.annotate('第99期:37位',xy=(98,37),xytext = (98,37),fontsize=14,
horizontalalignment='center',verticalalignment='center',color = '#DF2220')
plt.axhline(y=m,color='gray',linestyle='--')
plt.title('每期上榜人数统计',loc='left',fontsize=20)

plt.show()

在这里插入图片描述

看的到一个变化的过程,普遍上榜人数在30左右

4. 上榜次数top20

# up主上榜次数
top_p = bdf.groupby('up主').期数.nunique().sort_values(ascending=False)[:20]
top_n = bdf.groupby('up主').期数.count().sort_values(ascending=False)[:20]

fig = plt.figure(figsize=(16,8))
sns.barplot(x=top_p.index,y=top_p.values,palette='autumn')
plt.title('热榜up主上榜次数 TOP 20',loc='left',fontsize=20)
con = list(top_p.values)
for x,y in enumerate(con):
    plt.text(x-0.2,y+0.3,"%s" %y,size=16)
plt.xticks(rotation = 90)
plt.xlabel(" ")
plt.ylabel(" ")
plt.yticks([])

plt.show()

在这里插入图片描述

排名第一的是 “凉风Kaze”共100期热榜中上榜了64次

5. 播放量 & 点赞量 的分布

fig = plt.figure(figsize=(16,8))
sns.scatterplot(x=bdf.播放量/10000,y=bdf.点赞/10000,color = '#DF7220')
plt.xlabel("播放量(万)")
plt.ylabel("点赞(万)")
plt.title("热榜作品:播放量 & 点赞量",loc='left',fontsize=20)

plt.show()

在这里插入图片描述

bdf[bdf.播放量==bdf.播放量.max()]

在这里插入图片描述

6. 每期热榜的累计播放量

# 热榜累计点赞和播放
bf = bdf.groupby('期数').播放量.sum().reset_index(name='播放量')
dz = bdf.groupby('期数').点赞.sum().reset_index(name='点赞量')

bf.期数 = bf.期数.str.replace("第",'').str.replace("期",'').astype('int')
dz.期数 = dz.期数.str.replace("第",'').str.replace("期",'').astype('int')
bf.sort_values(by='期数',inplace=True)
dz.sort_values(by='期数',inplace=True)

# 绘制折线图
fig = plt.figure(figsize=(16,8))
sns.lineplot(x=bf.期数,y=bf.播放量/1000000,color = '#DF5420')
# sns.lineplot(dz.期数,dz.点赞量)
plt.title("每期热榜的累计播放量",loc='left',fontsize=20)
plt.ylabel("累计播放(百万)")

plt.show()

在这里插入图片描述

7. 每期热榜的累计点赞量

# 绘制折线图
fig = plt.figure(figsize=(16,8))
sns.lineplot(x=dz.期数,y=dz.点赞量/10000,color = '#DFDD20')
# sns.lineplot(dz.期数,dz.点赞量)
plt.title("每期热榜的累计点赞量",loc='left',fontsize=20)
plt.ylabel("累计点赞(万)")

plt.show()

在这里插入图片描述

bk = bdf[bdf.up主.isin(['凉风Kaze','老番茄','LexBurner'])]
bk.head()

在这里插入图片描述

bdk = bk.groupby('up主').agg(平均播放 = ("播放量","mean"),平均点赞=("点赞","mean"),最高播放量=("播放量","max"),
最高点赞量=("点赞","max"),最低播放量=("播放量","min"),最低点赞=("点赞","min"))
bdk

在这里插入图片描述

8. 上榜次数 top 1的每期播放量

bka = bdf[bdf.up主=="凉风Kaze"]
fig = plt.figure(figsize=(20,8))
sns.barplot(x=bka.期数,y=bka.播放量/1000000,order =bka.期数.unique(),palette='autumn')
plt.title("凉风Kazeup主(上榜次数TOP 1)的播放量",loc='left',fontsize=20)
plt.xticks(rotation=-90,fontsize=14)
plt.ylabel('播放量(百万)',fontsize=16)
plt.yticks(fontsize=14)

plt.show()

在这里插入图片描述

9. 上榜次数前三的up主

fig = plt.figure(figsize=(16,8))
sns.scatterplot(x=bk.播放量/10000,y=bk.点赞/10000,hue=bk.up主)
plt.xlabel("播放量(万)")
plt.ylabel("点赞(万)")
plt.title("上榜次数前三的up主",loc='left',fontsize=20)

plt.show()

在这里插入图片描述

10. 热榜UP累计播放排名

# 累计播放和点赞排名10
bf10 = bdf.groupby("up主").播放量.sum().sort_values(ascending=False)[:10]
dz10 = bdf.groupby("up主").点赞.sum().sort_values(ascending=False)[:10]

# 绘制条形图,排名
fig = plt.figure(figsize=(16,8))
sns.barplot(x=bf10.values/1000000,y=bf10.index,palette='autumn')
plt.title('累计播放排名 TOP 10',loc='left',fontsize=20)
con = list(bf10.values/1000000)
for x,y in enumerate(con):
    plt.text(y+0.1,x,"%.2f百万" %y,size=16)

plt.xlabel(" ")
plt.ylabel(" ")
plt.xticks([])
plt.show()

在这里插入图片描述

11. 热榜up主累计点赞排名

# 绘制条形图,排名
fig = plt.figure(figsize=(16,8))
sns.barplot(x=dz10.values/1000000,y=dz10.index,palette='Wistia')
plt.title('累计点赞排名 TOP 10',loc='left',fontsize=20)
con = list(dz10.values/1000000)
for x,y in enumerate(con):
    plt.text(y+0.01,x,"%.2f百万" %y,size=16)

plt.xlabel(" ")
plt.ylabel(" ")
plt.xticks([])
plt.show()

在这里插入图片描述


算法学习4对1辅导论文辅导核心期刊
项目的代码和数据下载可以通过公众号滴滴我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI研习星球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值