Minggu, 18 Maret 2018

Sentimen Analisis "Tweet" Twitter Menggunakan R Programming



SENTIMENT ANALYSIS MENGGUNAKAN R

Kevien Aqbar (55414818)
Muhammad Taufiq Akbar (57414564)
Noor Fadhila Kamal (58414009)
Nora Chaniago (58414014)
~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')
 

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

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.
Bentuk histogram :

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.

Bentuk histogram :

Hasil Sentiment Analysis “SARA”dengan fungsi AND (2) pada Twitter: