Kevien
Aqbar (55414818)
Muhammad
Taufiq Akbar (57414564)
Noor
Fadhila Kamal (58414009)
Nora
Chaniago (58414014)
SENTIMENT
ANALYSIS MENGGUNAKAN R
Dalam
tugas ini kita akan membahas cara menganalisa sentimen berdasarkan “tweet” pada
media sosial yaitu Twitter. Disini kita menggunakan R-Programming mengambil
atau crawling data Twitter untuk menganalisa informasi dengan memanfaatkan API.
Agar R dan Twitter terhubung dengan baik, terlebih dahulu kita harus
mendapatkan authentication.
Sebelum
melakukan proses crawling data, kita harus mempunyai API key dan access token
dari Twitter. Caranya cukup mudah yaitu dengan membuat aplikasi pada Twitter.
Berikut adalah proses Twitter Authentication dengan R:
1. Kunjungi
https://apps.twitter.com dan login menggunakan akun Twitter.
2. Pilih
Create New App. Kemudian isi form berikut.
3. Isikan
nama aplikasi berserta deskripsi pada kolom Name dan Description (bisa diisi
bebas). Tulis URL untuk pada kolom Website diawali http:// atau https://. Jika
tidak punya website, isi dengan URL website apa saja yang penting valid. Untuk
Callback URL biarkan saja kosong.
4. Setujui
Developer Agreement dengan cek “Yes, I agree”.
5. Klik
“Create your Twitter application”.
6. Pada
tab “Keys and Access Tokens”, kita bisa melihat Consumer Key (API key) dan
Consumer Secret (API secret). Untuk mendapatkan access tokens, klik tombol
“Create my access token”.
7. Sekarang
kita sudah memperoleh semua “kode rahasia” yang dapat digunakan untuk proses
authentication, yaitu Consumer
Key (API key), Consumer Secret (API secret), Access Token dan Access Token
Secret.
Setelah mendapatkan API Key dan Access Token Twitter,
tahap selanjutnya adalah melakukan instalasi packages yang diperlukan pada R.
# Install R packages required
install.packages("twitteR")
install.packages("stringr")
install.packages("xlsx")
install.packages("plyr")
# Load the required R libraries
library(twitteR)
library(stringr)
library(xlsx)
library(plyr)
|
Untuk
menginstall package tambahan R digunakan sintaks install.packages, dan setelah
berhasil di install, kemudian di-load atau dipanggil dengan sintaks
library(nama_package). Terdapat banyak package yang dapat ditambahkan pada R
untuk menunjang penggunaan R, namun untuk mining twitter hanya beberapa package
penting di bawah ini saja yang digunakan:
è
twitteR
Package ini adalah R
package yang menyediakan akses ke API Twitter sehingga memungkinkan
kita melakukan crawling
data Twitter menggunakan R.
è
stringr
Package stringr berguna untuk membersihkan dan
mempersiapkan data dan menangani masalah string yang umum, yaitu untuk
menghasilkan output string yang lebih bersih dan rapi. Package ini dipanggil
saat setelah memanggil sentiment function.
è
Xlsx
Package xlsx berguna untuk mengimport hasil analis ke
dalam file excel (biasanya berekstensi .xlsx). Untuk menginstall package xlsx
ini pastikan sebelumnya sudah terinstall JDK (Java Development Kit) yang sesuai
pada PC. Jika saat instalasi R menggunakan R untuk versi PC 64 bit, maka
install JDK untuk PC 64 bit juga (disarankan untuk menggunakan JDK 8)
è
plyr
plyr adalah seperangkat alat untuk serangkaian
masalah umum: misalnya saat memecah struktur data yang besar menjadi potongan
homogen, menerapkan fungsi ke masing-masing bagian dan kemudian menggabungkan
semua hasilnya kembali.
Beberapa
contoh fungsi plyr yang akan digunakan pada project mining twitter ini adalah count
yang berguna untuk menghitung banyaknya data kejadian, lalu ada laply
yang digunakan untuk membagi daftar untuk diterapkan fungsi dan kemudian
hasilnya dikembalikan dalam bentuk array.
Selain yang akan beberapa package di atas ada
juga beberapa package optional yang dapat diinstall jika ternyata di dalam R
belum terinstall. Package tersebut di antaranya:
è
Rcurl
package ini berguna untuk menyediakan
fasilitas HTTP yang memungkinkan kita untuk dapat mendownload file dari web
server, post form, menangani redirect, autentikasi password, dll. Package ini
digunakan jika tidak bisa mengambil sertifikat untuk keamanan mengakses
twitter.
è
ROAuth
Package ROAuth merupakan interface untuk melakukan
autentikasi ke server yang menerapkan OAuth. ROAuth menangani proses handshakes dan men-generate signatures.
è
base64enc
package ini digunakan untuk menangani
masalah encoding base64. Package ini dibutuhkan jika terdapat masalah saat
Oauth dengan twitter jika setelah menginstall ROAuth masih tetap ditemukan
masalah saat proses authentication.
consumerKey
<- "isi dengan API key"
consumerSecret
<- "isi dengan API secret"
accessToken
<- "isi dengan Access token"
accessTokenSecret
<- "isi dengan Access token secret"
setup_twitter_oauth(consumerKey,
consumerSecret, accessToken, accessTokenSecret)
|
Ketika fungsi dijalankan setup_twitter_oauth(), R console akan menanyakan: “Use a local file to cache OAuth access
credentials between R sessions?”. Masukkan angka “2”.
Jika
sudah melalui tahapan ini kita sudah mendapatkan secure connection ke Twitter API
dan R siap untuk mengambil data.
Untuk mengecek apakah sudah bisa mendapatkan tweet
yang berisi kata (keyword) tertentu, misalnya “gunadarma”, secara default,
fungsi tersebut akan mengambil 25 tweet yang berisi kata “gunadarma”. Berikut
adalah tujuh tweet pertama:
searchTwitter("gunadarma")
|
Selanjutnya adalah memindai kata-kata yang mengandung
nilai positif dan negatif. Kata-kata tersebut dapat didownload dari link
dibawah ini:
Fungsi scan() akan memindai semua
kata yang berada didalam file .txt.
pos =
scan('D:/Tutorial Sentiment/positive-words.txt', what='character')
neg =
scan('D:/Tutorial Sentiment/negative-words.txt', what='character')
|
Untuk menambahkan kata baru baik kata negatif atau
positif dapat menggunakan fungsi combine
c().
neg = c(neg, 'munafik', 'kafir', 'kemunafikan',
'orang fanatik', 'fitnah')
|
Fungsi sentiment
untuk mengubah tweet menjadi informasi yang bermanfaat dimana semua kalimat
dibersihkan sehingga menjadi kata-kata yang dapat diproses untuk menemukan
kata-kata apa saja yang mewakili istilah negatif dan positif kemudian semua
kata tersebut dinilai untuk mendapatkan score
sentiment.
score.sentiment =
function(tweets, pos.words, neg.words)
{
require(plyr)
require(stringr)
scores = laply(tweets,
function(tweet, pos.words, neg.words) {
# membersihkan kalimat dengan
fungsi gsub() :
tweet = gsub('https://','',tweet)
# menghapus https://
tweet = gsub('http://','',tweet)
# menghapus http://
tweet=gsub('[^[:graph:]]', '
',tweet) # menghapus karakter grafik
tweet = gsub('[[:punct:]]', '',
tweet) # menghapus tanda baca
tweet = gsub('[[:cntrl:]]', '',
tweet) # menghapus karakter control
tweet = gsub('\\d+', '',
tweet) # menghapus angka
tweet =
str_replace_all(tweet,"[^[:graph:]]", " ")
# mengubah semua huruf menjadi
huruf kecil
tweet = tolower(tweet)
# memecah tweet perkata ke dalam
sebuah list
word.list = str_split(tweet,
'\\s+')
# mengubah list kedalam vektor
words = unlist(word.list)
# membandingkan kata-kata dengan
kamus istilah negatif dan positif
pos.matches = match(words,
pos.words)
neg.matches = match(words,
neg.words)
# mengubah kata yang cocok ke
dalam bentuk TRUE atau FALSE :
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
# TRUE/FALSE akan dianggap
sebagai 1/0 sehingga dapat ditambahkan dengan fungsi sum() :
score = sum(pos.matches) -
sum(neg.matches)
return(score)
}, pos.words, neg.words)
scores.df =
data.frame(score=scores, text=tweets)
return(scores.df)
}
|
Perintah dibawah untuk mencari 1000 tweet dalam bahasa
indonesia yang mengandung kata “kafir” atau “cina” atau “pribumi” dan mengolah
tweet yang telah ditemukan dengan fungsi sentiment untuk dinilai tingkat
positif dan negatifnya.
kataSara <-
c("kafir","cina","pribumi")
needle <- paste(kataSara,
collapse = " OR ")
tweets = searchTwitter(needle,n=1000,
lang="id")
Tweets.text =
laply(tweets,function(t)t$getText())
analysis =
score.sentiment(Tweets.text, pos, neg) # memanggil fungsi sentiment
|
Fungsi count() untuk menghitung banyak frekuensi nilai
sentimen.
count(analysis$score)
|
Dari gambar di atas didapatkan rentang nilai sentimen
dari -9 sampai 3 dengan jumlah terbanyak berada di nilai 0, -1 dan -2 dengan
rincian tweet negatif sebanyak 612 tweet, netral sebanyak 324 tweet dan positif
sebanyak 64 tweet. Ini menandakan mayoritas tweet yang mengandung kata-kata
“kafir” atau “cina” atau “pribumi” merupakan tweet negatif atau SARA.
Fungsi
hist() untuk membuat histogram dari data.
hist(analysis$score)
|
Didapatkan
bentuk histogram seperti gambar di bawah ini :
Untuk memindahkan hasil ke dalam bentuk excel dengan
menggunakan library xlsx dan menyimpannya ke file excel bernama
tweetSaraOR.xlsx.
write.xlsx(analysis, "tweetSaraOR.xlsx")
|
Hasil Sentiment Analysis “SARA” dengan
fungsi OR pada Twitter:
Perbandingan
Tweet yang mengandung kata-kata “cina”, “kafir” dan
“pribumi” :
Hasil count() :
Dari hasil pencarian tweet yang mengandung kata-kata
“cina”, kafir” dan “pribumi” hanya terdapat di 18 tweet. Rentang nilai sentimen
dari -4 sampai 0 dengan mayoritas tweet berada di rentang nilai negatif. Ini
berarti hanya terdapat 2 tweet yang bernilai netral sedangkan selain itu
merupakan tweet yang mengandung SARA.
Bentuk histogram :
Hasil Sentiment Analysis “SARA” dengan
fungsi AND pada Twitter:
Tweet yang mengandung kata-kata “cina” dan “pribumi”.
Hasil count() :
Dari hasil
pencarian terdapat 874 tweet yang mengandung kata-kata “cina” dan “pribumi”.
Rentang nilai sentimen dari -7 sampai 3. Berbeda dari hasil yang didapatkan
dengan menggunakan OR sebelumnya,
pencarian dengan menggunakan AND menghasilkan
jumlah tweet yang sedikit dari yang diharapkan (1000 tweet) namun memiliki
frekuensi diarah negatif lebih besar. Dapat disimpulkan bahwa mayoritas tweet
yang mengandung kata-kata “cina” dan “pribumi” adalah tweet SARA.
Bentuk histogram :
Hasil Sentiment Analysis “SARA” dengan
fungsi AND pada Twitter:
Komentar
Posting Komentar