VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • Python分析5000+抖音大V,发现大家都喜欢这类视频!

写在前面

最近,我在知乎上看到一个关于抖音的问题。

里面提到了,目前我国人均每天刷短视频110分钟。

 

1

看这数据,看来我又被平均了。

不过老实说,只要一打开抖音,确实是有一种停不下来的感觉~

所以还是少刷抖音,多看书,多写代码。要不然时间全流逝了。

这次给大家用数据分析一下在抖音上,什么类型的视频最受欢迎。
Jupyter代码,数据可视化&分析

复制代码

"""
当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢?
学习Python中有不明白推荐加入交流Q群号:928946953
群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF!
还有大牛解答!
"""

from pyecharts.charts import Pie, Bar, TreeMap, Map, Geo
from wordcloud import WordCloud, ImageColorGenerator
from pyecharts import options as opts
from pyecharts.globals import ThemeType
import matplotlib.pyplot as plt
from PIL import Image
import pandas as pd
import numpy as np
import jieba
复制代码

 

In [2]:

df = pd.read_csv('../file/douyin.csv',encoding = 'utf-8-sig')
df.head()

 

Out[2]:

 

name

gender

country

province

city

location

category

fans

videos

likes

comments

shares

following

school

custom_verify

enterprise_verify

signature

0

人民日报

0

中国

北京

北京

北京

政企

117259000

2427

1165446000

11906782048

9089061412

18

NaN

NaN

人民日报官方账号

参与、沟通、记录时代。

1

央视新闻

0

中国

北京

北京

北京

政企

105648000

3681

3814571666

2603872833

1989050522

27

NaN

央视新闻官方账号

央视新闻官方抖音号

本宝宝暂时还没想到个性签名

2

陈赫

1

中国

NaN

上海

上海

明星

68374000

422

570096000

430908721

117639297

131

上海戏剧学院

演员陈赫

NaN

帅到没朋友 ‍♂️有东西直播间 1⃣️1⃣️1⃣️8⃣️ ☑️公众号➰[陈赫]

3

Dear-迪丽热巴

0

NaN

NaN

NaN

NaN

明星

49790000

29

181167000

202448645

151645265

0

NaN

演员

NaN

NaN

4

毒舌电影

1

中国

广东

广州

广州

剧情

46355000

616

820393000

28026109

13005392

24

NaN

优质影视自媒体、抖音影评团成员

NaN

看电影, 可以改变人生。 商务邮:dsmovie@youhaoxi.cn ❤️ 日历预售...

In [27]:

复制代码
df.loc[df.gender == '0', 'gender'] = '未知'
df.loc[df.gender == '1', 'gender'] = '男性'
df.loc[df.gender == '2', 'gender'] = '女性'
# 根据性别分组
gender_message = df.groupby(['gender'])
# 对分组后的结果进行计数
gender_com = gender_message['gender'].agg(['count'])
gender_com.reset_index(inplace=True)

# 饼图数据
attr = gender_com['gender']
v1 = gender_com['count']

# 初始化配置
pie = Pie(init_opts=opts.InitOpts(width="800px", height="400px",theme=ThemeType.LIGHT))
# 添加数据,设置半径
pie.add("", [list(z) for z in zip(attr, v1)], radius=["40%", "75%"])
# 设置全局配置项,标题、图例、工具箱(下载图片)
pie.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V性别分布情况", pos_left="center", pos_top="top"),
                    legend_opts=opts.LegendOpts(orient="vertical", pos_left="left"),
                    toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}))
# 设置系列配置项,标签样式
pie.set_series_opts(label_opts=opts.LabelOpts(is_show=True, formatter="{b}:{d}%",font_size=14))
pie.render_notebook()
复制代码

 

Out[27]:

In [26]:

复制代码
df = df.sort_values('likes', ascending=False)
# 获取TOP10的数据
attr = df['name'][0:10]
v1 = [float('%.1f' % (float(i) / 100000000)) for i in df['likes'][0:10]]

# 初始化配置
bar = Bar(init_opts=opts.InitOpts(width="1000px", height="600px"))
# x轴数据
bar.add_xaxis(list(reversed(attr.tolist())))
# y轴数据
bar.add_yaxis("", list(reversed(v1)),color = '#84E0E3')
# 设置全局配置项,标题、y轴分割线
bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V点赞数TOP10(亿)", pos_left="center", pos_top="18"),
                    xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),
                    yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=12))
                   )
# 设置系列配置项,标签样式
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="right", color="black"))
bar.reversal_axis()
bar.render_notebook()
复制代码

 

Out[26]:

In [29]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 将数据分段
Bins = [0, 1000000, 5000000, 10000000, 25000000, 50000000, 100000000, 5000000000]
Labels = ['0-100''100-500''500-1000''1000-2500''2500-5000''5000-10000''10000以上']
len_stage = pd.cut(df['likes'], bins=Bins, labels=Labels).value_counts().sort_index()
# 获取数据
attr = len_stage.index.tolist()
v1 = len_stage.values.tolist()
 
# 生成柱状图
bar = Bar(init_opts=opts.InitOpts(width="800px", height="400px"))
bar.add_xaxis(attr)
bar.add_yaxis("", v1,color = '#84E0E3')
bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V点赞数分布情况(万)", pos_left="center", pos_top="18"),
                    toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}),
                    yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="top", color="black"))
bar.render_notebook()

  

Out[29]:

In [34]:

复制代码
df = df.sort_values('fans', ascending=False)
attr = df['name'][0:10]
v1 = ['%.1f' % (float(i) / 10000) for i in df['fans'][0:10]]

bar = Bar(init_opts=opts.InitOpts(width="1000px", height="600px"))
bar.add_xaxis(list(reversed(attr.tolist())))
bar.add_yaxis("", list(reversed(v1)),color = '#84E0E3')
bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V粉丝数TOP10(万)", pos_left="center", pos_top="18"),
                    toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}),
                    xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="right", color="black"))
bar.reversal_axis()
bar.render_notebook()
复制代码

 

Out[34]:

In [37]:

复制代码
Bins = [0, 1500000, 2000000, 5000000, 10000000, 25000000, 200000000]
Labels = ['0-150', '150-200', '200-500', '500-1000', '1000-2500', '5000以上']
len_stage = pd.cut(df['fans'], bins=Bins, labels=Labels).value_counts().sort_index()

attr = len_stage.index.tolist()
v1 = len_stage.values.tolist()

bar = Bar(init_opts=opts.InitOpts(width="800px", height="400px"))
bar.add_xaxis(attr)
bar.add_yaxis("", v1,color = '#84E0E3')
bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V粉丝数分布情况(万)", pos_left="center", pos_top="18"),
                    toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}),
                    yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="top", color="black"))
bar.render_notebook()
复制代码

 

Out[37]:

In [40]:

复制代码
df = df.sort_values('comments', ascending=False)
attr = df['name'][0:10]
v1 = ['%.1f' % (float(i) / 100000000) for i in df['comments'][0:10]]

bar = Bar(init_opts=opts.InitOpts(width="1000px", height="600px"))
bar.add_xaxis(list(reversed(attr.tolist())))
bar.add_yaxis("", list(reversed(v1)),color = '#84E0E3')
bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V评论数TOP10(亿)", pos_left="center", pos_top="18"),
                    toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}),
                    xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="right", color="black"))
bar.reversal_axis()
bar.render_notebook()
复制代码

 

Out[40]:

In [44]:

复制代码
df = df.sort_values('shares', ascending=False)
attr = df['name'][0:10]
v1 = ['%.1f' % (float(i) / 100000000) for i in df['shares'][0:10]]

bar = Bar(init_opts=opts.InitOpts(width="1000px", height="600px"))
bar.add_xaxis(list(reversed(attr.tolist())))
bar.add_yaxis("", list(reversed(v1)),color = '#84E0E3')

bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V分享数TOP10(亿)", pos_left="center", pos_top="18"),
                    toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}),
                    xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),
                    yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30))
                   )
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="right", color="black"))
bar.reversal_axis()
bar.render_notebook()
复制代码

 

Out[44]:

In [28]:

复制代码
# 分组求和
likes_type_message = df.groupby(['category'])
likes_type_com = likes_type_message['likes'].agg(['sum'])
likes_type_com.reset_index(inplace=True)
# 处理数据
dom = [{'name':name, 'value':num} for name, num in zip(likes_type_com['category'], likes_type_com['sum'])]

# 初始化配置
treemap = TreeMap(init_opts=opts.InitOpts(width="1000px", height="600px",theme=ThemeType.LIGHT))
# 添加数据
treemap.add('', dom)
# 设置全局配置项,标题、工具箱(下载图片)
treemap.set_global_opts(title_opts=opts.TitleOpts(title="各类型抖音大V点赞数汇总图", pos_left="center", pos_top="5"),
                        toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}),
                        legend_opts=opts.LegendOpts(is_show=False),
                        
                       )
treemap.render_notebook()
复制代码

 

Out[28]:

In [32]:

复制代码
dom = []
fans_type_message = df.groupby(['category'])
fans_type_com = fans_type_message['fans'].agg(['sum'])
fans_type_com.reset_index(inplace=True)
for name, num in zip(fans_type_com['category'], fans_type_com['sum']):
    data = {}
    data['name'] = name
    data['value'] = num
    dom.append(data)

treemap = TreeMap(init_opts=opts.InitOpts(width="1000px", height="600px",theme=ThemeType.LIGHT))
treemap.add('', dom)
treemap.set_global_opts(title_opts=opts.TitleOpts(title="各类型抖音大V粉丝数汇总图", pos_left="center", pos_top="5"),
                        toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}),
                        legend_opts=opts.LegendOpts(is_show=False))
treemap.set_series_opts(treemapbreadcrumb_opts=opts.TreeMapBreadcrumbOpts(is_show=False))
treemap.render_notebook()
复制代码

 

Out[32]:

In [4]:

复制代码
# 筛选
df = df[df['videos'] > 0]
# 计算单个视频平均点赞数
df.eval('result = likes/(videos*10000)', inplace=True)
df['result'] = df['result'].round(decimals=1)
df = df.sort_values('result', ascending=False)

# 取TOP10
attr = df['name'][0:10]
v1 = ['%.1f' % (float(i)) for i in  df['result'][0:10]]

# 初始化配置
bar = Bar(init_opts=opts.InitOpts(width="1000px", height="600px"))
# 添加数据
bar.add_xaxis(list(reversed(attr.tolist())))
bar.add_yaxis("", list(reversed(v1)),color = '#84E0E3')
# 设置全局配置项,标题、工具箱(下载图片)、y轴分割线
bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V平均视频点赞数TOP10(万)", pos_left="center", pos_top="18"),
                    toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}),
                    xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))
# 设置系列配置项
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="right", color="black"))
# 翻转xy轴
bar.reversal_axis()
bar.render_notebook()
复制代码

 

Out[4]:

In [13]:

复制代码
# 筛选数据
df = df[df["country"] == "中国"]
df1 = df.copy()
# 数据替换
df1["province"] = df1["province"].str.replace("", "").str.replace("壮族自治区", "").str.replace("维吾尔自治区", "").str.replace("自治区", "")
# 分组计数
df_num = df1.groupby("province")["province"].agg(count="count")
df_province = df_num.index.values.tolist()
df_count = df_num["count"].values.tolist()

# 初始化配置
map = Map(init_opts=opts.InitOpts(width="1000px", height="600px"))
# 中国地图
map.add("", [list(z) for z in zip(df_province, df_count)], "china")
# 设置全局配置项,标题、工具箱(下载图片)、颜色图例
map.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V省份分布情况", pos_left="center", pos_top="0"),
                    toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}),
                    # 设置数值范围0-600,is_piecewise标签值连续
                    visualmap_opts=opts.VisualMapOpts(max_=600, is_piecewise=False))
map.render_notebook()
复制代码

 

Out[13]:

In [17]:

复制代码
df1 = df[(df["school"] != "") & (df["school"] != "已毕业") & (df["school"] != "未知")]
df1 = df1.copy()
df_num = df1.groupby("school")["school"].agg(count="count").reset_index().sort_values(by="count", ascending=False)
df_school = df_num[:10]["school"].values.tolist()
df_count = df_num[:10]["count"].values.tolist()

# 初始化配置
bar = Bar(init_opts=opts.InitOpts(width="1200px", height="400px"))
bar.add_xaxis(df_school)
bar.add_yaxis("", df_count,color = '#84E0E3')
bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V毕业学校TOP10", pos_left="center", pos_top="18"),
                    toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}),
                    yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="top", color="black"))
bar.render_notebook()
复制代码

 

Out[17]:

In [21]:

复制代码
"""
生成标题以及摘要词云
"""
words = pd.read_csv('../file/chineseStopWords.txt', encoding='gbk', sep='\t', names=['stopword'])
# 分词
text = ''
df1 = df[df["signature"] != ""]
df1 = df1.copy()
for line in df1['signature']:
    text += ' '.join(jieba.cut(str(line).replace(" ", ""), cut_all=False))
# 停用词
stopwords = set('')
stopwords.update(words['stopword'])
backgroud_Image = plt.imread('../file/douyin.png')
# 使用抖音背景色
alice_coloring = np.array(Image.open(r"../file/douyin.png"))
image_colors = ImageColorGenerator(alice_coloring)
wc = WordCloud(
    background_color='white',
    mask=backgroud_Image,
    font_path='../file/simhei.ttf',
    max_words=2000,
    max_font_size=70,
    min_font_size=1,
    prefer_horizontal=1,
    color_func=image_colors,
    random_state=50,
    stopwords=stopwords,
    margin=5
)
wc.generate_from_text(text)
wc.to_file('../file/douyin_word.png')
print('生成词云成功!')
点击并拖拽以移动
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\10076\AppData\Local\Temp\jieba.cache
Loading model cost 0.550 seconds.
Prefix dict has been built successfully.
c:\users\10076\appdata\local\programs\python\python38\lib\site-packages\wordcloud\wordcloud.py:995: UserWarning: mask image should be unsigned byte between 0 and 255. Got a float array
  warnings.warn("mask image should be unsigned byte between 0"
复制代码

 

生成词云成功!

数据获取

数据来自于第三方监测,一共是有5000+抖音大V的数据信息(所需的文件我会放在文章末,供大家下载)

 

2

主要包含大V们的昵称、性别、地点、类型、点赞数、粉丝数、视频数、评论数、分享数、关注数、毕业学校、认证、简介等信息。

其中粉丝最多的是「人民日报」,接近1.2亿。「央视新闻」也破亿了,记得之前破亿的时候还上过热搜~

粉丝最少的博主也有近150w+的粉丝,这5000多位大V累计236.5亿粉丝,地球人口的三倍多!
(由于时间的原因,这些大V的粉丝数肯定比这还要高)

数据可视化&分析

导入第三方库,然后读取数据

复制代码
from pyecharts.charts import Pie, Bar, TreeMap, Map, Geo
from wordcloud import WordCloud, ImageColorGenerator
from pyecharts import options as opts
from pyecharts.globals import ThemeType
import matplotlib.pyplot as plt
from PIL import Image
import pandas as pd
import numpy as np
import jieba

df = pd.read_csv('../file/douyin.csv',encoding = 'utf-8-sig')
df.head()
复制代码

 

Python

复制

运行结果:

 

3

性别分布情况

性别分布情况CODE

 

抖音大V性别分布情况

 

整体上看,男女比例差别不大。

除去未知的数据,基本是1:1

点赞数

抖音大V点赞数CODE


 

 

抖音大V点赞数TOP10(亿)

点赞数TOP10,除了「小团团」和「毒舌」,其他都是新闻媒体类的大V。

今年因为疫情,有很多新闻在抖音上都是第一时间传播,所以影响力比较大,点赞也就比较多了。

记得「四川观察」还被评论区调侃为四处观察,意思是发布消息非常快。

抖音大V点赞数分布情况CODE


 

 

抖音大V点赞数分布情况(万)


 

点赞破亿的有500多个大V,1000万到5000万点赞数的大V人数最多

粉丝数

抖音大V粉丝数CODE


 

 

抖音大V粉丝数TOP10(万)


 

「人民日报」和「央视新闻」粉丝都破亿了。

和去年的抖音数据一对比,「热巴」还少了几十万的粉丝,陈赫倒是涨了不少粉丝。

今年直播带货火热,李佳琦排入前十,也不足为奇,毕竟带货一哥。

抖音大V粉丝数分布情况CODE


 

 

抖音大V粉丝数分布情况(万)

5000万以上56个,妥妥的大佬。

200w~500w的人数最多,好多一时爆火的博主,一段时间后也基本不怎么涨粉了。

可能都停留到了这里,比如以前刷过的「三支花」,想不明白这都能火...

评论数

评论数CODE


 

 

抖音大V评论数TOP10(亿)


 

抖音视频的评论区也是比较有意思的地方。

比如刷剧催更的,「赶紧去更新,都过了十几分钟了,生产队的驴都不敢休息这么久」。

还有五只疯狂摇头的猫,也占领了评论区一段时间。

更有特色的是@自己的朋友们,提醒他们看某个视频,这可能也是抖音的文化吧。

总的来说,媒体类的视频评论较多。

分享数

分享数CODE


 

 

抖音大V分享数TOP10(亿)


 

抖音的分享是视频对外传播的一个方法,可以让更多的人看到视频。

从数据上看,大家还是比较喜欢分享新闻类以及美食类的视频。

可能过年疫情,居家一个月的时间,除了葛优躺看新闻,就是吃吃吃。

每个人,也就都有了一个成为大厨的梦想。

各类型点赞数/粉丝数汇总分布图

各类型抖音大V点赞数汇总图CODE


 

 

各类型抖音大V点赞数汇总图

各类型抖音大V粉丝数汇总图CODE


 

 

各类型抖音大V粉丝数汇总图


 

记得曾经一位大佬说过,抖音这个产品是消磨你时间的(Kill Time),而不是节约时间(Save Time),技术稍微深一点的视频基本上生存不下去。

由上面的矩形树图可以知道,大家都喜欢「美女」类型的视频,毕竟谁不喜欢漂亮妹子呢~

比如说深情看铜人的妹子、高考送满天星的妹子,彭十六elf等等,妹子爆火的视频太多了...

另外「搞笑」、「游戏」、「剧情」类的视频也比较吸引人,妥妥的Kill Time。

抖音大V毕业学校

抖音大V毕业学校CODE


 

 

抖音大V毕业学校TOP10


 

北影、中传、浙传、中戏、上戏、央美,妥妥的演艺圈大佬。

抖音大V省份分布情况

抖音大V省份分布情况CODE


 

 

抖音大V省份分布情况


 

可以看出西藏一个大V都没有,所以没有颜色。

广东、浙江、四川位列前三。

抖音大V简介词云

抖音大V简介词云CODE


 

 

douyin_word


 

可以看到大部分大V都留下了商务合作的信息,利好内容创作者,如此才能双赢。

据统计,在抖音2200万以上创作者实现了超过417亿元的收入。

从创作到创业,这句话抖音讲得很好。

写在最后

不要让抖音消磨你大部分时间,毕竟还有很多事情比刷抖音有趣

出处:https://www.cnblogs.com/pythonQqun200160592/p/15161700.html


相关教程