社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

仅拍125个视频就成为千万级网红? Python告诉你:李子柒的视频都在拍些什么?

CDA数据分析师 • 5 年前 • 370 次点击  

 



 CDA数据分析师 出品  

作者:Mika

数据:真达  

后期:Mika、泽龙

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

Show me data,用数据说话

今天我们聊一聊 李子柒

点击下方视频,先睹为快:


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

 

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



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

 

目前在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个视频相关信息,进行了以下分析,分析流程如下:

  1. 数据读入
  2. 数据清洗
  3. 数据可视化
公众号后台,回复关键字“李子柒”获取完整数据


数据读入


首先读入分析所用的数据集,本数据集一共包含125个样本,11个字段,字段含义为:视频标题、一级分类、二级分类、发布时间、最高全站排名、总播放数、历史累计弹幕、点赞、投币、收藏和分享数。数据预览如下:


# 导入包
import numpy as np 
import pandas as pd 
import re 

# 读入数据
df = pd.read_excel('./data/李子柒视频数据.xlsx')
df.head() 



数据清洗


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


  1. title:提取主题和介绍
  2. top_rank:提取数值
  3. view_num:提取数值
  4. dm_num: 提取数值
  5. dianzan: 计算数值
  6. toubi: 计算数值
  7. shoucang:计算数值
  8. 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 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'  # 生成图片
                         )


关注CDA数据分析师公众号
回复关键字“李子柒” 
获取 详细数据代码

CDA数据分析师 


本文出品:CDA数据分析师(ID: cdacdacda)


📚推荐阅读 READ MORE


(点击下方图片阅读)

从《入海》到《消愁》毛不易的歌里都在唱些什么?

口红?剃须刀?刚过去的520,大家都在送什么礼物


 

📌CDA课程咨询


喜欢本篇内容请点个“在看”哦!❤️

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/64080
 
370 次点击