Python分析5000+抖音大V,發(fā)現(xiàn)大家都喜歡這類視頻!
擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進行關(guān)注
回復(fù)“書籍”即可獲贈Python從入門到進階共10本電子書
最近,小F在知乎上看到一個關(guān)于抖音的問題。
里面提到了,目前我國人均每天刷短視頻110分鐘。

看這數(shù)據(jù),看來小F又被平均了。
不過老實說,只要一打開抖音,小F確實是有一種停不下來的感覺~
所以還是少刷抖音,多看書。要不然時間全流逝了。
本期就給大家用數(shù)據(jù)分析一下在抖音,什么類型的視頻最受歡迎。
/ 01 / 數(shù)據(jù)獲取
數(shù)據(jù)來自于第三方監(jiān)測,一共是有5000+抖音大V的數(shù)據(jù)信息。
文件我已上傳公眾號,回復(fù)「抖音」即可獲取。

主要包含大V們的昵稱、性別、地點、類型、點贊數(shù)、粉絲數(shù)、視頻數(shù)、評論數(shù)、分享數(shù)、關(guān)注數(shù)、畢業(yè)學(xué)校、認(rèn)證、簡介等信息。
其中粉絲最多的是「人民日報」,接近1.2億。「央視新聞」也破億了,記得之前破億的時候還上過熱搜~
粉絲最少的博主也有近150w+的粉絲,這5000多位大V累計236.5億粉絲,地球人口的三倍多!
/ 02 / 數(shù)據(jù)可視化
導(dǎo)入相關(guān)庫,然后讀取數(shù)據(jù)。
from pyecharts.charts import Pie, Bar, TreeMap, Map, Geo
from wordcloud import WordCloud, ImageColorGenerator
from pyecharts import options as opts
import matplotlib.pyplot as plt
from PIL import Image
import pandas as pd
import numpy as np
import jieba
df = pd.read_csv('douyin.csv', header=0, encoding='utf-8-sig')
print(df)
01 性別分布情況

整體上看,男女比例差別不大。
除去未知的數(shù)據(jù),基本是1:1。
可視化代碼如下。
def create_gender(df):
df = df.copy()
# 修改數(shù)值
df.loc[df.gender == '0', 'gender'] = '未知'
df.loc[df.gender == '1', 'gender'] = '男性'
df.loc[df.gender == '2', 'gender'] = '女性'
# 根據(jù)性別分組
gender_message = df.groupby(['gender'])
# 對分組后的結(jié)果進行計數(shù)
gender_com = gender_message['gender'].agg(['count'])
gender_com.reset_index(inplace=True)
# 餅圖數(shù)據(jù)
attr = gender_com['gender']
v1 = gender_com['count']
# 初始化配置
pie = Pie(init_opts=opts.InitOpts(width="800px", height="400px"))
# 添加數(shù)據(jù),設(shè)置半徑
pie.add("", [list(z) for z in zip(attr, v1)], radius=["40%", "75%"])
# 設(shè)置全局配置項,標(biāo)題、圖例、工具箱(下載圖片)
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": {}}))
# 設(shè)置系列配置項,標(biāo)簽樣式
pie.set_series_opts(label_opts=opts.LabelOpts(is_show=True, formatter=":go7utgvlrp%"))
pie.render("抖音大V性別分布情況.html")
02 點贊數(shù)

點贊數(shù)TOP10,除了「小團團」和「毒舌」,其他都是新聞媒體類的大V。
今年因為疫情,有很多新聞在抖音上都是第一時間傳播,所以影響力比較大,點贊也就比較多了。
記得「四川觀察」還被評論區(qū)調(diào)侃為四處觀察,意思是發(fā)布消息非??臁?br>

好奇為什么會有100萬點贊數(shù)的大V,小F的抖音號都有20w+的贊。
最后發(fā)現(xiàn)是第三方監(jiān)測收錄的問題,下次可以直接剔除這批數(shù)據(jù)。
點贊破億的有500多個大V,1000萬到5000萬點贊數(shù)的大V人數(shù)最多。
可視化代碼如下。
def create_likes(df):
# 排序,降序
df = df.sort_values('likes', ascending=False)
# 獲取TOP10的數(shù)據(jù)
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="800px", height="400px"))
# x軸數(shù)據(jù)
bar.add_xaxis(list(reversed(attr.tolist())))
# y軸數(shù)據(jù)
bar.add_yaxis("", list(reversed(v1)))
# 設(shè)置全局配置項,標(biāo)題、工具箱(下載圖片)、y軸分割線
bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V點贊數(shù)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)))
# 設(shè)置系列配置項,標(biāo)簽樣式
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="right", color="black"))
bar.reversal_axis()
bar.render("抖音大V點贊數(shù)TOP10(億).html")
def create_cut_likes(df):
# 將數(shù)據(jù)分段
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()
# 獲取數(shù)據(jù)
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)
bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V點贊數(shù)分布情況(萬)", 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("抖音大V點贊數(shù)分布情況(萬).html")
03 粉絲數(shù)

「人民日報」和「央視新聞」粉絲都破億了。
和去年的抖音數(shù)據(jù)一對比,「熱巴」還少了幾十萬的粉絲,陳赫倒是漲了不少粉絲。
今年直播帶貨火熱,李佳琦排入前十,也不足為奇,畢竟帶貨一哥。

再來看一下大V們粉絲數(shù)的分布情況。

5000萬以上56個,妥妥的大佬。
200w~500w的人數(shù)最多,好多一時爆火的博主,一段時間后也基本不怎么漲粉了。
可能都停留到了這里,比如小F以前刷過的「三支花」,想不明白這都能火...
這里的可視化代碼和上面差不多,就不放出來了。
公眾號回復(fù)「抖音」,即可獲取完整代碼!
04 評論數(shù)TOP10

抖音視頻的評論區(qū)也是比較有意思的地方。
比如刷劇催更的,「趕緊去更新,都過了十幾分鐘了,生產(chǎn)隊的驢都不敢休息這么久」。
還有五只瘋狂搖頭的貓,也占領(lǐng)了評論區(qū)一段時間。

小F只能說,太魔性了~
總的來說,媒體類的視頻評論較多。
05 分享數(shù)TOP10

抖音的分享是視頻對外傳播的一個方法,可以讓更多的人看到視頻。
從數(shù)據(jù)上看,大家還是比較喜歡分享新聞類以及美食類的視頻。
可能過年疫情,居家一個月的時間,除了葛優(yōu)躺看新聞,就是吃吃吃。
每個人,也就都有了一個成為大廚的夢想。
06 各類型點贊數(shù)/粉絲數(shù)匯總分布圖


記得曾經(jīng)一位大佬說過,抖音這個產(chǎn)品是消磨你時間的(Kill Time),而不是節(jié)約時間(Save Time),技術(shù)稍微深一點的視頻基本上生存不下去。
由上面的矩形樹圖可以知道,大家都喜歡「美女」類型的視頻,畢竟誰不喜歡漂亮妹子呢~
比如說深情看銅人的妹子、高考送滿天星的妹子,刀小刀等等,妹子爆火的視頻太多了...
另外「搞笑」、「游戲」、「劇情」類的視頻也比較吸引人,妥妥的Kill Time。
可視化代碼如下。
def create_type_likes(df):
# 分組求和
likes_type_message = df.groupby(['category'])
likes_type_com = likes_type_message['likes'].agg(['sum'])
likes_type_com.reset_index(inplace=True)
# 處理數(shù)據(jù)
dom = []
for name, num in zip(likes_type_com['category'], likes_type_com['sum']):
data = {}
data['name'] = name
data['value'] = num
dom.append(data)
print(dom)
# 初始化配置
treemap = TreeMap(init_opts=opts.InitOpts(width="800px", height="400px"))
# 添加數(shù)據(jù)
treemap.add('', dom)
# 設(shè)置全局配置項,標(biāo)題、工具箱(下載圖片)
treemap.set_global_opts(title_opts=opts.TitleOpts(title="各類型抖音大V點贊數(shù)匯總圖", pos_left="center", pos_top="5"),
toolbox_opts=opts.ToolboxOpts(is_show=True, feature={"saveAsImage": {}}),
legend_opts=opts.LegendOpts(is_show=False))
treemap.render("各類型抖音大V點贊數(shù)匯總圖.html")
07 平均視頻點贊數(shù)/粉絲數(shù)TOP10


「李現(xiàn)」作為2019年的頂級流量,登頂?shù)谝?,沒啥問題。
其他的博主小F一個也沒關(guān)注過。
去搜索了一下,發(fā)現(xiàn)大部分賬號只有一兩個視頻。
看了評論區(qū),發(fā)現(xiàn)原來號被賣掉了,有可能是大V和公司分手了,畢竟現(xiàn)在好多做網(wǎng)紅的公司,不火就下一位。

另一種就是個人轉(zhuǎn)讓賬號,變現(xiàn)賺錢跑路咯。
可視化代碼如下。
def create_avg_likes(df):
# 篩選
df = df[df['videos'] > 0]
# 計算單個視頻平均點贊數(shù)
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="800px", height="400px"))
# 添加數(shù)據(jù)
bar.add_xaxis(list(reversed(attr.tolist())))
bar.add_yaxis("", list(reversed(v1)))
# 設(shè)置全局配置項,標(biāo)題、工具箱(下載圖片)、y軸分割線
bar.set_global_opts(title_opts=opts.TitleOpts(title="抖音大V平均視頻點贊數(shù)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)))
# 設(shè)置系列配置項
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="right", color="black"))
# 翻轉(zhuǎn)xy軸
bar.reversal_axis()
bar.render("抖音大V平均視頻點贊數(shù)TOP10(萬).html")
08 抖音大V分布情況

可以看出西藏一個大V都沒有,所以沒有顏色。
廣東、浙江、四川位列前三。
可視化代碼如下。
def create_province_map(df):
# 篩選數(shù)據(jù)
df = df[df["country"] == "中國"]
df1 = df.copy()
# 數(shù)據(jù)替換
df1["province"] = df1["province"].str.replace("省", "").str.replace("壯族自治區(qū)", "").str.replace("維吾爾自治區(qū)", "").str.replace("自治區(qū)", "")
# 分組計數(shù)
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="800px", height="400px"))
# 中國地圖
map.add("", [list(z) for z in zip(df_province, df_count)], "china")
# 設(shè)置全局配置項,標(biāo)題、工具箱(下載圖片)、顏色圖例
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": {}}),
# 設(shè)置數(shù)值范圍0-600,is_piecewise標(biāo)簽值連續(xù)
visualmap_opts=opts.VisualMapOpts(max_=600, is_piecewise=False))
map.render("抖音大V省份分布情況.html")
省份看完了,來看一下城市TOP10吧。

北京遙遙領(lǐng)先,大V的聚集地。
杭州盛產(chǎn)網(wǎng)紅的城市,位列第二。
可視化代碼如下。
def create_city(df):
df1 = df[df["country"] == "中國"]
df1 = df1.copy()
df1["city"] = df1["city"].str.replace("市", "")
df_num = df1.groupby("city")["city"].agg(count="count").reset_index().sort_values(by="count", ascending=False)
df_city = df_num[:10]["city"].values.tolist()
df_count = df_num[:10]["count"].values.tolist()
bar = Bar(init_opts=opts.InitOpts(width="800px", height="400px"))
bar.add_xaxis(df_city)
bar.add_yaxis("", df_count)
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("抖音大V城市分布TOP10.html")
看完國內(nèi),就應(yīng)該是國外了。
抖音上有著不少漢語講得非常好的「歪果仁」。

美國居第一,不少在美國的華人會分享他們在美國生活的一些事情。
國內(nèi)也有人感興趣這方面的東西,看看國外的月亮究竟圓不圓。
哈哈說笑了,其實是讓我們了解國外的生活。
09 抖音大V畢業(yè)學(xué)校TOP10
北影、中傳、浙傳、中戲、上戲、央美,妥妥的演藝圈大佬。
通過代碼查詢一下大V們的認(rèn)證情況。
df1 = df[(df["custom_verify"] != "") & (df["custom_verify"] != "未知")]
df1 = df1.copy()
df_num = df1.groupby("custom_verify")["custom_verify"].agg(count="count").reset_index().sort_values(by="count", ascending=False)
print(df_num[:20])
得到結(jié)果如下。

都是需要表演表達(dá)天賦的~
10 抖音大V簡介詞云

可以看到大部分大V都留下了商務(wù)合作的信息,利好內(nèi)容創(chuàng)作者,如此才能雙贏。
據(jù)統(tǒng)計,在抖音2200萬以上創(chuàng)作者實現(xiàn)了超過417億元的收入。
從創(chuàng)作到創(chuàng)益,這句話抖音講的很好。
可視化代碼如下。
def create_wordcloud(df, picture):
words = pd.read_csv('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('douyin.png')
# 使用抖音背景色
alice_coloring = np.array(Image.open(r"douyin.png"))
image_colors = ImageColorGenerator(alice_coloring)
wc = WordCloud(
background_color='white',
mask=backgroud_Image,
font_path='方正蘭亭刊黑.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)
# 看看詞頻高的有哪些
process_word = WordCloud.process_text(wc, text)
sort = sorted(process_word.items(), key=lambda e: e[1], reverse=True)
print(sort[:50])
plt.imshow(wc)
plt.axis('off')
wc.to_file(picture)
print('生成詞云成功!')
/ 03 / 總結(jié)
好了,本期的文章到此就結(jié)束。
詞云圖不是太好看,下次試一下stylecloud庫~
相關(guān)代碼及文件我已上傳公眾號,回復(fù)「抖音」即可獲取。
------------------- End -------------------
往期精彩文章推薦:

歡迎大家點贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請在后臺回復(fù)【入群】
萬水千山總是情,點個【在看】行不行
/今日留言主題/
隨便說一兩句吧~~
