需求1:找社区
有一份数据部分如下,比如:刘备和关羽有关系,说明他们是一个团伙,刘备和张飞也有关系,那么刘备、关羽、张飞归为一个社区,以此类推。
在python中这是典型的查找连通图的问题,直接的思路是使用现成的包直接调用求解连通图的算法即可。
结果:
使用networkx我们还可以将图绘制出来:
需求2:统一用户识别
上述需求在使用现成的图算法的情况下还是非常简单的,下面再看看另一个问题:
每一行代表广告平台接受到的用户访问数据,但是广告商获取到唯一标识不总是一样,有时可以获取到mac地址,有时是手机号,有时设备码,这些唯一标识字段虽有缺失,但都属于同一个用户,现在需要把属于同一用户的数据找出来,并将标签进行合并。
对于这个需求,我的思路是按照每个主键列分别分组,将唯一的行号索引作为关联关系的边,从而得到归属同一用户对应的行号。
首先创建数据:
构建图的顶点和边:
绘制看看效果:
可以看到,有联系的行已经顺利的关联到一起。
下面我们根据连通顶点的索引值对原始的datafream进行分组:
结果:
然后将每个切片合并,下面以最后一个切片为例测试一下:
下面整理一下完整代码:
结果:
可以看到已经顺利的得到我们想要的结果。