中国原创音乐基地(5sing) 是一个以网友原创音乐为主的音乐平台。与主流音乐平台不同,用户在5sing上并不主要是为了听知名歌手的音乐,而是可以发布自己的原创音乐作品,或者倾听、交流其他用户的音乐作品。正是具备这个特色,所以5sing虽然可能只是个小众平台,也依然聚集了大量的忠实粉丝——热爱音乐、坚持自我内心、不随波主流的小众群体。
鉴于已采集了5sing上约100W的用户信息和歌曲信息,其实可以有不少的数据分析和挖掘空间,不过本文只聚焦于一个细小而明确的问题:
谁是这100W用户中的隐藏核心?
一个很容易想到的角度就是:粉丝数越多的用户就越核心。可是单纯地比较粉丝数就没什么意思了,因为粉丝数只是综合影响力的维度之一,而且只看这一个维度难免有失偏颇。打个比方,一个被100个一线明星关注的大老板的粉丝数很可能远不如一个三线明星的多,然而论影响力显然就是粉丝数较少的大老板要大。
这就涉及到PageRank算法的基本思想了:在一个网络中,被越多优质的节点(网页)指向的节点就越优质。
PageRank算法与Google的关系,以及它的数学推导什么的就先不说了(以后有时间有心情再说),我们直接上代码搞case study……
为了简单起见,这里做了如下约束,以粉丝数top100的用户为样本,观察他们所关注的单向社交网络,通俗点说就是获取这100个用户都关注了什么人;并且假设这100个用户都是平等的,不因为每个人的粉丝数、作品数的差异而赋予不同的权重,亦即所有的权重都是1。
先看看粉丝数最多的是哪些用户(为了图形的可读性,这里只放前50个):
5sing粉丝数top50歌手
我们可以看到前2名用户的粉丝数遥遥领先,因为他们是官方号(裁判在哪里)……
爬下的原始数据长这样:
用户单向关注网络
其中左边是关注人的ID,右边是被关注人的ID。
然后基于用户两两间的单向关注关系,创建邻接矩阵,迭代多次至收敛,就可以算出各个用户的PageRank分值(此处省略500字加50行数学公式……),分值最高的人影响力最大,也就是我们要找的隐藏核心。
当然这里依然为了简单(toulan)起见,并没有从零开始实现算法(虽然也简单),而是直接调包:
v <- vector()
for(i in 1:nrow(df)){
v <- c(v,df$rel_from[i])
v <- c(v,df$rel_to[i])
}
g <- graph(v,directed = T)
result <- page_rank(g)
result$vector %>% sort(.,decreasing = T) %>% head(1)
1090120
0.0003481353
最后计算出的结果,pagerank分值最高的用户id是1090120
,分值是0.0003481353
。
这个人是谁?
根据ID去查用户名,这个人是叶洛洛
。
从前面的柱形图里,你可能至少要花半分钟才能找到粉丝数排名20开外的叶洛洛,为什么他是隐藏核心?
我们先从数据的角度来看:
select rel_from,name from sing_top100_relation a
left join user_ids_5sing b on a.rel_from = b.uid
where rel_to = "1090120" order by fans_num desc;
叶洛洛的大V粉丝
可以看到,top50榜单中有不少人都是他的粉丝。这也印证了PageRank的思想:你本身粉丝数不是最多不要紧,只要有一堆粉丝数很多的人是你的粉丝,那你就很牛逼了!(虽然本文并没有用粉丝数作权重……)
其次从业务的角度来看:
如果你不混古风圈,如果你不泡5sing,也许你就不知道叶洛洛的身份:5sing编辑
。所以他的粉丝数尽管不像5sing音乐人
和网站管理员
这么高调,但其实也是官方人员啊……尽管我对他了解并不多,但我也略知他长期活跃于古风圈,也与不少古风圈有名的歌手、5sing的核心大V交好,所以现在能理解为什么他是隐藏核心了吧?
最后容我开一句不知是否冒犯的玩笑(如果是,我道歉),以作为本文的结论收尾:
在一个有限的群体中,所谓隐藏核心,并不是表面上最光鲜的人,而是握有最多的资源、最接近制定规则阶层的人。
网友评论