#Install Library yang akan digunakan
library(wordcloud)
library(tm)
library(textclean)
library(tidytext)
library(ggplot2)
library(parallel)
library(tokenizers)
library(tau)
library(NLP)
library(stringr)
library(devtools)
library(quanteda)
library(kayadata)
library(syuzhet)
library(e1071)
library(sentimentr)
library(SentimentAnalysis)
library(dplyr)
library(pacman)
pacman::p_load_gh("trinker/textstem")
pacman::p_load(textstem, dplyr)
Data set yang digunakan adalah data yang berasal dari Crawlling data di Twitter
library(readxl)
setwd("C:/Users/LENOVO/OneDrive/Documents/tugas anna/koputasi lanjut")
Tragedikanjuruhann<- read_xlsx("tragedikanjuruhan.xlsx")
rev<-Tragedikanjuruhann$full_text
head(rev)
Membuat Data frame dengan Nama “Tragedikanjuruhann” ## ** 1. CASE FOLDING ** case folding digunakan untuk menyamaratakan penggunaan hrurf kapital.Misalnya data teks yang kita dapat berupa tulisan “TraGedi kaNjuRuhan” maka dengan case folding kita bisa mengubah semua huruf kapital menjadi huruf kecil.
#lowercase
rev <- tolower(rev)
head(rev)
Mengembalikan Kata yang Disingkat Menjadi Kata Aslinya
#contraction
rev <- replace_contraction(rev)
head(rev)
Mengembalikan Kata yang Mengalami Perpanjangan Menjadi Kata Aslinya
#elongasi
rev <- replace_word_elongation(rev)
head(rev)
“replace_word_elongation” Fungsi ini berfungsi untuk menggantikan kata-kata yang memiliki elongasi (pemakaian berulang dari huruf yang sama, misalnya “Traaagediii”) dengan bentuk yang lebih singkat.Atau dapat diartikan mengembalikan kata yang mengalami perpanjangan menjadi kata asliya. Menghilangkan karakter khusus, tanda baca, atau simbol yang tidak diperlukan
#Menghapus simbol
rev <- strip(rev)
head(rev)
Mengubah kata-kata ke bentuk dasarnya. Stemming mereduksi kata-kata menjadi bentuk dasar dengan menghapus akhiran, sedangkan lemmatization menggunakan kamus untuk mengubah kata-kata ke bentuk dasar (lemma)
#stemming/lemmatizing = kata dasar
stem_strings(rev)
sc<-c("driver","drive","drove","driven","drives","driving")
stem_words(sc)
lemmatize_words(sc)
Memecah teks menjadi unit-unit yang lebih kecil yang disebut token. Token bisa berupa kata, frasa, atau karakter tergantung pada kebutuhan analisis.
#pemisahan kata dalam suatu kalimat dengan
rev <- rev %>%
rev()
rev
#menghapus kata penghubung
rev <-removeWords(rev, c("di","dan","yang","akan","agar","seperti","yaitu","kami","kami",
"mari","pada","jelang","dimana","dengan","sudah","ini","seluruh",
"diminta","tak","itu","hai","bisa","wib","oleh","mai","jam",
"masa","berikut","kalau","klik","ibodwq","terd","httpstconvv",
"httpstcoxu","yzmrlyx","tahapan","refaabdi","kota","kpu","kpuid","rt","hingga","saat",
"belum","apa","sih","suara","pesta","dindap","http","httpstco","asn","bakal"))
head(rev)
write.csv(rev,file = "C:/Users/LENOVO/OneDrive/Documents/tugas anna/koputasi lanjut/DATABERSIH.CSV", row.names = F)
Menggunakan fungsi write.csv untuk menulis data yang telah dibersihkan ke dalam file CSV. File CSV tersebut kemudian disimpan di lokasi yang di tentukan ## 4.Visualisasi dengan Word Cloud Word Cloud adalah representasi visual dari frekuensi kata. Ini adalah alat yang berguna untuk mengidentifikasi fokus materi tertulis. Word Cloud untuk tweet data “Tragedi Kanjuruhan” ditunjukkan di bawah ini. Membuat Term Document Matriks
#Mengubah Data Frame Menjadi Data Faktor
tdm <- TermDocumentMatrix(rev)
m <- as.matrix(tdm)
View(m)
v <- sort(rowSums(m),decreasing = TRUE)
Membuat Word Cloud
d <- data.frame(word = names(v), freq = v)
wordcloud(d$word, d$freq,
random.order = FALSE,
max.words = 500,
colors = brewer.pal(name = "Dark2",8 ))
muncul dalam teks, semakin besar kata tersebut muncul dalam gambar. Word Cloud tersebut menunjukkan bahwa “Tragedi” dan “Kanjuruhan”, adalah dua kata yang paling penting.
#menyimpan hasil term matriks ke variabel Tdm
tdm <- TermDocumentMatrix(rev,
control = list(wordLengths = c(1, Inf)))
Visualisasi dengan Barplot untuk Menemukan kata-kata yang muncul setidaknya 30 kali. ## 5.1 Frequent Words
#Memeriksa kata-kata yang sering
(freq.terms <- findFreqTerms(tdm, lowfreq = 30))
term.freq <- rowSums(as.matrix(tdm))
term.freq <- subset(term.freq, term.freq >= 30)
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()
Dari Barplot di atas kata yang paling sering muncul dari teet data Tragedi kanjurhan adalah kata “kanjuruhan” ## 5.2 Association Menemukan korelasi antara kata-kata atau konsep dalam teks
# which words are associated with 'r'?
findAssocs(tdm, "tragedikanjuruhan", 0.2)
Hasil di atas menampilkan kata kata yang berhubungan dengan kata “tragedikanjuruhan” Menghapus kata-kata yang bersifat sparse (jarang muncul) dalam Term Document Matrix (TDM)
# remove sparse terms
tdm2 <- removeSparseTerms(tdm, sparse = 0.95)
m2 <- as.matrix(tdm2)
distMatrix <- dist(scale(m2))
fit <- hclust(distMatrix, method = "ward")
fit
plot(fit)
rect.hclust(fit, k = 2) # cut tree into 6 clusters
dari gambar diatas terlihat bahwa pemotongan yang tepat akan menghasilkan 2 cluster, dimana pada cluster 1 sebanyak 2 Word dan cluster 2 sebanyak 28 Word. ## 7.Analysis Cluster K-Means
#Cluster k-means
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
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)])
}
Berdasarkan hasil klastering k-means yang telah dilakukan dengan mentode centers,dapat disimpulkan sebagai berikut
Cluster 1:
Kata kunci dominan termasuk “kanjuruhan,” “tragedi,” “ada,” “korban,” dan “ga.” Cluster 2:
Kata kunci dominan termasuk “yg,” “kanjuruhan,” “tragedi,” “ada,” dan “ga.”
Classification adalah teknik di mana kita bisa mengkategorikan data ke dalam sejumlah kelas yang telah ditentukan sebelumnya. Analisis klasifikasi adalah metode untuk menganalisis keterkaitan antara beberapa variabel prediktor dan satu variabel respon yang merupakan variabel kualitatif. ## 1. Persiapan Data Data yang digunakan adalah data hasil text mining kemudian di tambah kan kolom Y yang bersi (Positive,Negative,Neutral)
#Import Data
setwd("C:/Users/LENOVO/OneDrive/Documents/tugas anna/koputasi lanjut")
Tragedi2<- read_xlsx("DATABERSIHTRAGEDI.xlsx")
head(Tragedi2)
Tragedi2.Data = Tragedi2
Tragedi2.Data = as.data.frame(unclass(Tragedi2.Data),
stringsAsFactors = TRUE)
# Buat DataFrame hanya untuk komentar positif
komentar_positif <- Tragedi2 %>%
filter(Y == "positive")
komentar_positif <-komentar_positif$x
komentar_positif
Dataframe yang dibuat yaitu “komentar_postif”yang berisi 133 komentar positif
##Membuat Word Cloud komentar Positif
#Mengubah Data Frame Menjadi Data Faktor
tdm_pos <- TermDocumentMatrix(komentar_positif)
tdm_pos
m_pos <- as.matrix(tdm_pos)
View(m_pos)
v_pos <- sort(rowSums(m_pos),decreasing = TRUE)
head(v_pos)
#Mengubah Data Faktor Menjadi Data Frame
d_pos <- data.frame(word = names(v_pos), freq = v_pos)
head(d_pos)
wordcloud(d_pos$word, d_pos$freq,
random.order = FALSE,
max.words = 500,
colors = brewer.pal(name = "Dark2",8 ))
# Buat DataFrame hanya untuk komentar negatif
komentar_negatif <- Tragedi2 %>%
filter(Y == "negative")
komentar_negatif<-komentar_negatif$x
komentar_negatif
Dataframe yang dibuat yaitu “komentar_negatif”yang berisi 92 komentar negatif
##Membuat Word Cloud komentar Negatif
#Mengubah Data Frame Menjadi Data Faktor
tdm_neg <- TermDocumentMatrix(komentar_negatif)
tdm_neg
m_neg <- as.matrix(tdm_neg)
View(m_neg)
v_neg <- sort(rowSums(m_neg),decreasing = TRUE)
head(v_neg)
#Mengubah Data Faktor Menjadi Data Frame
d_neg <- data.frame(word = names(v_neg), freq = v_neg)
head(d_neg)
wordcloud(d_neg$word, d_neg$freq,
random.order = FALSE,
max.words = 500,
colors = brewer.pal(name = "Dark2",8 ))
# Buat DataFrame hanya untuk komentar Neutral
komentar_neutral <- Tragedi2 %>%
filter(Y == "neutral")
komentar_neutral<-komentar_neutral$x
komentar_neutral
Dataframe yang dibuat yaitu “komentar_neutral”yang berisi 88 komentar neutral
##Membuat Word Cloud komentar Neutral
#Mengubah Data Frame Menjadi Data Faktor
tdm_neutral <- TermDocumentMatrix(komentar_neutral)
tdm_neutral
m_neutral <- as.matrix(tdm_neutral)
View(m_neutral)
v_neutral <- sort(rowSums(m_neutral),decreasing = TRUE)
head(v_neutral)
#Mengubah Data Faktor Menjadi Data Frame
d_neutral <- data.frame(word = names(v_neutral), freq = v_neutral)
head(d_neutral)
wordcloud(d_neutral$word, d_neutral$freq,
random.order = FALSE,
max.words = 500,
colors = brewer.pal(name = "Dark2",8 ))
# set nilai random generator
set.seed(1234)
library(caret)
library(Matrix)
# membagi data 80% training, 20% testing
bagi <- createDataPartition(Tragedi2.Data$Y, p = 0.8, list=F)
training<- Tragedi2.Data[bagi,]
head(training)
testing<- Tragedi2.Data[-bagi,]
View(testing)
## METODE VALIDASI ##
# cross-validasi 5 lipat
control <- trainControl(method = "cv", number = 5, classProbs = TRUE)
control
# NAIVE BAYES
modelNB<-naiveBayes(Y~.,data = training)
head(modelNB)
#Melakukan Prediksi Menggunakan Data Testing
prediksiNB_test<-predict(modelNB,testing)
hasil_testNB=confusionMatrix(table(prediksiNB_test,testing$Y))
hasil_testNB
akurasi yang di dapat adalah 0,4262. Artinya model ini dapat memprediksi dengan benar 42,62% dari total data testing. sedangkan sisanya adalah tingkat kesalahan klasifikasi yaiti 57,38%