Kevien Aqbar (55414818)
Muhammad Taufiq Akbar (57414564)
Noor Fadhila Kamal (58414009)
Nora Chaniago (58414014)
[4IA01]
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)
|
Hasil perhitungan banyaknya analisis |
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 :
Histogram perhitungan analisis |
Untuk memindahkan hasil ke dalam bentuk excel dengan
menggunakan library xlsx dan menyimpannya ke file excel bernama
tweetSaraOR.xlsx.
write.xlsx(analysis,
"tweetSaraOR.xlsx")
|
Hasilnya dalam bentuk spreadsheet:
Perbandingan
1 1. 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 :
Hasilnya dalam berntuk spreadsheet:
1 2. 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 :
Hasilnya dalam berntuk spreadsheet:
No comments:
Post a Comment