Pages

Selasa, 02 Januari 2018

Analisa Sentimen Twitter



Makalah tentang
Analisa Sentiment Twitter












Oleh :


Hafiyan Nafan Kusuma Satria (16.01.63.0004)
Septina Budi Kurniawati (15.01.63.0020)





Dosen Pengampu : 

Dr. Drs. Eri Zuliarso,M.Kom











FAKULTAS TEKNOLOGI INFORMASI

UNIVERSITAS STIKUBANK

SEMARANG

2017







I. Pengertian Analisa Sentimen Twitter

Analisa Sentimen atau opinion mining adalah cara untuk memahami dan mengolah data tekstual secara otomatis agar mendapatkan informasi sentiment yang terkandung dalam suatu kalimat opini. Sentimental adalah kata yang melekat pada variabel seperti perilaku, evaluasi, dan feeling. Variabel tersebut berperan pada saat kita akan melihat suatu peristiwa dan mengambil keputusan atau opini. Analisis sentiment dilakukan untuk melihat pendapat atau kecenderungan opini terhadap sebuah masalah atau objek oleh seseorang, apakah cenderung mempunyai opini positif atau negatif. Analisis sentimen merupakan cabang penelitian daritext mining. Opinion Mining berfokus pada analisis opini dari suatu dokumen teks.

Analisis sentimen biasa digunakan untuk menilai kesukaan atau ketidaksukaan publik terhadap suatu barang atau jasa. Sentimen tersebut merupakan informasi tekstual yang bersifat subjektif dan memiliki polaritas positif dan negatif. Nilai polaritas ini dapat digunakan sebagai parameter dalam menentukan suatu keputusan.

Sebagai contoh, seorang pendatang baru di suatu daerah meminta pendapat orang di daerah tersebut tentang operator selular yang cocok digunakan untuk mengakses internet. Pendapat orang-orang terhadap operator A berbeda-beda, ada yang positif ada yang negatif. Jumlah pendapat positif dan negatif ini akan menentukan keputusan yang akan diambil pendatang baru tersebut dalam memilih operator selular. Jumlah pendapat yang sangat banyak akan membuat pengambilan keputusan menjadi tidak efisien.



II. Fungsi Analisa Sentimen Twitter

Analisis Sentimen sangat berperan pada sosial media. Perkembangan opini yang ditampung oleh media sosial terus meningkat, opini – opini yang sudah ada sangat mudah untuk disebarkan dan diakses oleh opini orang lain, di sinilah peran analisis diperlukan.


Aplikasi hasil penelitian ini sangat berguna dalam beberapa bidang, namun ada beberapa bidang yang utama, yaitu dalam dunia web-online (mengenai pelayan, maupun marketing), periklanan, bisnis, dan keamanan negara (intelligence).


III. Tahapan implementasi Analisa Sentimen Twitter

Langkah-langkah pengimplementasian dari Analisa Sentimen Twitter :

1. Buka aplikasi Rstudio Versi 1.1.383 
2. Klik File -> New File -> R Script -> simpan dengan nama yang diinginkan 
3. Masuk pada script, instal terlebih dulu paket-paket berikut,
> install.packages(“twitteR”)
> install.packages(“ROAuth”)
> install.packages(“tm”)
> install.packages(“ggplot2”)
> install.packages(“wordcloud”)
> install.packages(“sentimentr”)
> install.packages(“plyr”)
> install.packages(“RTextTools”)
> install.packages(“devtools”)
> install.packages(“e1071”)
> require(devtools) 
4. Load library yang dibutuhkan
> library(e1071)
> library(twitteR)
> library(ROAuth)
> library(tm)
> library(ggplot2)
> library(wordcloud)
> library(sentimentr)
> library(plyr)
> library(RTextTools)
> library(e1071)
> library(sentiment)
> library(Rstem) 
5. Login ke twitter.com, lalu pada beranda pilih developer atau pengembangan pada bagian kanan layar. 
6. Setelah itu, akan terbuka halaman https://dev.twitter.com/ . Pilih manage my apps pada menu tools pada bagian bawah web. 
7. Pilih create new app lalu isikan data diri and. Jika sudah, klik create your twitter application. 
8. Buka aplikasi tersebut lalu copy Consumer Key (API Key), Consumer Secret (API Secret), Acces Token, Access Token Secret. Setelah itu paste ke script line setup_twitter_oauth yang terdapat di dalam petik.
> setup_twitter_oauth("BiRUh2mx4MgiWDmBnyNYIHpgw", "55GvuDVWOaYIyp8oMCUv2j7byx9ZAf0uBQUQKF7SI1tAFvQyJx", "583359199-K0UssCcNSlQJWYYteKXcWqATijetAY2n0sXOjpSP", "xcsyHzGOPtm9C6DEt7ar6MVVk1UsdrZQNN0Uf9vENBQ7b") 
9. Harvest some tweets
> some_tweets = searchTwitter("starbucks", n=500, lang="en") 
10. Get the text
> some_txt = sapply(some_tweets, function(x) x$getText()) 



11. Remove retweet entities
> some_txt = gsub("(RT|via)((?:\\b\\W*@\\w+)+)", "", some_txt)

12. Remove at people

> some_txt = gsub("@\\w+", "", some_txt)

13. Remove punctuation

> some_txt = gsub("[[:punct:]]", "", some_txt)

14. Remove numbers

> some_txt = gsub("[[:digit:]]", "", some_txt)

15. Remove html links

> some_txt = gsub("http\\w+", "", some_txt)

16. Remove unnecessary spaces

> some_txt = gsub("[ \t]{2,}", "", some_txt)

> some_txt = gsub("^\\s+|\\s+$", "", some_txt)

17. Define "tolower error handling" function

> try.error = function(x) {

# create missing value

+ y = NA

# tryCatch error

+ try_error = tryCatch(tolower(x), error=function(e) e)

# if not an error

+ if (!inherits(try_error, "error"))

+ y = tolower(x)

# result

+ return(y)}


18. Lower case using try.error with sapply

> some_txt = sapply(some_txt, try.error)

19. Remove NAs in some_txt

> some_txt = some_txt[!is.na(some_txt)]

> names(some_txt) = NULL

20. Classify emotion
> library(sentiment)

> class_emo = classify_emotion(some_txt, algorithm="bayes", prior=1.0)



21. Get emotion best fit
> emotion = class_emo[,7]



22. Substitute NA’s by "unknown"
> emotion[is.na(emotion)] = "unknown"
23. Classify polarity
> class_pol = classify_polarity(some_txt, algorithm="bayes")



24. Get polarity best fit
> polarity = class_pol[,4]


25. Data frame with results
> sent_df = data.frame(text=some_txt, emotion=emotion,
+ polarity=polarity, stringsAsFactors=FALSE)



26. Sort data frame
> sent_df = within(sent_df,
+ emotion <- decreasing="TRUE))))</span" emotion="" factor="" levels="names(sort(table(emotion),">



27. Plot distribution of emotions
> ggplot(sent_df, aes(x=emotion)) +
+ geom_bar(aes(y=..count.., fill=emotion)) +
+ scale_fill_brewer(palette="Dark2") +
+ labs(x="emotion categories", y="number of tweets")


28. Plot distribution of polarity
> ggplot(sent_df, aes(x=polarity)) +
+ geom_bar(aes(y=..count.., fill=polarity)) +
+ scale_fill_brewer(palette="RdGy") +
+ labs(x="polarity categories", y="number of tweets")



29. Separating text by emotion
> emos = levels(factor(sent_df$emotion))
> nemo = length(emos)
> emo.docs = rep("", nemo)
> for (i in 1:nemo) {
+ tmp = some_txt[emotion == emos[i]]
+ emo.docs[i] = paste(tmp, collapse=" ") }
30. Remove stopwords
> emo.docs = removeWords(emo.docs, stopwords("english"))
31. Create corpus
> corpus = Corpus(VectorSource(emo.docs))
> tdm = TermDocumentMatrix(corpus)
> tdm = as.matrix(tdm)
> colnames(tdm) = emos
32. Comparison word cloud
> comparison.cloud(tdm, colors = brewer.pal(nemo, "Dark2"),
+ scale = c(3,.5), random.order = FALSE, title.size = 1.5)

1 komentar:

Fridom Mailoa mengatakan...

bagaimana jika ingin mengambil data spasialnya (lat dan Long)?

Posting Komentar

Lets the spirit of learning :)