Tugas 4.1 : Mencari Keterkaitan antar Berita#
Pada Tugas 4.1 ini diminta untuk melakukan proses pembuatan struktur graph dari data VSM yang telah dibuat sebelumnya untuk mencari cossine similarity sehingga mendapatkan hubungan keterkaitan dari setiap berita.
Dibuat Oleh:
Nama : Sabil Ahmad Hidayat
NIM : 220411100058
Kelas : PPW A
Link Code : https://colab.research.google.com/drive/1tW0KYeo-Elpjlvfd7AE4wscEjtwFBqVj?usp=sharing
Link Github : meinhere/ppw
Pengantar#
Cosine Similarity#
Link sumber: https://medium.com/geekculture/cosine-similarity-and-cosine-distance-48eed889a5c4
Cosine similarity adalah metrik yang mengukur kosinus sudut antara dua vektor yang diproyeksikan dalam ruang multidimensi.
Makin kecil sudut antara dua vektor, makin mirip pula keduanya.
Misalkan sudut antara dua vektor adalah 90 derajat, maka kesamaan kosinus akan bernilai 0; ini berarti kedua vektor tersebut tegak lurus satu sama lain yang berarti tidak ada korelasi di antara keduanya.
Ketika pengukuran kesamaan kosinus mendekati 1, maka sudut antara dua vektor A dan B menjadi lebih kecil. Dalam hal ini, A dan B lebih mirip satu sama lain.
Cosine similarity jika dijelaskan secara matematis sebagai pembagian antara perkalian vektor dot product dan perkalian Euclidean Norms atau besaran setiap vektor.
\begin{align} \cos\theta = \frac{\vec{a} \cdot \vec{b}}{|\vec{a}| |\vec{b}|} \end{align}
\begin{align} |\vec{a}| = \sqrt{a_1^2 + a_2^2 + a_3^2 + \cdots + a_n^2} \end{align}
\begin{align} |\vec{b}| = \sqrt{b_1^2 + b_2^2 + b_3^2 + \cdots + b_n^2} \end{align}
Di mana, \(a\) dan \(b\) adalah vektor dalam ruang multidimensi.
Karena nilai 𝑐𝑜𝑠(𝜃) berada dalam rentang [−1,1] :
Nilai -1 akan menunjukkan vektor yang sangat berlawanan, yaitu tidak ada kesamaan
0 menunjukkan vektor independen (atau ortogonal)
1 menunjukkan kesamaan yang tinggi antara vektor
Centrality#
Link sumber: https://medium.com/@asharayshetty/centrality-in-graph-theory-d57863a8b683
Jaringan yang kompleks terdiri dari kumpulan simpul yang berinteraksi lebih banyak satu sama lain daripada simpul di luar kumpulan tersebut. Misalnya, jaringan sosial dapat terdiri dari komunitas teman yang sangat erat yang memiliki hubungan persahabatan yang lebih jarang di komunitas yang berbeda. Kelompok protein tertentu berinteraksi satu sama lain lebih sering dalam jaringan interaksi protein. Dalam perusahaan besar, proyek tertentu mungkin memiliki lebih banyak tumpang tindih konseptual dan ketergantungan timbal balik daripada proyek lain. Struktur jaringan proyek ini diharapkan akan mencerminkan struktur organisasi perusahaan sampai tingkat tertentu.
Komunitas muncul dalam jaringan karena tidak semua simpul sama pentingnya, beberapa simpul memiliki “pengaruh” yang lebih besar terhadap simpul lain dibandingkan dengan simpul lainnya, atau lebih mudah diakses oleh simpul lainnya, atau bertindak sebagai perantara dalam sebagian besar komunikasi antar simpul. Menemukan simpul terpenting dalam jaringan merupakan bagian dari analisis centrality dan ukuran yang paling umum digunakan adalah:
Degree centrality
Closeness centrality
Betweenness centrality
Eigenvector centrality
Degree Centrality#
Semakin banyak tetangga yang dimiliki oleh suatu simpul, semakin besar pula pengaruhnya. Dalam masyarakat manusia, seseorang dengan banyak teman diyakini berada dalam posisi yang menguntungkan dibandingkan dengan orang yang memiliki lebih sedikit teman. Orang seperti itu dapat bertindak sebagai orang yang berpengaruh dan mereka memainkan peran penting dalam jaringan sosial. Hal ini mengarah pada gagasan sentralitas derajat, yang mengacu pada derajat simpul tertentu dalam grafik yang mewakili jaringan sosial. Semakin besar derajatnya, semakin penting simpul tersebut dan hanya sejumlah kecil simpul yang memiliki derajat tinggi dalam jaringan kehidupan nyata.
Closeness Centrality#
Node yang mampu menjangkau node lain melalui jalur pendek, atau yang “lebih mudah dijangkau” oleh node lain melalui jalur yang lebih pendek, berada pada posisi yang lebih disukai. Node tersebut “pusat” bagi jaringan karena dapat menjangkau seluruh jaringan lebih cepat daripada node yang bukan pusat. Keunggulan struktural ini dapat diubah menjadi kekuatan, dan mengarah pada gagasan closeness centrality. Ini adalah jarak rata-rata dari node awal tertentu ke semua node lain dalam jaringan.
Jalur antara node dapat direpresentasikan dalam bentuk matriks ketetanggaan. Pada gambar, kita dapat mencapai dari A ke B dan dari A ke D hanya dengan satu sisi sehingga keduanya memiliki nilai 1, tetapi jarak dari A ke C dan A ke E adalah 2 karena terdapat dua sisi di antara node tersebut. Ketika kita menambahkan jarak keseluruhan yang harus dilalui untuk mencapai semua node, kita memperoleh nilai 6 (0+1+2+1+2). Ada 5 node dalam jaringan ini dan jika tidak menghitung A, kita dapat menemukan bahwa rata-rata sentralitas A adalah 4/6. Kita dapat melakukan hal berikut untuk semua node dalam jaringan dan melihat bahwa B memiliki sentralitas kedekatan tertinggi, yaitu 1.
Betweness Centrality#
Untuk setiap pasangan simpul dalam jaringan sosial, pertimbangkan salah satu jalur terpendek - semua simpul dalam jalur ini adalah perantara. Simpul yang termasuk dalam jalur terpendek antara jumlah maksimum komunikasi tersebut, adalah simpul khusus - simpul tersebut adalah pembuat kesepakatan potensial dan berada dalam posisi khusus karena sebagian besar simpul lain harus menyalurkan komunikasi mereka melalui simpul tersebut. Simpul semacam itu memiliki sentralitas perantara yang tinggi.
Dari setiap simpul sumber u ke setiap simpul tujuan v , dorong 1 unit aliran melalui jalur terpendek. Jika ada beberapa jalur terpendek, maka aliran akan terbagi rata. Jumlah aliran yang ditangani oleh simpul atau tepian merupakan ukuran sentralitas perantaranya.
Jika setiap node mengirimkan 1 unit aliran ke setiap node lainnya (kecuali C), maka C hanya akan menangani 2. (1+ 1/2 + 1/2) = 4 unit aliran.
Eigenvector Centrality#
Link sumber: https://www.sciencedirect.com/topics/computer-science/eigenvector-centrality
Eigenvector Centrality ( EC ) menunjukkan gagasan bahwa sebuah simpul lebih sentral karena terhubung ke simpul-simpul penting (pusat) ( Bonacich, 2007 ). Sebuah simpul dengan Eigenvector Centrality yang tinggi belum tentu terhubung dengan baik dengan simpul-simpul lainnya. Sentralitas simpul v i sebanding dengan sentralitas simpul-simpul yang terhubung dengan v i , dengan kata lain, EC sebanding dengan lokasi di dekat simpul-simpul atau komunitas-komunitas yang paling signifikan dalam sebuah grafik.
Import Library#
# library awal untuk perhitungan dan pengolahan teks
import numpy as np
import pandas as pd
# plotting
import matplotlib.pyplot as plt
import seaborn as sns
import networkx as nx
# save model
import pickle
# library untuk pembentukakn cosine similarity
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
networkx digunakan untuk membentuk sebuah graph dengan mudah.
cosine_similarity digunakan untuk menghitung nilai cosine_similarity atau kedekatan antar objek.
Load Data#
Load data dari berita sebelumnya yang telah dilakukan tahap praposes. Agar tidak memerlukan waktu yang lama lagi untuk melakukan tahapan praproses ulang.
# Baca file csv
main_df = pd.read_csv('https://raw.githubusercontent.com/meinhere/ppw/master/publish/tugas-4/dataset/data_berita_praproses.csv', delimiter=',')
main_df.head()
| No | Judul Berita | Isi Berita | Tanggal Berita | Kategori Berita | lwr | clean_punct | clean_double_ws | clean_sw | desc_clean_stem | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | Simak Jadwal dan Lokasi SIM Keliling di Jakart... | JAKARTA, KOMPAS.com - Surat Izin Mengemudi (S... | 07/09/2024 | OTOMOTIF | jakarta, kompas.com - surat izin mengemudi (s... | jakarta kompas com surat izin mengemudi sim... | jakarta kompas com surat izin mengemudi sim wa... | jakarta kompas com surat izin mengemudi sim wa... | jakarta kompas com surat izin kemudi sim wajib... |
| 1 | 2 | [POPULER OTOMOTIF] Diskon Motor Honda Septembe... | JAKARTA, KOMPAS.com - Banyak pembaca yang ingi... | 07/09/2024 | OTOMOTIF | jakarta, kompas.com - banyak pembaca yang ingi... | jakarta kompas com banyak pembaca yang ingin... | jakarta kompas com banyak pembaca yang ingin t... | jakarta kompas com pembaca diskon motor honda ... | jakarta kompas com baca diskon motor honda sep... |
| 2 | 3 | Cek Saldo Minimal BRI, BNI, BCA, Mandiri, dan BSI | JAKARTA, KOMPAS.com - Penting bagi calon nasab... | 06/09/2024 | MONEY | jakarta, kompas.com - penting bagi calon nasab... | jakarta kompas com penting bagi calon nasaba... | jakarta kompas com penting bagi calon nasabah ... | jakarta kompas com calon nasabah saldo minimal... | jakarta kompas com calon nasabah saldo minimal... |
| 3 | 4 | KAI Uji Coba Teknologi "Face Recognition Board... | KOMPAS.com - PT Kereta Api Indonesia (KAI) Div... | 06/09/2024 | MONEY | kompas.com - pt kereta api indonesia (kai) div... | kompas com pt kereta api indonesia kai divre... | kompas com pt kereta api indonesia kai divre i... | kompas com pt kereta api indonesia kai divre i... | kompas com pt kereta api indonesia kai divre i... |
| 4 | 5 | OJK Blokir 10.890 Entitas Keuangan Ilegal Seja... | JAKARTA, KOMPAS.com - Otoritas Jasa Keuangan (... | 06/09/2024 | MONEY | jakarta, kompas.com - otoritas jasa keuangan (... | jakarta kompas com otoritas jasa keuangan oj... | jakarta kompas com otoritas jasa keuangan ojk ... | jakarta kompas com otoritas jasa keuangan ojk ... | jakarta kompas com otoritas jasa uang ojk blok... |
Preparing Data#
Membuat VSM yang berisi TF-IFDF#
Dilakukan proses perhitungan nilai TF-IDF pada setiap term di semua dokumen sehingga membentuk sebuah VSM (Vector Space Model).
# Menghitung TF-IDF
vectorizer = TfidfVectorizer()
data_fit = vectorizer.fit_transform(main_df['desc_clean_stem'])
# Melihat hasil TF-IDF
data_tfidf = pd.DataFrame(data_fit.toarray(), columns=vectorizer.get_feature_names_out())
data_tfidf.head()
| aaion | aali | abadi | abai | abenkh | abnormal | absurd | ac | acapkali | acara | ... | za | zad | zag | zaman | zarco | zenix | zero | zig | zigzag | zona | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| 1 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| 2 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| 3 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| 4 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
5 rows × 3555 columns
Menghitung Cosine Similarity#
Dari VSM yang telah dibentuk dilakukan proses pengukuran kedekatan hubungan antar dokumen dengan menggunakan library dari sklearn yaitu cosine_similariry.
# Implementasi cosine similarity
data_cosine = pd.DataFrame(cosine_similarity(data_tfidf))
# Melihat hasil cosine similarity
data_cosine
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1.000000 | 0.023047 | 0.016483 | 0.055281 | 0.011324 | 0.021978 | 0.063248 | 0.012224 | 0.017548 | 0.022421 | ... | 0.011628 | 0.030647 | 0.012996 | 0.016152 | 0.035002 | 0.007693 | 0.005475 | 0.070437 | 0.016136 | 0.016922 |
| 1 | 0.023047 | 1.000000 | 0.012663 | 0.008116 | 0.020708 | 0.038824 | 0.007357 | 0.025938 | 0.012922 | 0.036115 | ... | 0.026673 | 0.164930 | 0.061096 | 0.025856 | 0.013907 | 0.076335 | 0.015834 | 0.028454 | 0.056436 | 0.056984 |
| 2 | 0.016483 | 0.012663 | 1.000000 | 0.099155 | 0.125299 | 0.002459 | 0.062177 | 0.029318 | 0.034040 | 0.020557 | ... | 0.069998 | 0.009613 | 0.025983 | 0.011574 | 0.006228 | 0.010400 | 0.001893 | 0.069272 | 0.023856 | 0.032303 |
| 3 | 0.055281 | 0.008116 | 0.099155 | 1.000000 | 0.065796 | 0.060097 | 0.074052 | 0.012883 | 0.007044 | 0.020902 | ... | 0.016884 | 0.025025 | 0.016925 | 0.015536 | 0.010995 | 0.010637 | 0.010075 | 0.069375 | 0.008303 | 0.003983 |
| 4 | 0.011324 | 0.020708 | 0.125299 | 0.065796 | 1.000000 | 0.039919 | 0.048734 | 0.028275 | 0.042067 | 0.013361 | ... | 0.036560 | 0.019034 | 0.006842 | 0.033158 | 0.007338 | 0.004936 | 0.004200 | 0.042204 | 0.029465 | 0.024661 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 95 | 0.007693 | 0.076335 | 0.010400 | 0.010637 | 0.004936 | 0.009113 | 0.020190 | 0.008705 | 0.008270 | 0.011057 | ... | 0.021872 | 0.087786 | 0.119382 | 0.023572 | 0.033778 | 1.000000 | 0.017580 | 0.014339 | 0.008869 | 0.009869 |
| 96 | 0.005475 | 0.015834 | 0.001893 | 0.010075 | 0.004200 | 0.028753 | 0.017740 | 0.014995 | 0.002003 | 0.016585 | ... | 0.052171 | 0.045537 | 0.010571 | 0.065905 | 0.004920 | 0.017580 | 1.000000 | 0.009242 | 0.011249 | 0.003528 |
| 97 | 0.070437 | 0.028454 | 0.069272 | 0.069375 | 0.042204 | 0.029243 | 0.389008 | 0.019347 | 0.008012 | 0.035172 | ... | 0.027848 | 0.071664 | 0.024227 | 0.027184 | 0.009069 | 0.014339 | 0.009242 | 1.000000 | 0.017383 | 0.017892 |
| 98 | 0.016136 | 0.056436 | 0.023856 | 0.008303 | 0.029465 | 0.006440 | 0.016436 | 0.021616 | 0.017144 | 0.006783 | ... | 0.010510 | 0.019841 | 0.009602 | 0.009901 | 0.003361 | 0.008869 | 0.011249 | 0.017383 | 1.000000 | 0.440966 |
| 99 | 0.016922 | 0.056984 | 0.032303 | 0.003983 | 0.024661 | 0.005486 | 0.016804 | 0.037411 | 0.023404 | 0.019080 | ... | 0.048585 | 0.027400 | 0.010407 | 0.042754 | 0.005526 | 0.009869 | 0.003528 | 0.017892 | 0.440966 | 1.000000 |
100 rows × 100 columns
Mengubah data ke dalam Matrix Adjacency#
Proses konversi dari perhitungan cosine_similarity ke dalam Matrix Adjacency (matriks yang bernilai 0 atau 1). Dengan menetapkan nilai threshold sebagai batas jika nilai diatas dari threshold maka akan menjadi nilai 1, jika tidak maka akan menjadi nilai 0.
# Menentukan batas ambang
threshold = 0.05
# Implementasi data cosine similarity menjadi matrix adjacency
data_cosine_binary = data_cosine.map(lambda x: 1 if x > threshold else 0)
# Melihat martix adjacency
data_cosine_binary
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 |
| 2 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | ... | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 3 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 4 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 95 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| 96 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
| 97 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | ... | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 98 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| 99 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
100 rows × 100 columns
Dengan begitu, dapat disimpulkan bahwa jika nilai dalam Matrix Adjacency bernilai 1 maka terdapat hubungan keterikatan antar dokumen tersebut.
Menghitung Centrality#
Jika hanya mengandalkan Matrix Adjacency, maka tidak dapat diukur seberapa dekat keterikatan antar dokumen yang bersangkutan. Maka dilakukan proses untuk menghitung Centrality pada tiap dokumen, sehingga dapat dilihat dokumen mana yang memiliki kedekatan paling tinggi sampai paling rendah.
Dalam Bentuk Objek#
# Membuat graf dari data_cossine_binary
graph = nx.from_pandas_adjacency(data_cosine_binary)
# Menghitung degree centrality
degree_centrality = nx.degree_centrality(graph)
# Menghitung betweenness centrality
betweenness_centrality = nx.betweenness_centrality(graph)
# Menghitung closeness centrality
closeness_centrality = nx.closeness_centrality(graph)
# Menghitung eigenvector centrality
eigenvector_centrality = nx.eigenvector_centrality(graph)
# Menampilkan hasil centrality
print("Degree Centrality:", degree_centrality)
print("Betweenness Centrality:", betweenness_centrality)
print("Closeness Centrality:", closeness_centrality)
print("Eigenvector Centrality:", eigenvector_centrality)
Degree Centrality: {0: 0.12121212121212122, 1: 0.4545454545454546, 2: 0.16161616161616163, 3: 0.13131313131313133, 4: 0.16161616161616163, 5: 0.16161616161616163, 6: 0.18181818181818182, 7: 0.20202020202020204, 8: 0.07070707070707072, 9: 0.29292929292929293, 10: 0.10101010101010102, 11: 0.07070707070707072, 12: 0.31313131313131315, 13: 0.25252525252525254, 14: 0.21212121212121213, 15: 0.29292929292929293, 16: 0.27272727272727276, 17: 0.25252525252525254, 18: 0.08080808080808081, 19: 0.16161616161616163, 20: 0.10101010101010102, 21: 0.16161616161616163, 22: 0.23232323232323235, 23: 0.10101010101010102, 24: 0.393939393939394, 25: 0.21212121212121213, 26: 0.30303030303030304, 27: 0.18181818181818182, 28: 0.24242424242424243, 29: 0.17171717171717174, 30: 0.13131313131313133, 31: 0.37373737373737376, 32: 0.07070707070707072, 33: 0.5151515151515152, 34: 0.27272727272727276, 35: 0.17171717171717174, 36: 0.19191919191919193, 37: 0.10101010101010102, 38: 0.08080808080808081, 39: 0.33333333333333337, 40: 0.4444444444444445, 41: 0.05050505050505051, 42: 0.26262626262626265, 43: 0.23232323232323235, 44: 0.23232323232323235, 45: 0.12121212121212122, 46: 0.26262626262626265, 47: 0.26262626262626265, 48: 0.21212121212121213, 49: 0.3535353535353536, 50: 0.11111111111111112, 51: 0.14141414141414144, 52: 0.15151515151515152, 53: 0.06060606060606061, 54: 0.07070707070707072, 55: 0.13131313131313133, 56: 0.30303030303030304, 57: 0.23232323232323235, 58: 0.19191919191919193, 59: 0.16161616161616163, 60: 0.21212121212121213, 61: 0.17171717171717174, 62: 0.16161616161616163, 63: 0.29292929292929293, 64: 0.24242424242424243, 65: 0.18181818181818182, 66: 0.4040404040404041, 67: 0.19191919191919193, 68: 0.23232323232323235, 69: 0.17171717171717174, 70: 0.14141414141414144, 71: 0.14141414141414144, 72: 0.24242424242424243, 73: 0.10101010101010102, 74: 0.23232323232323235, 75: 0.08080808080808081, 76: 0.16161616161616163, 77: 0.22222222222222224, 78: 0.29292929292929293, 79: 0.23232323232323235, 80: 0.09090909090909091, 81: 0.2828282828282829, 82: 0.17171717171717174, 83: 0.15151515151515152, 84: 0.4040404040404041, 85: 0.12121212121212122, 86: 0.21212121212121213, 87: 0.27272727272727276, 88: 0.18181818181818182, 89: 0.20202020202020204, 90: 0.25252525252525254, 91: 0.4040404040404041, 92: 0.23232323232323235, 93: 0.27272727272727276, 94: 0.08080808080808081, 95: 0.26262626262626265, 96: 0.06060606060606061, 97: 0.12121212121212122, 98: 0.06060606060606061, 99: 0.11111111111111112}
Betweenness Centrality: {0: 0.006974822438705031, 1: 0.04032994542222844, 2: 0.01006540594401235, 3: 0.006415443037833025, 4: 0.007341356364905298, 5: 0.008536759029263107, 6: 0.021903223472044125, 7: 0.012513609058735256, 8: 6.203379219252235e-05, 9: 0.012814072656099126, 10: 0.0014157232141698388, 11: 2.896781608266202e-05, 12: 0.00856248940654894, 13: 0.010623656045043032, 14: 0.00514280339138735, 15: 0.011337381541571375, 16: 0.013493451708557072, 17: 0.009766515542838045, 18: 0.0008998966100587939, 19: 0.008730665827178345, 20: 0.0017381544794433078, 21: 0.0022972001247185086, 22: 0.002706723186052058, 23: 0.0007313229294232994, 24: 0.02797320504931405, 25: 0.0018491604133552, 26: 0.022777627675009637, 27: 0.005511381419707032, 28: 0.0035827694891843675, 29: 0.006136242821204609, 30: 0.003248609309910707, 31: 0.04423959936156394, 32: 0.0, 33: 0.05990773776282776, 34: 0.009718626305042088, 35: 0.004506647521062749, 36: 0.0027250410598857813, 37: 0.004317688860110049, 38: 0.0007070713982060597, 39: 0.038935727362366335, 40: 0.044352347091750795, 41: 0.0013992857469642124, 42: 0.01466241295516858, 43: 0.007905946683232771, 44: 0.009474912553473934, 45: 0.0003694750110936522, 46: 0.006780571933419145, 47: 0.006780571933419145, 48: 0.008986309718806453, 49: 0.027658533309217227, 50: 0.0009981834631355832, 51: 0.003555180499665861, 52: 0.0004100600047713424, 53: 0.0021185515792777033, 54: 0.0008061248554219936, 55: 0.005456873668151453, 56: 0.018365867620179898, 57: 0.0220158683825646, 58: 0.0005294135415212624, 59: 0.005770994712664715, 60: 0.006498734227246, 61: 0.0027599901787868975, 62: 0.008395413171294414, 63: 0.010910074684458962, 64: 0.0034084165790319323, 65: 0.005106515309175389, 66: 0.04792043875646741, 67: 0.005703420901868205, 68: 0.02405916795586012, 69: 0.01878525377860124, 70: 0.006430410174752962, 71: 0.014565617087135448, 72: 0.0015937336300775214, 73: 0.007346282844625989, 74: 0.015724600181278633, 75: 0.0036653326626924563, 76: 0.0015198619641454201, 77: 0.007492058118163242, 78: 0.004481519806207985, 79: 0.008861827323034439, 80: 0.0002765101604391591, 81: 0.02758596988664824, 82: 0.002322247715116191, 83: 0.0038224783289224845, 84: 0.03519914558985813, 85: 0.003818198232376153, 86: 0.00285639294725132, 87: 0.004299114743195047, 88: 0.01763630228786739, 89: 0.006562300621189422, 90: 0.019720725486001834, 91: 0.053480298661399035, 92: 0.004049052384755348, 93: 0.01732027814265585, 94: 0.002205521199320044, 95: 0.003459835445688385, 96: 0.00012333460076193532, 97: 0.0046125171152414796, 98: 9.137436717502886e-05, 99: 0.005425537699540296}
Closeness Centrality: {0: 0.4267241379310345, 1: 0.6073619631901841, 2: 0.44594594594594594, 3: 0.47368421052631576, 4: 0.4852941176470588, 5: 0.49748743718592964, 6: 0.518324607329843, 7: 0.5025380710659898, 8: 0.4267241379310345, 9: 0.559322033898305, 10: 0.4125, 11: 0.376425855513308, 12: 0.55, 13: 0.5561797752808989, 14: 0.5129533678756477, 15: 0.5351351351351351, 16: 0.5561797752808989, 17: 0.5238095238095238, 18: 0.44594594594594594, 19: 0.495, 20: 0.4248927038626609, 21: 0.47596153846153844, 22: 0.518324607329843, 23: 0.46261682242990654, 24: 0.592814371257485, 25: 0.4852941176470588, 26: 0.559322033898305, 27: 0.5025380710659898, 28: 0.5051020408163265, 29: 0.4876847290640394, 30: 0.4419642857142857, 31: 0.5857988165680473, 32: 0.4074074074074074, 33: 0.6470588235294118, 34: 0.5051020408163265, 35: 0.4669811320754717, 36: 0.5, 37: 0.4604651162790698, 38: 0.44594594594594594, 39: 0.5823529411764706, 40: 0.61875, 41: 0.37218045112781956, 42: 0.55, 43: 0.532258064516129, 44: 0.5294117647058824, 45: 0.44594594594594594, 46: 0.5409836065573771, 47: 0.5409836065573771, 48: 0.518324607329843, 49: 0.5963855421686747, 50: 0.46919431279620855, 51: 0.46261682242990654, 52: 0.4604651162790698, 53: 0.3793103448275862, 54: 0.39285714285714285, 55: 0.4852941176470588, 56: 0.559322033898305, 57: 0.5294117647058824, 58: 0.4782608695652174, 59: 0.4925373134328358, 60: 0.5, 61: 0.5051020408163265, 62: 0.48292682926829267, 63: 0.5439560439560439, 64: 0.526595744680851, 65: 0.495, 66: 0.6073619631901841, 67: 0.518324607329843, 68: 0.5380434782608695, 69: 0.495, 70: 0.4647887323943662, 71: 0.495, 72: 0.5025380710659898, 73: 0.43043478260869567, 74: 0.55, 75: 0.4177215189873418, 76: 0.5, 77: 0.5294117647058824, 78: 0.532258064516129, 79: 0.5409836065573771, 80: 0.4074074074074074, 81: 0.5380434782608695, 82: 0.48058252427184467, 83: 0.4876847290640394, 84: 0.6111111111111112, 85: 0.45622119815668205, 86: 0.495, 87: 0.532258064516129, 88: 0.5129533678756477, 89: 0.5025380710659898, 90: 0.5439560439560439, 91: 0.6149068322981367, 92: 0.5076923076923077, 93: 0.5561797752808989, 94: 0.42857142857142855, 95: 0.5076923076923077, 96: 0.39919354838709675, 97: 0.4520547945205479, 98: 0.4008097165991903, 99: 0.46261682242990654}
Eigenvector Centrality: {0: 0.019878241625355064, 1: 0.21792896742840248, 2: 0.0206688076797681, 3: 0.021896151620623538, 4: 0.04438493996399152, 5: 0.035643195755802055, 6: 0.03630610330996778, 7: 0.04599318688762387, 8: 0.021823381473706518, 9: 0.11784867087575536, 10: 0.011706371821152903, 11: 0.005554380827069101, 12: 0.16414475344801854, 13: 0.11929846389704168, 14: 0.10775351995533336, 15: 0.14667252849275217, 16: 0.13126287523390068, 17: 0.11232580601155896, 18: 0.016994415824544553, 19: 0.04013525388109521, 20: 0.021240666712412266, 21: 0.08483790127381868, 22: 0.12896765312592062, 23: 0.0330976871155808, 24: 0.196320758432053, 25: 0.10977605669013442, 26: 0.14126250273397103, 27: 0.057570793563833496, 28: 0.12989292596086724, 29: 0.04882205323533901, 30: 0.04629377854927679, 31: 0.13342079973168347, 32: 0.017056163488902848, 33: 0.24704269182153213, 34: 0.12863526275381246, 35: 0.0740451631322536, 36: 0.07110680302232612, 37: 0.029245615705574303, 38: 0.01997752029546263, 39: 0.11989392771032499, 40: 0.20622622564699597, 41: 0.004880352806449175, 42: 0.1257789638268803, 43: 0.0742694865507635, 44: 0.08147371166198565, 45: 0.05501970984208613, 46: 0.14225042776206864, 47: 0.14225042776206864, 48: 0.06872664465003647, 49: 0.17829424685537573, 50: 0.03827456564996254, 51: 0.05227450913660659, 52: 0.07739500376157571, 53: 0.005362019038974356, 54: 0.009541234390316422, 55: 0.03444029835368483, 56: 0.12178305483087153, 57: 0.07498319265105713, 58: 0.10760025829327712, 59: 0.06042475789835675, 60: 0.10300008021369589, 61: 0.06759011520173305, 62: 0.041106674491550754, 63: 0.14572448273145405, 64: 0.10858489673844636, 65: 0.07277721550075242, 66: 0.19789214789474005, 67: 0.08202294043347708, 68: 0.06524806768804034, 69: 0.02900943020041813, 70: 0.02552465943886477, 71: 0.0739281078200814, 72: 0.13713100491730423, 73: 0.022778064715637286, 74: 0.09562975200077783, 75: 0.011838898164225578, 76: 0.0860735094969796, 77: 0.08943922285677781, 78: 0.15803501469171957, 79: 0.07959729891649056, 80: 0.021680123471991143, 81: 0.09072238201305564, 82: 0.08901283613096986, 83: 0.04152321551567827, 84: 0.19174815490147384, 85: 0.03469162788288343, 86: 0.11291708698115463, 87: 0.15333467230617445, 88: 0.03512485134936931, 89: 0.09522507283420104, 90: 0.0972386980157233, 91: 0.18807589474025546, 92: 0.12725172671476462, 93: 0.10478215266672487, 94: 0.014328635945698637, 95: 0.1380410359870722, 96: 0.012415895510305489, 97: 0.01765443147285966, 98: 0.019532364469646575, 99: 0.03394003528768417}
Dalam Bentuk Tabel#
# Membuat Dataframe pada setiap centrality
degree_df = pd.DataFrame.from_dict(degree_centrality, orient='index', columns=['degree_centrality'])
betweenness_df = pd.DataFrame.from_dict(betweenness_centrality, orient='index', columns=['betweenness_centrality'])
closeness_df = pd.DataFrame.from_dict(closeness_centrality, orient='index', columns=['closeness_centrality'])
eigenvector_df = pd.DataFrame.from_dict(eigenvector_centrality, orient='index', columns=['eigenvector_centrality'])
# Menggabung ke dalam satu Dataframe
centrality_df = pd.concat([degree_df, betweenness_df, closeness_df, eigenvector_df], axis=1)
# Melihat hasil Dataframe
centrality_df
| degree_centrality | betweenness_centrality | closeness_centrality | eigenvector_centrality | |
|---|---|---|---|---|
| 0 | 0.121212 | 0.006975 | 0.426724 | 0.019878 |
| 1 | 0.454545 | 0.040330 | 0.607362 | 0.217929 |
| 2 | 0.161616 | 0.010065 | 0.445946 | 0.020669 |
| 3 | 0.131313 | 0.006415 | 0.473684 | 0.021896 |
| 4 | 0.161616 | 0.007341 | 0.485294 | 0.044385 |
| ... | ... | ... | ... | ... |
| 95 | 0.262626 | 0.003460 | 0.507692 | 0.138041 |
| 96 | 0.060606 | 0.000123 | 0.399194 | 0.012416 |
| 97 | 0.121212 | 0.004613 | 0.452055 | 0.017654 |
| 98 | 0.060606 | 0.000091 | 0.400810 | 0.019532 |
| 99 | 0.111111 | 0.005426 | 0.462617 | 0.033940 |
100 rows × 4 columns
Plotting#
Degree Centrality#
plt.figure(figsize=(10, 6))
plt.bar(degree_centrality.keys(), degree_centrality.values())
plt.xlabel("Nodes")
plt.ylabel("Degree Centrality")
plt.title("Degree Centrality of the Graph")
plt.show()
Betwenness Centrality#
plt.figure(figsize=(10, 6))
plt.bar(betweenness_centrality.keys(), betweenness_centrality.values())
plt.xlabel("Nodes")
plt.ylabel("Betweenness Centrality")
plt.title("Betweenness Centrality of the Graph")
plt.show()
Closeness Centrality#
plt.figure(figsize=(10, 6))
plt.bar(closeness_centrality.keys(), closeness_centrality.values())
plt.xlabel("Nodes")
plt.ylabel("Closeness Centrality")
plt.title("Closeness Centrality of the Graph")
plt.show()
Eigenvector Centrality#
plt.figure(figsize=(10, 6))
plt.bar(eigenvector_centrality.keys(), eigenvector_centrality.values())
plt.xlabel("Nodes")
plt.ylabel("Eigenvector Centrality")
plt.title("Eigenvector Centrality of the Graph")
plt.show()
Graph#
plt.figure(figsize=(12, 8))
nx.draw(graph, with_labels=True, node_color='skyblue', node_size=500, edge_color='gray', font_size=8)
plt.title("Graph Visualization")
plt.show()