Latar Belakang
Museum Nasional adalah induk dari permuseuman di Indonesia. Di era teknologi, Museum Nasional telah melakukan banyak perkembangan dalam usahanya mengedukasi masyarakat tentang sejarah dan keberagaman budaya Indonesia, seperti dengan masuknya Museum Nasional di platform media sosial yang banyak digandrungi masyarakat seperti Twitter, Instagram, dan Youtube.
Untuk memaksimalkan penggunaan platform media social dapat dilakukan Social Network Analysis (SNA) terhadap akun media sosial dari Museum Nasional. Pada artikel ini akan dibahas mengenai salah satu SNA yaitu pembuatan Ego Network dari akun Twitter resmi Museum Nasional. Secara sederhana, Ego Network adalah jaringan yang mencakup akun target/yang kita analisis (ego) dan akun-akun lainnya yang terkoneksi dengannya. Dengan menganalisis Ego Network, kita dapat mengetahui hal-hal seperti:
- Mengidentifikasi Key Player dari network
- Menvisualisasi komunitas yang terdapat dalam network
Hasil analisis di atas dapat membantu untuk pembuatan strategi penyebaran informasi atau peningkatan engagement dari akun Twitter Museum Nasional. Menarik bukan?
Pengolahan data untuk SNA ini dapat dilakukan dengan bantuan bahasa pemrogramman seperti R dan Python. SNA sendiri menjadi salah satu pengaplikasian data science yang menarik.
Serangkaian tahapan dimulai dari pengumpulan data, pengolahan serta pengambilan insight akan dilakukan menggunakan R dan didemonstrasikan pada artikel ini. Selamat menelusuri!
Pengumpulan Data
Hal pertama yang perlu dilakukan untuk SNA adalah mengumpulkan data untuk pembuatan network. Pada artikel ini, pengumpulan data dilakukan dengan bantuan Twitter API dan package rtweet. Untuk lebih jauh mengenai pre-requisite Twitter API, berikut artikel acuan yang bisa ditelusur: “Twitter Interaction Analysis using twitnetverse”.
Setelah berhasil mengautentifikasi diri melalui Twitter API, kita dapat mulai mengumpulkan data menggunakan package rtweet. Hal pertama yang dapat dilakukan adalah mencari data mengenai akun yang sedang kita analisis.
# data akun @MuseumNasional per tanggal 11 Juni 2020
munas <- lookup_users(users = "MuseumNasional")
munas %>%
select(user_id, screen_name)
Follower Museum Nasional
Untuk membuat suatu jaringan, kita membutuhkan data akun-akun yang lain yang terkoneksi dengan akun @MuseumNasional. Oleh karena itu kita akan mengambil data follower dari @MuseumNasional sebagai berikut.
follower <- get_followers("MuseumNasional",
n = munas$followers_count,
retryonratelimit = T)
detail_follower <- lookup_users(follower$user_id)
# intip 6 data teratas followers @MuseumNasional
detail_follower %>%
select(user_id, screen_name, location,
followers_count, friends_count, favourites_count) %>%
head() %>%
# di bawah ini, nama akan disamarkan
# user_id dapat berubah tiap pengumpulan data sehingga pada contoh ini ditampilkan
mutate(screen_name = str_replace_all(screen_name,
pattern = "[a/i/u/e/o]",
replacement = "*"))
Pada kenyataannya akun Twitter @MuseumNasional memiliki 10,407 followers per tanggal 11 Juni 2020. Banyak sekali ya! :) Namun jumlah data sebanyak itu akan membutuhkan waktu yang amat lama untuk proses analisis. Untuk keperluan demonstrasi. Kita akan coba menyaring/filtering beberpa akun aktif saja dari total follower tersebut.
Sebelumnya, kita akan mulai merapihkan data yang kita punya terlebih dahulu.
# merapihkan data `detail_follower`
detail_follower <- detail_follower %>%
# mengambil kolom yang diperlukan
select(user_id,screen_name,created_at,
followers_count,friends_count,favourites_count) %>%
# data cleaning
mutate_all(as.character) %>%
mutate(created_at = ymd_hms(created_at),
followers_count = as.numeric(followers_count),
friends_count = as.numeric(friends_count),
favourites_count = as.numeric(favourites_count))
Berikutnya akan dilakukan filtering untuk akun follower @MuseumNasional. Ingin digunakan data active follower saja. Hal ini agar network yang terbuat akan terfokus pada akun aktif yang berpotensi menyebarkan informasi dari akun @MuseumNasional. Berikut adalah parameter yang harus dipenuhi tiap akun tersebut (dapat disesuaikan dengan kebutuhan):
- jumlah follower > 100
- jumlah follower < 810
- jumlah following (friends) > 100
- jumlah tweet favourites > 10
- post terakhir (created_at) > 2020-06-01 (1 Juni 2020)
- diambil 50 akun dengan jumlah followers terbanyak
Note:
- Nilai minimum follower < 810 berdasarkan nilai pagar atas (di atas tersebut adalah outlier/nilai ekstrim atas. Ini untuk mencegah adanya akun bisnis lain yang umumnya hanya mempromosikan mengenai bisnis sendiri.
# filter akun aktif
active_follower <- detail_follower %>%
filter((followers_count > 100 & followers_count < 810),
friends_count > 100,
favourites_count > 10,
created_at > "2020-06-01") %>%
arrange(-followers_count) %>%
head(50)
# intip 6 data teratas
head(active_follower)
Kita juga dapat menyimpan data active follower dalam sebuah file CSV:
# simpan data per 11 Juni 2020
# write.csv(active_follower, "munas_active_follower.csv", row.names = F)
Follower dari Follower
Selanjutnya dapat dikumpulkan data follower dari follower @MuseumNasional. Hal ini untuk melihat potensi penyebaran informasi dari Museum Nasional melalui followers mereka.
Akan diminimalisir pula jumlah follower yang diambil demi memadatkan informasi. Di bawah ini adalah fungsi untuk menentukan jumlah n follower yang didatanya akan diambil, dimana:
- diambil 50% follower bila memiliki > 360 follower (rata-rata jumlah follower)
- diambil 75% follower bila memiliki < 360 follower
flt_n <- function(x){
if(x > 360){
x*0.5
}else{x*0.75}
}
Pengumpulan data akan dilakukan secara looping. Sehingga terlebih dahulu dibuat wadah penyimpanan datanya. Perlu diketahui juga bahwa kita hanya akan berhasil mengambil data-data yang public (terdapat data-data yang tidak bisa diambil bila akun twitter terdaftar sebagai akun privat).
# buat list sebagai wadah pengumpulan data
foler <- vector(mode = 'list',
length = length(active_follower$screen_name))
# menamakan list
names(foler) <- active_follower$screen_name[1:50]
# pengumpulan data dengan looping
for (i in seq_along(active_follower$screen_name)) {
message("Getting followers for user #", i, "/50")
foler[[i]] <- get_followers(active_follower$screen_name[i],
n = round(flt_n(active_follower$followers_count[i])),
retryonratelimit = TRUE)
# gunakan sleeping automatis untuk mencegah error mendadak selama pengumpulan data karena limit yang tercapai, dll.
if(i %% 5 == 0){
message("sleep for 5 minutes")
Sys.sleep(5*60)
}
}
Selanjutnya dapat dilakukan perapihan data dimana digabungkan data active_follower dengan data foler (follower dari active follower) @MuseumNasional.
# mempersiapkan `key` untuk joining data
foler_id <- bind_rows(foler, .id = "screen_name")
active_fol_x <- active_follower %>% select(user_id, screen_name)
# join data
foler_join <- left_join(foler_id, active_fol_x, by="screen_name")
# rapihkan nama kolom & buang NA
munas_follower <- foler_join %>%
select(user_id.x,user_id.y) %>%
setNames(c("follower","active_user")) %>%
na.omit()
# simpan data per 11 Juni 2020
# write.csv(munas_follower, "munas_50_follower.csv", row.names = F)
Following dari Follower
Selanjutnya, dikumpulkan pula data following dari active follower @MuseumNasional. Jumlah following juga akan dipadatkan dimana:
- diambil 40% following bila memiliki > 2000 following
- diambil 65% following bila memiliki < 2000 following
flt_n_2 <- function(x){
if(x > 2000){
x*0.4
}else{x*0.65}
}
# buat wadah pengumpulan data
friend <- data.frame()
for (i in seq_along(active_follower$screen_name)) {
message("Getting following for user #", i, "/50")
kk <- get_friends(active_follower$screen_name[i],
n = round(flt_n_2(active_follower$friends_count[i])),
retryonratelimit = TRUE)
friend <- rbind(friend,kk)
if(i %% 5 == 0){
message("sleep for 5 minutes")
Sys.sleep(5*60)
}
}
Selanjutnya dapat dilakukan perapihan data dimana digabungkan data friend (following dari active follower) dengan data active_follower @MuseumNasional.
# joining berdasarkan `screen_name`
all_friend <- friend %>% setNames(c("screen_name","user_id"))
all_friendx <- left_join(all_friend, active_fol_x, by="screen_name")
# merapihkan nama kolom
munas_friend <- all_friendx %>%
select(user_id.x,user_id.y) %>%
setNames(c("following","active_user"))
# simpan data per 11 Juni 2020
# write.csv(munas_friend, "munas_50_friend.csv", row.names = F)
Buat Mutual Data
Setelah kita memiliki data follower dan following dari active follower @MuseumNasional, kita dapat membuat mutual data sehingga dapat membuat social network dua arah (two-sided-connection) yang saling terhubung dengan kuat. Istilah mutual dapat diartikan sebagai kondisi dimana 2 orang saling menfollow satu sama lain. Berikut adalah kodingan R untuk itu.
# cek akun unik di `munas_friend`
un_active <- unique(munas_friend$active_user) %>%
data.frame(stringsAsFactors = F) %>%
setNames("active_user")
# buat data.frame kosong untuk wadah
munas_mutual <- data.frame()
# looping untuk tiap active_user
# apakah id akun pada data `munas_friend$following` juga terdapat pada `munas_follower$follower`? Bila ada, simpan pada data `munas_mutual`.
for (i in seq_along(un_active$active_user)){
aa <- munas_friend %>%
filter(active_user == un_active$active_user[i])
bb <- aa %>% filter(aa$following %in% munas_follower$follower) %>%
setNames(c("mutual","active_user"))
munas_mutual <- rbind(munas_mutual, bb)
}
head(munas_mutual) # mutual: akun yang difollow dan menfollow active user
Karena kita akan membuat Ego Network untuk akun @MuseumNasional, sudah sepatutnya ada akun @MuseumNasional pada data. Namun sangat wajar bila @MuseumNasional tidak menfollow balik seluruh followersnya sehingga tidak terdapat data munas_mutual.
# cek bahwa id akun @MuseumNasional terdapat dalam `munas_mutual`
munas_mutual %>% filter(mutual == "622434157")
Sebagai tahap terakhir, kita akan memasukan akun @MuseumNasional dan followersnya kedalam data mutual. Kita akan gunakan data un_active, menambah kolom untuk id akun @MuseumNasional pada data tersebut, lalu digabungkan dengan data mutual.
# tambah kolom untuk id akun @MuseumNasional
un_active <- un_active %>%
mutate(mutual = rep("MuseumNasional")) %>%
select(2,1) # membenarkan urutan kolom
# gabungkan dengna data `munas_mutual`
munas_mutual <- rbind(munas_mutual, un_active)
# intip data mutual yang baru
tail(munas_mutual)
Setelah kita memiliki data mutual munas_mutual, akhirnya kita dapat melakukan social network analisis!
Social Network Analysis
Dalam SNA, kita sebenarnya memanfaatkan grafik (dan komponen-komponennya) untuk membantu kita menganalisis network/jaringan. Berikut adalah tahapan-tahapannya:
Siapkan Nodes & Edges
Suatu network terdiri dari nodes (titik) dan edges (relasi antar titik). Node dapat diartikan juga sebagai user dalam social network analysis dan edges dapat diartikan sebagai hubungan atau koneksi antar user.
Kita dapat membuat nodes dan edges tersebut dari data follower dan following yang telah kita kumpulkan sebelumnya yaitu data munas_mutual.
# membuat nodes untuk tiap akun unik di data
nodes <- data.frame(V = unique(c(munas_mutual$mutual,
munas_mutual$active_user)),
stringsAsFactors = F)
# membuat edges
edges <- munas_mutual %>%
setNames(c("from","to"))
Di atas adalah user_id dari akun-akun unik yang terdapat pada data munas mutual, berikut koneksinya antar satu dengan yang lain. Untuk menggabungkannya menjadi sebuah data grafik untuk pembuatan Ego Network kita dapat menggunakan package igraph.
# buat data.frame untuk grafik network
munas_ego <- igraph::graph_from_data_frame(d = edges,
vertices = nodes,
directed = F) %>%
as_tbl_graph()
#> # A tbl_graph: 5973 nodes and 17518 edges
#> #
#> # An undirected multigraph with 1 component
#> #
#> # Node Data: 5,973 x 6 (active)
#> name community degree_c betweenness_c closeness_c eigen
#> <chr> <fct> <dbl> <dbl> <dbl> <dbl>
#> 1 1209178993 22 5 0 0.251 0.00000603
#> 2 41082800 22 5 0 0.251 0.00000603
#> 3 229454097 22 5 0 0.251 0.00000603
#> 4 66110839 22 5 0 0.251 0.00000603
#> 5 1251366161381339138 22 5 0 0.251 0.00000603
#> 6 367117115 22 5 0 0.251 0.00000603
#> # ... with 5,967 more rows
#> #
#> # Edge Data: 17,518 x 2
#> from to
#> <int> <int>
#> 1 1 5926
#> 2 2 5926
#> 3 3 5926
#> # ... with 17,515 more rows
Bangun Komunitas & Hitung Metrics
Setelah membuat data grafik, kita akan melengkapi data tersebut dengan metrics-metrics yang umum digunakan pada SNA dan kemungkinan komunitas yang dapat terbentuk pada suatu network. Kita akan menggunakan tidygraph coding style untuk SNA ini agar codingan kita lebih rapih. Style ini juga umum digunakan untuk package igraph yang kita gunakan.
Untuk membuat komunitas, terdapat beragam algoritma yang dapat digunakan. Untuk artikel ini, kita akan menggunakan algoritma group_louvain(). Kita juga akan menghitung 4 metrics yang berguna untuk pengidentifikasian Key Player yang akan dijelaskan di bagian berikutnya.
set.seed(123)
munas_ego <- munas_ego %>%
# analisis komunitas
mutate(community = as.factor(group_louvain())) %>%
# analisis beragam metrics
mutate(degree_c = centrality_degree()) %>%
mutate(betweenness_c = centrality_betweenness(directed = F,
normalized = T)) %>%
mutate(closeness_c = centrality_closeness(normalized = T)) %>%
mutate(eigen = centrality_eigen(directed = F))
#> # A tbl_graph: 5973 nodes and 17518 edges
#> #
#> # An undirected multigraph with 1 component
#> #
#> # Node Data: 5,973 x 6 (active)
#> name community degree_c betweenness_c closeness_c eigen
#> <chr> <fct> <dbl> <dbl> <dbl> <dbl>
#> 1 1209178993 22 5 0 0.251 0.00000603
#> 2 41082800 22 5 0 0.251 0.00000603
#> 3 229454097 22 5 0 0.251 0.00000603
#> 4 66110839 22 5 0 0.251 0.00000603
#> 5 1251366161381339138 22 5 0 0.251 0.00000603
#> 6 367117115 22 5 0 0.251 0.00000603
#> # ... with 5,967 more rows
#> #
#> # Edge Data: 17,518 x 2
#> from to
#> <int> <int>
#> 1 1 5926
#> 2 2 5926
#> 3 3 5926
#> # ... with 17,515 more rows
Analisis Key Player
Key player adalah istilah untuk user paling berpengaruh dalam suatu network. Umumnya Key Player ditentukan berdasarkan beberape metrics yang telah kita hitung sebelumnya, yaitu:
- Degree Centrality: Node/user yang memiliki relasi terbanyak
- Closeness Centrality: Node/user yang memiliki jarak rata-rata terpendek ke semua node di dalam network (berpotensi untuk penyebaran informasi yang lebih cepat)
- Betweeness Centrality: Node/user sering berperan sebagai “jembatan informasi” antar node atau komunitas di dalam suatu network (berpotensi untuk penyebaran informasi yang lebih luas)
- Eigen Centrality: Node/user yang memiliki kedekatan tinggi dengan node lain yang mempunyai pengaruh besar di seluruh network. Dapat dianalogikan seperti teman dari seorang influencer.
Kita dapat mengurutkan data kita berdasarkan metrics yang diunggulkan untuk mencari Key Player. Urutan tersebut dapat disesuaikan dengan kebutuhan. Hal ini karena masing-masing metrics memiliki manfaatnya tersendiri. Untuk lebih memudahkan analisis, kita akan mengubah munas_ego ke struktur data.frame dan melakukan sorting berdasarkan 4 metrics di atas.
munas_ego_df <- as.data.frame(munas_ego)
Selanjutnya kita akan cari key player untuk tiap-tiap metrics:
kp_ego <- data.frame(
munas_ego_df %>% arrange(-degree_c) %>% select(name) %>% slice(1:6),
munas_ego_df %>% arrange(-betweenness_c) %>% select(name) %>% slice(1:6),
munas_ego_df %>% arrange(-closeness_c) %>% select(name) %>% slice(1:6),
munas_ego_df %>% arrange(-eigen) %>% select(name) %>% slice(1:6)
) %>%
setNames(c("degree","betweenness","closeness","eigen"))
Tabel di atas menunjukan user id dari akun-akun yang memiliki nilai tinggi di masing-masing metrics.
- Degree Centrality: user 2310002845
- Closeness Centrality: user 2310002845
- Betweeness Centrality: user 2310002845
- Eigen Centrality: user 2310002845
Perhatikan bahwa akun MuseumNasional berada pada urutan teratas pada metrics betweeness dan centrality. Hal ini wajar karena ini adalah ego_network dari akun tersebut, namun tidak tepat untuk dijadikan key player dari network. Untuk mencari key player yang dari metrics betweeness dan centrality, kita dapat melihat urutan kedua dari kolom masing-masing.
Diketahui bahwa user dengan id 2310002845 memiliki nilai yang paling tinggi di keempat metrics yang kita hitung. Ia memiliki relasi paling banyak, berteman dengan akun-akun “influencer” yang lain, dan berpotensi untuk penyebaran informasi yang lebih cepat dan lebih luas.
Kita dapat cek screen_name dan lihat beberapa data dari user tersebut sebagai berikut.
active_follower %>%
filter(user_id == 2310002845) %>%
# di bawah ini untuk penyamaran screen_name
mutate(screen_name = str_replace_all(screen_name,
pattern = "[a/i/u/e/o]",
replacement = "*"))
Setelah diulik, ternyata akun tersebut sepertinya merupakan akun fanbase/fan dari grup musik korea. Ia banyak memposting mengenai grup musik favoritnya tersebut. Akun ini mungkin memiliki akses komunitas ke pencinta musik korea. Namun perlu dievaluasi apakah akun ini cocok untuk diraih dengan harapan menyebarkan info dari twitter @MuseumNasional? Karakter posting tiap akun perlu ditelusur, karena ada saja akun yang hanya posting mengenai hal yang mereka fokuskan, sehingga kurang maksimal untuk penyebaran informasi.
Pada tahapan ini, kita bisa mulai memanfaatkan pengetahuan bisnis dalam menganalisis data sesuai kebutuhan. Sebagai contoh, untuk meraih cakupan audiens yang lebih luas, kita lebih mengunggulkan metrics betweeness centrality dibandingkan metrics lainnya. Kita dapat mengulik 5 follower yang memiliki nilai betweeness centrality tertinggi.
active_follower %>%
filter(user_id %in% c("2310002845",
"104525841",
"1027584500",
"1011544482704076801",
"77721083")) %>%
# di bawah ini untuk penyamaran screen_name
mutate(screen_name = str_replace_all(screen_name,
pattern = "[a/i/u/e/o]",
replacement = "*"))
Dari kelima akun tersebut, akun ke-4 mungkin memiliki potensi untuk diajak kerja sama untuk share tweet-tweet dari @MuseumNasional. Beliau adalah seorang blogger, freelance editor/ content writer/ copywriter/ translator dan cukup sering posting mengenai hal-hal bertajuk budaya.
Secara umum, akun-akun di atas memiliki potensi untuk menyebarkan informasi di network twitter @MuseumNasional secara luas. Museum nasional dapat memanfaatkan data di atas untuk misalnya melakukan survey yang lebih terarah. Misalkan survey mengenai alasan mereka mengikuti akun @MuseumNasional, informasi apa yang dibutuhkan/menarik untuk mereka dan komunitas mereka. Dengan begitu, Museum Nasional dapat membuat konten yang tepat dan lebih menarik untuk postingan selanjutnya. Beberapa akun bahkan bisa diajak kolaborasi konten/sharing yang menarik, agar enggagement dari akun twitter @MuseumNasional meningkat.
Analisis Komunitas
Kita juga dapat menganalisis adanya komunitas yang dapat terbentuk di suatu network. Package igraph mengimplementasikan beberapa algoritma untuk deteksi komunitas diantaranya:
group_walktrap()
group_fast_greedy()
group_louvain()
Pada artikel ini kita menggunakan group_louvain() yang menggunakan optimisasi modularitas. Kita tidak akan membahas detail mengenai teori lengkap di baliknya, namun berikut artikel jurnal mengenai penggunaan metode tersebut. Nilai modularitas/modularity sendiri adalah nilai yang menunjukkan seberapa baik tiap komunitas terpisah antar satu sama lain. Secara singkat, network dengan modularity yang tinggi memiliki jaringan yang padat di tiap komunitasnya, namun memiliki koneksi yang jarang antar komunitas yang berbeda.
Sebelumnya dihasilkan 36 komunitas dari total 5973 akun yang ada:
# total user
nrow(munas_ego_df)
#> [1] 5973
# jumlah komunitas
length(levels(munas_ego_df$community))
#> [1] 36
# kita dapat hitung nilai modularitasnya
cw_net <- igraph::cluster_louvain(graph = munas_ego)
igraph::modularity(cw_net)
#> [1] 0.9111789
Nilai modularity berkisar antara 0-1. Dari hasil perhitungan di atas, ternyata network akun Twitter @MuseumNasional memiliki komunitas yang terbagi dengan baik atau berbeda satu sama lain. Meskipun begitu, masih ada kemungkinan beberapa komunitas yang memiliki kemiripan antar satu dengan yang lain, atau amat berbeda dari yang lainnya (memiliki identitas yang jelas). Untuk melihatnya, akan lebih mudah bila kita menggunakan visualisasi grafik.
Dalam contoh visualisasi ini, kita akan mencoba mewarnai tiap node (user) berdasarkan komunitas mereka, setting ukuran node berdasarkan jumlah koneksi mereka, dan menampilkan user_id dari user yang memiliki niali betweeness centrality cukup tinggi. Dalam contoh ini kita gunakan nilai betweeness centrality lebih dari 0.06, meskipun nilai tersebut kembali lagi kepada kebutuhan.
# sebelumnya kita akan import font untuk visualisasi grafik
library(extrafont)
loadfonts(device = "win")
# visualisasi network
library(ggraph)
plot <- munas_ego %>%
top_n(500, degree_c) %>%
mutate(node_size = ifelse(degree_c >= 20,degree_c,0)) %>%
mutate(node_label = ifelse(betweenness_c >= 0.06,name,"")) %>%
ggraph(layout = "stress") +
geom_edge_fan(alpha = 0.05) +
geom_node_point(aes(color = as.factor(community), size = node_size)) +
geom_node_label(aes(label = node_label), repel = T,
show.legend = F, fontface = "bold", label.size = 0,
segment.colour="slateblue", fill = "#ffffff66") +
coord_fixed() +
theme_graph() +
theme(legend.position = "right") +
labs(title = "@MuseumNasional Network",
color = "Community", size = "Degree Centrality")
# menyimpan plot di direktori lokal
# saveRDS(plot,"plot.rds")

Sebagai informasi, @MuseumNasional masuk di dalam komunitas ke 15.
munas_ego_df %>%
filter(name == "MuseumNasional")
Dari visualisasi di atas, komunitas ke-15 dengan node warna hijau terletak di bagian tengah dan cukup tumpang tindih jaringannya dengan komunitas berwarna ungu dan biru. Komunitas ini kemungkinan akan lebih mudah diraih oleh Museum Nasional. Namun, terdapat pula komunitas lain yang amat terpisah (berwarna coral, oranye, dan emas) dan berpotensi untuk bisa dijangkau dengan lebih baik oleh Museum Nasional. Museum Nasional dapat memanfaatkan penyebaran informasi via user_id yang memiliki betweenes centrality tinggi yang tertampilkan pada grafik.
Karakter dari tiap komunitas dapat ditelusur sehingga Museum Nasional mengetahui komunitas apa saja yang sudah mereka raih dan komunitas apa saja yang belum (dari target yang ada). Hasil analisis atau profiling dari tiap komunitas juga dapat membantu dalam perancangan strategi approach untuk masing-masing komunitas.
Kesimpulan
Social Network Analisis dari akun Twitter @MuseumNasional dapat memberikan banyak insight yang membantu dalam peningkatan engagement Twitter @MuseumNasional. Didapatkan beberapa Key Player yang dapat dijadikan fokus untuk penyebaran informasi yang lebih luas dan diketahui adanya komunitas-komunitas di dalam sosial network twitter @MuseumNasional.
Semoga artikel ini dapat membuka ide mengenai pemanfaatan akun sosial media untuk Museum Nasional, dan bahkan akun-akun bisnis/pemerintahan lainnya. Semoga artikel ini dapat menjadi pionir artikel-artikel lainnya dalam memanfaatkan Data Science untuk mendukung kemajuan Indonesia!
Artikel ini tidak akan ada tanpa training yang menarik dan bermanfaat dari Joe Christian, salah satu Junior Instructor di Algoritma Data Science Education Centre. Klik di sini untuk membaca artikel acuan milik Joe untuk yang tertarik mempelajari lebih jauh dan mendalam mengenai Social Network Analysis dan aplikasinya.
Untuk yang tertarik mempelajari data science dan aplikasinya, bahkan untuk yang belum memiliki background programming atau statistik, kamu bisa banget daftar kelas di Algoritma Data Science School. Algoritma yang merupakan sekolah data science pertama di Indonesia yang memiliki pengajar bersertifikasi RStudio pertama di Asia. Algoritma menyediakan tempat untuk belajar mengenai data science and machine learning untuk siapa saja, termasuk untuk orang yang tidak pernah melakukan programming. Jangan ragu untuk kunjungi websitenya: algorit.ma.
Semoga artikel ini bermanfaat!
Social Network Analysis
Dalam SNA, kita sebenarnya memanfaatkan grafik (dan komponen-komponennya) untuk membantu kita menganalisis network/jaringan. Berikut adalah tahapan-tahapannya:
Siapkan Nodes & Edges
Suatu network terdiri dari nodes (titik) dan edges (relasi antar titik). Node dapat diartikan juga sebagai user dalam social network analysis dan edges dapat diartikan sebagai hubungan atau koneksi antar user.
Kita dapat membuat nodes dan edges tersebut dari data follower dan following yang telah kita kumpulkan sebelumnya yaitu data
munas_mutual.Di atas adalah
user_iddari akun-akun unik yang terdapat pada data munas mutual, berikut koneksinya antar satu dengan yang lain. Untuk menggabungkannya menjadi sebuah data grafik untuk pembuatan Ego Network kita dapat menggunakan packageigraph.Bangun Komunitas & Hitung Metrics
Setelah membuat data grafik, kita akan melengkapi data tersebut dengan metrics-metrics yang umum digunakan pada SNA dan kemungkinan komunitas yang dapat terbentuk pada suatu network. Kita akan menggunakan
tidygraphcoding style untuk SNA ini agar codingan kita lebih rapih. Style ini juga umum digunakan untuk packageigraphyang kita gunakan.Untuk membuat komunitas, terdapat beragam algoritma yang dapat digunakan. Untuk artikel ini, kita akan menggunakan algoritma
group_louvain(). Kita juga akan menghitung 4 metrics yang berguna untuk pengidentifikasian Key Player yang akan dijelaskan di bagian berikutnya.Analisis Key Player
Key player adalah istilah untuk user paling berpengaruh dalam suatu network. Umumnya Key Player ditentukan berdasarkan beberape metrics yang telah kita hitung sebelumnya, yaitu:
Kita dapat mengurutkan data kita berdasarkan metrics yang diunggulkan untuk mencari Key Player. Urutan tersebut dapat disesuaikan dengan kebutuhan. Hal ini karena masing-masing metrics memiliki manfaatnya tersendiri. Untuk lebih memudahkan analisis, kita akan mengubah
munas_egoke strukturdata.framedan melakukan sorting berdasarkan 4 metrics di atas.Selanjutnya kita akan cari key player untuk tiap-tiap metrics:
Tabel di atas menunjukan user id dari akun-akun yang memiliki nilai tinggi di masing-masing metrics.
Perhatikan bahwa akun MuseumNasional berada pada urutan teratas pada metrics betweeness dan centrality. Hal ini wajar karena ini adalah ego_network dari akun tersebut, namun tidak tepat untuk dijadikan key player dari network. Untuk mencari key player yang dari metrics betweeness dan centrality, kita dapat melihat urutan kedua dari kolom masing-masing.
Diketahui bahwa user dengan id 2310002845 memiliki nilai yang paling tinggi di keempat metrics yang kita hitung. Ia memiliki relasi paling banyak, berteman dengan akun-akun “influencer” yang lain, dan berpotensi untuk penyebaran informasi yang lebih cepat dan lebih luas.
Kita dapat cek
screen_namedan lihat beberapa data dari user tersebut sebagai berikut.Setelah diulik, ternyata akun tersebut sepertinya merupakan akun fanbase/fan dari grup musik korea. Ia banyak memposting mengenai grup musik favoritnya tersebut. Akun ini mungkin memiliki akses komunitas ke pencinta musik korea. Namun perlu dievaluasi apakah akun ini cocok untuk diraih dengan harapan menyebarkan info dari twitter @MuseumNasional? Karakter posting tiap akun perlu ditelusur, karena ada saja akun yang hanya posting mengenai hal yang mereka fokuskan, sehingga kurang maksimal untuk penyebaran informasi.
Pada tahapan ini, kita bisa mulai memanfaatkan pengetahuan bisnis dalam menganalisis data sesuai kebutuhan. Sebagai contoh, untuk meraih cakupan audiens yang lebih luas, kita lebih mengunggulkan metrics betweeness centrality dibandingkan metrics lainnya. Kita dapat mengulik 5 follower yang memiliki nilai betweeness centrality tertinggi.
Dari kelima akun tersebut, akun ke-4 mungkin memiliki potensi untuk diajak kerja sama untuk share tweet-tweet dari @MuseumNasional. Beliau adalah seorang blogger, freelance editor/ content writer/ copywriter/ translator dan cukup sering posting mengenai hal-hal bertajuk budaya.
Secara umum, akun-akun di atas memiliki potensi untuk menyebarkan informasi di network twitter @MuseumNasional secara luas. Museum nasional dapat memanfaatkan data di atas untuk misalnya melakukan survey yang lebih terarah. Misalkan survey mengenai alasan mereka mengikuti akun @MuseumNasional, informasi apa yang dibutuhkan/menarik untuk mereka dan komunitas mereka. Dengan begitu, Museum Nasional dapat membuat konten yang tepat dan lebih menarik untuk postingan selanjutnya. Beberapa akun bahkan bisa diajak kolaborasi konten/sharing yang menarik, agar enggagement dari akun twitter @MuseumNasional meningkat.
Analisis Komunitas
Kita juga dapat menganalisis adanya komunitas yang dapat terbentuk di suatu network. Package
igraphmengimplementasikan beberapa algoritma untuk deteksi komunitas diantaranya:group_walktrap()group_fast_greedy()group_louvain()Pada artikel ini kita menggunakan
group_louvain()yang menggunakan optimisasi modularitas. Kita tidak akan membahas detail mengenai teori lengkap di baliknya, namun berikut artikel jurnal mengenai penggunaan metode tersebut. Nilai modularitas/modularity sendiri adalah nilai yang menunjukkan seberapa baik tiap komunitas terpisah antar satu sama lain. Secara singkat, network dengan modularity yang tinggi memiliki jaringan yang padat di tiap komunitasnya, namun memiliki koneksi yang jarang antar komunitas yang berbeda.Sebelumnya dihasilkan 36 komunitas dari total 5973 akun yang ada:
Nilai modularity berkisar antara 0-1. Dari hasil perhitungan di atas, ternyata network akun Twitter @MuseumNasional memiliki komunitas yang terbagi dengan baik atau berbeda satu sama lain. Meskipun begitu, masih ada kemungkinan beberapa komunitas yang memiliki kemiripan antar satu dengan yang lain, atau amat berbeda dari yang lainnya (memiliki identitas yang jelas). Untuk melihatnya, akan lebih mudah bila kita menggunakan visualisasi grafik.
Dalam contoh visualisasi ini, kita akan mencoba mewarnai tiap node (user) berdasarkan komunitas mereka, setting ukuran node berdasarkan jumlah koneksi mereka, dan menampilkan user_id dari user yang memiliki niali betweeness centrality cukup tinggi. Dalam contoh ini kita gunakan nilai betweeness centrality lebih dari 0.06, meskipun nilai tersebut kembali lagi kepada kebutuhan.
Sebagai informasi, @MuseumNasional masuk di dalam komunitas ke 15.
Dari visualisasi di atas, komunitas ke-15 dengan node warna hijau terletak di bagian tengah dan cukup tumpang tindih jaringannya dengan komunitas berwarna ungu dan biru. Komunitas ini kemungkinan akan lebih mudah diraih oleh Museum Nasional. Namun, terdapat pula komunitas lain yang amat terpisah (berwarna coral, oranye, dan emas) dan berpotensi untuk bisa dijangkau dengan lebih baik oleh Museum Nasional. Museum Nasional dapat memanfaatkan penyebaran informasi via user_id yang memiliki betweenes centrality tinggi yang tertampilkan pada grafik.
Karakter dari tiap komunitas dapat ditelusur sehingga Museum Nasional mengetahui komunitas apa saja yang sudah mereka raih dan komunitas apa saja yang belum (dari target yang ada). Hasil analisis atau profiling dari tiap komunitas juga dapat membantu dalam perancangan strategi approach untuk masing-masing komunitas.