Jaringan Asimetris
Bagaimana jika hubungan antar-node adalah 'anak dari'? Maka hubungannya tidak lagi simetris. Jika A adalah anak dari B, maka B bukan anak dari A. Jaringan dengan hubungan yang asimetris (A berhubungan dengan B tidak serta-merta berarti B berhubungan dengan A) disebut jaringan asimetris. Kita dapat membangun jaringan asimetris di NetworkX menggunakan metode DiGraph, singkatan dari Directional Graph. Mari buat sebuah graf asimetris.
G_asymmetric = nx.DiGraph()
G_asymmetric.add_edge('A','B')
G_asymmetric.add_edge('A','D')
G_asymmetric.add_edge('C','A')
G_asymmetric.add_edge('D','E')
Sekarang kita visualisasikan. Kita bisa menggunakan fungsi draw_networkx() seperti sebelumnya. Namun, mungkin saja node tidak tersebar dan tidak terlihat jelas dalam jaringan yang digambar. Untuk mengatasinya, kita bisa menggunakan fungsi untuk memaksa tata letak, yang memosisikan node agar terlihat jelas. Kita dapat melakukannya dengan fungsi spring_layout(), lalu diikuti dengan fungsi draw_networkx().
nx.spring_layout(G_asymmetric)
nx.draw_networkx(G_asymmetric)
Di bawah ini Anda dapat melihat jaringan dengan dan tanpa menggunakan perintah tata letak. Yang dibuat dengan perintah tata letak terlihat lebih jelas.

Jaringan Berbobot
Sejauh ini kita menggunakan jaringan tanpa bobot, tetapi memungkinkan juga jaringan dibuat dengan bobot. Misalnya, jika pada jaringan awal kita mempertimbangkan jumlah film yang dikerjakan bersama sebagai bobot, kita akan mendapatkan Jaringan Berbobot. Mari buat lagi jaringan para aktor, tetapi kali ini kita tambahkan bobot pada jaringan; setiap edge memiliki bobot yang menandakan jumlah film yang mereka kerjakan bersama.
G_weighted = nx.Graph()
G_weighted.add_edge('Amitabh Bachchan','Abhishek Bachchan', weight=25)
G_weighted.add_edge('Amitabh Bachchan','Aaamir Khan', weight=8)
G_weighted.add_edge('Amitabh Bachchan','Akshay Kumar', weight=11)
G_weighted.add_edge('Amitabh Bachchan','Dev Anand', weight=1)
G_weighted.add_edge('Abhishek Bachchan','Aaamir Khan', weight=4)
G_weighted.add_edge('Abhishek Bachchan','Akshay Kumar',weight=7)
G_weighted.add_edge('Abhishek Bachchan','Dev Anand', weight=1)
G_weighted.add_edge('Dev Anand','Aaamir Khan',weight=1)

Gambar di atas menampilkan jaringan berbobot para aktor dalam tata letak circular. Lebar edge menunjukkan bobot antara dua node.
Multigraf
Kita bisa memberikan atribut berbeda pada edge. Misalnya, kita bisa mendefinisikan relasi tetangga antara dua node 'A' dan 'B' menggunakan atribut relation. Jika dalam satu jaringan dua node dihubungkan dengan dua edge berbeda (relasi berbeda), kita memiliki multigraf. Kita dapat membuat multigraf menggunakan kelas MultiGraph.
G = nx.MultiGraph()
G.add_edge('A','B',relation ='neighbor')
G.add_edge('A','B',relation='friend)
G.add_edge('B','C', relation='neighbor')
G.add_edge('D','C',relation='friend')
Kode ini akan membangun graf dengan dua edge antara A dan B. Kita dapat memeriksa koneksi menggunakan G.edges(), keluarannya akan menampilkan:
MultiEdgeDataView([('A', 'B', {'relation': 'neighbor'}), ('A', 'B', {'relation': 'friend'}), ('B', 'C', {'relation': 'neighbor'}), ('B', 'D', {'relation': 'neighbor'}), ('C', 'D', {'relation': 'friend'})])
Konektivitas Jaringan
Sekarang jaringannya sudah dibuat, bisakah kita mengetahui lebih banyak tentang node tertentu dalam jaringan? Tentu saja, mari kita telusuri beberapa di antaranya.
Derajat (Degree)
Derajat sebuah node mendefinisikan jumlah koneksi yang dimilikinya. NetworkX memiliki fungsi degree yang dapat kita gunakan untuk menentukan derajat sebuah node dalam jaringan.
nx.degree(G_symmetric, 'Dev Anand`)
Ini akan mengembalikan nilai 3, karena Dev Anand hanya pernah bekerja sama dengan tiga aktor dalam jaringan.
Koefisien Klaster
Teramati bahwa orang-orang yang berbagi koneksi dalam jejaring sosial cenderung membentuk asosiasi. Dengan kata lain, ada kecenderungan dalam jejaring sosial untuk membentuk klaster. Kita dapat menentukan klaster suatu node, yaitu Koefisien Klaster Lokal, yang merupakan fraksi dari pasangan teman node (koneksinya) yang saling terhubung. Untuk menentukan koefisien klaster lokal, kita menggunakan fungsi nx.clustering(Graph, Node).
Dalam jaringan simetris para aktor, Anda akan menemukan bahwa Dev Anand memiliki koefisien klaster lokal sebesar 1 dan Abhishek Bachchan memiliki koefisien klaster lokal sebesar 0,67.
Rata-rata koefisien klaster (jumlah semua koefisien klaster lokal dibagi jumlah node) untuk jaringan simetris para aktor adalah 0,867. Kita bisa mendapatkannya menggunakan:
nx.average_clustering(G_symmetric)
Jarak
Kita juga dapat menentukan lintasan terpendek antara dua node dan panjangnya di NetworkX menggunakan fungsi nx.shortest_path(Graph, Node1, Node2) dan nx.shortest_path_length(Graph, Node1, Node2).
Menjalankan
nx.shortest_path(G_symmetric, 'Dev Anand', 'Akshay Kumar')
Mengembalikan
['Dev Anand', 'Amitabh Bachchan', 'Akshay Kumar']
Kita dapat menemukan jarak sebuah node dari setiap node lain dalam jaringan menggunakan algoritma breadth-first search, mulai dari node tersebut. NetworkX menyediakan fungsi bfs_tree untuk melakukannya. Jadi jika Anda mencoba T = nx.bfs_tree(G_symmetric, 'Dev Anand') dan lalu menggambar pohon ini, kita akan mendapatkan struktur jaringan yang memberi tahu bagaimana kita dapat mencapai node-node lain dalam jaringan mulai dari Dev Anand

Eksentrisitas
Eksentrisitas sebuah node A didefinisikan sebagai jarak terbesar antara A dan semua node lainnya. Ini dapat ditemukan menggunakan fungsi nx.eccentricity(). Dalam jaringan simetris para aktor, Dev Anand memiliki eksentrisitas 2, dan Abhishek Bachchan memiliki eksentrisitas 1 (terhubung ke semua).
Influencer Jaringan
Di atas kita mempelajari beberapa ukuran jarak jaringan; ukuran-ukuran ini berguna untuk mengetahui bagaimana informasi akan menyebar melalui jaringan. Pada bagian ini, kita akan mempelajari cara menemukan node (individu) paling penting dalam jaringan. Parameter-parameter ini disebut ukuran sentralitas.
Ingat siswi paling populer di sekolah menengah Anda atau pemain baseball andalan sekolah? Mereka adalah orang-orang yang bisa membuat pengalaman sekolah Anda menjadi sangat buruk atau sangat menyenangkan. Apa yang memberi mereka kekuatan ini? Ukuran Sentralitas dapat membantu kita mengidentifikasi popularitas, yang paling disukai, dan influencer terbesar dalam jaringan.
Sentralitas Derajat
Mereka yang paling populer atau paling disukai biasanya memiliki lebih banyak teman. Sentralitas derajat adalah ukuran jumlah koneksi yang dimiliki node tertentu dalam jaringan. Ini didasarkan pada fakta bahwa node penting memiliki banyak koneksi. NetworkX memiliki fungsi degree_centrality() untuk menghitung sentralitas derajat semua node dalam sebuah jaringan.
Sentralitas Eigenvector
Bukan hanya berapa banyak individu yang terhubung dengan seseorang, tetapi juga siapa yang terhubung dengannya yang dapat menentukan pentingnya sebuah node. Di jalanan Delhi, ketika polisi lalu lintas menangkap seseorang karena melanggar aturan, kalimat pertama yang sering terdengar adalah "Apakah Anda tahu saya berhubungan dengan siapa?".
Sentralitas eigenvector mengukur hal ini secara tepat. Ukuran ini menyatakan bahwa sebuah node penting jika terhubung dengan node-node penting lainnya. Kita bisa menggunakan fungsi eigenvector_centrality() dari NetworkX untuk menghitung sentralitas eigenvector semua node dalam jaringan.
Algoritma Pagerank Google adalah varian dari algoritma sentralitas eigenvector.
Sentralitas Keterjembatan (Betweenness)
Sentralitas betweenness adalah sentralitas kendali. Ini merepresentasikan frekuensi suatu titik muncul pada geodesik (lintasan terpendek) yang menghubungkan pasangan titik. Ukuran ini mengkuantifikasi berapa kali sebuah node tertentu muncul pada lintasan terpendek yang dipilih antara dua node lain. Node dengan sentralitas betweenness tinggi memainkan peran penting dalam aliran komunikasi/informasi dalam jaringan. Node-node tersebut dapat memiliki kendali strategis dan pengaruh terhadap yang lain. Individu pada posisi strategis semacam itu dapat memengaruhi seluruh kelompok, dengan menahan atau memodifikasi informasi yang ditransmisikan.
NetworkX memiliki fungsi betweenness_centrality() untuk mengukurnya pada jaringan. Fungsi ini menyediakan opsi untuk memilih apakah nilai betweenness akan dinormalisasi atau tidak, apakah bobot akan disertakan dalam perhitungan sentralitas atau tidak, serta apakah titik ujung akan disertakan dalam perhitungan jumlah lintasan terpendek atau tidak.
Menggabungkan semuanya
Mari mulai dengan data Facebook; untuk analisis di sini kita akan menggunakan dataset combined ego networks Facebook, yang memuat jaringan gabungan dari daftar teman Facebook milik sepuluh individu. Anda dapat mengunduh berkas facebook_combined.txt dari situs Stanford University.
Anda dapat memperoleh data Facebook/Twitter Anda sendiri menggunakan API Facebook/Twitter. Nantikan tutorial selanjutnya di mana kita akan mempelajari cara menggunakan API Facebook dan Twitter untuk mendapatkan data dan menggunakan informasi yang dipelajari di sini untuk menganalisisnya.
Kita baca berkasnya dan bangun Graf:
G_fb = nx.read_edgelist("facebook_combined.txt", create_using = nx.Graph(), nodetype=int)
Jaringan ini terdiri dari 4.039 node, terhubung melalui 88.234 edge! Ya, ini jaringan besar. Anda bisa mendapatkan informasi tersebut menggunakan fungsi info().
[In]: print(nx.info(G_fb))
[Out]: Name:
Type: Graph
Number of nodes: 4039
Number of edges: 88234
Average degree: 43.6910
Di bawah ini Anda dapat melihat jaringannya:

Kita juga dapat memvisualisasikan jaringan sehingga warna node bervariasi sesuai Derajat dan ukuran node sesuai Sentralitas Betweenness. Kode untuk melakukannya adalah:
pos = nx.spring_layout(G_fb)
betCent = nx.betweenness_centrality(G_fb, normalized=True, endpoints=True)
node_color = [20000.0 * G_fb.degree(v) for v in G_fb]
node_size = [v * 10000 for v in betCent.values()]
plt.figure(figsize=(20,20))
nx.draw_networkx(G_fb, pos=pos, with_labels=False,
node_color=node_color,
node_size=node_size )
plt.axis('off')
Dan graf yang dihasilkan adalah:

Anda juga dapat mengetahui label node dengan sentralitas betweenness tertinggi menggunakan:
sorted(betCent, key=betCent.get, reverse=True)[:5]
Tabel di bawah ini mencantumkan lima label node dengan ukuran sentralitas tertinggi.
| Sentralitas Derajat | Sentralitas Eigenvector | Sentralitas Betweenness |
|---|---|---|
| 107 | 1912 | 107 |
| 1684 | 2266 | 1684 |
| 1912 | 2206 | 3437 |
| 3437 | 2233 | 1912 |
| 0 | 2464 | 1085 |
Kita dapat melihat bahwa beberapa node sama antara Sentralitas Derajat, yang mengukur derajat, dan Sentralitas Betweenness yang mengendalikan aliran informasi. Wajar jika node yang lebih terhubung juga berada pada lintasan terpendek antara node-node lain. Node 1912 adalah node penting karena krusial menurut ketiga ukuran sentralitas yang kita pertimbangkan.
Referensi
- Data aktor diperoleh dari situs IMDB
- Tempat terbaik untuk mengetahui lebih lanjut tentang NetworkX dan fungsinya adalah dokumentasinya
Jika Anda ingin mempelajari lebih lanjut tentang Social Network Analysis di Python, ikuti kursus Analyzing Social Media Data in Python dari DataCamp.

Jika Anda ingin mempelajari Analisis Jaringan, ikuti kursus Network Analysis in Python (Part 1) dari DataCamp.
Jaringan ada di mana-mana: jaringan jalan, jaringan teman dan pengikut di media sosial, serta jaringan rekan kantor. Jaringan memainkan peran penting dalam kehidupan kita sehari-hari, mulai dari menyebarkan informasi bermanfaat hingga memengaruhi pemilu nasional. Kemampuan menganalisis jaringan ini dan mengambil keputusan berdasarkan hasil analisis merupakan keterampilan penting bagi setiap analis data.
Fokus tutorial ini adalah mengajarkan social network analysis (SNA) menggunakan Python dan NetworkX, sebuah pustaka Python untuk mempelajari struktur, dinamika, dan fungsi jaringan kompleks. Tutorial ini berasumsi pembaca sudah memahami sintaks dasar Python; tidak diperlukan pengetahuan SNA sebelumnya.
Pendahuluan
Mari mulai dengan memahami apa yang dimaksud dengan Jejaring Sosial. Di bawah ini Anda melihat jaringan aktor Bollywood sebagai node. Mereka terhubung dengan garis tebal jika pernah bekerja sama setidaknya dalam satu film.
Terlihat bahwa Amitabh Bachchan dan Abhishek Bachchan pernah berakting dengan semua aktor dalam jaringan, sementara Akshay Kumar hanya pernah bekerja sama dengan dua Bachchan. Menarik, bukan!
Ini juga merupakan jejaring sosial. Setiap jaringan dengan koneksi antarindividu, di mana koneksi tersebut menangkap hubungan di antara mereka, adalah jejaring sosial. Menganalisis jaringan ini dapat memberikan wawasan berharga tentang orang-orang dalam jaringan, seperti siapa yang benar-benar berpengaruh, siapa yang paling terhubung, dan sebagainya.
Setiap jaringan terdiri dari:
Membuat jaringan menggunakan NetworkX
Ada banyak jenis jaringan. Kita akan menggunakan NetworkX untuk membangun dan menganalisis berbagai jaringan ini. Untuk memulai, Anda perlu memasang NetworkX: Anda dapat menggunakan salah satu dari:
atau jika bekerja di Anaconda
Perintah ini akan memasang versi terbaru networkx. Kode dalam tutorial ini dijalankan pada Python=3.5, NetworkX = versi 2.0.
Jaringan Simetris
Jaringan aktor yang kita buat di atas adalah jaringan simetris karena hubungan "bekerja sama dalam sebuah film" bersifat simetris. Jika A berhubungan dengan B, maka B juga berhubungan dengan A. Mari kita buat jaringan yang kita lihat di atas menggunakan NetworkX.
Kita akan menggunakan metode
Graph()untuk membuat jaringan baru danadd_edge()untuk menambahkan edge antara dua node.Sekarang mari memvisualisasikan jaringan yang baru saja kita bangun menggunakan
nx.draw_networkx(G_symmetric).