CDA数据分析师 出品
作者:Mika
数据:真达
后期:Mika、泽龙
Show me data,用数据述话
今天咱们聊一聊 李子柒
“李家有女,人叫作子柒。”倘若说到当下最火的网红,想必非常多人都会想到李子柒。
日出而作,日落而息,看似平淡无奇的日子,李子柒却总能过成一首诗、一幅画。
私信博主001就可获取海量Python学习资料!
三月桃花熟了,采来酿桃花酒。四月枇杷成熟,酿枇杷酒…随着区别时令季节,做出区别的美食,看过李子柒视频的人,无一不对那视频里的古风田园生活向往憧憬着,同期亦带给了无数人治愈的力量。
日前在B站上,李子柒共有579万的粉丝。入驻到此刻仅仅发布了共125条视频,但随便翻翻视频列表,几乎每一个视频都是爆款。
那样,她的这些视频都有些什么特点,播放量最高的视频是哪个?今天咱们就带你用数据来诠释李子柒。
01
“把生活过成诗”
李子柒的视频为何这么吸引人?
咱们用Python对李子柒在B站上发布的125个视频进行了分析。分析流程包含以下这三个过程: 数据读入数据清洗数据可视化首要让咱们看到分析结果:
视频各年发布数量
先看到李子柒在B站上各年发布的视频数量。
从2016年7月起始,李子柒在B站发布了第1个视频。按照统计,在2016年她共发布了14个视频。2017-2019年这三年发布的视频数量差不多,都是在34条上下,平均下来每一个月发布2.8个视频。截止到日前为止,在2020年发布了8个视频。
视频各月发布数量
大众都说在李子柒的视频中能够感受到一年四季的变化,那样她在那些月份发布的视频最多呢?
分析发掘,其中夏季的视频显著高于其他季节,尤其是8月份,在所有125个视频中就有26个视频在8月发布,占比20%。其次,秋季亦是李子柒视频高产的季节,9-11月共发布36个视频。
视频发布时间线
在视频发布时间上有什么特点呢?
经过对李子柒视频发布时间线的分析,咱们发掘有四个发布视频的高峰时间,分别是晌午12点,下午4点,下午6点,以及夜晚9点。其中夜晚九点发布的视频最多,共有14个。
视频类型占比
在视频类型上,当然美食是最多的了,占比高达87.2%。其次是手工类型的视频,占比12%。最少的是美妆视频,在日前发布的125个视频仅有1个是美妆类型的。
视频排行榜表现
在所有125个视频中,有72个登上了B站日排行榜。其中进入前10名的共有7个,其次是50-100名的,有12个视频。10-50名和100名以上的视频最多,均为53个。
各类视频数据平均表现
下面再看到李子柒视频各类数据平均表现。
其中视频的平均弹幕数为8361条,点赞数为52965个,投币为32690个。保藏数为8455个,平均转发为5652次。
那些视频播放量最高?那些视频弹幕互动最多呢?
播放量TOP10视频
让咱们分别瞧瞧,首要是播放量最高视频top10榜单,播放最多的视频是《听说爱吃螺蛳粉的伴侣,都很可爱阿!》,播放量达到了526万余次。看来螺蛳粉果然是妥妥的百姓级网红小吃啊。
这个视频的弹幕中都在说些什么?
能够看到,在播放量最高的螺蛳粉视频中,弹幕中讨论频率最高的便是各样食材啦,例如"田螺"、"螺蛳"、"豆角"、"辣椒"、"豇豆"等等。还有"广西"这个螺蛳粉的原产地亦被提及。有意思的是,一样拍了螺蛳粉主题的美食区up主例如"蛋黄派"亦在弹幕中被说到。
弹幕数TOP10视频
而后是弹幕最多视频top10,弹幕最多的视频是《因此这个视频就叫辣椒的一辈子》总弹幕数达到4万余条。
这个视频的弹幕中都在说些什么?
这个视频的弹幕尤其有意思,弹幕中讨论最多的便是各样许愿关联的词了,例如"上岸"、"考上"、"考研"、"成功"、"顺利"、"加油"等词,被说到的频率最高。
咱们再分析下李子柒的视频标题,她的视频标题比较有特点,基本都是【关键词】+简单描述。例如:【小麦的一辈子】一株小麦,变化出扎根在每一个人记忆里的味道。
视频标题关键词词云
咱们先看到关键词的词云特点,能够看到关键词中除了"李子柒","桃花"、"腊味"、"豌豆"都是显现频率尤其高的食材。同期"手工"亦是高频词。其次某种食材的"一辈子",亦是李子柒热衷拍摄的主题。
视频标题描述词云
那样视频标题描述上有什么特点呢?
分析发掘"味道"显现的频率最高,远远超出其他词。其次,"夏天"、"千年"、"家里"、"记忆里"等词亦频频显现。
02
教你用Python分析
李子柒的视频都在拍些什么?
下面让咱们看到关键的分析过程:
咱们Python获取了B站上李子柒发布的125个视频关联信息,进行了以下分析,分析流程如下: 数据读入数据清洗数据可视化数据读入
首要读入分析所用的数据集,本数据集一共包括125个样本,11个字段,字段含义为:视频标题、一级归类、二级归类、发布时间、最高全站排名、总播放数、历史累计弹幕、点赞、投币、收藏和分享数。数据预览如下: # 导入包
import numpy as np
import pandas as pd
import re
# 读入数据
df = pd.read_excel(./data/李子柒视频数据.xlsx)
df.head()
数据清洗
此部分咱们初步对以下信息进行简单的处理,其中包括: title:提取主题和介绍top_rank:提取数值view_num:提取数值dm_num: 提取数值dianzan: 计算数值toubi: 计算数值shoucang:计算数值zhuanfa:计算数值# 定义转换函数
def transform_num(x):
str1 = str(x)
if 万 in str1:
return float(str1.strip(万))*10000
else:
return float(str1)
# 提取数据
df[title_1] = df.title.str.extract(【(.*?)】.*)
df[title_2] = df.title.str.split(】).str[-1]
df[top_rank] = df.top_rank.str.extract(最高全站日排行(\d+)名)
df[view_num] = df.view_num.str.extract((\d+))
df[dm_num] = df.dm_num.str.extract((\d+))
df[dianzan] = df.dianzan.apply(lambda x: transform_num(x))
df[toubi] = df.toubi.apply(lambda x: transform_num(x))
df[shoucang] = df.shoucang.apply(lambda x: transform_num(x))
df[zhuanfa] = df.zhuanfa.apply(lambda x: transform_num(x))
# 转换类型
df[view_num] = df.view_num.astype(int)
df[dm_num] = df.dm_num.astype(int)
df[publish_time] = pd.to_datetime(df[publish_time])经过处理之后的数据如下所示: df.head(2)
数据可视化
此处咱们将进行以下部分的可视化分析,首要导入所需包,其中pyecharts用于绘制动态可视化图形,stylecloud包用于绘制词云图。关键部分代码如下: # 导出所需包
from pyecharts.charts import Pie, Line, Tab, Map, Bar, WordCloud, Page
from pyecharts import options asoptsfrom pyecharts.globals import SymbolType
import stylecloud
视频各年发布数量# 发布数量
pub_year = df.publish_time.dt.year.value_counts().sort_index()
# 条形图bar0 = Bar(init_opts=opts.InitOpts(width=1350px, height=750px))
bar0.add_xaxis(pub_year.index.tolist())
bar0.add_yaxis(, pub_year.values.tolist())
bar0.set_global_opts(title_opts=opts.TitleOpts(title=B站李子柒视频各年发布数量),
visualmap_opts=opts.VisualMapOpts(max_=50),
)
bar0.render() 视频各月发布数量pub_month= df.publish_time.dt.month.value_counts().sort_index()# 条形图
bar = Bar(init_opts=opts.InitOpts(width=1350px, height=750px))
bar.add_xaxis([str(i)+月for i in pub_month.index.tolist()])
bar.add_yaxis(, pub_month.values.tolist())
bar.set_global_opts(title_opts=opts.TitleOpts(title=B站李子柒视频各月发布数量),
visualmap_opts=opts.VisualMapOpts(max_=30),
)
bar.render() 视频发布时间线# 发布时间点分布pub_hour = df.publish_time.dt.hour.value_counts().sort_index()# 产生数据
x1_line1 = [i+点 for i in pub_hour.index.values.astype(str).tolist()]
y1_line1 = pub_hour.values.tolist()
# 绘制面积图line1 = Line(init_opts=opts.InitOpts(width=1350px, height=750px))
line1.add_xaxis(x1_line1)
line1.add_yaxis(, y1_line1,
markpoint_opts=opts.MarkPointOpts(data=[
opts.MarkPointItem(type_=max, name=最大值),
opts.MarkPointItem(type_=min, name=最小值)
]))
line1.set_global_opts(title_opts=opts.TitleOpts(B站李子柒视频日发布时间线),
visualmap_opts=opts.VisualMapOpts(max_=20)
)
line1.set_series_opts(label_opts=opts.LabelOpts(is_show=False),
linestyle_opts=opts.LineStyleOpts(width=3))
line1.render()发布视频类型占比# 视频类型占比
cat_num = df.cat2.value_counts()
# 产生数据对data_pair = [list(z) for z in zip(cat_num.index.tolist(), cat_num.values.tolist())]# 绘制饼图
# {a}(系列名叫作),{b}(数据项名叫作),{c}(数值), {d}(百分比)
pie1 = Pie(init_opts=opts.InitOpts(width=1350px, height=750px))
pie1.add(, data_pair=data_pair, radius=[35%, 60%])
pie1.set_global_opts(title_opts=opts.TitleOpts(title=B站李子柒发布视频类型占比),
legend_opts=opts.LegendOpts(orient=vertical, pos_top=15%, pos_left=2%))
pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"))
pie1.render()有排名数据视频表现 top_rank_num = df.top_rank.dropna().astype(int)
cut_bins = [1,10,30,50,100]
top_num = pd.cut(top_rank_num, bins=cut_bins, labels=[前10名, 10-30名, 30-50名, 50-100名]).value_counts()
# 数据对
data_pair_2 = [list(z) for z in zip(top_num.index.tolist(), top_num.values.tolist())]
# 饼图
pie2= Pie(init_opts=opts.InitOpts(width=1350px, height=750px))
pie2.add(, data_pair=data_pair_2, radius=[35%, 60%])
pie2.set_global_opts(title_opts=opts.TitleOpts(title=B站李子柒有排名数据视频表现),
legend_opts=opts.LegendOpts(orient=vertical, pos_top=15%, pos_left=2%))
pie2.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:数量:{c}\n占比:{d}%"))
pie2.render()
视频各类数据平均表现df_num = df[[view_num, dm_num, dianzan, toubi, shoucang, zhuanfa]].mean()
# 条形图bar3 = Bar(init_opts=opts.InitOpts(width=1350px, height=750px))
bar3.add_xaxis([弹幕数, 点赞数, 投币数, 保藏数, 转发数])
bar3.add_yaxis(, df_num.values.tolist()[1:])
bar3.set_global_opts(title_opts=opts.TitleOpts(title=B站李子柒视频各类数据平均表现),
visualmap_opts=opts.VisualMapOpts(max_=50000),
)
bar3.render() 播放数Top10视频# 最多播放top10
view_top10 = df.sort_values(view_num, ascending=False).head(10)[[title, view_num]]
view_top10 = view_top10.sort_values(view_num)
# 柱形图bar1 = Bar(init_opts=opts.InitOpts(width=1350px, height=750px))
bar1.add_xaxis(view_top10.title.values.tolist())
bar1.add_yaxis(, view_top10.view_num.values.tolist())
bar1.set_global_opts(title_opts=opts.TitleOpts(title=B站李子柒播放数Top10视频),
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(position=inside)),
visualmap_opts=opts.VisualMapOpts(max_=3000000),
)
bar1.set_series_opts(label_opts=opts.LabelOpts(position=right))
bar1.reversal_axis()
bar1.render() 弹幕数Top10视频# 弹幕最多top10
dm_top10 = df.sort_values(dm_num, ascending=False).head(10)[[title, dm_num]]
dm_top10 = dm_top10.sort_values("dm_num")
# 柱形图
bar2 = Bar(init_opts=opts.InitOpts(width=1350px, height=750px))
bar2.add_xaxis(dm_top10.title.values.tolist())
bar2.add_yaxis(, dm_top10.dm_num.values.tolist())
bar2.set_global_opts(title_opts=opts.TitleOpts(title=B站李子柒弹幕数Top10视频),
visualmap_opts=opts.VisualMapOpts(max_=40999),
)
bar2.set_series_opts(label_opts=opts.LabelOpts(position=right))
bar2.reversal_axis()
bar2.render()视频标题词云图import stylecloud
stylecloud.gen_stylecloud(text=.join(word_num_selected), #text必须是str类型
palette=tableau.Tableau_10,
collocations=False,
font_path=rC:\Windows\Fonts\msyh.ttc, # 字体
icon_name=fas fa-heart,
size=768,
output_name=李子柒视频标题词云图.png # 生成照片
)
|