Analisis Jaringan Sosial Menggunakan Power BI dan R: Panduan Visual Kustom
Diterbitkan: 2022-07-22Analisis jaringan sosial dengan cepat menjadi alat penting untuk melayani berbagai kebutuhan profesional. Ini dapat menginformasikan tujuan perusahaan seperti pemasaran yang ditargetkan dan mengidentifikasi risiko keamanan atau reputasi. Analisis jaringan sosial juga dapat membantu bisnis memenuhi tujuan internal: Analisis ini memberikan wawasan tentang perilaku karyawan dan hubungan di antara berbagai bagian perusahaan.
Organisasi dapat menggunakan sejumlah solusi perangkat lunak untuk analisis jaringan sosial; masing-masing memiliki pro dan kontra, dan cocok untuk tujuan yang berbeda. Artikel ini berfokus pada Microsoft Power BI, salah satu alat visualisasi data yang paling umum digunakan saat ini. Sementara Power BI menawarkan banyak add-on jaringan sosial, kami akan menjelajahi visual khusus di R untuk menciptakan hasil yang lebih menarik dan fleksibel.
Tutorial ini mengasumsikan pemahaman tentang teori graf dasar, khususnya graf berarah. Juga, langkah selanjutnya paling cocok untuk Power BI Desktop, yang hanya tersedia di Windows. Pembaca dapat menggunakan browser Power BI di Mac OS atau Linux, tetapi browser Power BI tidak mendukung fitur tertentu, seperti mengimpor buku kerja Excel.
Penataan Data untuk Visualisasi
Membuat jejaring sosial dimulai dengan pengumpulan data koneksi (tepi). Data koneksi berisi dua bidang utama: node sumber dan node target —node di kedua ujung edge. Di luar node ini, kami dapat mengumpulkan data untuk menghasilkan wawasan visual yang lebih komprehensif, biasanya direpresentasikan sebagai properti node atau edge:
1) Properti simpul
- Bentuk atau warna : Menunjukkan tipe pengguna, misalnya lokasi/negara pengguna
- Ukuran : Menunjukkan pentingnya dalam jaringan, misalnya, jumlah pengikut pengguna
- Gambar : Beroperasi sebagai pengenal individu, misalnya avatar pengguna
2) Properti tepi
- Koneksi warna , goresan , atau panah : Menunjukkan jenis koneksi, misalnya, sentimen postingan atau tweet yang menghubungkan dua pengguna
- Lebar : Menunjukkan kekuatan koneksi, misalnya berapa banyak mention atau retweet yang diamati antara dua pengguna dalam periode tertentu
Mari kita periksa contoh visual jejaring sosial untuk melihat bagaimana properti ini berfungsi:
Kita juga dapat menggunakan teks hover untuk melengkapi atau mengganti parameter di atas, karena dapat mendukung informasi lain yang tidak dapat dengan mudah diekspresikan melalui properti node atau edge.
Membandingkan Ekstensi Jaringan Sosial Power BI
Setelah mendefinisikan fitur data yang berbeda dari jaringan sosial, mari kita periksa pro dan kontra dari empat alat populer yang digunakan untuk memvisualisasikan jaringan di Power BI.
Perpanjangan | Grafik Jaringan Sosial oleh Arthur Graus | Navigator Jaringan | Jaringan Lanjutan oleh ZoomCharts (Edisi Ringan) | Visualisasi Kustom Menggunakan R |
---|---|---|---|---|
Ukuran simpul dinamis | Ya | Ya | Ya | Ya |
Ukuran tepi dinamis | Tidak | Ya | Tidak | Ya |
Kustomisasi warna simpul | Ya | Ya | Tidak | Ya |
Pemrosesan jejaring sosial yang kompleks | Tidak | Ya | Ya | Ya |
Gambar profil untuk node | Ya | Tidak | Tidak | Ya |
Zoom yang dapat disesuaikan | Tidak | Ya | Ya | Ya |
Penyaringan koneksi N teratas | Tidak | Tidak | Tidak | Ya |
Informasi khusus tentang hover | Tidak | Tidak | Tidak | Ya |
Kustomisasi warna tepi | Tidak | Tidak | Tidak | Ya |
Fitur canggih lainnya | Tidak | Tidak | Tidak | Ya |
Grafik Jaringan Sosial oleh Arthur Graus, Navigator Jaringan, dan Jaringan Lanjutan oleh ZoomCharts (Edisi Ringan) adalah ekstensi yang sesuai untuk mengembangkan jaringan sosial sederhana dan memulai analisis jaringan sosial pertama Anda.
Namun, jika Anda ingin membuat data Anda menjadi hidup dan mengungkap wawasan inovatif dengan visual yang menarik perhatian, atau jika jaringan sosial Anda sangat kompleks, saya sarankan untuk mengembangkan visual kustom Anda di R.
Visualisasi kustom ini adalah hasil akhir dari ekstensi jaringan sosial tutorial kami di R dan menunjukkan berbagai macam fitur dan properti node/edge yang ditawarkan oleh R.
Membangun Ekstensi Jejaring Sosial untuk Power BI Menggunakan R
Membuat ekstensi untuk memvisualisasikan jejaring sosial di Power BI menggunakan R terdiri dari lima langkah berbeda. Tapi sebelum kita bisa membangun ekstensi jaringan sosial kita, kita harus memuat data kita ke Power BI.
Prasyarat: Kumpulkan dan Siapkan Data untuk Power BI
Anda dapat mengikuti tutorial ini dengan kumpulan data uji berdasarkan data Twitter dan Facebook atau melanjutkan dengan jejaring sosial Anda sendiri. Data kami telah diacak; Anda dapat mengunduh data Twitter asli jika diinginkan. Setelah Anda mengumpulkan data yang diperlukan, tambahkan ke Power BI (misalnya, dengan mengimpor buku kerja Excel atau menambahkan data secara manual). Hasil Anda akan terlihat seperti tabel berikut:
Setelah Anda menyiapkan data, Anda siap membuat visualisasi khusus.
Langkah 1: Siapkan Template Visualisasi
Mengembangkan visualisasi Power BI tidaklah sederhana—bahkan visual dasar memerlukan ribuan file. Untungnya, Microsoft menawarkan perpustakaan yang disebut pbiviz
, yang menyediakan file pendukung infrastruktur yang diperlukan hanya dengan beberapa baris kode. Pustaka pbiviz
juga akan mengemas ulang semua file akhir kita menjadi file .pbiviz
yang dapat kita muat langsung ke Power BI sebagai visualisasi.
Cara termudah untuk menginstal pbiviz
adalah dengan Node.js. Setelah pbiviz
diinstal, kita perlu menginisialisasi visual R kustom kita melalui antarmuka baris perintah mesin kita:
pbiviz new toptalSocialNetworkByBharatGarg -t rhtml cd toptalSocialNetworkByBharatGarg npm install pbiviz package
Jangan lupa untuk mengganti toptalSocialNetworkByBharatGarg
dengan nama yang diinginkan untuk visualisasi Anda. -t rhtml
menginformasikan paket pbiviz
bahwa paket tersebut harus membuat template untuk mengembangkan visualisasi HTML berbasis R. Anda akan melihat kesalahan karena kami belum menentukan bidang seperti nama penulis dan email dalam paket kami, tetapi kami akan menyelesaikannya nanti di tutorial. Jika skrip pbiviz
tidak berjalan sama sekali di PowerShell, Anda mungkin perlu mengizinkan skrip dengan Set-ExecutionPolicy RemoteSigned
.
Pada eksekusi kode yang berhasil, Anda akan melihat folder dengan struktur berikut:

Setelah struktur folder siap, kita dapat menulis kode R untuk visualisasi kustom kita.
Langkah 2: Kodekan Visualisasi dalam R
Direktori yang dibuat pada langkah pertama berisi file bernama script.r
, yang terdiri dari kode default. (Kode default membuat ekstensi Power BI sederhana, yang menggunakan database sampel iris
yang tersedia di R untuk memplot histogram Petal.Length
oleh Petal.Species
.) Kami akan memperbarui kode tetapi mempertahankan struktur defaultnya, termasuk bagian yang dikomentari.
Proyek kami menggunakan tiga pustaka R:
- DiagrammeR: Membuat grafik dari teks
- visNetwork: Menyediakan visualisasi jaringan interaktif
- data.table: Membantu dengan organisasi data, mirip dengan data.frame
Mari kita ganti kode di bagian Library Declarations
dari script.r
untuk mencerminkan penggunaan perpustakaan kita:
libraryRequireInstall("DiagrammeR") libraryRequireInstall("visNetwork") libraryRequireInstall("data.table")
Selanjutnya kita akan mengganti kode pada bagian Actual code
dengan kode R kita. Sebelum membuat visualisasi kita, kita harus terlebih dahulu membaca dan mengolah data kita. Kami akan mengambil dua input dari Power BI:
-
num_records
: Input numerik N , sehingga kami hanya akan memilih koneksi N teratas dari jaringan kami (untuk membatasi jumlah koneksi yang ditampilkan) -
dataset
: Node dan edge jejaring sosial kami
Untuk menghitung koneksi N yang akan kita plot, kita perlu menggabungkan nilai num_records
karena Power BI akan menyediakan vektor secara default, bukan nilai numerik tunggal. Fungsi agregasi seperti max
mencapai tujuan ini:
limit_connection <- max(num_records)
Sekarang kita akan membaca dataset
sebagai objek data.table
dengan kolom kustom. Kami mengurutkan dataset berdasarkan nilai dalam urutan menurun untuk menempatkan koneksi yang paling sering di bagian atas tabel. Ini memastikan bahwa kami memilih catatan paling penting untuk diplot ketika kami membatasi koneksi kami dengan num_records
:
dataset <- data.table(from = dataset[[1]] ,to = dataset[[2]] ,value = dataset[[3]] ,col_sentiment = dataset[[4]] ,col_type = dataset[[5]] ,from_name = dataset[[6]] ,to_name = dataset[[7]] ,from_avatar = dataset[[8]] ,to_avatar = dataset[[9]])[ order(-value)][ seq(1, min(nrow(dataset), limit_connection))]
Selanjutnya, kita harus menyiapkan informasi pengguna dengan membuat dan mengalokasikan ID pengguna unik ( uid
) untuk setiap pengguna, menyimpannya di tabel baru. Kami juga menghitung jumlah total pengguna dan menyimpan informasi itu dalam variabel terpisah yang disebut num_nodes
:
user_ids <- data.table(id = unique(c(dataset$from, dataset$to)))[, uid := 1:.N] num_nodes <- nrow(user_ids)
Mari perbarui informasi pengguna kita dengan properti tambahan, termasuk:
- Jumlah pengikut (ukuran simpul).
- Jumlah record.
- Jenis pengguna (kode warna).
- Tautan avatar.
Kami akan menggunakan fungsi merge
R untuk memperbarui tabel:
user_ids <- merge(user_ids, dataset[, .(num_follower = uniqueN(to)), from], by.x = 'id', by.y = 'from', all.x = T)[is.na(num_follower), num_follower := 0][, size := num_follower][num_follower > 0, size := size + 50][, size := size + 10] user_ids <- merge(user_ids, dataset[, .(sum_val = sum(value)), .(to, col_type)][order(-sum_val)][, id := 1:.N, to][id == 1, .(to, col_type)], by.x = 'id', by.y = 'to', all.x = T) user_ids[id %in% dataset$from, col_type := '#42f548'] user_ids <- merge(user_ids, unique(rbind(dataset[, .('id' = from, 'Name' = from_name, 'avatar' = from_avatar)], dataset[, .('id' = to, 'Name' = to_name, 'avatar' = to_avatar)])), by = 'id')
Kami juga menambahkan uid
yang kami buat ke dataset asli sehingga kami dapat mengambil from
dan to
ID pengguna nanti dalam kode:
dataset <- merge(dataset, user_ids[, .(id, uid)], by.x = "from", by.y = "id") dataset <- merge(dataset, user_ids[, .(id, uid_retweet = uid)], by.x = "to", by.y = "id") user_ids <- user_ids[order(uid)]
Selanjutnya, kita membuat frame data node dan edge untuk visualisasi. Kami memilih style
dan shape
node kami (lingkaran penuh), dan memilih kolom yang benar dari tabel user_ids
kami untuk mengisi atribut color
, data
, value
, dan image
node kami:
nodes <- create_node_df(n = num_nodes, type = "lower",, color = user_ids$col_type, shape = 'circularImage', data = user_ids$uid, value = user_ids$size, image = user_ids$avatar, title = paste0("<p>Name: <b>", user_ids$Name,"</b><br>", "Super UID <b>", user_ids$id, "</b><br>", "# followers <b>", user_ids$num_follower, "</b><br>", "</p>") )
Demikian pula, kami memilih kolom tabel dataset
yang sesuai dengan atribut tepi kami from
, to
, dan color
:
edges <- create_edge_df(from = dataset$uid, to = dataset$uid_retweet, arrows = "to", color = dataset$col_sentiment)
Terakhir, dengan node dan bingkai data tepi siap, mari buat visualisasi kita menggunakan pustaka visNetwork
dan simpan dalam variabel yang akan digunakan kode default nanti, yang disebut p
:
p <- visNetwork(nodes, edges) %>% visOptions(highlightNearest = list(enabled = TRUE, degree = 1, hover = T)) %>% visPhysics(stabilization = list(enabled = FALSE, iterations = 10), adaptiveTimestep = TRUE, barnesHut = list(avoidOverlap = 0.2, damping = 0.15, gravitationalConstant = -5000))
Di sini, kami menyesuaikan beberapa konfigurasi visualisasi jaringan di visOptions dan visPhysics. Jangan ragu untuk melihat halaman dokumentasi dan memperbarui opsi ini sesuai keinginan. Bagian Actual code
kita sekarang selesai, dan kita harus memperbarui bagian Create and save widget
dengan menghapus baris p = ggplotly(g);
karena kami mengkodekan variabel visualisasi kami sendiri, p
.
Langkah 3: Siapkan Visualisasi untuk Power BI
Sekarang setelah kita selesai coding di R, kita harus membuat perubahan tertentu pada file JSON pendukung kita untuk mempersiapkan visualisasi untuk digunakan di Power BI.
Mari kita mulai dengan file capabilities.json
. Ini mencakup sebagian besar informasi yang Anda lihat di tab Visualisasi untuk visual, seperti sumber data ekstensi kami dan setelan lainnya. Pertama, kita perlu memperbarui dataRoles
dan mengganti nilai yang ada dengan peran data baru untuk input dataset
dan num_records
kita:
# ... "dataRoles": [ { "displayName": "dataset", "description": "Connection Details - From, To, # of Connections, Sentiment Color, To Node Type Color", "kind": "GroupingOrMeasure", "name": "dataset" }, { "displayName": "num_records", "description": "number of records to keep", "kind": "Measure", "name": "num_records" } ], # ...
Dalam file dataViewMappings
capabilities.json
Kami akan menambahkan conditions
yang harus dipatuhi oleh input kami, serta memperbarui scriptResult
agar sesuai dengan peran data baru kami dan ketentuannya. Lihat bagian conditions
, bersama dengan bagian select
di bawah scriptResult
, untuk perubahan:
# ... "dataViewMappings": [ { "conditions": [ { "dataset": { "max": 20 }, "num_records": { "max": 1 } } ], "scriptResult": { "dataInput": { "table": { "rows": { "select": [ { "for": { "in": "dataset" } }, { "for": { "in": "num_records" } } ], "dataReductionAlgorithm": { "top": {} } } } }, # ...
Mari kita beralih ke file dependencies.json
kita. Di sini, kami akan menambahkan tiga paket tambahan di bawah cranPackages
sehingga Power BI dapat mengidentifikasi dan menginstal pustaka yang diperlukan:
{ "name": "data.table", "displayName": "data.table", "url": "https://cran.r-project.org/web/packages/data.table/index.html" }, { "name": "DiagrammeR", "displayName": "DiagrammeR", "url": "https://cran.r-project.org/web/packages/DiagrammeR/index.html" }, { "name": "visNetwork", "displayName": "visNetwork", "url": "https://cran.r-project.org/web/packages/visNetwork/index.html" },
Catatan: Power BI harus menginstal pustaka ini secara otomatis, tetapi jika Anda mengalami kesalahan pustaka, coba jalankan perintah berikut:
install.packages(c("DiagrammeR", "htmlwidgets", "visNetwork", "data.table", "xml2"))
Terakhir, mari tambahkan informasi yang relevan untuk visual kita ke file pbiviz.json
. Saya akan merekomendasikan memperbarui bidang berikut:
- Bidang deskripsi visual
- URL dukungan visual
- URL GitHub visual
- Nama penulis
- email penulis
Sekarang, file kami telah diperbarui, dan kami harus mengemas ulang visualisasi dari baris perintah:
pbiviz package
Pada eksekusi kode yang berhasil, file .pbiviz
harus dibuat di direktori dist
. Seluruh kode yang tercakup dalam tutorial ini dapat dilihat di GitHub.
Langkah 4: Impor Visualisasi Ke Power BI
Untuk mengimpor visualisasi baru Anda di Power BI, buka laporan Power BI Anda (salah satu untuk data yang sudah ada atau yang dibuat selama langkah Prasyarat kami dengan data pengujian) dan navigasikan ke tab Visualisasi . Klik tombol … [opsi lainnya] dan pilih Impor visual dari file . Catatan: Anda mungkin harus memilih Edit terlebih dahulu di browser agar tab Visualisasi terlihat.
Navigasikan ke direktori dist
folder visualisasi Anda dan pilih file .pbiviz
untuk memuat visual Anda dengan mulus ke Power BI.
Langkah 5: Buat Visualisasi di Power BI
Visualisasi yang Anda impor sekarang tersedia di panel visualisasi. Klik ikon visualisasi untuk menambahkannya ke laporan Anda, lalu tambahkan kolom yang relevan ke set dataset
dan masukan num_records
:
Anda dapat menambahkan teks, filter, dan fitur tambahan ke visualisasi Anda tergantung pada persyaratan proyek Anda. Saya juga menyarankan Anda membaca dokumentasi terperinci untuk tiga pustaka R yang kami gunakan untuk lebih menyempurnakan visualisasi Anda, karena proyek contoh kami tidak dapat mencakup semua kasus penggunaan fungsi yang tersedia.
Meningkatkan Analisis Jaringan Sosial Anda Berikutnya
Hasil akhir kami adalah bukti kekuatan dan efisiensi R dalam hal membuat visualisasi Power BI kustom. Cobalah analisis jaringan sosial menggunakan visual khusus di R pada kumpulan data Anda berikutnya, dan buat keputusan yang lebih cerdas dengan wawasan data yang komprehensif.
Blog Toptal Engineering mengucapkan terima kasih kepada Leandro Roser karena telah meninjau contoh kode yang disajikan dalam artikel ini.