CDA数据分析师出品作者:米卡数据:振达后期制作:米卡、泽龙【简介】:今天我们来说说把生活写成诗的李子柒。Python的技术部分请看第二部分。给我看数据,用数据说话。“李家有一女,名叫紫琪。”说到当下最火的网红,很多人都会想到李子柒。日出而作,日落而息,看似平凡的日子,李子柒却总能活出一首诗或一幅画。三月桃花熟,采摘酿桃花酒。四月,枇杷熟了,枇杷酒酿好了……不同的季节,酿出不同的美食。看过李子柒视频的人,无不向往那个视频里古老的农村生活,也带给了无数人。治愈的力量。目前在B站,李子柒一共有579万粉丝。到现在为止一共发布了125个视频,但是翻看视频榜单,几乎每一个视频都是爆款。那么,她的这些视频有什么特点,播放量最高的是哪一个呢?今天我们就带大家用数据解读李子柒。01.“把生活变成诗”,李子柒的视频为什么那么吸引人?我们使用Python分析了李子柒在哔哩哔哩发布的125段视频。分析过程包括以下三个步骤:数据读取、数据清洗和数据可视化。首先我们来看分析结果:每年发布的视频数量。首先我们可以看到李子柒每年在B站发布的视频数量。2016年7月,李子柒在哔哩哔哩发布了第一条视频。据统计,2016年她一共发布了14条视频,2017年到2019年这三年发布的视频数量差不多,都在34条左右,平均每月发布2.8条视频。2020年至今一共发布了8个视频,每个月发布的视频数量大家都说李子柒的视频可以感受到一年四季四季的变化,那么她到底是在哪个月份发布的视频最多呢??分析发现,夏季的视频数量明显高于其他季节,尤其是8月份,125个视频中有26个是8月份发布的,占比20%。其次,秋天也是李子柒视频高产的季节。从9月到11月,共发布了36个视频。视频发布时间线在视频发布时间上有什么特点?通过分析李子柒的视频发布时间线,我们发现视频发布有四个高峰时间,分别是中午12:00、下午4:00、下午6:00和晚上9:00。其中,晚上9:00发布的视频最多,共有14条视频。视频类型占比在视频类型中,当然是美食最多,占比高达87.2%。其次是手动视频类型,占比12%。最少的是美妆视频,目前发布的125个视频中只有1个是美妆类的。视频排行榜显示,在全部125个视频中,有72个视频进入哔哩哔哩每日排行榜。其中,前10名的视频有7个,50-100名的视频有12个。10-50和100多个视频最多,均为53个视频。各种视频数据的平均表现接下来我们就来看看李子柒视频中各种数据的平均表现。其中,视频平均弹幕数8361次,点赞数52965次,硬币数32690次。收藏数8455次,平均转发5652次。哪些视频的观看次数最多?哪个视频弹幕互动最多?让我们来看看观看次数最多的前10个视频。第一个是观看次数最多的前10个视频列表。观看次数最多的视频是《听说爱吃螺蛳粉的朋友,都很可爱阿!》,观看次数超过526万。看来螺蛳粉确实是妥妥的国民级网红零食。这个视频的弹幕里在说什么?可以看到,在螺蛳粉点击量最多的视频中,各种食材在弹幕中的讨论频率最高,比如“螺蛳”、“蜗牛”、“豆角”、“辣椒”、“豇豆”等等.还提到了“广西”螺蛳粉的产地。有意思的是,同样拍摄螺蛳粉题材的美食区up主,比如“蛋黄派”,也在弹幕中被提及。弹幕最多的前10个视频后面是弹幕最多的前10个视频。弹幕最多的视频是《所以这个视频就叫辣椒的一生》,总弹幕数达到4万多条。这个视频的弹幕里在说什么?这个视频的弹幕特别有意思。弹幕里讨论最多的词是各种和许愿相关的词,比如“上岸”、“录取”、“考研”、“成功”、“顺利”、“加油”等词,被提及最多频繁地。我们再分析一下李子柒的视频标题。她的视频标题比较有特点,基本就是【关键词】+简单的描述。例如:【麦子的一生】一株麦子变幻出一种根植于每个人记忆中的味道。视频标题关键词词云我们先来看看关键词的词云特征。我们可以看到,除了“李子柒”,“桃花”、“腊肉”、“豌豆”都是出现频率特别高的食材。同时,“手册”也是一个高频词。其次,某种食材的“生命”也是李子柒热衷拍摄的题材。视频标题描述词云那么视频标题描述有哪些特点呢?分析发现“味道”出现频率最高,远超其他词。其次,“夏天”、“千年”、“家”、“记忆中”等词也频繁出现。02.教你用Python分析,李子柒拍的视频是什么?下面看一下关键分析步骤:我们用Python获取了李子柒在B站发布的125条视频相关信息,进行了如下分析。分析过程如下:数据读入,数据清洗,数据可视化,数据读入,分析首先读入使用的数据集,这个数据集一共包含125个样本,11个字段,字段含义分别为:视频标题、一级分类、二级分类、发布时间、站内总排名、总播放量、历史累计弹幕、点赞数、币数、收藏数、分享数。数据预览如下:importpackageimportnumpyasnpimportpandasaspdimportre读取数据df=pd.read_excel('./data/李子柒视频数据.xlsx')df.head()数据清洗在这部分,我们最初对以下信息进行简单处理,包括:title:提取主题和introductiontop_rank:提取值view_num:提取值dm_num:提取值dianzan:计算值toubi:计算值shoucang:计算值zhuanfa:计??算值定义转换函数deftransform_num(x):str1=str(x)if'tenthousand'instr1:returnfloat(str1.strip('tenthousand'))*10000else:returnfloat(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(lambdax:transform_num(x))df['toubi']=df.toubi.apply(lambdax:transform_num(x))df['shoucang']=df.shoucang.apply(lambdax:transform_num(x))df['zhuanfa']=df.zhuanfa.apply(lambdax: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包用于绘制词云图代码关键部分如下:Exporttherequiredpackagesfrompyecharts.chartsimportPie,Line,Tab,Map,Bar,WordCloud,Pagefrompyechartsimportoptionsasoptsfrompyecharts.globalsimportSymbolTypeimportstylecloudvideoreleasesperyear数量发布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)+'month'foriinpub_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+'point'foriinpub_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='最大值'),type'opts,Mark=name(最小值')]))line1.set_global_opts(title_opts=opts.titleopts('b站站李子柒视频日发布'),Visualmap_opts=opts.visualmapopts(max_=20))linestyle_opts=opts.LineStyleOpts(width=3))line1.render()发布视频类型比例视频类型比例cat_num=df.cat2.value_counts()生成数据对data_pair=[list(z)forzinzip(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()hasrankingdatavideoperformancetop_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=['Top10','10-30','30-50','50-100']).value_counts()数据对data_pair_2=[list(z)forzinzip(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}:quantity:{c}\naccount比例:{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站李子柒的平均表现variousvideodata'),visualmap_opts=opts.VisualMapOpts(max_=50000),)bar3.render()播放次数最多的Top10视频top10view_top10=df.sort_values('view_num',alascending=he0))[['title','view_num']]view_top10=view_top10.sort_values('view_num')columnbar1=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='insim='insim')),visualmap_opts=opts.visalmapopts(visalmapopts(max_=30000000000000000000000000000000000000000000000000000000000000000来州),)bar1.set_series_opts(label_opts=opts.LabelOpts(position='right'))bar1.reversal_axis()bar1.render()弹幕数量Top10视频弹幕最top10dm_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),graph)bar2.set_series_opts(label_opts=opts.LabelOpts(position='right'))bar2.reversal_axis(word)video.bar2.reversal_axis(importstylecloudstylecloud.gen_stylecloud(text=''.join(word_num_select),#Text需要为strtypePalette='tableau.tableau_10',cololocations=false,font_path=r'c:\windows\msyh.ttc'=768,output_name='李子柒视频标题词云.png'#生成图像
