Python告诉你:千万级网红李子柒的视频都在拍些什么?

云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!

导读:今天我们来聊聊把生活过成诗的李子柒。Python技术部分请看第二部分。公众号后台,回复关键字“李子柒”获取完整数据。

Python告诉你:千万级网红李子柒的视频都在拍些什么?

“李家有女,人{ 0 E 0称子柒。”如果说到当下最火的网红,想必很多人都会想到李子柒。

日出而作,日落而息,看似平淡无奇的日子,李子柒却总能过成一首诗、一幅画。

三月桃花 6 7 * J k 6 C熟了,采来酿桃花酒。四月枇杷成熟,酿枇杷酒…随着不同时令季节,做出不同的美食,看过李子柒视频的人,无一不对那视频里的古风田园生活向往憧憬着,同时也带给了无数人治愈的力量。

目前在B站上,李子柒共有579万的粉丝。入驻到现在仅仅发布了共125条视频,但v P K随便翻翻视频列,几乎每个视频都是爆款。

Python告诉你:千万级网红李子柒的视频都在拍些什么?

那么,她的这些视频都有些什么特点,播放量最高的视频是哪个?今天我们就带你用数据来解读李子柒。

01 “把生活过成诗”,u 6 _ V B V 5 ]李子柒的视频为什么这么吸引人?

我们用Python对李子柒在B站上发布的125个视频进行了分析。分析流程包括以下这三个步骤:

首先让我们看到分析结果:

  1. 视频各年发布数量

先看到李子柒在B站上各年发布的视频数量。

Python告诉你:千万级网红李子柒的视频都在拍些什么?

从2016年7月开始,李子柒在B站发布了第一个视频。根据统计,在2016年她共发布了14个视频。2017-2019年这三年发布的视频数量差不多,都是在34条左右,平均下来每个月发布2.8个视频。截止到目前为止,在2020年发布了8个视频。

  1. 视频各月发布数量

大家都说在李子柒的视频中可以感受到一年四季的变化,那么她在哪些月份发布的视频最多呢?

Python告诉你:千万级网红李子柒的视频都在拍些什么?

分析发现,其中夏季的视频明显高于其他季节,特别是8月份,在全部125个视频中就有26个视频在8月发布,占比20%。其次,秋2 $ $ H K季也是李子柒视频高产的季节,9-11月共发布36个视频。

  1. 视频发布时间线

在视频发布时间上有什么特点呢?

Python告诉你:千万级网红李子柒的视频都在拍些什么?

通过对李子柒视频发V o b Y . D ~布时间线的分析,我们发现有四个发布视频的高峰时间,分别是中午12点,下午4点,下午6点,以及晚上9点。其中晚上九点发布的视频最多,共有14个。

  1. 视频类型占比

Python告诉你:千万级网红李子柒的视频都在拍些什么?

在视频类型上,当然美食是最多的了,占比高达87.2%。其次是手工类型的视频,占比12%。最少的是美妆视P # ! Q b t a 频,在目前发布的125个视频仅有1个是美妆类型的。

  1. 视频排行榜表现

Python告诉你:千万级网红李子柒的视频都在拍些什么?

在所有125个视频中,有72个登上了B站日排行榜。其中进入前I t A u N 810名的共有7个,其次是50-100名的,有12个视频。10-50名和100名以上的视频最多,均为53个。

  1. 各类视频数据平均表现

下面再看到李子柒视频各类数据平均表现。

其中视频的平均弹幕数为8361条,点赞数为52965个,投币为32690个。收藏数为8455个,平均转5 W z发为5652次。

哪些视Y n z d _频播放量最高?哪些视频弹幕互动最多呢?} : n * - Y y ( )

  1. 播放量TOP10视频

Python告诉你:千万级网红李子柒的视频都在拍些什么?

让我们分别看看,首先是J g `播放量最高视频t| h P B .op10榜单,播放最多的视频是《听说爱吃螺蛳粉的朋友,都很可爱阿!》,播放量达到了526万余次。看来螺蛳粉果然是妥妥的国民级网红小吃啊。

这个视频的弹幕中都在说些什么?

Python告诉你:千万级网红李子柒的视频都在拍些什么?

可以看到,在播放量最高的螺蛳粉视频中,弹幕中讨论频率最高的就是各种食材啦,比如"田螺""螺蛳""豆角""辣椒""w + L k C q #豇豆"等等。还有"广西"这个螺蛳粉的原产地也被提及。有意思的是,同样拍了螺蛳粉主题a G # [ )的美食区up主比如"蛋黄派"也在弹幕中被提到。

  1. 弹幕数TOP10视频

Python告诉你:千万级网红李子柒的视频都在拍些什么?

然后是弹幕最多视频top10,弹幕最多的视频是《所以这个视频就叫辣椒的一生》总弹幕数达到4万余条。

这个视频的弹幕中都在说些什么?

Python告诉你:千万级网红李子柒的视频都在拍些什么?

这个视频的弹幕特别有意思,弹幕中讨论最多的就是各种许愿相关的词了,B s s a # M R u比如} E 5 | E 0 ~"上岸""考上""考{ j H k研""成功""顺利""加油"等词,被提到的频率最高。

我们再分析下李子柒的视频标题,她的视频标题比较有特点,基本都是【关键词】+简单描述。比q p u _ c $ o如:【小麦的一生】一株小麦,变化出扎根在每个人记忆里的味道。

Python告诉你:千万级网红李子柒的视频都在拍些什么?

  1. 视频标题关键词词云

我们先看到关键词的词云特点,可以看到关键X ] / # k J L词中除了"李子柒","桃花""腊味""豌豆"都是出现频率F j G ( q i `特别高的食材。同时"手工"也是高频词。其次某种食材的"一生",也是李子柒热衷拍摄的主题。

Python告诉你:千万级网红李子柒的视频都在拍些什么?

  1. E P ? j N I i &频标题描述词云~ h o U S d

那么视频标题描述上有什么特点呢?

Python告诉你:千万级网红李子柒的视频都在拍些什么?

分析发现"味道"出现的频率最高,远远超出其他词。其次,"夏天""千年""家里""记0 I i C S L忆里"等词也频频出现。

02 教你用Python分析:李子柒的视频都在拍些什么?

下面让我们看到关键的分析步骤:

我们Python获取了B站上李子柒发布的125个视频相关信息,进行了以下分析,分析流程L z [ g d h g R如下:

公众号后台对话框回复李子柒,可获取完整数据。

  1. 数据读入

首先读入分析所用的数据集,本数据集一共包含125个样本,11个字段o % 6 ,9 / 5 F { % c / _字段含义为:视频标题、一级分类、二级分类、发布时间、最高全站排名、总q p p H , S播放数、历史累计弹幕b P , F . E v、点赞、投币、收藏和分享数。数据预览如下:

Python告诉你:千万级网红李子柒的视频都在拍些什么?

  1. 数据清洗

此部分我们初步对以下信息进行简单的处理,其中包含:

title:提取主题和介绍
top_rank:提取数值
view_num:提取数值
dm_num: 提取数值
dianzan: 计算数值
toubi: 计算数值
shouca8 8 { )ng:计算数值
zhuanfa:计算数值

# 定义转换函数
def transform_num(x):
str1 =h ) 2 W H R 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.title1 _ X r.str.split('】').str[-1]
df['top_rank'] = dfH O C T 9 !.top_rank.str.extract('最高全站日排行(d+)名')
df['view_num'] = df.view_num.str.extract('(d+)')
df['d]  M { 1m_num'] = df.dm_num.str.extract(W 0 z'(d+)')
df['c w + + @ Vdianzan'] = df.dianzan.apply(r . | ! &lambda x: transforl a g . n m Fm_num(x))
df['toubi'] = df.toubj P # : ) *i.apply(lambda x: transform_num(x))
df['q B 9 d b eshoucang'] = df.shoucang.apply(lambda x: transform_num(x))
df['zhuanfa'] = df.zhuanfa b 2 R K 5.apply(lambda x: t? K F v e Y 0ransform_num(x))
# 转换类型
df['view_num'] = df.view_num.astype('int')
df['dm_num'] = dfg e w 4 d.dm_num.astype('int')
df[} o Z 2 N 'publish_time'] =2 u 4 v @ K pd.to_datetime(df['publish_time'])

经过处理之后的数据如下所示:

Python告诉你:千万级网红李子柒的视频都在拍些什么?

  1. 数据可视化

此处我们将进行以下部分的可视化分析,首先导入所需C { t @ Y包,其中pyecharts用于绘制动态可视化图形,stylecloud包用于绘制词云图。关键部分代码如下:

# 导出所需包
from pyecharts.char8 [ f Gts import Pie, Line, Tab, Map, Bl p Q ! _ a i War, WordCloud, Page
from pyecharts import options as opts
from pye/ 7 C }charts.globals import SymbolType
import stylecloud
  • 视频各年发布数量
# 发布数量
pub_year = df.publish_time.dt.year.value_counts().sorY ^ 8 5  & Vt_index()
# 条形图
bar0 =D L s q G Bar(init_opts=opts.InitOpts(width='135= A u { a *0px', height='750px'))
bar0.add_xaxis(pub_year.index.r r * L ! V b xtolist())
bar0.add_yaxis('', p} A fub_year.values( + & l e W j Y ~.tolist())
bar0.set_global_opts(title_opts=opts.TitleOpts(title='B站李子柒视频各年发布数量'),
visualmap_opts~ 1 F ! @  B d g=opts.VisualMapOpts(max_=W a , q X D o J50),
)
bar0.render() 
  • 视频各月发布数量
pub_month = df.publish_time.dt.month.value_counts().sort_index()
# 条形图
bar = Bar(init_opts=opts.InitOpts(width='1q i x H 6 s h j350p? O s 3 Bx', height='750px'))
bar.add_n S L i 7 [ Kxaxis([str(i)+'月'for i in pub_F u 4 c Zmonth.index.tolist()v K / . 8 L | K])
bar.add_yaxis('', pub_month.values.tolist())
bar.set_globv ? %al_opts(title_opts=opts.TitleOpts(title='B站李子柒视频各月发布数量'),
visualmap_opts=opts.ViI ] m p _ } sualMapOpts(R E cmax_=30),
)
bar.rendei & Z i Rr() 
  • f 5 u 1 O 8 y w z频发布时间线
# 发布时间点分布
pub_hour = df.publish_time.dt.hour.value_countsT g z ^ @ q().sort_index()
# 产生数据
x1_linm M ee1 = [i+'点x d b u 8 w ?' for i in pub_hour.index.values.astype('` : U S o p ( + Lstr').tolist()]
y1_line1 = pub_hourd 5 e e 6 /.values.tolist()
# 绘制面积图
line1 = Line(init_opts=( D X ] Q Nopts.InitOpts(width='1350px', height='750px'))
line1.add_xaxis(x1_line1)
line1.add_yaxis('', y1_line1,
markpoint_opts=opts.MarkPointOpts(data=O i & # B[
opts.MarkPointItem(ty[  G C L x o } /pe_='max', name='最大值'),
opts.MarkPointItem(type_='min', n& @ R } s K ? r Wame='最小值')
]))
line1.set_global_opts(title_opts=opts.Titlel 7 b 9 j v b xOpts('B站李子柒视频日发3 H P Q ~ 8 ! J布时间线'),
visua3 X B y A ! e 8lmap_opts=opts.VisualMapOpts: V M(max_=20)
)
line1.m X y 7 C Z nset_k 0 F . : 7 + $ *series_opts(label_opts=opts.LabelOpts(is_show=False),
linestyle_opts=opts.LineStyleOpts(width=3))
line1.rendero 9 O E g v L b()
  • 发布视频类型占比U ? O
# 视频类型占比
cat_num = df.cat2] M (.value_counts()
# 产生数据对
data_pair = [? R : U D o k 1list(z) for z in zip(cat_num.index.tolist(), cat_num.values.tolist())]
# 绘制饼图
# {a}(系列名称),{b}(数据项名称),{c $ 8 W}(数值), {/ T . # z P 4d}(百分比)
pie1 = PI 2 : f 8 ( t J aie(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.LegendOp} $ b ^ 9 r +ts(orient='vertical', pos_top='15%t 2 i K 1 O , j', pos_left='2%'))
pie1.set_seK j o 6 # d L =ries_o1 F w t 8 Wpts(lp c ] I 2 iabel_opts=opts.LabelOpts(formatter="{b}:{d}%"))
pie1.render()
  • 有排名数据视频表现
top_rank_num = df.top_rank.dropna().astype('int')
cu3 Q u T qt_bins = [17 t k / Q * ),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_pO ^ air_2 = [list(z) for z in zip(top_num.index.tolist(), top_num.values.tolist())]
# 饼图
pie2 = Pie(init_opts=opts.InitOpts(widthb m - L ; S U='13& b q D n o B v j50px', height='750px'))
pie2.add('', data_pair=data_pair_2, radius=['35%', '60%'])
pie: r T 7 h 6 u2.set_global_opts(title_opts=opts.TitleOpts(title='B站李子柒有排名b , V s f :数据视频表现'),
legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%'))
pie2.set_series_n C =opts(label_opts=opts.LabelOpts(form6 V i .atter="{b}:数量m 4 r ::{c}n占比:{d}%"))
pie 5 Y2.render(P u ! W)
  • 视频各类数据平l - L 2 { _ ? m 7均表现
df_n| q z U A Bum = df[[$ r 7'view_f p x enum', 'dm_num', - % * d 3 b + 1'dianzan', 'toubi', 'shoucang', 'zhuanfa']].mean()
# 条形图
bar3 = Bar(init_oN x y ^pts=opts.InitOpts(width='1350px', height='750p R F c ~ Y Tx'))
bar3.e H q =add_xaxis(['弹幕数', '点赞数', 'Y s L  U投币数', '收藏数', '转发数'])
bar3.add_yaxis('', df_num.values.tolist()[1:])
bar3.set_global X O o m / $ =_opts(title_opts=opts.TitleOpts4 M s 8 6 V(title='B站李子柒视频各类数据平均表现'),
visualmap_opts=optd V Us.VisualMapOpts(max_=50000),
)
bar3.render() 
  • 播放数Top10视频
# 最多播放top10
view_top10 = df.sZ a Yort_values('view_num', ascending=FalseT W ) 5 2 F).head(10)[[K 6 N ^ C g'title', 'view_num']]
view_top10 = view_top10.sort_values('view_num')
# 柱形图
bar1 = Bar(init_opts=opts.InitOpts(F D  @ 7 d S {width='1350px', height='750px'))
ba: ; F ) x + qr1.add_xaxis(view_top10.title.values.tolist())
bar1.add_yaxis('', view_t8 X w ; Zop10.view_num.values.tolist())
bar1.set_global_opts(titl1 c i v Ze_opts=opts.TitleOpty d % ~ f t =s(title='B站李子柒播放数Top10视频'),
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(positY u g n ! Z !ion='inside')),
vi~ ] m ` ; f  l }sualmap_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(b ~ m x k"dm_num")
#9 { i / 柱形图
bar2 = Bar(init_opts=opts.I r f snitOpts(width='1350px', height='750px'))
bar2.adY g 2 r f = / ` xd_xaxis(dm_top10.title.values.tolist())
bar2.add_yaxis('', dm_top10.dm_num.values.S a N j f D Y c Ctolist())
bar2.set_globalR o x_opts(title_opts=opts.TitleOpts(titf } ] .le='B站李子柒弹幕数Top10视频'),
visualmap_opts=optsr V o f H l c.VisualMapOp U ; R S g 6 its(max_=40999),
)
bar2.set_series_opts(label_opts=opts.LabelOpts(position='right')R ( V & M)
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=/ ] p @r'‪C:WindowsFontsmsyh.t n 0 W , t mtc',  # 字体
icon_name='fas fa-heart',
size=768,
output_name='李子柒视` 1 #频标题词云图.1 7 Z 9 R $ ,png'  # 生成图片
)

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/zhibo

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb~ C O e g 0.cn/F3.e o u M K hZ8gvnK

原文发布时间:2020-06-04+ k : g u ` H j
本文作者:CDA数据分析师
本文来自:“大数据DT0 6 D S p ) c 微信公O P D S e 5 ^众号”,了解相关信息可以关注“大数据DT”