天天看點

Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?

雲栖号資訊:【 點選檢視更多行業資訊

在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

導讀:今天我們來聊聊把生活過成詩的李子柒。Python技術部分請看第二部分。公衆号背景,回複關鍵字“李子柒”擷取完整資料。

Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?

“李家有女,人稱子柒。”如果說到當下最火的網紅,想必很多人都會想到李子柒。

日出而作,日落而息,看似平淡無奇的日子,李子柒卻總能過成一首詩、一幅畫。

三月桃花熟了,采來釀桃花酒。四月枇杷成熟,釀枇杷酒…随着不同時令季節,做出不同的美食,看過李子柒視訊的人,無一不對那視訊裡的古風田園生活向往憧憬着,同時也帶給了無數人治愈的力量。

目前在B站上,李子柒共有579萬的粉絲。入駐到現在僅僅釋出了共125條視訊,但随便翻翻視訊清單,幾乎每個視訊都是爆款。

Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?

那麼,她的這些視訊都有些什麼特點,播放量最高的視訊是哪個?今天我們就帶你用資料來解讀李子柒。

01 “把生活過成詩”,李子柒的視訊為什麼這麼吸引人?

我們用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%。其次,秋季也是李子柒視訊高産的季節,9-11月共釋出36個視訊。

  1. 視訊釋出時間線

在視訊釋出時間上有什麼特點呢?

Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?

通過對李子柒視訊釋出時間線的分析,我們發現有四個釋出視訊的高峰時間,分别是中午12點,下午4點,下午6點,以及晚上9點。其中晚上九點釋出的視訊最多,共有14個。

  1. 視訊類型占比
Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?

在視訊類型上,當然美食是最多的了,占比高達87.2%。其次是手工類型的視訊,占比12%。最少的是美妝視訊,在目前釋出的125個視訊僅有1個是美妝類型的。

  1. 視訊排行榜表現
Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?

在所有125個視訊中,有72個登上了B站日排行榜。其中進入前10名的共有7個,其次是50-100名的,有12個視訊。10-50名和100名以上的視訊最多,均為53個。

  1. 各類視訊資料平均表現

下面再看到李子柒視訊各類資料平均表現。

Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?

其中視訊的平均彈幕數為8361條,點贊數為52965個,投币為32690個。收藏數為8455個,平均轉發為5652次。

哪些視訊播放量最高?哪些視訊彈幕互動最多呢?

  1. 播放量TOP10視訊
Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?

讓我們分别看看,首先是播放量最高視訊top10榜單,播放最多的視訊是《聽說愛吃螺蛳粉的朋友,都很可愛阿!》,播放量達到了526萬餘次。看來螺蛳粉果然是妥妥的國民級網紅小吃啊。

這個視訊的彈幕中都在說些什麼?

Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?

可以看到,在播放量最高的螺蛳粉視訊中,彈幕中讨論頻率最高的就是各種食材啦,比如"田螺""螺蛳""豆角""辣椒""豇豆"等等。還有"廣西"這個螺蛳粉的原産地也被提及。有意思的是,同樣拍了螺蛳粉主題的美食區up主比如"蛋黃派"也在彈幕中被提到。

  1. 彈幕數TOP10視訊
Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?

然後是彈幕最多視訊top10,彈幕最多的視訊是《是以這個視訊就叫辣椒的一生》總彈幕數達到4萬餘條。

Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?

這個視訊的彈幕特别有意思,彈幕中讨論最多的就是各種許願相關的詞了,比如"上岸""考上""考研""成功""順利""加油"等詞,被提到的頻率最高。

我們再分析下李子柒的視訊标題,她的視訊标題比較有特點,基本都是【關鍵詞】+簡單描述。比如:【小麥的一生】一株小麥,變化出紮根在每個人記憶裡的味道。

Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?
  1. 視訊标題關鍵詞詞雲

我們先看到關鍵詞的詞雲特點,可以看到關鍵詞中除了"李子柒","桃花""臘味""豌豆"都是出現頻率特别高的食材。同時"手工"也是高頻詞。其次某種食材的"一生",也是李子柒熱衷拍攝的主題。

Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?
  1. 視訊标題描述詞雲

那麼視訊标題描述上有什麼特點呢?

Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?

分析發現"味道"出現的頻率最高,遠遠超出其他詞。其次,"夏天""千年""家裡""記憶裡"等詞也頻頻出現。

02 教你用Python分析:李子柒的視訊都在拍些什麼?

下面讓我們看到關鍵的分析步驟:

我們Python擷取了B站上李子柒釋出的125個視訊相關資訊,進行了以下分析,分析流程如下:

公衆号背景對話框回複李子柒,可擷取完整資料。

首先讀入分析所用的資料集,本資料集一共包含125個樣本,11個字段,字段含義為:視訊标題、一級分類、二級分類、釋出時間、最高全站排名、總播放數、曆史累計彈幕、點贊、投币、收藏和分享數。資料預覽如下:

Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?

此部分我們初步對以下資訊進行簡單的處理,其中包含:

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'])           

經過處理之後的資料如下所示:

Python告訴你:千萬級網紅李子柒的視訊都在拍些什麼?

此處我們将進行以下部分的可視化分析,首先導入所需包,其中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