Rumah > Artikel > pembangunan bahagian belakang > Terima kasih kerana mempelajari perpustakaan Python ini, saya menghapuskan skema piramid dalam satu malam...
"Ini ialah sekeping data yang dieksport daripada komputer di sarang mereka. Anda boleh melihat jika anda boleh mencari sebarang petunjuk dahulu, dan kemudian saya akan pergi mencari beberapa orang untuk bertanya soalan." Wang melemparkannya kepada saya Pemacu kilat USB, dia mengambil kotak makan tengah hari dan memasukkan beberapa suap nasi ke dalamnya, kemudian mengambil topinya dan berjalan keluar dari pejabat dengan cepat.
Berdasarkan risikan, kami pergi ke sarang MLM untuk menangkap sedozen orang malam ini.
Walau bagaimanapun, tiada bukti penting ditemui di tempat kejadian, dan beberapa orang yang ditahan terus berdiam diri Sekarang tidak ada cara untuk mengetahui sama ada mereka mempunyai sarang lain, dan mereka juga tidak tahu siapa pemberi maklumat mereka dan di mana mereka berada. .Kebuntuan dicapai seketika.
Dokumen di tangan saya pada masa ini mungkin menjadi kunci untuk memecahkan keadaan.
Saya mula memerhatikan senarai orang ini: medan invite_id tidak diulang dan harus mempunyai hubungan satu dengan satu dengan nama orang tersebut manakala invited_id diulang a lot, dan pada asasnya Ia adalah data yang muncul dalam invite_id.
Jadi pada dasarnya kita boleh membuat kesimpulan bahawa ini adalah senarai yang merekodkan hubungan atasan dan bawahan organisasi MLM. Terdapat ratusan keping data, yang menunjukkan bahawa ini adalah organisasi jenayah yang besar.
Tidak sampai sejam, Pasukan Wang kembali.
"Tak ada guna, saya masih itik yang degil." "Bagaimana anda melihat data itu? Adakah anda telah menemui sebarang petunjuk?"
"Kamu betul, tetapi kerana ini, kita mesti cepat sekarang." Pasukan Wang berjalan ke stesen kerja saya, "Tugas kita sekarang ialah mencari barisan teratas mereka dahulu dan menangkap pencuri. Tangkap raja. pertama. Tetapi tidak ada orang yang ditangkap malam ini dapat menjumpai apa-apa Walaupun identiti mereka boleh ditentukan, hubungan antara mereka tidak dapat ditentukan buat masa ini ?" Saya tiba-tiba teringat perpustakaan ular sawa networkx yang saya lihat suatu masa dahulu, dan ia mungkin berguna kali ini. "Serahkan kepada saya, beri saya lima minit
Mula-mula, gunakan panda untuk mengimport data dalam fail, dan tapis bahagian yang kami perlukan:
df = pd.read_excel('./doc/1_evidence.xls') df = df.loc[:, ['id','name','invite_id','invited_id']] df.columns = ['id','title','to', 'from']
Kemudian hubungi pustaka networkx untuk menjana gambar rajah Perhubungan hierarki dan eksport:
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')
Dengan cara ini, saya mendapat gambar rajah hubungan hierarki yang sepadan dengan dokumen ini Hubungan antara baris atas dan bawah jelas serta-merta:
Seketika wajah Team Wang dipenuhi dengan kegembiraan, tetapi dia segera kembali kepada kesungguhan: "Bukankah ini agak mencolok? Walaupun nampaknya intuitif, bolehkah anda mengetahui siapa yang teratas dalam ini organisasi?" Ini sudah tentu tidak menyusahkan saya. Tahap atas ialah nod akar rangkaian dalam graf. Mesti tiada titik lain yang menunjuk kepadanya, jadi kita hanya perlu melintasi semua nod dan cari titik dengan darjah 0.# 找到根节点 top_node = [] for node, degrees in G.in_degree(): if degrees == 0: top_node.append(node) print('Big Boss:', top_node)“Bos Besar: [100000]” Output ini muncul pada skrin. "Nombor 100000 tidak mempunyai orang yang sepadan dalam jadual, tetapi hanya ada satu di luar talian di bawah 100000 dengan nombor 162385. Dia sepatutnya menjadi ketua organisasi ini." mahu! Saya akan mendapatkannya Rakan sekerja lain sedang mencari maklumat tentang orang ini Anda teruskan mengkaji data dan mencari semua orang yang rapat dengan orang ini bahawa nod akar telah ditemui, kita boleh mendapatkannya Bilangan lapisan di mana semua nod berada.
# 设置所有节点级别 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))
Organisasi ini telah berkembang kepada 36 peringkat. Memikirkannya benar-benar membuatkan saya berpeluh, rakan sekerja saya menemuinya tepat pada masanya.
Kemudian warnakan nod mengikut tahap untuk pemerhatian mudah:
# 添加颜色 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'Anda boleh lihat bahawa orang bernombor 162385 hanya mempunyai dua di luar talian, dan Setiap satu daripada kedua-dua downline ini telah membangunkan berpuluh-puluh downline tambahan, yang agak menarik untuk difikirkan. "Terjumpa!" Pasukan Wang membuka pintu pejabat, "Orang itu ditemui. Di antara kumpulan orang yang ditangkap malam ini, dua orang bawahannya juga berada di dalam. Mereka juga Mereka semua telah mengakuinya dan sedang kini sedang menjalani semakan terfokus "Nampaknya keadaan sebenar benar-benar konsisten dengan spekulasi saya, terima kasih kepada senarai ini. "Anda melakukan kerja yang hebat malam ini!" Pasukan Wang datang dan menepuk bahu saya. "Tetapi ia masih belum berakhir. Menurut pengakuan mereka, fail itu mengandungi semua maklumat kakitangan organisasi mereka. Sekarang anda boleh mengetahui bagi saya orang yang paling mereka bangunkan dan kami akan segera mengatur penangkapan yang disasarkan berdasarkan maklumat itu." Ia serupa dengan yang sebelumnya, tetapi kali ini saya perlu melintasi darjah keluar semua nod, kemudian mengisihnya dalam susunan terbalik, dan hanya mengambil beberapa yang pertama.
# 给下线前十的目标添加颜色 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'
然后给目标节点加上颜色,方便观察,最终得到了这样的关系图:
“干得不错,只要再把这几个人抓到,就相当于切断了这个组织的大动脉,后面的慢慢收尾就可以了。”王队把文件合上,笑着对我说。“没想到你还有这本事,真是后生可畏啊!”
“今天抓到的那三条大鱼,现在审出什么结果了?”相对于其他,我还是对案情本身更感兴趣。
“别提了,都快笑死我了。这仨人看见证据直接慌了神,开始互相推卸责任,老大说同伙全是另外两个人拉来的他都没参与,另外俩人说骗局全是老大策划的他们就是手下打工的,现在估计还吵着呢...”
Atas ialah kandungan terperinci Terima kasih kerana mempelajari perpustakaan Python ini, saya menghapuskan skema piramid dalam satu malam.... Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!