SENTIMENT ANALYSIS
MENGGUNAKAN R
Kevien
Aqbar (55414818)
Muhammad
Taufiq Akbar (57414564)
Noor
Fadhila Kamal (58414009)
Nora
Chaniago (58414014)
~4IA01~
~4IA01~
"Tema yang diangkat adalah tweet yang mengandung "SARA". Semua penulisan pada postingan ini tidak bermaksud meng"diskredit" atau pun mendiskriminasi siapapun, dikarenakan tulisan ini ditujukan sebagai pembelajaran cara Analisis Sentimen via Twitter. "
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.
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')
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() :
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)
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
1.
Tweet yang mengandung 3 kata (AND) : “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.
Hasil Sentiment Analysis
“SARA”dengan fungsi AND (1) pada Twitter:
2.
Tweet yang mengandung 2 kata (AND) : “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.
Hasil Sentiment Analysis
“SARA”dengan fungsi AND (2) pada Twitter:
Tidak ada komentar:
Posting Komentar