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.

# 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.