分析了10万条B站UP主数据后,我知道了成为百万粉丝UP主的一些秘密
Posted 小小明(代码实体)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分析了10万条B站UP主数据后,我知道了成为百万粉丝UP主的一些秘密相关的知识,希望对你有一定的参考价值。
前几天一位好朋友入了B站,问我如何才能成为一名百万粉丝的up主。于是我做了一些分析,知道了成为百万粉丝up主的一些小秘密。还做了一个百万粉丝昵称生成器,给昵称起名提供建议。
这是她的b站视频截图:
关于昵称起名我的想法是把B站这些百万粉丝大佬的昵称分析一下成分构成,根据相关性随机起个名,是不是就有百万粉丝up主昵称的那味了?
在本文发布后的当天,up主已经更新了一个非常炫酷视频:
如何成为拥有百万粉丝UP主?惊现UP主昵称生成器?
链接:https://www.bilibili.com/video/BV1Z64y1Y72m
个人看了这个视频后,对质量表示非常震撼,一看就具有成为百万粉丝up主的潜力,现在关注就是老粉,我先赶紧关注了。
首先我们开始爬取数据:
B站up主信息爬取
直接通过b站首页去爬是很不方便的,这里我找到了两个第三方的提供b站数据的网站,分别是
火烧云数据:https://www.hsydata.com/search/upRank
小小数据:https://xxkol.cn/kol
在登录后,我们只需复制对应的获取数据接口的信息:
然后就使用我个人开发的转换工具可以很方便的获取爬虫代码,详见:
https://pypi.org/project/filestools/
通过以下命令安装后即可直接使用:
pip install filestools -U
然后打开命令行执行如下命令:
curl2py
此时爬虫代码就已经存在于我们的剪切版中,然后就可以直接粘贴到代码编辑窗口了。
如果有不喜欢使用命令行的小伙伴,还可以将上面复制到的curl命令粘贴替换下面的xxx:
from curl2py.curlParseTool import curlCmdGenPyScript
curl_cmd = """xxx"""
output = curlCmdGenPyScript(curl_cmd)
print(output)
替换xxx为游览器复制的内容后,运行上面的代码就可以直接得到能够爬取该网站数据的代码拉。
稍稍改改,使用pandas解析一下,立马就获取到需要的数据:
然后将上面的代码改成循环,加个每次1-8秒的随机延迟,很快就爬完了10万条数据。
数据保存代码采用:
import os
file = "b站up主粉丝量top10万.csv"
df.to_csv(file, index=False, mode='a',
header=not os.path.exists(file), encoding="u8")
数据分析
数据读取与预处理
下面我们读取并简单分析一下:
import pandas as pd
names = ["名称", "性别", "签名", "视频数量","粉丝数",
"播放数", "点赞数", "总充电人数", "月充电人数",
"生日", "category1", "category2", "tags"]
df = pd.read_csv("b站up主粉丝量top10万.csv", usecols=[
2, 3, 5]+list(range(9, 16))+[22, 23, 24], header=0, names=names, low_memory=False)
df.drop_duplicates(inplace=True)
df.sort_values("粉丝数", ascending=False, inplace=True)
df
总共读取了10万条数据。
个人觉得B站官方自己的号就没有分析的必要直接剔除:
df = df[~df.名称.str.contains('哔哩哔哩')]
df.shape[0]
99955
剔除了45个名字含有哔哩哔哩的昵称。
然后剔除粉丝量少于1万的:
df = df.query("粉丝数>=10000")
df.shape[0]
59287
说明b站粉丝过万的up主有5.9万名。
为了后面编码方便,我们将粉丝数转换为以万为单位:
df.粉丝数 //= 10000
不确定各级别的万粉up主的特征是否有区别,这里我对粉丝数做一个简单的分级:
df["粉丝数范围"] = pd.cut(df.粉丝数, bins=[1, 10, 50, 100, 2000],
labels=["万粉", "百万前期","百万后期", "百万粉"], right=False)
将最大值设置为2000,是因为有两个粉丝量达到千万的非官方up主,但最大值不会超过2000万。这两人分别是罗翔说刑法和老番茄,个人不太理解做游戏解说的为啥粉丝量能达到千万,是因为B站大佬用户群体喜欢看游戏解说吗?哈哈。
那么我们首先分析:
做什么类别的up主更多一些?
对于这些粉丝量过万的up们,他们的领域是哪些呢?
df.category1.value_counts()
生活 14948
游戏 11996
知识 5651
动画 5073
时尚 4209
音乐 4088
影视 2971
娱乐 2924
舞蹈 1650
美食 1638
数码 1281
鬼畜 783
科技 758
国创 477
纪录片 215
番剧 196
资讯 148
动物圈 127
知识区 24
电视剧 11
电影 11
汽车 8
运动 4
Name: category1, dtype: int64
可以看到生活和游戏类别的万粉up主是最多的。
不同粉丝量级别的up主是否存在差异?
t = pd.crosstab(df.category1, df.粉丝数范围)
t.style.background_gradient("Reds", axis=0)
根据颜色可以看到依然是生活和游戏类别的up主的最多,动画和知识的up主也不少,说明B站也有很多爱学习的好童鞋。
性别差异是否会影响成为万粉up的概率?
先看总体:
df.性别.value_counts()
保密 65900
男 20452
女 13648
Name: 性别, dtype: int64
本以为女性应该更容易成为b站高粉u主,但从整体结果来看,男生人数比女生多了近50%,男生似乎更容易成为b站高粉u主。
但也可能是女生更倾向于选择保密,导致男生看起来显著比女生多,实际比例是差不多的。
引入粉丝量范围维度拆分后进一步分析:
t = pd.crosstab(df.粉丝数范围, df.性别)
t = t.eval("男女比=男/女")
t.style.background_gradient("Reds", axis=1)
从结果上来,随着up主级别的提高,男女比逐渐提高。
这种现象说明,女生更倾向于选择保密的假设基本可以排除。**对于整体来说,男生更能够驾驭更多的粉丝,更容易成为百万粉丝up主。**女生虽然有些优势,但总体来说还是比男生稍微逊色一点。
当然还可以继续假设,是因为女生更倾向故意选择男生避免别人知道自己性别。我也没有证据去反驳这个假设。
万粉UP主视频数量分布分析
那么,要成为一个万粉以上的up主,到底该发表多少个视频合适呢?
df.视频数量.describe()
count 59167.000000
mean 258.358713
std 1379.662258
min 0.000000
25% 38.000000
50% 89.000000
75% 213.000000
max 180033.000000
Name: 视频数量, dtype: float64
可以看到,从整体来说平均是258个视频,最多的达到了18万个视频,最少的一个视频都没有发表。
看到这里,你是否产生了跟我一样的疑问,什么样的up主一个视频都不发,粉丝也能过万?什么样的up像神仙一样能发上万个视频?
我们分别找出来看看:
df.query("视频数量 > 10000")
原来主要都是咨询类的号。
看下视频数量为0的:
df.query("视频数量 == 0")
还挺多的,共595条。但是为什么他们的播放数又有这么多呢?
我猜可能是被封了?那么看下播放数也为0 的:
df.query("视频数量 == 0 and 播放数==0")
这就不是太懂了。有兴趣验证原因的童鞋,可以看下原表其他字段验证一下。
加入粉丝数范围维度再细看:
t = df.groupby("粉丝数范围")["视频数量"].apply(lambda s: s.describe()).unstack(0)
t.style.background_gradient("Reds", axis=1)
目前唯一可以确定的就是粉丝量级别越高的up主,平均视频数量是越多的,勤更是一个高粉up主的基本素质,想成为百万粉丝的up主,完成500个以上的高质量的视频最佳。
up主生日分布情况
先看整体:
df.生日.str[:2].value_counts()
01 7620
10 2636
12 2453
08 2426
11 2391
09 2273
07 2239
06 2203
05 2180
03 2170
02 2151
04 2047
Name: 生日, dtype: int64
我们发现1月份生日的up主显著多很多。
再加入粉丝范围维度拆分看看:
t = pd.crosstab(df.粉丝数范围, df.生日.str[:2])
t.style.background_gradient("Reds", axis=1)
可以看到1月份生日的up主显著多于其他月份,难道是一月份出生的人更适合做up主吗?
不过也不排除是因为b站选生日时默认是1月份的,大部分都直接选了默认,从而导致了这个现象。
但是第2名10月份往往不受这个因素的影响,说明10月份出生的人,相对更适合做up主一些。
我暂时就只分析这些维度,有兴趣深挖的童鞋可以继续分析,欢迎各位数据分析大佬提出各丰富的分析维度建议,以及指出本文分析上的逻辑漏洞。
下面我们进行我们的最终目标,昵称分析,最终做出一个百万粉丝up主的昵称生成器:
百万粉丝up主的昵称生成器
首先筛选出粉丝量达到百万的up主:
df = df.query("粉丝数 >= 100")
df.shape[0]
658
共658个百万粉丝up主。
昵称文本长度频次top10:
name_size = df.名称.apply(len)
name_size.value_counts().head(10)
4 158
5 131
3 88
7 70
6 70
8 50
9 27
10 16
2 16
11 12
Name: 名称, dtype: int64
可以看到昵称长度为4的是最多的,排名前3的长度不超过5,但已经超过了一半的up主。
这说明要成为一名百万粉丝的up主,取一个简短的名称很有必要。毕竟越短的昵称,用户才越好记,才更容易抢占用户心智形成IP。
为了制作一个昵称生成器,我们可以将这些人的昵称分词后组成词组列表:
import jieba
# 分词并扩展提取
names = df.名称.apply(jieba.lcut).explode()
# 过滤长度小于等于1的词并去重
names = names[names.apply(len) > 1].unique()
print(names.shape[0], names)
1068 ['罗翔' '刑法' '番茄' ... '布锅' '伦桑爱' '唱歌']
可以看到结果中共包含1068个长度大于2的词。
那么我们想生成一个长度为4左右的词,只需要随机选两个词即可:
"".join(np.random.choice(names, 2))
'张逗麦克'
这样我们就完成了一个简单粗暴的百万粉丝昵称生成器。生成了一个叫张逗麦克
的昵称。
javascript版百万粉丝昵称生成器
提取出拆分出来的关键词之后,为了方便没有安装python的用户使用,做了一个JavaScript版本的百万粉丝昵称生成器。
复制以下代码粘贴到游览器控制台运行即可:
var items = ['罗翔', '刑法', '番茄', '敬汉卿', '共青团中央', '周六', 'Zoey', '凉风', 'Kaze', '绵羊', '料理', '李子', '老师', '叫何', '同学', '厂长', '木鱼', '水心', '中国', 'BOY', '超级', '大猩猩', 'LexBurner', '观察者', '杰瑞', '某幻君', '央视', '新闻', '原神', 'papi', '大虾', '指法', '芬芳', '张大', '小潮', '院长', '华农', '兄弟', '记录', '生活', '蛋黄派', '伊丽莎白', '暴走', '漫画', '帕梅拉', 'PamelaReif', '硬核', '半佛', '仙人', '美食', '作家', '王刚', '渗透', '社食', '遇记', '日食', '手工', '花少北', '机智', '党妹', '逍遥散', '无穷小', '科普', '日常', '兔叭', '三代', '大祥', '哥来', '花椒', '片片', '大片', '宝宝', 'Baby', '信誓', '蛋蛋', '张召忠', '毕导', 'THU', '纳豆', '奶奶', '一旦', '枯燥', '翔翔', '作战', '三十六', '贱笑', '徐大', 'sao', '泛式', '果仁', '研究', '协会', '拜托', '小翔哥', '努力', 'Lorre', '东尼', 'ookii', '明日', '方舟', '思维', '实验室', '视频', '工作室', '大漠', '叔叔', '阿斗', '归来', '电影', 'TOP', '吃饭', '大王', '刘老师', '逗比', '雀巢', '科技', '美学', '柚子', '字幕组', '镖客', '梦回', '宝剑', '咬人', '孤独', '大腿', '做饭', '芋头', 'SAMA', '黑猫', '厨房', 'po', '纯黑', '吃素', '狮子', '花花', '三猫', 'CatLive', '蜡笔', '小勋', '欣小萌', '李永乐', '官方', '瓶子', '152', 'EdmundDZhang', '嘟督', '不噶油', '排骨', '教主', '才疏学浅', 'yousa', '力元君', '老爸', '评测', '音乐', '私藏', '密子君', '所长', '林超', '崩坏', '第一', '偶像', '爱酱', '毒角', 'SHOW', '回形针', 'PaperClip', '远古时代', '装机', 'TF', '家族', '视角', '冯提', 'hanser', '王者', '荣耀', '新华社', '路人', '局长', '小高姐', '魔法', '调料', '巫师', '财经', 'Warma', '影视', '飓风', '神奇', '木偶', '山下', '智博', '罗汉', '解说', '温柔', 'JUNZ', '姜峰', '真的', '猛男', '舞团', 'IconX', 'YouTube', '听力', '精选', '洛天', '一条', '团团', 'OvO', '盖世', '猪猪', '迷影社', '阿莫', '老皮', 'VFX', '陈睿', '大碗', '老坛', '胡说', '英雄', '联盟', '哲别', '黑桐', '谷歌', '火暴', '王老菊', '开心', '嘴炮', '凤凰', '天使', 'TSKS', '剧社', '账号', '0v0', 'TheRock', 'Johnson', '天天', '卡牌', '手游', '智能', '路障', '疯狂', '杨哥', '鹤吱菌', '文哥', '小艾', '大叔', '韩小四', 'April', '历史', '调研室', '拉宏桑', 'CSGO', '茄子', '虫哥', '文不', '小白', '测评', '倒悬', '橘子', '小贝', '进击', '曼食', '慢语', '公主', '连结', 'ReDive', '枪弹', '轨迹', '孝警', '阿特', 'wlop', '建业', '黄龄', 'TESTV', '频道', '女孩', '为何', '短裙', 'LKs', '怪异', '墨韵', 'Moyun', '神秘', '店长', '贫道', 'AG', '超玩会', '梦泪', '芒果', 'OL', '不正经', '老丝', '1MILLION', 'OFFICIAL', '路温', '1900', 'Uzi', '夹性', '芝士', '见见', 'Zz', '犬来', '八荒', '卡特', '一刀', '有毒', '邪说', '鲲哥', '数学', '星河', 'Yoseya', '斯塔', '奇闻', '观察室', '一只', '小仙', '水无月菌', '英语', '波士顿', '圆脸', '薄海纸', '尼玛', 'zettaranc', '卡布', '周深', '自来', '三木', '直播', '小喇叭', '三无', 'Marblue', '张三', '传奇一生', '胖胖', '墨茶', 'Official', '老戴', '正义', '雕刻', '时光', '客湾', 'Geekerwan', '棉花', '哥哥', 'low', '君热剧', 'Vinheteiro', '海皇', 'vivi', '可爱多', 'doyoudo', '趣测', '口语', '老炮', '儿马', '思瑞', '考研', '刘晓艳', '沈逸', '靖菌命', '里德', 'Jared', 'nya', '一生', '欧阳', '春晓', 'Aurora', '谭乔', '命运', '冠位', '指定', '花泽', '香菜', '小央', '阿幕', '降临', '壮实', 'Hera', '样子', '平平', 'soserious', '吃货', '闭眼', '老板', '长工', '叔贵', 'EyeOpener', '贝尔', '格里尔', 以上是关于分析了10万条B站UP主数据后,我知道了成为百万粉丝UP主的一些秘密的主要内容,如果未能解决你的问题,请参考以下文章