当前位置: 首页 > 科技观察

多亏学习了这个Python库,我一夜之间拿下了一个传销……

时间:2023-03-16 11:34:26 科技观察

》这是他们窝点电脑导出的一段数据,你看看能不能找到什么蛛丝马迹,我待会儿找找看”“几个人问问题。”王队丢给我一个U盘,拿起饭盒胡乱塞了几口饭,然后拿起帽子快步走出了办公室。今晚,根据我们的情报,我们到一个传销窝点进行抓捕行动,带回了十几个人。但现场没有找到重要证据,被抓的几个人也保持沉默。现在无从知晓他们是否还有其他窝点,或者谁是他们的上线,操作一度陷入僵局,这时候我手里的文件可能会成为破局的关键,我开始观察这个人员名单:invite_id字段不重复,和人名应该是一对一的关系;而invited_id重复了很多次,基本上就是invite_id中出现过的数据。所以我们基本可以推断这是一个list记录线上线下关系传销组织的臀部。有上百条数据,可见这不是一个小型的犯罪组织。不到一个小时,王队就回来了。“没用的,还是个死鸭子。”对王在椅子上坐下,看了一眼时间。快十二点了。“那数据呢,有没有发现什么线索?”“这是一个非常庞大的组织,总共有数百名成员,我们现在可能只是抓住了冰山一角。”“你说什么?”不对,但正因如此,我们现在必须要抓紧时间了。”王队走到我的办公桌前,“我们现在的任务是先找到他们的上线,先抓到小偷。不过今晚抓到的那群人查不到什么,虽然可以确定他们的身份,但是他们之间的关系,暂时还不能确定。”“你是说他们之间的关系?”突然想起前段时间看到的python库networkx,这次说不定能派上用场。“交给我吧,给我五分钟。"首先用pandas导入文件中的数据,过滤掉我们需要的部分:df=pd.read_excel('./doc/1_evidence.xls')df=df.loc[:,['id','name','invite_id','invited_id']]df.columns=['id','title','to','from']然后调用networkx库生成层级关系图并导出:G=nx。from_pandas_edgelist(df,'from','to',create_using=nx.DiGraph())nt=net.Network('960px','1280px',directed=True)nt.from_nx(G)nt.show('1_evidence.html')这样就得到了这个文件对应的层级关系图,下线和下线的关系瞬间一目了然:兑王神色一喜,随即又恢复了正经:“阿仁'你是不是有点华而不实,虽然看起来很直观,但是你能从里面看出这个组织的最高领导人是谁吗?“我当然不介意,最高层是图中网络的根节点,肯定没有其他点指向它,所以我们只需要遍历所有节点,找到一个in-degreeof0.#找到根节点top_node=[]fornode,degreesinG.in_degree():ifdegrees==0:top_node.append(node)print('BigBoss:',top_node)"BigBoss:[100000]”出现在屏幕上这样的输出。”100000号在表中没有对应的人,但是100000下只有一个离线号162385,他应该是这个组织的负责人。“是的,这就是我想要的!”我会请其他同事查到这个人的资料,你继续研究资料,把和这个人关系密切的人都找出来!“这应该不是问题,既然找到了根节点,我们就可以得到所有节点所在的层数。”#设置所有节点层级l=nx.shortest_path_length(G,100000)nx.set_node_attributes(G,l,'level')#计算每个层级的人员数量data={}fornode,levelinl.items():iflevelindata.keys():data[level].append(node)else:data[level]=[node]forlevel,nodesindata.items():print(level,len(nodes))这组织已经开发了总共36层。想想还真是让人惊出一身冷汗。还好同事及时发现了。然后根据级别给节点上色,方便观察:#为G.nodes中的节点添加颜色:G.nodes[node]['title']=str(node)level=G.nodes[node]['level']iflevel==0:G.nodes[node]['color']='red'eliflevel==1:G.nodes[node]['color']='orange'eliflevel==2:G.nodes[node]['color']='yellow',可以看到162385这个人只有两个下线,而这两个下线各自又发展了其他几十个下线。想想还是蛮有意思的。“找到了!”对王猛地推开办公室的门。“那个人找到了,他是今晚被抓的那群人之一,他的两个下线也在,他们都承认现在正在重点审查。”看来实际情况和我的推测是完全一致的,感谢这份榜单。“今晚你做的很好!”王队过来拍了拍我的肩膀。“但这还没有结束,根据他们的供述,档案中包含了他们组织内所有人员的信息。现在你可以查出他们组织的最下线成员,我们会立即根据信息安排针对性抓捕。”和上一个差不多,不过这次需要遍历所有节点的出度,然后倒序排序,取前几项即可。#为前10个离线目标添加颜色degrees=G.out_degree()top_nodes=sorted(degrees,key=lambdax:x[1],reverse=True)[:10]print(top_nodes)fornodeintop_nodes:G.nodes[node[0]]['color']='green'然后给目标节点加上颜色方便观察,最后得到这样的关系图:“干得好,就抓这几个人,相当于切断这个组织的大动脉,剩下的可以慢慢完成。”王队合上文件,笑着对我说道。“没想到你还有这个本事,你真是牛逼啊!”“今天钓到的三条大鱼,试炼结果如何?”比起其他的事情,我还是对案件本身更感兴趣。“别提了,我都快笑死了,三个人看到证据,都慌了,开始互相推卸责任,老大说同伙都是另外两个人带进来的,他并没有参与其中,另外两个说骗局都是老板搞的,策划都是打工的,到现在还在吵架……”