关注公众号:『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辅导
、论文辅导
、核心期刊
项目的代码和数据下载
可以通过公众号
滴滴我