Maison > Article > développement back-end > Grâce à l'apprentissage de cette bibliothèque Python, j'ai éliminé un système pyramidal en une nuit...
"Il s'agit d'une donnée exportée depuis l'ordinateur dans leur tanière. Vous pouvez d'abord voir si vous pouvez trouver des indices, puis j'irai trouver quelques personnes pour poser des questions."
L'équipe Wang m'a lancé une clé USB. Conduisez et récupérez-le. Après avoir fourré quelques bouchées de nourriture dans la boîte à lunch, il prit son chapeau et sortit rapidement du bureau.
Ce soir, sur la base des renseignements, nous nous sommes rendus dans un repaire du MLM pour procéder à une opération d'arrestation et avons ramené plus d'une dizaine de personnes.
Cependant, aucune preuve importante n'a été trouvée sur les lieux, et les quelques personnes arrêtées sont restées silencieuses. Désormais, il n'y a aucun moyen de savoir si elles ont d'autres repaires, ni qui sont leurs agents en ligne, et l'opération est dans une impasse. .
Et le document que j'ai en main en ce moment pourrait devenir la clé pour briser la situation.
J'ai commencé à observer cette liste de personnes : le champ invite_id n'est pas répété et devrait avoir une relation biunivoque avec le nom de la personne alors que invite_id est beaucoup répété, et ce sont essentiellement les données qui ont est apparu dans invite_id.
Nous pouvons donc en déduire qu'il s'agit d'une liste qui enregistre les relations ascendantes et descendantes des organisations MLM. Il existe des centaines de données qui montrent qu’il s’agit d’une grande organisation criminelle.
En moins d'une heure, l'équipe Wang est de retour.
"Cela ne sert à rien, vous êtes toujours un dur parleur." Le capitaine Wang s'assit sur la chaise et jeta un coup d'œil à l'heure. "Comment évoluent les données ? Avez-vous trouvé des indices ?" , mais à cause de cela, nous devons nous dépêcher maintenant. " L'équipe Wang s'est dirigée vers mon poste, " Notre tâche maintenant est de trouver d'abord leur première ligne et de capturer le voleur en premier, mais nous capturerons d'abord le roi. qui est arrivé n'a rien trouvé. Bien qu'ils aient pu confirmer leur identité, ils n'ont toujours pas pu déterminer leur relation. "
" De quoi parlez-vous "Je me suis soudainement souvenu de ce que j'ai vu il y a quelque temps. La bibliothèque python networkx ? Je suis tombé sur cela, cela pourrait être utile cette fois. "Laissez-moi faire, donnez-moi cinq minutes."
Utilisez d'abord pandas pour importer les données dans le fichier et filtrer les parties dont nous avons besoin :
df = pd.read_excel('./doc/1_evidence.xls') df = df.loc[:, ['id','name','invite_id','invited_id']] df.columns = ['id','title','to', 'from']
Appelez ensuite la bibliothèque networkx pour générer un diagramme de relations hiérarchiques et exportez-le :
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')
De cette façon, j'ai obtenu le diagramme de relation hiérarchique correspondant à ce document, et la relation entre les lignes supérieures et inférieures était instantanément claire :
Pendant un instant, l'équipe Wang a eu l'air heureuse, mais est immédiatement revenue au sérieux : « N'êtes-vous pas un peu tape-à-l'œil ? Bien que cela semble très intuitif, pouvez-vous découvrir qui est le sommet de cette organisation ? « Bien sûr, ce n'est pas difficile pour moi. Le sommet est le nœud racine du réseau sur la photo. , et il ne doit y avoir aucun autre point pointant vers lui, il suffit donc de parcourir tous les nœuds et de trouver le point avec un degré 0.# 找到根节点 top_node = [] for node, degrees in G.in_degree(): if degrees == 0: top_node.append(node) print('Big Boss:', top_node)« Big Boss : [100000] » Cette sortie apparaît à l'écran. "Le nombre 100 000 n'a pas de personne correspondante dans le tableau, mais il n'y en a qu'une seule hors ligne sous 100 000 avec le numéro 162385. Il devrait être le leader de cette organisation
"Oui, c'est ce que je veux ! Je le ferai." demandez à d'autres collègues de trouver les informations de cette personne, vous continuez à étudier les données et trouvez toutes les personnes proches de cette personne ! "
Cela ne doit pas être un problème. Maintenant que le nœud racine a été trouvé, nous pouvons obtenir le ! nombre de couches où se trouvent tous les nœuds.
# 设置所有节点级别 l = nx.shortest_path_length(G, 100000) nx.set_node_attributes(G, l, 'level') # 计算每级人员数目 data = {} for node, level in l.items(): if level in data.keys(): data[level].append(node) else: data[level] = [node] for level, nodes in data.items(): print(level, len(nodes))
Cette organisation s'est développée à 36 niveaux. Y penser me fait vraiment transpirer. Heureusement, mes collègues l'ont découvert à temps.
Colorez ensuite les nœuds selon le niveau pour une observation facile :
# 添加颜色 for node in G.nodes: G.nodes[node]['title'] = str(node) level = G.nodes[node]['level'] if level == 0: G.nodes[node]['color'] = 'red' elif level == 1: G.nodes[node]['color'] = 'orange' elif level == 2: G.nodes[node]['color'] = 'yellow'Vous voyez que la personne numérotée 162385 n'a que deux hors-ligne, et chacun de ces deux hors-ligne en a développé des dizaines d'autres. C'est assez intéressant d'y réfléchir. à ce sujet. "Je l'ai trouvé!" L'équipe Wang a ouvert la porte du bureau, "La personne a été retrouvée. Parmi le groupe de personnes arrêtées ce soir, deux de ses subordonnés étaient également à l'intérieur. Ils l'ont tous admis, maintenant en cours d'examen. "Il semble que le la situation réelle est tout à fait conforme à mes spéculations, grâce à cette liste.
"Vous avez fait un excellent travail ce soir!" Le capitaine Wang est venu et m'a tapoté l'épaule. "Mais ce n'est pas encore fini. Selon leurs aveux, le dossier contient toutes les informations personnelles de leur organisation. Vous pouvez maintenant découvrir pour moi les personnes qu'ils ont le plus développées et nous organiserons immédiatement des arrestations ciblées sur la base de ces informations. »
C'est similaire au précédent, mais cette fois je dois parcourir les degrés extérieurs de tous les nœuds, puis les trier dans l'ordre inverse et ne prendre que les premiers.
# 给下线前十的目标添加颜色 degrees = G.out_degree() top_nodes = sorted(degrees, key=lambda x: x[1], reverse=True)[:10] print(top_nodes) for node in top_nodes: G.nodes[node[0]]['color'] = 'green'
然后给目标节点加上颜色,方便观察,最终得到了这样的关系图:
“干得不错,只要再把这几个人抓到,就相当于切断了这个组织的大动脉,后面的慢慢收尾就可以了。”王队把文件合上,笑着对我说。“没想到你还有这本事,真是后生可畏啊!”
“今天抓到的那三条大鱼,现在审出什么结果了?”相对于其他,我还是对案情本身更感兴趣。
“别提了,都快笑死我了。这仨人看见证据直接慌了神,开始互相推卸责任,老大说同伙全是另外两个人拉来的他都没参与,另外俩人说骗局全是老大策划的他们就是手下打工的,现在估计还吵着呢...”
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!