微信怎么看共同好友多少个群聊 微信怎么看共同好友多少个( 五 )

这个计算结果是,"Tony Parker" 和 Tim 有 5 个共同好友 , 最为亲密 。
fof.player.name
NrOfMutualF
Tony Parker
5
Dejounte Murray
4
Manu Ginobili
3
Marco Belinelli
3
Danny Green
2
Boris Diaw
1
LaMarcus Aldridge
1
Tiago Splitter
1
下面 , 咱们通过可视化来验证一下这个结果吧!
先看看每一个好友的共同好友 (f:) 都是谁?
MATCH (start:player{name: "Tim Duncan"})-[:`follow`]-(f:player)-[:`follow`]-(fof:player),(start:player)-[:`follow`]-(fof:player)RETURN fof.player.name, collect(DISTINCT f.player.name);结果如下:
fof.player.name
collect(distinct f.player.name)
Boris Diaw
["Tony Parker"]
Manu Ginobili
["Dejounte Murray", "Tiago Splitter", "Tony Parker"]
LaMarcus Aldridge
["Tony Parker"]
Tiago Splitter
["Manu Ginobili"]
Tony Parker
["Dejounte Murray", "Boris Diaw", "Manu Ginobili", "Marco Belinelli", "LaMarcus Aldridge"]
Dejounte Murray
["Danny Green", "Tony Parker", "Manu Ginobili", "Marco Belinelli"]
Danny Green
["Dejounte Murray", "Marco Belinelli"]
Marco Belinelli
["Dejounte Murray", "Danny Green", "Tony Parker"]
下面,我们上可视化工具 ——NebulaGraph Explorer 搞一搞这个结果:
首先,我们把 Tim 的两度好友路径全查出来
MATCH p=(start:player{name: "Tim Duncan"})-[:`follow`]-(f:player)-[:follow]-(fof:player)RETURN p再按照出入度去渲染节点大?。?并选中 Tim 和 Tony,并在两者之间查询 follow 类型边、双向、最多 2 跳的全部路径:
可以看出 Tim 和 Tony 是最亲密的朋友没跑了,而且他们的共同好友也在路径之中:
["Dejounte Murray", "Boris Diaw", "Manu Ginobili", "Marco Belinelli", "LaMarcus Aldridge"]

微信怎么看共同好友多少个群聊 微信怎么看共同好友多少个


朋友圈子里的小群体上面提过由于这份数据集非真实,使得社区发现算法的结果不能得到其中洞察的内涵 。现在我们可以接着这个小的子图,来看看 Tim 的好友中可以如何区分群组、社区呢?
咱们先跑一个 Louvain 、弱联通分量、标签传播看看:
弱联通分量弱联通分量,可以把 Tim 的朋友们大体分割出两、三个相互不连通的部分 , 非常符合连通分量的直观理解和定义 。
微信怎么看共同好友多少个群聊 微信怎么看共同好友多少个


标签传播标签传播,我们可以通过控制迭代次数按需去通过随机的传播划定出不同的划分度,结果可以有一定的区分度:
这是 20 次迭代的图:
微信怎么看共同好友多少个群聊 微信怎么看共同好友多少个


这是 1,000 次迭代
微信怎么看共同好友多少个群聊 微信怎么看共同好友多少个


LouvainLouvain,是一个比较高效、稳定的算法,基本上在这个子图下我们可以在很小的迭代次数下得到很符合直觉的划分:
微信怎么看共同好友多少个群聊 微信怎么看共同好友多少个


新朋友推荐接着前面两度朋友(朋友的朋友)的思路,我们可以很容易把那些还不是朋友的两度朋友作为推荐添加的好友,而排序规则是他们之间的共同好友数量:
MATCH (start:player{name: "Tim Duncan"})-[:`follow`]-(f:player)-[:`follow`]-(fof:player)WHERE NOT (start:player)-[:`follow`]-(fof:player) AND fof != startRETURN fof.player.name, count(DISTINCT f) AS NrOfMutualF ORDER BY NrOfMutualF DESC;

推荐阅读