Anda di halaman 1dari 25

BAB 3

PEMBAHASAN

3.1 Gambaran Umum Analisis Sentimen

Pada penelitian ini dilakukan beberapa tahap untuk membuat system


analisis sentimen terhadap pembelian minyak goreng melalui aplikasi
PeduliLindungi. Terdapat beberapa tahapan seperti dapat di lihat pada gambar 3.1
gambaran umum penelitian.

Gambar 3.1 Gambaran Umum Tahapan Penelitian

Tahap pertama adalah pengumpulan data dari Twitter menggunakan akses


dari API Twitter berdasarkan tweet yang membahas pembelian minyak goreng
mengggunakan aplikasi PeduliLindungi. Pengambilan data diambil sebanyak 1685
data, selanjutnya tahap pre-processing yang terdiri dari cleaning data bertujuan
untuk membersihkan data tweets yang sudah diperoleh. Komponen-komponen
yang dibersihkan merupakan komponen yang tidak berarti atau tidak relevan untuk

18
proses pengklasifikasian data, normalisasi yaitu untuk mengubah kata singkatan
atau slang words menjadi bahasa baku, selanjutnya stemming yaitu menghilangkan
kata ber-imbuhan menjadi kata dasar. Kemudian tokenizing merubah kalimat
menjadi potongan-potongan kata, potongan kata tersebut disebut dengan token dan
terakhir stopword removal yaitu menghilangkan kata-kata dalam kalimat yang tidak
memberikan makna, seperti kata hubung, kata depan, dan lain-lain. Setelah tahap
preprocessing selesai, data hasil preprocessing diklasifikasi dengan menggunakan
metode lexicon-based dan hasilnya akan divisualisasinkan.

3.2 Kebutuhan Perangkat Keras dan Perangkat Lunak

Alat yang di gunakan pada penelitian ini adalah seperangkat laptop dan
beberapa perangkat lunak pendukung. Berikut spesifikasi laptop yang akan
digunakan:

• Asus X453M dengan processor Intel® Pentium® CPU N3540 @


2.16GHz (4 CPUs)
• Kapasitas RAM 8 GB
• Kapasaitas Penyimpanan SSD 240 GB
• Layar Monitor 14”
• Resolusi 1366 x 768

Adapun perangkat lunak(software) yang di gunakan adalah:

• Sistem Operasi Windows 10 Home Version 20H2


• R-programming 4.2.1
• RStudio 2002.02.3-492

3.3 Pengumpulan Data

Pengumpulan data dalam penelitian ini akan menggunakan data dari tweet
yang membahas topik “pembelian minyak goreng curah menggunakan aplikasi
pedulilindung”. Proses pengumpulan data dilakukan dengan mengambil data tweet
pada layanan Twitter API menggunakan Bahasa pemrograman R. Tahapan pertama
pengambilan data yaitu harus membuat koneksi Twitter API agar aplikasi R dapat

19
terhubung dengan layanan sosial media Twitter. Setelah membuat koneksi dengan
Twitter menggunakan autentikasi API Key yang telah didapat, maka dilanjutkan
dengan pengambilan data atau crawling tweet. Proses ini dilakukan untuk
mendapatkan tweets dengan bentuk ekstensi .csv dari Twitter. Data yang telah
dikumpulkan akan digunakan lagi dalam tahapan proses data pre-processing.

3.3.1 Membuat koneksi Twitter API

Yang harus di lakukan adalah membuat aplikasi pada Twitter dengan


mengunjungi situs https://developer.twitter.com/ untuk mendapatkan kunci dan
token akses yang akan digunakan untuk mengakses Twitter API. Langkah-langkah
dalam membuat koneksi pada Twitter API adalah sebagai berikut :

1. Mengakses situs https://developer.twitter.com/ dengan sudah memiliki


akun twitter dan telah login pada akun tersebut, seperti gambar dibawah.

Gambar 3.2 Situs Twitter Project and Apps


(Sumber: https://developer.twitter.com/en/portal/projects-and-apps)

20
2. Membuat aplikasi baru dengan cara memilih Add APP kemudian pilih
Create a new App.

Gambar 3.3 Create a new App


(Sumber:https://developer.twitter.com/en/portal/projects/13160560091026
51393/apps/create-or-connect)

3. Melilih Development pada App Environment kemudian isi nama app dengan
Migor. Setelah app selesai dibuat maka akan mendapatkan akses Keys dan
Tokens.

Gambar 3.4 Keys and Tokens dari aplikasi yang telah dibuat
(Sumber:https://developer.twitter.com/en/portal/projects/13160560091026
51393/apps/23312857/keys)

4. Apliaksi yang telah di buat tadi memiliki kunci dan token akses yang
meliputi consumer API key, consumer secret, access token dan access token
secret yang nantinya akan di gunakan sebgai koneksi dan akses dari Twitter

21
API dalam melakukan pengambilan data tweet pada Twitter. Token
autentikasi dalam penelitian ini terdari 4 kunci API, yaitu:
Tabel 3.1 Developer API Keys dan Tokens
Nama Kode API Kode API
Consumer Key (API zQkW21uG9uQ5GevfgWpODb1Gi
Key)
Consumer Secret l7zxLm9td8rKktRHyf3rYfYJ2RwuF76RZUW6
Key (API Secret PSm0duAPEs8wjj
Key)
Access Token 821731748-
BcMKdiNRbxSyzQxb9DOUHtCJpkSR7SYiCn
CDb5fH
Access Secret Token glJDIPxC6YYOqYNs6kShoF9GnXN3HcEGffz
tvIn0T1H9d

5. Setelah mendapatkan kunci dan token akses, selanjutnya membuka RStudio


dan menginstall beberapa library yang dibutuhkan untuk menjalankan
fungsi-fungsi yang ada pada Rstudio. Berikut beberapa library yang
digunakan adalah

library(tm)
library(rtweet)
library(dplyr)
library(NLP)
library(ggplot2)
library(wordcloud2)
library(syuzhet)
install_github("nurandi/katadasaR")
library(katadasaR)

Fungsi package diatas adalah sebagai berikut

• library(tm) Untuk menanggil fungsi text mining pada Rstudio.


• library(rtweet) digunakan untuk crawling data tweet dari twitter.
• library(dplyr) digunakan untuk mengganti / memanipulasi data
menjadi data frame.
• library(NLP) digunakan untuk membaca data pada colom dataset.

22
• library(ggplot2) digunakan untuk membuat grafik yang
merepresentasikan data numerik dan kategorik baik univariat maupun
multivariat secara simultan.
• library(wordcloud2) digunakan untuk membuat wordcloud.
• library(syuzhet) digunakan untuk menampilkan plots.
• install_github("nurandi/katadasaR") digunakan untuk menngunduh
katadasar .
• library(katadasaR) yang akan digunakan untuk proses stemming.

3.3.2 Crawling Tweet Data pada Twitter

Sebelum pengambilan data tweets pada Twitter dilakukan authentication


API key dan tokens guna untuk mendapatkan akses ke Twitter seperti kode dibawah
ini.

token <- create_token(


app = "migor",
consumer_key = "zQkW21uG9uQ5GevfgWpODb1Gi",
consumer_secret =
"l7zxLm9td8rKktRHyf3rYfYJ2RwuF76RZUW6PSm0duAPEs8wjj",
access_token ="821731748-
BcMKdiNRbxSyzQxb9DOUHtCJpkSR7SYiCnCDb5fH ",
access_secret =
"glJDIPxC6YYOqYNs6kShoF9GnXN3HcEGffztvIn0T1H9d ")
identical(token,get_token())

Pengambilan data tweets di lakukan berdasarkan kata kunci yang telah


ditentukan. Tweet yang akan di ambil yaitu berbahasa Indonesia, di ambil secara
acak baik dari user biasa ataupun official media Twitter. Topik yang dibahas dalam
analisis sentimen ini adalah “Analaisis sentimen terhadap pembelian minyak
goreng curah pada aplikasi Pedulilindungi” seperti kode di bawah ini.

crawling <- search_tweets(q=("pembelian minyak goreng OR pedulilindungi"),


n =2000, include_rts = TRUE,

23
lang = "id",
tweet_mode = "extended",
type = "recent")
save_as_csv(crawling, "migor-crawling")

Hasil scraping data atau pengambilan data dari Twitter dengan keyword
yang mengandung kata “pembelian minyak goreng” atau “pedulilindungi”
berjumlah 2.000 data dalam bahasa Indonesia. Data disimpan dengan nama migor-
crawling dan berformat csv file. Data yang berhasil di ambil sebanyak 1.685 data
yang dapat dilihat pada Gambar 3.5.

Gambar 3.5 Data crawling tweets

Setelah data mentah di dapat, data yang hanya diperlukan adalah text saja.
Untuk mengambil data berupa text dilakukan dengan menulis kode seperti dibawah

crawling <- read.csv(file.choose(), header = TRUE)


migor <- crawling %>% select(text)

baris pertama pada kode diatas berfungsi untuk membuka file migor-
crawling dan disimpan pada variable crawling. Kemudian pada baris kedua
berfungsi untuk mengambil kolom text pada variable crawling dan disimpan pada
variabel migor. Hasilnya bisa dilihat seperti gambar 3.6.

24
Gambar 3.6 Data crawling migor

3.3.3 Data Sentimen Positif dan Negatif

Pada penelitian ini selain menggunakan data dati Twitter juga menggunakan
data berupa kata sentimen positif dan negatif. Ada kurang lebih sekitar 1188 kata
sentimen positif dan 2400 sentimen kata negatif. Dibawah ini adalah kode untuk
memuka file korpus.

positif <- read.csv("kamus-positif.txt", header = F)


negatif <- read.csv("kamus-negatif.txt", header = F)
positif <- as.character(positif$V1)
negatif <- as.character(negatif$V1)

Pada kode diatas pengambilan file yang terdapat didalam penyimpanan.


Untuk sentimen positif diinisialisasikan sebagai variabel positif dan kamus
sentimen negatif diinisialisasikan sebagai variabel negatif kemudian keduanya
diubah tipe datanya menjadi character. Beberapa contoh kata yang terkait dengan
sentimen positif dan negatif seperti pada Tabel 3.2.

25
Tabel 3.2 Contoh Kata Sentimen Positif dan Negatif
Positif Negatif
Anggun Ancaman
Bergembira Bentrokan
Cemerlang Curang
Dermawan Dicuri
Efektif Egois

3.4 Data Pre-Processinng

Pre-processing data di lakukan agar data yang telah di dapat menjadi data
yang ideal dan sesuai untuk di proses pada metode Lexicon-based. Pre-processing
data terbagi menjadi beberapa tahapan, yaitu sebgai berikut :

Gambar 3.7 Flowchart Preprocessing

Data tweets yang telah di dapat kemudian di proses pertama kali yaitu
cleaning, lalu di lanjutkan dengan proses normalisasi. Selanjutnya data yang sudah
normal di lakukan proses stemming, kemudian langkah selanjutnya yaitu

26
tokenizing, dan langkah terakhir adalah penghapusan stopword, setelah itu di
dapatkan data hasil pre-processing.

3.4.1 Cleaning

Cleaning merupakan tahapan yang bertujuan untuk membersihkan data


tweets yang sudah diperoleh. Komponen-komponen yang dibersihkan merupakan
komponen yang tidak berarti atau tidak relevan untuk proses pengklasifikasian data.
Komponen tersebut diantarannya karakter spesial pada twitter seperti username,
hashtag, URL, link, tanda baca, angka, simbol emoji, dan data yang sama. Dibawah
ini adalah kode untuk cleaning.

tweets <- as.character(tweet$text)


tweets <- gsub( "\n"," ",tweets)
tweets <- gsub("[^\x01-\x7F]", " ", tweets)
tweets <- gsub("http\\S+\\s*", " ", tweets)
tweets = gsub("&amp", " ", tweets)
tweets <- gsub(" RT ", " ", tweets)
tweets <- gsub("@\\w+", " ", tweets)
tweets <- gsub("#\\S+", " ", tweets)
tweets <- strip(tweets)
tweet <- distinct(migor)
data.clean <- data.frame(text = tweets)
save_as_csv(data.clean, "data_clean.csv")

Penjelasan kode untuk cleaning

1. melakukan pendeklasrasian tweets untuk mengubah tipe data variabel tweet


menjadi character.
2. Menggunakan fungsi gsub() untuk menghapus isi dari variabel tweets
berupa enter, emoji, URLs, karakter(&), rt, username(@), dan hashtag(#)
3. Menggunakan fungsi strip untuk menghapus blank spaces, tanda, nomor,
dan mengubah teks menjadi huruf kecil

27
4. Mengubah tipe data tweets menjadi dataframe dan disimpan pada variabel
data.clean
5. pendeklarasian variabel tweet yang berisi fungsi distinct yaitu untuk
menghapus tweet yang sama dalam variabel migor.
6. Menyimpan data.clean dengan nama file data-clean dengan format .csv.

Berikut merupakan contoh adalah hasil tweet sebelum dan sesudah dilakukan
proses cleaning untuk menghapus username, hashtag, URL, link, tanda baca,
angka,simbol emoji, dan data yang sama.

Tabel 3.3 Perbandingan teks tweets sebelum dan sesudah dilakukan proses
cleaning
Sebelum proses cleaning Sesudah proses cleaning
@Android_AK_47 Minyak goreng minyak goreng susah bbm susah
susah BBM susah elu dan gerombolan elu dan gerombolan ribut dibatasin
ribut. Dibatasin pembelian migor dan pembelian migor dan bbm pake
BBM pake aplikasi elu dan aplikasi elu dan gerombolan ribut
gerombolan ribut juga.\nHidup elu dan juga hidup elu dan gerombolan
gerombolan sejenis elu nih emang sejenis elu nih emang suka yang
suka yang ribet.\n\nElu tahu nggak ribet elu tahu nggak kalo sepeda
kalo sepeda dilarang beli BBM pake dilarang beli bbm pake aplikasi
aplikasi?
@PDemokrat Rupanya pemerintah rupanya pemerintah sekarang
sekarang selalu pake PeduliLindungi selalu pake pedulilindungi untuk
untuk pembelian minyak goreng pembelian minyak goreng curah
curah baru di rezim ini yang lindungi baru di rezim ini yang lindungi
mafia minyak goreng mafia minyak goreng
@Andhika81824262 @isson70 halah itu trik awal aja minyak
@jokowi Halah2 itu trik awal aja, goreng sengaja dinaikin dinegeri
minyak goreng sengaja dinaikin sendiri stlah itu biar seolah harga
dinegeri sendiri stlah itu biar seolah2 migor cepet turunnya dibuat
harga migor cepet turunnya dibuat kebijakan stop ekspor biar harga
kebijakan stop ekspor biar harga sawit sawit lokal turun pembelian sawit

28
lokal turun, pembelian sawit dari dari petani bisa murah dibuka lagi
petani bisa murah, dibuka lagi kran kran ekspor luar negeri dan jual
ekspor luar negeri dan jual keluar keluar mahal
mahal

Total jumlah tweet yang telah melewati proses cleaning menjadi 940 tweet.
Setelah selesai file disimpan dalam format csv dengan nama data-clean. Hasil bisa
dilihat seperti gambar 3.8.

Gambar 3.8 Hasil proses cleaning

3.4.2 Normalisasi
Normalisasi bertujuan untuk mengubah kata singkatan atau slang words
menjadi bahasa baku sesuai KBBI (Kamus Besar Bahasa Indonesia). Pada tahap ini
data tweets diolah lagi agar menjadi data yang lebih bersih dengan cara mengubah
kata yang tidak baku menjadi kata baku. Gambaran tahap normalisasi tweets dapat
dilihat pada Gambar 3.9.

29
Gambar 3.9 Tahapan proses Normalisasi

Berikut kode dibawah ini merupakan proses untuk normalisasi.

kamus_singkatan <- read.csv("kamus-slang.csv")


tweets <- replace_internet_slang(tweets, slang = paste0("\\b",
kamus_singkatan$slang, "\\b"),
replacement = kamus_singkatan$formal, ignore.case = TRUE)
data.normalisasi <- data.frame(text = tweets)
save_as_csv(data.normalisasi, "data_normalisasi.csv")

penjelasan kode untuk normalisasi


1. Membuka file kamus-slang yang berisi kata-kata baku.
2. Kemudian mengubah kata-kata singkatan atau slang words yang terdapat
pada data tweets dengan data yang terdapat pada file kamus-slang.
3. Selanjutnya text pada tweets diubah menjadi data frame dan disimpan pada
variabel data.normalisasi.

30
4. Variabel data.normalisasi disimpan dengan nama data_normalisasi dalam
format .csv.
Adapun hasil proses normalisasi pada file cleaning data
Tabel 3.4 Perbandingan teks sebelum dan sesudah proses normalisasi
Sebelum Normalisasi Sesudah Normalisasi
nah selain itu pemerintah jg mulai nah selain itu pemerintah juga mulai
mensosialisasikan pembelian minyak mensosialisasikan pembelian minyak
goreng menggunakan apps peduli goreng menggunakan apps peduli
lindungi gunanya utk memantau lindungi gunanya untuk memantau
pendistribusian minyak goreng dan pendistribusian minyak goreng dan
menghindari penyelewengan harga menghindari penyelewengan harga
aku ulang lagi ya cara dapatin minyak aku ulang lagi ya cara dapatin minyak
goreng curah rakyat scan qr code klo goreng curah rakyat scan qr code kalo
hasil scan nya berwarna hijau berarti hasil scan nya berwarna hijau berarti
kamu bisa melakukan pembelian kamu bisa melakukan pembelian
minyak goreng kalau hasil scan brwarna minyak goreng kalau hasil scan brwarna
merah berarti kmu udh mencapai titik merah berarti kamu sudah mencapai
max pmbelian titik max pmbelian
di negeri penghasil sawit yg tinggi di negeri penghasil sawit yang tinggi
rakyat justru hrs beli minyak goreng dg rakyat justru harus beli minyak goreng
harga tinggi skrg disosialisasikan dengan harga tinggi sekarang
pembelian minyak goreng curah pakai disosialisasikan pembelian minyak
peduli lindungi bukan solusi malah goreng curah pakai peduli lindungi
bukan

3.4.3 Stemming
Stemming merupakan suatu proses text preprocessing untuk menemukan
kata dasar dari sebuah kata. Dengan menghilangkan semua imbuhan baik yang
terdiri dari awalan, sisipan, akhiran, dan kombinasi imbuhan pada kata turunan.
Stemming digunakan agar kata yang diperoleh dapat merepresentasikan kata yang

31
tidak diberi imbuhan. Gambaran tahap stemming tweets dapat dilihat pada Gambar
3.10.

Gambar 3.10 Tahapan Stemming

Berikut kode untuk melakukan proses stemming.

stemming <- function(x){paste(lapply(x,katadasar),collapse = " ")}


datanormal <- read.csv(file.choose(), header = TRUE)
stemm <- as.character(datanormal$text)
stem <- sapply(tokenize_words(stemm[]), stemming)
data.stem <- data.frame(text = stem)
save_as_csv(data.stem, "data-stemming.csv")

penjelasan kode untuk stemming


1. Membuat fungsi stemming dengan berdasarkan package Katadasar
2. Memasukan file data_normalisasi.csv pada variabel datanormal

32
3. Mengkonversi tipe datanormal menjadi karakter agar bisa dilakukan
proses stemming
4. Mengaplikasikan fungsi stemming pada variabel stem
5. Menyimpan file hasil stemming dengan nama data-stemming.csv.
Adapun hasil dari proses stemming pada file data_normalisasi.
Tabel 3.5 Perbandingan teks sebelum dan sesudah proses stemming
Sebelum stemming Sesudah Stemming
pembelian minyak goreng pakai beli minyak goreng pakai
pedulilindungi dicoba di pasar pedulilindungi coba di pasar
wonokromo wonokromo
pembelian minyak goreng curah beli minyak goreng curah wajib
wajib pakai aplikasi peduli pakai aplikasi peduli lindung
lindungi
pembelian minyak goreng beli minyak goreng sekarang harus
sekarang harus menggunakan guna aplikasi peduli lindung bukan
aplikasi peduli lindungi bukankah ini akan timbul potensi distribusi
ini akan menimbulkan potensi tidak tepat sasar tidak semua
distribusi tidak tepat sasaran tidak masyarakat bawah punya
semua masyarakat bawah smartphone
mempunyai smartphone

3.4.4 Tokenizing
Tokenizing merupakan tahap text preprocessing yang berguna untuk
memecahkan kalimat, paragraf, atau dokumen menjadi bagian yang lebih kecil,
yaitu token atau kata-kata yang berdiri sendiri. Pada umumnya setiap kata
terpisahkan oleh karakter spasi, sehingga proses ini mengandalkan karakter spasi
pada dokumen untuk melakukan pemisahan kata. Gambaran tahap Tokenizing
tweets dapat dilihat pada Gambar 3.11.

33
Gambar 3.11 Tahapan Tokenizing
Berikut dibawah ini kode untuk melakukan proses tokenizing

#Mengaplikasikan Tokenizing data tweet (memecah data tweet)


tokenize <- tokenize_words(data.stem$text)
data.token <- data.frame(text=data.token)
save_as_csv(data.token,"data-token.csv")

Penjelasan dari kode diatas yaitu menjalankan fungsi tokenize_words pada


text dalam file data.stem kemudian hasil tokenizing di simpan dengan nama data-
token.csv. Berikut hasil Tokenizing pada Tabel 3.6.
Tabel 3.6 Hasil proses Tokenizing
Sebelum Tokenizing Sesudah Tokenizing
pemkot surabaya tidak mau gegabah "pemkot", "surabaya", "tidak", "mau",
terap beli minyak goreng curah guna "gegabah", "terap", "beli", "minyak",
aplikasi pedulilindungi "goreng", "curah", "guna", "aplikasi",
"pedulilindungi"
mayoritas warga pilih beli minyak "mayoritas", "warga", "pilih", "beli",
goreng curah guna ktp "minyak", "goreng", "curah", "guna",
"ktp"

34
beli minyak goreng via pedulilindungi "beli", "minyak", "goreng", "via",
dagang di yogyakarta rumit "pedulilindungi", "dagang", "di",
"yogyakarta", "rumit"

3.4.5 Stopwords Removal


Pada tahap ini, setiap stopwords pada tweet akan dihilangkan terlebih
dahulu. Stopwords adalah kata-kata dalam kalimat yang tidak memberikan makna,
seperti kata hubung, kata depan, dan lain-lain. Selain itu, dalam sebuah kalimat bisa
juga terdapat stopwords dalam jumlah besar. Dengan menghapus stopwords yang
terkandung dalam kalimat atau paragraf, maka proses pengolahan data akan lebih
mudah, dan tidak menimbulkan kesalahpahaman dalam proses analisis. Gambaran
tahap proses stopword removal dapat dilihat pada gambar 3.12.

Gambar 3.12 Tahapan Stopwords Removal

Berikut kode untuk proses Stopwords Removal.

35
myStopwords <- readLines("stopword_list_id.txt") #File stopword dapat diganti
sesuai dengan kamus yang anda punya
datastop <- as.character(tokenize) #Mengubah data menjadi karakter agar dapat
dilakukan proses stopword
datastop <- removeWords(datastop, myStopwords)
data.stopword <- data.frame(text = datastop)
save_as_csv(data.stopword,"data-stop.csv")

Penjelasan kode untuk stopword


• Membaca file yang berisi kata-kata stopword dan disimpan pada variabel
myStopwords.
• Merubah tipe data tokenize menjadi karakter agar dapat dilakukan proses
stopword dan disimpan pada variabel datastop.
• Menjalankan fungsi removeWords pada variabel datastop dan myStopword
untuk menghilangkan kata-kata yang mengandung stopword pada variabel
datastop.
• Merubah tipe data datastop menjadi data frame dan disimpan pada variabel
data.stopword.
• Kemudian disimpan dalam bentuk csv file.

Data yang di dapat dari tokenizing dilakukan stopword removal agar lebih
mudah di proses untuk proses selanjutnya. Contoh stopword dapat dilihat pada
Tabel 3.7.

Tabel 3.7 Perbandingan sebelum dan sesudah proses stopword removal


Sebelum Sesudah
"amat", "ini", "minta", "kaji", "ulang", "kaji", "ulang", "beli", "minyak",
"beli", "minyak", "goreng", "curah", "goreng", "curah", "aplikasi",
"dengan", "aplikasi", "pedulilindungi" "pedulilindungi"
"bijak", "beli", "minyak", "goreng", "bijak", "beli", "minyak", "goreng",
"curah", "guna", "pedulilindungi", "curah", "pedulilindungi", "timbul",
"timbul", "protes", "oleh", "sejumlah", "protes"
"pihak"

36
"masyarakat", "keluh", "beli", "masyarakat", "keluh", "beli",
"minyak", "goreng", "guna", "minyak", "goreng", "aplikasi",
"aplikasi", "pedulilindungi", "ribet" "pedulilindungi", "ribet"

3.5 Lexicon-based
Metode lexicon based digunakan karena klasifikasi ini dapat
mengklasifikasikan data tweets apakah data tersebut merupakan sentimen positif,
negatif, maupun netral dari data yang sudah dibersihkan. Klasifikasi dengan lexicon
sangat mengandalkan kebutuhan kamus lexicon bahasa Indonesia, karena kata pada
data dapat dinilai berdasarkan kamus apakah kata positif, negatif, maupun netral.
Untuk penilaian sentimen pada tweet sendiri berbeda-beda, jika kata positif pada
tweet lebih banyak dari negatif maka tweet tersebut termasuk ke dalam kategori
sentimen positif, jika kata negatif pada tweet lebih banyak maka tweet tersebut
masuk ke dalam kategori negatif, dan jika kata positif dan negatif bernilai sama
maka tweet tersebut masuk ke dalam kategori netral. Berikut gambaran tahapan
proses metode Lexicon-based dapat dilihat pada gambar 3.13.

Gambar 3.13 Scoring dan Labelling

37
Berikut kode untuk melakukan proses klasifikasi sentimen menggunakan
metode lexicon-based.

positif <- read.csv(file.choose(), header = F)


negatif <- read.csv(file.choose(), header = F)
positif <- as.character(positif$V1)
negatif <- as.character(negatif$V1)
kamus_positif = data.frame(positif)
kamus_negatif = data.frame(negatif)
data = data.frame(text = datas)
score.sentiment = function(data, positif, negatif, .progress='none')
{
require(plyr)
require(stringr)
sentimen = laply(data, function(datas, positif, negatif) {
tokenizing <- tokenize_ngrams(datas, n = 3, n_min = 1)
words <- unlist(tokenizing)
pos.matches = match(words, positif)
neg.matches = match(words, negatif)
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
sentimen = sum(pos.matches) + sum(neg.matches)
return(sentimen)
}, positif, negatif, .progress=.progress)
require(plyr)
require(stringr)
positif = laply(data, function(datas, positif, negatif) {
tokenizing <- tokenize_ngrams(datas, n = 3, n_min = 1)
words <- unlist(tokenizing)
pos.matches = match(words, positif)
neg.matches = match(words, negatif)
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
positif = sum(pos.matches)
return(positif)
}, positif, negatif, .progress=.progress)
require(plyr)
require(stringr)
negatif = laply(data, function(datas, positif, negatif) {
tokenizing <- tokenize_ngrams(datas, n = 3, n_min = 1)
words <- unlist(tokenizing)
pos.matches = match(words, positif)
neg.matches = match(words, negatif)
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
negatif = sum(neg.matches)

38
return(negatif)
}, positif, negatif, .progress=.progress)
require(plyr)
require(stringr)
scores = laply(data, function(datas, positif, negatif) {
tokenizing <- tokenize_ngrams(datas, n = 3, n_min = 1)
words <- unlist(tokenizing)
pos.matches = match(words, positif)
neg.matches = match(words, negatif)
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
scores = sum(pos.matches) + sum(neg.matches)
return(scores)
}, positif, negatif, .progress=.progress)
scores.df = data.frame(text=data,
total=sentimen,
positive=positif,
negative=negatif,
scores = positif - negatif)
return(scores.df)
}
data.lexicon.token = score.sentiment(data$text, positif, negatif)
View(data.lexicon.token)
data.lexicon.token$kelas <-ifelse(data.lexicon.token$score<0, "negatif",
ifelse(data.lexicon.token$score==0, "netral", "positif"))
save_as_csv(data.lexicon.token, "data_label.csv")

Penjelasan dari kode diatas untuk klasifikasi sentimen menggunakan


metode Lexicon-based.
• Menginput kamus lexicon positif dan negatif yang terdapat pada direktori
komputer dan mengubah ke bentuk data frame.
• Membuat fungsi score.sentiment dengna menggunakan package “plyr’ dan
“stringr”.
• Mengidentifikasi kata positif dan negatif pada setiap potongan kata dan
menjumlahkannya lalu disimpan pada variabel sentimen.
• Mengidentifikasi kata positif dan negatif pada setiap potongan kata dan
menjumlahkan kata positif lalu disimpan pada variabel positif.

39
• Mengidentifikasi kata positif dan negatif pada setiap potongan kata dan
menjumlahkan kata negatif lalu disimpan pada variabel negatif.
• Mengidentifikasi kata positif dan negatif pada setiap potongan kata dan
menjumlahkannya lalu disimpan pada variabel score.
• Menyimpan hasil dalam bentuk tabel total, positive, negative, dan scores.
• Memanggil fungsi score.sentiment yang telah dibuat.
• Kemudian melakukan konversi nilai skor ke dalam kelas positif, negatif
dan netral.
• Menyimpan file hasil pelabelan kedalam format csv.

Adapun simulasi proses pelabelan data tanggapan masyarakat Indonesia


pada media sosial Twitter terhadap pembelian minyak goreng curah melalui
aplikasi PeduliLindungi adalah sebagai berikut

Tabel 3.8 Simulasi Pelabelan Data


Text Total Positif Negatif Scores Kelas
pemkot surabaya tidak mau gegabah 3 0 3 -3 negatif
terap beli minyak goreng curah guna
aplikasi pedulilindungi
dosen unair nilai syarat beli minyak 5 3 2 1 positif
goreng curah guna pedulilindungi
sudah sangat tepat
kait beli minyak goreng curah guna 2 1 1 0 netral
aplikasi pedulilindungi anggota
dprd lebak angkat bicara

Proses klasifikasi labelling dilakukan dengan label netral, positif, dan


negatif. Jika score adalah 0 maka label yang diberikan adalah netral, jika > 0 maka
label yang diberikan positif, dan jika < 0 maka label yang diberikan negatif.

40
Setelah hasil sentimen didapat, hasil sentimen dijumlahkan sesuai dengan
masing-masing klasifikasi. Adapun perhitungan untuk mendapatkan total sentimen
dari masing-masing klasifikasi adalah seperti gambar 3.14.

Gambar 3.14 Hasil Klasifikasi Sentimen


Dari hasil penjumlahan klasifikasi sentimen, didapat bahwa jumlah
klasifikasi sentimen negatif sebanyak 803 tweets, jumlah klasifikasi sentimen netral
sebanyak 98 tweets, dan klasifikasi sentimen positif sebanyak 39 tweets dari total
940 tweets.
Adapun bentuk persentase dari hasil klasifikasi sentimen ini sebagai berikut
:
803
• Sentimen Negatif : 940 𝑥 100% = 85,4%
98
• Sentimen Netral : 940 𝑥 100% = 10,4%
39
• Sentimen Positif : 940 𝑥 100% = 4,2%

3.6 Visualisasi Data


Proses analisis ini diakhiri dengan tahap visualisasi data. Visualisasi data
adalah representasi data dalam bentuk grafik, diagram, ataupun gambar. Dalam
penelitian ini, visualisasi data yang akan ditampilkan adalah diagram batang (Bar
Chart). Pada gambar 3.15 dipaparkan diagram batang(bar chart).

41
Gambar 3.15 Diagram Batang (Bar Chart)
Data yang ditampilkan adalah proporsi antara klasifikasi sentimen negatif
pada batang merah sebanyak 803 tweets, klasifikasi sentimen netral pada batang
hijau sebanyak 98 tweets, dan klasifikasi sentimen positif pada batang biru
sebanyak 39 tweets dari total 940 tweets.

42

Anda mungkin juga menyukai