对于 Bilibili 抽奖的数据分析
最近开始深入数据分析的坑,虽然在学了 FIT1043,但这门课是第一年的课,加上比较水 (但又是必修课),
就没有学到东西,最近闲来无事,正好在哔哩哔哩参加了@毕导 THU
的抽奖, 并且有 33 个名额,所以想着来做一次分析。
声明下,以下分析均为个人观点。并且数据仅供学习使用
前期准备
分析 API
首先,需要获取数据,在抽奖动态页面中进行抓包,可以看到一个对/lottery_notice
的请求,查看内容可以看到所有中奖用户的 uid,
|
|
以及,打开用户动态,可以看到另一个请求/space_history
,这个 API 返回了,用户的信息和发送、转发的动态。
|
|
接着获取转发抽奖动态所有人的信息
which 不太可能,一共有 18.7 万人转发,借口最多给 640 人,但我看了下数据,动态是 2020-05-27 18:02:12 发送的,第一个非
@毕导 THU
转发是 2020-05-27 18:07:38,最后一个转发 2020-06-06 13:36:59,所以可以当作 sample 使用 (么?)但是,我发现评论接口没有限制,大概有 1.6 万人的评论,因为这是个抽奖动态,可以认定评论的人都参与了转发 (即抽奖),于是可以爬取评论,然后进行对比
数据清理
然后需要进行数据清理,通过获奖的 api,可以提取出所有用户的 uid,
|
|
以及将用户信息和发送、转发的动态提取出来
在这里,我只提取了我认为可能会有影响的因素
class
Card
是转发和回复的内容
|
|
随后,将信息写入 csv 文件,以便之后使用 pandas 进行分析
分析
|
|
prize_users
是中奖用户,all_users
是所有参与的用户,(因为接口问题,无法获取所有用户,同时评论有 1.6 万人,但因为懒怕被 ban ip 只先获取了 1.2 万人)
all_users
不包括发布抽奖的 up 主本人
数据定义
|
|
uid | level | vip_type | vip_status | time_after |
---|---|---|---|---|
21696250 | 5 | 0 | 0 | 1767 |
29332457 | 5 | 1 | 0 | 580531 |
94078703 | 5 | 2 | 1 | 5347 |
17660688 | 5 | 0 | 0 | 63184 |
22417036 | 5 | 1 | 1 | 15013 |
- uid,用户的 b 站 id
- level,用户等级
- time_after,在抽奖动态发送多少秒后转发的。
对于 vip_type 和 vip_status,通过openbilibili
的/app/admin/main/vip/model/vip.go
中可以看到这项数值的定义。
|
|
prize_users 数据详情
uid | level | vip_type | vip_status | time_after | |
---|---|---|---|---|---|
count | 3.300000e+01 | 33.000000 | 33.000000 | 33.000000 | 33.000000 |
mean | 1.632111e+08 | 4.484848 | 0.909091 | 0.484848 | 313364.333333 |
std | 1.724799e+08 | 0.870388 | 0.842750 | 0.507519 | 320576.262967 |
min | 4.134700e+06 | 2.000000 | 0.000000 | 0.000000 | 281.000000 |
25% | 2.525509e+07 | 4.000000 | 0.000000 | 0.000000 | 3331.000000 |
50% | 4.962842e+07 | 5.000000 | 1.000000 | 0.000000 | 199071.000000 |
75% | 2.941396e+08 | 5.000000 | 2.000000 | 1.000000 | 597423.000000 |
max | 5.098047e+08 | 6.000000 | 2.000000 | 1.000000 | 812534.000000 |
all_users 数据详情
uid | level | vip_type | vip_status | time_after | |
---|---|---|---|---|---|
count | 1.263000e+04 | 12630.000000 | 12630.000000 | 12630.000000 | 12630.000000 |
mean | 2.243269e+08 | 3.829295 | 0.542280 | 0.236817 | 250477.374822 |
std | 1.743140e+08 | 0.999087 | 0.726571 | 0.425146 | 289099.261204 |
min | 1.300000e+01 | 1.000000 | 0.000000 | 0.000000 | 212.000000 |
25% | 3.654792e+07 | 3.000000 | 0.000000 | 0.000000 | 10677.750000 |
50% | 2.382717e+08 | 4.000000 | 0.000000 | 0.000000 | 59733.500000 |
75% | 3.855455e+08 | 5.000000 | 1.000000 | 0.000000 | 583955.000000 |
max | 6.022326e+08 | 6.000000 | 2.000000 | 1.000000 | 852418.000000 |
数据分析
用户等级分布
左边的是得奖用户的等级划分,右边则是所有用户的等级。
得奖用户中的 5 级账号是明显多余其他等级的,占总共的 50% 以上。
并且中奖用户的平均等级是 4.48,而所有用户等级的平均数是在 3.82, (std 相差 .129),即中奖用户等级偏高。
大会员占比
可以看到得奖用户的大会员状态占比基本持平,但可以看到没有大会员的用户是有大会员用户数的 3 倍,即大会员会对抽奖结果造成影响 (特殊加成),但是,年度大会员和月度大会员似乎没有特殊加成
转发时间
X轴是以小时
为单位的,即转发时间为抽奖动态发布的 x 小时
中奖用户转发的时间和大部分用户发帖的时间基本一致,
但在这前 5 个小时转发
的图里,可以看到有 11 个 (33%) 中奖用户的转发时间是在前 2 个小时,似乎在抽奖动态发出后半个小时和一个小时间转发的中奖率更大。
结论
怀疑(不用怀疑) 数据有缺失,导致结果不准
就如我文章前头说的,都是个人观点,因为只是学习使用,分析啥的都很渣。
但通过这些数据,得出的结论是,大会员会有特殊加成,前 2 个小时转发也会有加成 (大概).