Python告诉你:千万级网红李子柒的视频都在拍些什么?
云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!
导读:今天我们来聊聊把生活过成诗的李子柒。Python技术部分请看第二部分。公众号后台,回复关键字“李子柒”获取完整数据。
“李家有女,人称子柒。”如果说到当下最火的网红,想必很多人都会想到李子柒。
日出而作,日落而息,看似平淡无奇的日子,李子柒却总能过成一首诗、一幅画。
三月桃花熟了,采来酿桃花酒。四月枇杷成熟,酿枇杷酒…随着不同时令季节,做出不同的美食,看过李子柒视频的人,无一不对那视频里的古风田园生活向往憧憬着,同时也带给了无数人治愈的力量。
目前在B站上,李子柒共有579万的粉丝。入驻到现在仅仅发布了共125条视频,但随便翻翻视频列表,几乎每个视频都是爆款。
那么,她的这些视频都有些什么特点,播放量最高的视频是哪个?今天我们就带你用数据来解读李子柒。
01 “把生活过成诗”,李子柒的视频为什么这么吸引人?
我们用Python对李子柒在B站上发布的125个视频进行了分析。分析流程包括以下这三个步骤:
- 数据读入
- 数据清洗
- 数据可视化
首先让我们看到分析结果:
- 视频各年发布数量
先看到李子柒在B站上各年发布的视频数量。
从2016年7月开始,李子柒在B站发布了第一个视频。根据统计,在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个字段,字段含义为:视频标题、一级分类、二级分类、发布时间、最高全站排名、总播放数、历史累计弹幕、点赞、投币、收藏和分享数。数据预览如下:
- 数据清洗
此部分我们初步对以下信息进行简单的处理,其中包含:
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'])
经过处理之后的数据如下所示:
- 数据可视化
此处我们将进行以下部分的可视化分析,首先导入所需包,其中pyecharts用于绘制动态可视化图形,stylecloud包用于绘制词云图。关键部分代码如下:
# 导出所需包 from pyecharts.charts import Pie, Line, Tab, Map, Bar, WordCloud, Page from pyecharts import options as opts from 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=r'C:\Windows\Fonts\msyh.ttc', # 字体 icon_name='fas fa-heart', size=768, output_name='李子柒视频标题词云图.png' # 生成图片 )
【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/zhibo立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
原文发布时间:2020-06-04
本文作者:CDA数据分析师
本文来自:“大数据DT 微信公众号”,了解相关信息可以关注“大数据DT”
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
为什么在物联网中创造良好的用户体验如此困难?
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 在物联网领域创造良好的用户体验是困难的。现在有更多的技术层,更多的用户需要取悦,更多的团队需要协调。作为产品经理,你准备好带头前进了吗? 多年来,用户体验实践已经发展并适应了最新的技术趋势,从桌面应用时代,到web革命,再到移动革命。 但是现在,产品和设计团队面临着一个新的用户体验挑战,这个挑战可能比之前所有的挑战加起来还要大:物联网革命。 随着物联网技术的不断发展,并渗透到所有行业,物联网产品团队面临的最大挑战之一是如何在整个物联网技术堆栈中提供一致的用户体验。 那么,为什么创造物联网体验比创造传统的云或移动体验更复杂呢?物联网决策框架显示,物联网产品只是需要考虑更多的部分。 为什么在物联网中创造一致的用户体验很困难 大多数进入物联网领域的产品经理通常都有管理硬件或软件产品的经验。但是物联网产品包括软件和硬件,带来了大多数PMs不熟悉的新挑战。 从产品开发的角度来看,硬件和软件可能由不同的团队开发和管理。但是请记住,用户并不真正关心谁在构建什么。不管你的产品是软件还是硬件,他们都希望在...
- 下一篇
我们现在正处于 JavaScript 消亡的边缘?
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 每 10 年 JavaScript 都会发生一次改朝换代式的变革。在我看来,JavaScript 当前正处于一次快速变革的开始,而这段时期未来可能会被称为 JavaScript 第三纪元。 本文最初发布于 shawn swyx wang 博客,经原作者授权由 InfoQ 中文站翻译并分享。 历说从头JS 的第一纪元(从 1997 至 2007) 堪称虎头蛇尾。大家都知道 Brendan Eich 的故事,但是关于 ES4 是如何与诸如 Flash/Actionscript 之类的封闭生态系统艰难地进行激烈竞争的故事却鲜为人知。我推荐大家读读《JavaScript:20 年发展史》来了解 JS 起源的前前后后,我认为这本书是一个非常合适的选择, 因为该书是由 JS 的主要作者 Brendan Eich 和 Allen Wirfs-Brock 联手发布的。 JS 的第二纪元(从 2009 至 2019) 是从关键的 2009 年开始的,这一年诞生了 npm,Node.js 和 ES5。随着 ...
相关文章
文章评论
共有0条评论来说两句吧...