Clustering Analysis, atau Analisis Pengelompokan, adalah teknik dalam bidang statistika dan mesin pembelajaran yang bertujuan untuk mengelompokkan atau mengidentifikasi pola dalam data. Tujuan utamanya adalah mengumpulkan objek-objek serupa ke dalam kelompok atau klaster, sehingga objek dalam satu klaster memiliki kesamaan yang tinggi antara satu sama lain
Sedangkan Clustering data tweet dapat membantu mengidentifikasi topik atau tren tertentu dalam percakapan online, mengelompokkan tweet berdasarkan sentimen, atau bahkan menemukan kelompok-kelompok yang mungkin tidak terduga dalam data tweet.
Langkah pertama yang dilakukan adalah menginstal dan memuat beberapa Packages atau Library yang diperlukan. Data yang digunakan adalah data tweet tentang kasus pembunuhan.
wordcloud:Untuk membuat visualisasi word cloud yang menampilkan kata-kata dengan ukuran proporsional terhadap frekuensinya dalam teks. Berguna dalam memberikan gambaran umum tentang kata-kata yang paling sering muncul.
tm : Digunakan untuk membuat Term-Document Matrix (TDM) yang dapat digunakan sebagai input untuk analisis clustering. Paket ini menyediakan fungsi-fungsi untuk pra-pemrosesan teks.
textclean : Memberikan fungsi-fungsi untuk membersihkan dan memproses teks dengan efektif. Langkah pra-pemrosesan teks seperti mengubah huruf menjadi huruf kecil, mengembalikan kata singkatan, dan lainnya dapat membantu dalam meningkatkan kualitas analisis clustering.
tidytext : analisis teks yang bersih dan terstruktur menggunakan konsep rapi data. Berguna untuk mengorganisir teks data dalam format yang mudah digunakan untuk analisis clustering.
dplyr : untuk melakukan manipulasi dan transformasi data dengan sintaks yang mudah dipahami.
tidyverse : Dirancang untuk membuat analisis data menggunakan R menjadi lebih mudah, konsisten, dan efisien. Ini mencakup berbagai paket seperti ggplot2 untuk visualisasi, dplyr untuk manipulasi data, rapir untuk keperluan kebersihan data, dan banyak lagi.
stringr : untuk memanipulasi teks, mencocokkan pola string, dan mengelola teks dalam konteks pengolahan data.
# Install dan load paket-paket yang diperlukan
library(dplyr)
library(stringr)
library(tm)
library(textclean)
library(tidyverse)
library(wordcloud)
library(tidytext)
library(readr)
Pembunuhan <- read_csv("C:/Users/LENOVO/Downloads/Pembunuhan.csv")
tweet <- Pembunuhan$full_text
head(tweet)
## [1] "WOW ini mungkin jurnalisme terpenting mengenai perang di Gaza ditulis oleh surat kabar Israel Pada dasarnya mereka mengkonfirmasi dengan sumber yang tidak dapat disangkal bahwa pembunuhan terhadap warga sipil semuanya telah diperhitungkan dan disengaja. Ikuti Thread singkat https://t.co/LaSWoNxMsU"
## [2] "⭕Alhamdulillah... Kabar gembira bagi kaum mukmin. 2 agen zionis (mata-mata) yg trlibat pembunuhan 4 syuhada pd 7 /11/23 sudah di tangkap dan di eksekusi langung di depan umum dan di depan keluarga para syuhada ini 👇Lanjutan.......... https://t.co/vUiAxGLVvf"
## [3] "Tuntutan hukuman mati dan di berhentikan dari keanggotaan TNI bagi para pelaku penculikan dan pembunuhan pemuda Aceh imam mansykur Km50 harusnya juga sama .. hukum mati semua pelakunya https://t.co/aYT9RKj8Pr"
## [4] "Adegan penyelamatan 38 anak² dan perempuan setelah rumah mereka dibom dengan bom api sebelum gencatan senjata berlaku. Pembunuhan dengan cara dibakar adalah metode Nazi yang biadab dan karena mereka adalah anak² Gaza🇵🇸 tidak ada yang angkat bicara😢 https://t.co/wtzvjzntMn"
## [5] "Demonstrasi di Morocco untuk menyokong Palestin menolak normalisasi dan mengutuk pembunuhan beramai-ramai penjajah Israel di Gaza. https://t.co/e06r0kR1Zw"
## [6] "currently reading ; (malice) catatan pembunuhan sang novelis ㅡby keigo higashino and translated by faira ammadea 304 pages baca di google play books 🌷buddy read w ; @lionaklou @dlvvarch @bearnadst https://t.co/Qjvsrz8KN1"
# Menghapus URL dan bentuk symbol Emotion
tweet_text <- str_replace_all(tweet, "http\\S+|www\\S+|https\\S+ [^[:graph:][:space:]]", "")
# Contoh menghapus karakter yang tidak dikenali
data_clean <- gsub("[^A-Z a-z]", "", tweet_text)
# lower case = mengubah huruf kapital menjadi huruf kecil
rev <- tolower(data_clean)
#Mengembalikan Kata yang disingkat Menjadi Kata Aslinya
rev <- replace_contraction(rev)
#Mengembalikan Kata yang Mengalami Perpanjangan Menjadi Kata Aslinya
rev <- replace_word_elongation(rev)
#Menghapus simbol
rev <- strip(rev)
#tokenisasi = metode untuk melakukan pemisahan kata dalam suatu kalimat dengan
rev <- rev %>%
rev()
head(rev)
## [1] "mpraldo pelaku provokasi secara umum menyerukan pembunuhan terhadap warga negara indonesia termasuk yang berada di jakarta ini mengindikasikan kebencian terhadap indonesia yang sangat mendalam patut diduga pelaku bukan saja simpatisan namun juga orang yang terafiliasi oleh kelompok"
## [2] "pembunuhan"
## [3] "kasus salah tangkap lain menimpa seorang buruh pabrik ia dituduh bersekongkol melakukan pembunuhan amp disiksa utk menandatangani bap ats kasus yg tak dilakukan saat bebas pun ia tdk mendpt ganti rugi yg sebanding dgn kerugian yg telah dialaminya nantikan kisah selengkapnya"
## [4] "cipikacipiki dubes uni emirat arab uea dan dubes rezim israel pembunuh anakanak palestina di pbb sangat memalukan dimana saudara arabmu dibantai kau malah bermesraan dengan pembunuhan saudara arabmu"
## [5] "ini bukan kes bunuh diri ini kes pembunuhan kogoro mouris voice adambukanadam"
## [6] "soal matmin ini latihan apa pembunuhan pak"
#menghapus kata beberapa kata yang tidak penting
rev <-removeWords(rev, c( "kontenberfaedah", "melihat","gencatan","sendangguwo","genosida", "tidak","x","aljazeera","ke","p","l","stin","atas","kami","spmr","netanyahu","syuhada","tapi","gz", "bagi", "hati", "israel", "kemana", "massal","almh", "orang", "saudi", "wahai","zionis", "dari", "fitnah", "kejam", "lebih", "aja", "berencana", "ga", "kerja", "kuat","poin", "nya", "pemimpin", "yg", "mah", "ada", "banget", "kredivo", "rame", "rumah","sampe", "udah", "viral", "video", "dah", "gue", "namanya", "dalam", "awam","beramairamai", "bom", "dan","i", "mw", "dia", "seorang", "mereka", "wowo", "jatanras", "sumsel", "almabhouh", "mahmoud","sprm","islam", "mossad","arah","rakaman","melakukan","roket","full","rndlstvns","posisicerdas","pembunuhanknp","ga","kaharman","howtodresvvell","klo","amp","gaza","palestina","httpstco","ini","ketika","kalau","juga","yang","zpuzvzgt","ato","listyosigitp","sih","tuhnov","nov","tuh","tau","akan","pak","bone","tetty","sseorang","hannibal","batuaji","via","rumondang","ganjarpranowo", "kalo","lain","gitu","palestin","sama","baru","di","oleh","bisa","jadi","tak","yang","itu","adalah","untuk","karena","siri","jika","telah","dilakukan","pada","saat","para","apa","kayak","pers","dengan","terhadap","hamas","hal","dgn","sirul","bahwa","kes","mpraldo ","cipikacipiki dubes uni emirat arab uea dubes rezim pembunuh anakanak","mendpt","pembunuhan kogoro mouris voice adambukanadam","utk","matmin"))
head(rev)
## [1] "pelaku provokasi secara umum menyerukan pembunuhan warga negara indonesia termasuk berada jakarta mengindikasikan kebencian indonesia sangat mendalam patut diduga pelaku bukan saja simpatisan namun terafiliasi kelompok"
## [2] "pembunuhan"
## [3] "kasus salah tangkap menimpa buruh pabrik ia dituduh bersekongkol pembunuhan disiksa menandatangani bap ats kasus bebas pun ia tdk ganti rugi sebanding kerugian dialaminya nantikan kisah selengkapnya"
## [4] "cipikacipiki dubes uni emirat arab uea dubes rezim pembunuh anakanak pbb sangat memalukan dimana saudara arabmu dibantai kau malah bermesraan pembunuhan saudara arabmu"
## [5] " bukan bunuh diri "
## [6] "soal latihan pembunuhan "
##Membuat Word Cloud
#Mengubah Data Frame Menjadi Data Faktor
tdm <- TermDocumentMatrix(rev)
m <- as.matrix(tdm)
v <- sort(rowSums(m),decreasing = TRUE)
d <- data.frame(word = names(v), freq = v)
wordcloud(d$word, d$freq,
random.order = FALSE,
max.words = 25,
colors = brewer.pal(name = "Dark2",5 ))
# inspect frequent words
freq.terms <- findFreqTerms(tdm, lowfreq = 1)
term.freq <- rowSums(as.matrix(tdm))
term.freq <- subset(term.freq, term.freq >10 )
df <- data.frame(term = names(term.freq), freq = term.freq)
ggplot(df, aes(x = term, y = freq)) + geom_bar(stat = "identity") +
xlab("Terms") + ylab("Count") + coord_flip()
Dapat dilihat bahwa frekuensi kata terbanyak adalah kata “pembunuhan” lebih dari 100 kali muncul dalam variabel full_text, kemudian kata “warga” muncul sebanyak kurang lebih 10 kali, dan kata “anak” muncul lebih sedikit dibandingkan kata “warga” dan “pembunuhan”.
# which words are associated with 'r'?
findAssocs(tdm, "Pembunuhan", 0.2)
## $Pembunuhan
## numeric(0)
karena asosiasi kata pembunuhan adalah 0, maka kita dapat menyimpulkan bahwa kemunculan atau keberadaan kata pembunuhan tidak memberikan indikasi atau prediksi apapun tentang kemungkinan munculnya kata lainnya
# remove sparse terms
tdm2 <- removeSparseTerms(tdm, sparse = 0.95)
m2 <- as.matrix(tdm2)
# cluster terms (Analisis cluster pada kata)
distMatrix <- dist(scale(m2))
fit <- hclust(distMatrix, method = "ward.D")
plot(fit)
rect.hclust(fit, k=2) # cut tree into 2 clusters
m3 <- t(m2) # transpose the matrix to cluster documents (tweets)
set.seed(122) # set a fixed random seed
k <- 2 # number of clusters
kmeansResult <- kmeans(m3, k)
round(kmeansResult$centers, digits = 3) # cluster centers
## pembunuhan warga rakyat sipil anak perang senjata
## 1 1.00 0.000 0.000 0.000 3.000 0.000 0.500
## 2 1.02 0.122 0.092 0.082 0.051 0.071 0.051
for (i in 1:k) {
cat(paste("cluster ", i, ": ", sep = ""))
s <- sort(kmeansResult$centers[i, ], decreasing = T)
cat(names(s)[1:5], "\n")
# print the tweets of every cluster
# print(tweets[which(kmeansResult£cluster==i)])
}
## cluster 1: anak pembunuhan senjata warga rakyat
## cluster 2: pembunuhan warga rakyat sipil perang
Dari hasi Clustering, kelompok kata untuk kelas pertama yaitu “anak”, “pembunuhan”, “senjata”, “warga”, “rakyat”. Sedangkan kelompok kata yang masuk kedalam kelas kedua yaitu “pembunuhan”, “warga”, “rakyat”, “sipil”, “perang”. Yang Dimana kata “Pembunuhan”, “anak,”rakyat” masing-masing masuk ke dalam kelas pertama dan kedua.