Anda di halaman 1dari 139

1

UNIVERSITAS GUNADARMA
FAKULTAS ILMU KOMPUTER & TEKNOLOGI INFORMASI

ANALISIS SENTIMEN PADA TWITTER TERHADAP


PENGGUNA KRL COMMUTER LINE DENGAN
MENGGUNAKAN METODE LEXICON BASED DAN NAIVE
BAYES CLASSIFIER

Disusun Oleh :
Nama : Rizky Rafliadi Ramadhan
NPM : 16115198
Jurusan : Sistem Informasi
Pembimbing : Dr. Kemal Ade Sekarwati, S.Kom., MMSI.

Diajukan Guna Melengkapi Sebagai Syarat


Dalam Mencapai Gelar Sarjana Strata Satu (S1)

JAKARTA
2019

1
PERNYATAAN ORISINALITAS DAN PUBLIKASI

Saya yang bertanda tangan di bawah ini,

Nama : Rizky Rafliadi Ramadhan


NPM : 16115198
Judul Skripsi : Analisis Sentimen Pada Twitter Terhadap Pengguna
KRL Commuter Line Dengan Menggunakan
Metode Lexicon Based dan Naive Bayes Classifier
Tanggal Sidang : 28 September 2019
Tanggal Lulus : 28 September 2019

Menyatakan bahwa penulisan skripsi ini adalah merupakan hasil karya saya
sendiri dan dapat dipublikasikan sepenuhnya oleh Universitas Gunadarma. Segala
kutipan dalam bentuk apapun telah mengikuti kaidah dan etika yang berlaku.
Mengenai isi dan tulisan merupakan tanggung jawab Penulis, bukan Universitas
Gunadarma.

Demikian pernyataan ini dibuat dengan sebenarnya dan dengan penuh kesadaran.

Jakarta, September 2019

( Rizky Rafliadi Ramadhan)

ii
LEMBAR PENGESAHAN

KOMISI PEMBIMBING
NO NAMA KEDUDUKAN
1 Dr. Kemal Ade Sekarwati, SKom., MMSI. Ketua
2 Dr. Cut Maisyarah Karyati, SKom., MMSI. Anggota
3 Dr. Hustinawaty, SKom., MM. Anggota
Tanggal Sidang : 28 September 2019

PANITIA UJIAN
NO NAMA KEDUDUKAN
1 Dr. Ravi Ahmad Salim Ketua
2 Prof. Dr. Wahyudi Priyono Sekretaris
3 Dr. Kemal Ade Sekarwati, SKom., MMSI. Anggota
4 Dr. Cut Maisyarah Karyati, SKom., MMSI. Anggota
5 Dr. Hustinawaty, SKom., MM. Anggota
Tanggal Lulus : 28 September 2019

Mengetahui,
Pembimbing Bagian Sidang Ujian

(Dr. Kemal Ade Sekarwati S.Kom., MMSI.) (Dr. Edi Sukirman, SSi., MM.)

iii
ABSTRAK

Rizky Rafliadi Ramadhan. 16115198


ANALISIS SENTIMEN PADA TWITTER TERHADAP PENGGUNA KRL
COMMUTER LINE DENGAN MENGGUNAKAN METODE LEXICON
BASED DAN NAIVE BAYES CLASSIFIER
Skripsi, Jurusan Sistem Informasi, Fakultas Ilmu Komputer dan Teknologi
Informasi, Universitas Gunadarma, 2019.
Kata Kunci : Analisis sentiment, confusion matriks, KRL commuter line, lexicon
based, naïve bayes classifier
(XIII + 107 + Lampiran)

Pengguna jasa transportasi KRL Commuter Line sangat aktif berinteraksi


di Twitter untuk mendapatkan informasi baik yang diberitahukan oleh pihak KRL
Commuter Line atau dari pengguna lain. Pengguna KRL Commuter Line
memberikan opini pada Twitter berupa tweets terhadap pelayanan dan fasilitas
yang telah diberikan. Diperlukan sebuah sistem yang dapat mengolah data tweets
yang begitu banyak dengan menerapkan analisis sentiment. Tahapan proses
analisis sentiment yaitu akusisi data, pre-processing, klasifikasi sentiment dan
penyusunan hasil analisis sentiment.
Penentuan sentimen awal atau biasa disebut sebagai sentimen prediksi
dilakukan menggunakan metode Lexicon Based dengan perhitungan secara
manual. Setelah dilakukan penentuan sentimen awal, dilakukan pembagian data
menjadi data latih dan data uji. Pada penelitian ini jumlah data latih sebesar 4697
data(data ke 1-4697) dan untuk data uji berjumlah 2013 data(data ke 4698-6710).
Data latih dan data uji akan digunakan dalam proses pelatihan dan pengujian
menggunakan Naïve Bayes Classifier. Hasil klasifikasi yang dilakukan oleh
metode Naïve Bayes Classifier disebut sentimen aktual. Setelah diawal proses
ditentukan sentimen prediksi dan sudah mendapatkan hasil sentimen aktual,
kemudian dilakukan perhitungan tingkat keakurasian antara sentimen prediksi
terhadap sentimen aktual menggunakan pengujian confusion matrix. Hasil yang
didapatkan adalah tingkat akurasi antara sentimen prediksi dan sentiment aktual
sebesar 90,41% Presisi positif sebesar 91,87%, presisi negatif sebesar 68,99%,
dan recall sebesar 97,74%. Maka berdasarkan hasil analisis sentimen pada
penelitian ini dapat disimpulkan bahwa KRL Commuter Line memiliki
kecenderungan sentimen positif pada saat data diambil.

Daftar Pustaka (2006-2018)

iv
ABSTRACT

Rizky Rafliadi Ramadhan. 16115198


ANALISIS SENTIMEN PADA TWITTER TERHADAP PENGGUNA KRL
COMMUTER LINE DENGAN MENGGUNAKAN METODE LEXICON
BASED DAN NAIVE BAYES CLASSIFIER
Skripsi, Jurusan Sistem Informasi, Fakultas Ilmu Komputer dan Teknologi
Informasi, Universitas Gunadarma, 2019.
Kata Kunci : Analisis sentiment, confusion matriks, KRL Commuter Line, lexicon
based, naïve bayes classifier
(XIII + 107 + Lampiran)

KRL Commuter Line transportation service users are very active


interacting on Twitter to get information either notified by the KRL Commuter
Line or from other users. KRL Commuter Line users give an opinion on Twitter
in the form of tweets on the services and facilities that have been provided. A
system is needed that can process so many tweets data by applying sentiment
analysis. The stages of the sentiment analysis process are data acquisition, pre-
processing, sentiment classification and preparation of the results of sentiment
analysis.
Determination of initial sentiment or commonly referred to as predictive
sentiment is done using the Lexicon Based method with manual calculations.
After determining the initial sentiment, the data is divided into training data and
test data. In this study, the number of training data is 4697 data (data to 1-4697)
and for test data is 2013 data (data to 4698-6710). Training data and test data will
be used in the training and testing process using the Naïve Bayes Classifier. The
results of the classification carried out by the Naïve Bayes Classifier method are
called actual sentiments. After the prediction of sentiment is determined at the
beginning of the process and the actual sentiment has been obtained, then the level
of accuracy is calculated between the predicted sentiment to the actual sentiment
using the confusion matrix test. The results obtained are the level of accuracy
between predicted sentiments and actual sentiment of 90.41% Positive precision
of 91.87%, negative precision of 68.99%, and recall of 97.74%. So based on the
results of sentiment analysis in this study it can be concluded that the KRL
Commuter Line has a tendency of positive sentiment when the data is taken.

Bibliography (2006-2018)

v
KATA PENGANTAR

Segala puji dan syukur penulis panjatkan ke hadirat Allah S.W.T yang
Maha Kuasa yang telah memberikan berkat, anugerah dan karunia yang
melimpah, sehingga penulis dapat menyelesaikan Tugas Akhir ini pada waktu
yang telah ditentukan. Skripsi ini disusun guna melengkapi sebagian syarat untuk
memperoleh gelar Sarjana Sistem Informasi Universitas Gunadarma. Adapun
judul Skripsi ini adalah “Analisis Sentimen Pada Twitter Terhadap Pengguna
KRL Commuter Line dengan Menggunakan Metode Lexicon Based dan Naive
Bayes Classifier”. Walaupun banyak kesulitan yang penulis harus hadapi ketika
menyusun Skripsi ini, namun berkat bantuan dan dorongan dari berbagai pihak,
akhirnya Skripsi ini dapat diselesaikan dengan baik. Untuk itu penulis tidak lupa
mengucapkan terima kasih kepada :

1. Prof. Dr. E.S. Margianti, SE, MM, selaku Rektor Universitas Gunadarma.
2. Prof. Dr. rer. nat. Achmad Benny Mutiara, SSi., SKom.,, selaku Dekan
Fakultas Ilmu Komputer dan Teknologi Informasi, Universitas
Gunadarma.
3. Dr. Setia Wirawan, SKom., MMSI, selaku Ketua Jurusan Sistem
Informasi, Universitas Gunadarma.
4. Dr. Edi Sukirman, SSi., MM., selaku Kepala Bagian Sidang Ujian
Universitas Gunadarma.
5. Dr. Kemal Ade Sekarwati, S.Kom., MMSI. selaku Dosen Pembimbing
yang telah banyak memberikan bimbingan, pengarahan, dan waktunya
kepada penulis.
6. Yanto, Lili Muchlisoh selaku orangtua dan Giffari, Sabrina selaku adik
kandung yang selalu mendukung dan terus memberikan motivasi.

7. Teman dekat penulis yaitu Deayu Caliska yang selalu memberi semangat
untuk menyelesaikan penulisan ini.

vi
8. Diko Alfatha, Ilham selaku teman penulis yang selalu membantu dalam
penulisan ini.
9. Seluruh rekan kelas 4KA34 dan 4KA35 di Universitas Gunadarma yang
telah banyak memberi semangat.
10. Serta semua pihak lain yang tidak bisa disebutkan satu persatu yang telah
memberikan dukungan serta semangat dalam penyelesaian skripsi ini.

Semoga Allah SWT melimpahkan berkah dan rahmat-Nya kepada semua


pihak tersebut atas segala bantuan dan bimbingannya yang telah diberikan kepada
penulis.
Penulis menyadari bahwa penulisan ini masih kurang dan sangat jauh dari
kata sempurna, karena keterbatasan pengetahuan maupun pengalaman penulis,
Oleh karena itu penulis sangat mengharapkan saran dan kritik yang membangun
dari pembaca demi kesempurnaan makalah ini.

Jakarta, Agustus 2019

Penulis

vii
DAFTAR ISI

COVER .................................................................................................................... i
PERNYATAAN ORISINALITAS DAN PUBLIKASI.......................................... ii
LEMBAR PENGESAHAN ................................................................................... iii
ABSTRAK ............................................................................................................. iv
ABSTRACT ............................................................................................................ v
KATA PENGANTAR ........................................................................................... vi
DAFTAR ISI ........................................................................................................ viii
DAFTAR GAMBAR ............................................................................................. xi
DAFTAR TABEL ................................................................................................ xiii
1 PENDAHULUAN .............................................................................................. 1
1.1 Latar Belakang ......................................................................................... 1
1.2 Rumusan Masalah .................................................................................... 3
1.3 Batasan Masalah ....................................................................................... 4
1.4 Tujuan Penelitian ...................................................................................... 4
1.5 Metode Penelitian ..................................................................................... 4
1.6 Sistematika Penulisan ............................................................................... 5
2 LANDASAN TEORI .......................................................................................... 7
2.1 Penelitian Terkait ..................................................................................... 7
2.2 Twitter ...................................................................................................... 8
2.3 Twitter API (Application Programming Interface) ................................ 10
2.4 Analisis Sentimen ................................................................................... 11
2.5 Text Mining ............................................................................................ 11
2.5.1 Text Preprocessing .......................................................................... 12
2.5.2 Feature Selection ............................................................................. 13
2.5.3 Text Representation ........................................................................ 13
2.5.4 Application of Text Mining Techniques ......................................... 13
2.6 Klasifikasi ............................................................................................... 13
2.7 Lexicon Based ......................................................................................... 14
2.8 Naive Bayes Classifier............................................................................ 15

viii
2.8.1 Tahap Pembelajaran ........................................................................ 16
2.8.2 Tahap Pengujian .............................................................................. 18
2.9 Confusion Matrix .................................................................................... 19
2.10 R Programming ...................................................................................... 20
2.10.1 RStudio............................................................................................ 22
2.10.2 Tampilan Halaman Awal RStudio .................................................. 22
2.11 Flowchart ............................................................................................... 23
2.12 UML (Unified Modeling Language) ...................................................... 24
2.12.1 Diagram UML ................................................................................. 25
2.12.2 Use Case Diagram .......................................................................... 26
2.12.3 Activity Diagram.............................................................................. 28
2.12.4 Sequence Diagram .......................................................................... 30
2.13 DIA Diagram .......................................................................................... 31
2.14 Balsamiq Mockups ................................................................................. 33
3 METODE PENELITIAN .................................................................................. 35
3.1 Perencanaan ............................................................................................ 35
3.2 Analisis ................................................................................................... 36
3.2.1 Analisis Masalah ............................................................................. 36
3.2.2 Analisis Sistem ................................................................................ 36
3.2.2.1 Crawling Data ............................................................................. 37
3.2.2.2 Pre-processing ............................................................................. 37
3.2.2.3 Klasisfikasi Lexicon Based .......................................................... 41
3.2.2.4 Klasisfikasi Naïve Bayes Classifier ............................................. 44
3.2.2.5 Visualisasi Data ........................................................................... 50
3.3.3 Analisis Kebutuhan Fungsional ...................................................... 52
3.3.4 Analisis Kebutuhan Non-Fungsional .............................................. 53
3.4 Perancangan ............................................................................................ 53
3.4.1 Unified Modeling Language ........................................................... 53
3.4.2 Rancangan Antarmuka .................................................................... 57
4 IMPLEMENTASI DAN UJI COBA ................................................................ 64
4.1 Implementasi .......................................................................................... 64
4.1.1 Implementasi Proses Analisis Sentimen ......................................... 64

ix
4.1.1.1 Crawling Data ................................................................................ 65
4.1.1.2 Pre-Processing ............................................................................. 68
4.1.1.3 Klasifikasi Lexicon Based .............................................................. 71
4.1.1.4 Klasifikasi Naïve Bayes Classifier ................................................. 76
4.1.1.5 Visualisasi ...................................................................................... 89
4.1.2 Implementasi Website ..................................................................... 96
4.2 Uji Coba ............................................................................................... 104
5 KESIMPULAN DAN SARAN ....................................................................... 108
5.1 Kesimpulan ........................................................................................... 108
5.2 Saran ..................................................................................................... 108
DAFTAR PUTAKA ........................................................................................... 109
LAMPIRAN.................................................................................................................... L-1

x
DAFTAR GAMBAR

2.1 Tahap Pembelajaran Naive Bayes Classifier .................................................. 17


2.2 Alur Klasifikasi Naive Bayes Classifier ......................................................... 18
2.3 Tampilan Awal RStudio.................................................................................. 22
2.4 Pengelompokkan Diagram UML .................................................................... 25
2.5 Tampilan Awal DIA Diagram Beserta Tools ................................................. 31
2.6 General Tool Pada DIA Diagram .................................................................... 32
2.7 Menu Toolbar DIA Diagram ........................................................................... 32
2.8 Tool Untuk Membuat Diagram Pada DIA Diagram ....................................... 33
2.9 Tool Untuk Memilih Jenis Garis ..................................................................... 33
2.10 Tampilan Awal Balsamiq Mockups .............................................................. 34

3.1 Tahapan Pengolahan Data ............................................................................... 37


3.2 Tahapan Pre-Processing ................................................................................. 38
3.3 Case Fold ........................................................................................................ 39
3.4 Alur Filtering .................................................................................................. 40
3.5 Alur Klasifikasi Lexicon Based ...................................................................... 42
3.6 Klasifikasi Naïve Bayes Classifier .................................................................. 45
3.7 Tampilan Visualisasi Histogram ..................................................................... 50
3.8 Tampilan Visualisasi Pie Chart ....................................................................... 51
3.9 Tampilan Visualisasi WordCloud Positif........................................................ 52
3.10 Tampilan Visualisasi WordCloud Negatif .................................................... 52
3.11 Use Case Diagram Website.......................................................................... 54
3.12 Activity Diagram ........................................................................................... 55
3.13 Class Diagram ............................................................................................... 56
3.14 Deployment Diagram .................................................................................... 56
3.15 Rancangan Antarmuka Home ....................................................................... 57
3.16 Rancangan Antarmuka Data tweets .............................................................. 59
3.17 Tampilan menu Database .............................................................................. 60
3.18 Rancangan Antarmuka Pre-Processing ......................................................... 61
3.19 Rancangan Antarmuka Analisis Sentimen .................................................... 62
3.20 Rancangan Antarmuka Analisis Visualisasi ................................................. 63

4.1 Tahapan Pengolahan Data [Brata Mas Pintoko & Kemas Muslim L., 2018] . 64
4.2 Tampilan Application Details pada Twitter API ............................................ 65
4.3 Details Keys and Tokens ................................................................................. 66
4.4 Tampilan Data Tweets .................................................................................... 68
4.5 Hasil Pre-Processing ....................................................................................... 71
4.6 Hasil Lexicon Based ....................................................................................... 76
4.7 Hasil Probabilitas Semua Data ........................................................................ 78

xi
4.8 Hasil Data Beserta Panjang Karakter .............................................................. 78
4.9 Hasil Probabilitas Data Latih .......................................................................... 80
4.10 Hasil Probabilitas Data Uji............................................................................ 81
4.11 Hasil Document Term Matrix ....................................................................... 82
4.12 Data Latih Dalam Bentuk Document Term Matrix ...................................... 82
4.13 Data Uji Dalam Bentuk Document Term Matrix .......................................... 83
4.14 Frekuensi Kata Yang Paling Banyak Muncul ............................................... 84
4.15 Document Term Matrix Dengan Frequent Word .......................................... 84
4.16 Fungsi Final Data Latih................................................................................. 85
4.17 Fungsi Final Data Uji .................................................................................... 86
4.18 Hasil Pembelajaran Data Latih...................................................................... 87
4.19 Output System Time ..................................................................................... 88
4.20 Hasil Pembelajaran Data Uji ......................................................................... 89
4.21 Output Fungsi Table Pengujian Naive Bayes Classifier ........ ……….. .89
4.22 Output Fungsi Prop.Table Pengujian Naive Bayes Classifier ...................... 90
4.23 Histogram Berdasarkan Panjang Karakter .................................................... 90
4.24 Histogram Data Sentimen Negatif ................................................................ 91
4.25 Histogram Data Sentimen Positif .................................................................. 91
4.26 Diagram Pie Hasil Klasifikasi Data Uji ........................................................ 93
4.27 Diagram Pie Data Uji .................................................................................... 93
4.28 Diagram Pie Data Latih................................................................................. 94
4.29 Diagram Pie Data Positif dan Negatif ........................................................... 94
4.30 Wordcloud Positif ......................................................................................... 95
4.31 Wordcloud Negatif ........................................................................................ 96
4.32 Tampilan Antarmuka Home .......................................................................... 97
4.33 Tampilan Antarmuka Data Tweets ............................................................... 98
4.34 Tampilan Antarmuka Database ..................................................................... 99
4.35 Tampilan Antarmuka Pre-Processing ......................................................... 100
4.36 Tampilan Antarmuka Analisis Sentimen .................................................... 101
4.37 Tampilan Antarmuka Visualisasi Histogram .............................................. 103
4.38 Tampilan Antarmuka Visualisasi Pie Chart ................................................ 103
4.39 Tampilan Antarmuka Visualisasi Wordcloud ............................................. 104
4.40 Tabel Confusion Matrix .............................................................................. 105
4.41 Confusion Matrix ........................................................................................ 106

xii
DAFTAR TABEL

2.1 Daftar Penelitian Terkait ................................................................................... 7


2.2 Tabel Confusion Matrix .................................................................................. 19
2.3 Fungsi Simbol-simbol Pada Flowchart ........................................................... 23
2.4 Simbol dan Fungsi Use Case Diagram ........................................................... 27
2.5 Simbol dan Fungsi Activity Diagram ............................................................. 29
2.6 Simbol dan Fungsi Sequence Diagram ........................................................... 30

3.1 Contoh Case Fold ............................................................................................ 39


3.2 Contoh Filtering .............................................................................................. 41
3.3 Contoh Perubahan Kata Negasi ...................................................................... 41
3.4 Contoh Hasil Klasifikasi Lexicon Based ........................................................ 43
3.5 Contoh Kata Pada Kamus Positif .................................................................... 43
3.6 Contoh Kata Pada Kamus Negatif .................................................................. 44
3.7 Contoh Membuat DTM ................................................................................... 46
3.8 Contoh Himpunan Data Latih ......................................................................... 47
3.9 Matriks 1 ......................................................................................................... 47
3.10 Matriks 2 ....................................................................................................... 48
3.11 Matriks 3 ....................................................................................................... 48
3.12 Hasil Perhitungan Tahap Pelatihan Naïve Bayes Classifier ......................... 49

xiii
BAB 1

PENDAHULUAN

1.1 Latar Belakang


Dalam era perkembangan dan pertumbuhan penduduk yang begitu pesat,
khususnya di Jabodetabek yang begitu padat dengan kendaraan pribadi
menyebabkan masyarakat cenderung memilih transportasi umum yang cepat dan
terjangkau. Masyarakat akan menuntut pelayanan dan fasilitas yang lebih baik
sesuai dengan kebutuhannya, sehingga konsumen lebih teliti dalam memilih
segala sesuatu yang dapat digunakan sesuai kebutuhan konsumen. Terutama
masalah transportasi, sangat berperan sebagai penunjang, pendorong, dan
penggerak. Transportasi merupakan sarana perkembangan yang strategis dan
penting dalam memperlancar roda perekonomian serta mempengaruhi semua
aspek kehidupan masyarakat. Selain itu, transportasi juga merupakan sarana
penting dalam memfasilitasi hubungan antar wilayah atau daerah melalui proses
interaksi dan komunikasi yang terjadi. Dalam memenuhi kebutuhan transportasi,
kualitas pelayanan menjadi dasar yang dapat mempengaruhi pilihan konsumen
untuk memilih berbagai jenis jasa yang berkembang saat ini.

KRL Commuter Line adalah salah satu moda transportasi umum yang paling
banyak digunakan oleh masyarakat Jabodetabek sebagai solusi dalam
menghindari kemacetan. Menyadari peranan transportasi umum khususnya
pelayanan dan fasilitas di dalam KRL Commuter Line harus seimbang dengan
tingkat kebutuhan dan tersedianya pelayanan angkutan yang aman, ramah, cepat,
lancar, tertib, nyaman, selamat dan efisien. KRL Commuter Line beroperasi dari
pagi hari hingga malam hari. Hingga Juni 2018, rata-rata jumlah pengguna KRL
per hari mencapai 1.001.438 orang pengguna pada hari kerja, dengan rekor jumlah
pengguna terbanyak yang dilayani dalam satu hari adalah 1.154.080 orang
[krl.co.id]. Untuk menampung pertanyaan, kritik dan saran hingga keluhan dari
pengguna jasa, KRL Commuter Line menyediakan banyak media komunikasi agar

1
memudahkan pengguna dalam menyampaikannya. Mulai dari call center, e-mail
hingga media

2
2

sosial. Dari ketiga media yang disediakan, media sosial adalah media komunikasi
yang paling banyak digunakan oleh pengguna dalam menyampaikan pertanyaan,
kritik, saran dan keluhannya terutama media sosial Twitter. Twitter adalah layanan
jejaring sosial yang memungkinkan penggunanya dapat berinteraksi dengan
pengguna lainnya dalam sebuah pesan berbasis teks hingga 280 karakter (tweets).
Tidak hanya teks saja, tweets juga dapat berupa foto ataupun video. Menurut
pengamatan penulis, dalam satu hari akun Twitter resmi KRL Commuter Line bisa
menerima dan membalas kisaran lebih dari 500 tweets dari pengguna jasa, yang
berisikan pertanyaan, saran, kritik maupun keluhan. Tweets ini bisa dikumpulkan
dan olah untuk mengetahui kategori kelompok sentimen mana yang sesuai.

Twitter menyediakan data yang bisa diakses secara bebas dengan


menggunakan Twitter API, mempermudah saat proses pengumpulan tweets dalam
jumlah yang sangat banyak [Oktinas Willa, 2017]. Penggunaan Twitter API,
tweets akan diolah menjadi sebuah data yang dicari sesuai dengan keyword. Data
tersebut nantinya akan dianalisis menggunakan analisis sentimen untuk
menghasilkan suatu informasi yang berguna. Analisis sentimen atau Opinion
Mining merupakan proses memahami, mengekstrak dan mengolah data tekstual
secara otomatis untuk mendapatkan informasi sentimen yang terkandung dalam
suatu kalimat opini. Analisis sentimen dilakukan untuk melihat kecenderungan
opini terhadap sebuah masalah atau objek oleh seseorang, apakah cenderung
berpandangan opini negatif atau positif. [Ghulam Asrofi Buntoro, Teguh Bharata
Adji, Adhistya Erna Purnamasari. 2014]. Analisis sentimen digunakan untuk
mengelompokkan opini positif dan negatif dari pengguna jasa KRL Commuter
Line sehingga mempercepat dan mempermudah tugas pengelola untuk meninjau
kembali kekurangan dari KRL Commuter Line baik dari aspek pelayanan maupun
fasilitas.

Dalam melakukan proses klasifikasi analisis sentimen dapat dilakukan


menggunakan berbagai metode, seperti Lexicon Based dan Naive Bayes
Classifier. Lexicon Based adalah proses untuk mengekstraksi sentimen dari teks
yang menghasilkan sentimen bernilai positif atau negatif. Naive Bayes Classifier

2
3

adalah metode pembelajaran mesin yang memiliki model dalam bentuk


probabilitas atau peluang, serta merupakan metode klasifikasi yang memiliki
tingkat akurasi paling baik dibanding metode klasifikasi lainnya. Selain itu, Naïve
Bayes Classifier hanya memerlukan sejumlah kecil data pelatihan untuk
mengestimasi parameter (varian dari kelas) yang diperlukan untuk klasifikasi
[Feldman, R & Sanger, J. 2007, cited in Nugroho, 2018, p. 200-209].

Berdasarkan uraian di atas, maka akan dilakukan penelitan mengenai


analisis sentiment pada tweets pengguna KRL Commuter Line Jabodetabek.
Pemilihan objek penelitian ini yaitu KRL Commuter Line karena transportasi ini
merupakan salah satu transportasi andalan masyarakat Jabodetabek yang paling
banyak digunakan setiap harinya dan memiliki banyak ulasan yang diambil dari
twitter berupa data tweets yang dibutuhkan untuk penelitian ini. Pada penelitian
ini digunakan metode Lexicon Based dengan tujuan untuk menentukan sentimen
awal dari suatu kalimat berdasarkan jumlah proporsi kata positif atau negatif yang
menjadi penyusun suatu kalimat, dan Naïve Bayes Classifier ditujukan untuk
mengolah dan mengklasifikasikan tweets sehingga akan diketahui hasil klasifikasi
dari data tweets dalam bentuk proporsi sentiment positif dan negatif.

1.2 Rumusan Masalah


Berdasarkan latar belakang yang telah diuraikan maka permasalahan yang
akan dibahas adalah :

1. Bagaimana melakukan analisis sentiment menggunakan perangkat lunak R-


Programming pada Twitter terhadap pengguna KRL Commuter Line
dengan metode Lexicon Based dan Naive Bayes Classifier?
2. Bagaimana cara memvisualisasikan data terhadap hasil analisis?
3. Bagaimana menguji akurasi sistem analisis sentimen pada penelitian ini?
4

1.3 Batasan Masalah


Data yang digunakan diambil dari twitter yang diambil melalui Twitter API,
tweets yang mengandung kata kunci @CommuterLine sebanyak 10.000 data
tweets dengan periode waktu 3-8 Agustus 2019. Proses analisis sentimen
menggunakan perangkat lunak R-Programming versi 3.5. Data dari tweets
dikelompokkan dalam 2 sentimen yaitu positif dan negatif. Proses menentukan
sentimen awal dari suatu kalimat berdasarkan jumlah proporsi kata positif atau
negatif yang menjadi penyusun suatu kalimat dengan metode Lexicon Based.
Kemudian menggunakan metode Naïve Bayes Classifier untuk mengolah dan
mengklasifikasikan tweets sehingga akan diketahui hasil klasifikasi dari data
tweets dalam bentuk proporsi sentiment positif dan negatif.

1.4 Tujuan Penelitian


Tujuan dari penelitian ini adalah melakukan analisis sentiment data dari
Twitter tentang opini masyarakat terhadap KRL Commuter Line dengan
menggunakan metode Lexicon-based dan algoritma Naïve Bayes Classifier.
Analisis sentiment ini untuk mengetahui respon pengguna terhadap pelayanan dan
fasilitas yang ditujukan ke pihak KRL Commuter Line itu cenderung masuk ke
positif atau negatif. Hasil dari penelitian ini diharapkan dapat digunakan oleh
pihak KRL Commuter Line sebagai bahan untuk perbaikan serta peningkatan
pelayanan dan fasilitas.

1.5 Metode Penelitian


Metode penelitian yang digunakan pada penelitian ini adalah System
Development Life Cycle (SDLC) terdiri dari 4 (empat) langkah kunci untuk
membangun sistem sebagai sarana dalam melakukan analisis [Preesman &
Maxim, 2015] yaitu:
1. Perencanaan, yaitu tahap merencanakan analisis sentiment yang di
dalamnya melakukan pengumpulan bahan yang dibutuhkan dan
5

berhubungan dengan analisis sentimen yang bersumber dari buku, jurnal


dan internet. Kemudian menyajikan hasil analisis sentiment tersebut
dalam sebuah website.
2. Analisis, yaitu tahap dilakukan analisis sistem, analisis masalah, analisis
kebutuhan fungsional dan analisis kebutuhan non-fungsional untuk
menjabarkan kebutuhan aplikasi.
3. Perancangan, yaitu tahap proses pembuatan rancangan website dengan
membuat UML dan membuat rancangan antarmuka.
4. Implementasi dan uji coba, yaitu tahap pengujian dan percobaan
terhadap aplikasi apakah sudah sesuai dengan spesifikasi yang telah
ditentukan, serta memastikan program dapat berjalan sperti yang
diharapkan.

1.6 Sistematika Penulisan


BAB 1 PENDAHULUAN

Bab ini berisi tentang latar belakang, rumusan masalah, batasan


masalah, tujuan penelitian, metode penelitian, dan sistematika
penulisan.

BAB 2 TINJAUAN PUSTAKA

Bab ini berisi secara singkat teori-teori yang relevan dan digunakan
sebagai dasar dalam penyelesaian masalah yang menjadi topik
pada penelitian ini.

BAB 3 METODE PENELITIAN

Bab ini berisi tentang skema langkah-langkah dalam penelitian


yang terdiri dari analisis masalah, analisis sistem, analisis
kebutuhan fungsional, analisis kebutuhan non-fungsional,
melakukan langkah pre-processing, proses analisis sentimen
menggunakan R Programming dengan metode Lexicon Based dan
6

Naive Bayes Blassifier dan visualisasi data dalam bentuk


histogram, diagram pie dan wordcloud.

BAB 4 IMPLEMENTASI DAN UJI COBA

Bab ini menjelaskan tentang implementasi sistem yang


divisualisasikan dengan menggunakan package Shiny pada
RStudio. Setelah itu dilakukan pengujian Confusion Matrix untuk
menghitung perbandingan akurasi antara klasifikasi Lexicon Based
dan Naive Bayes Classifier.

BAB 5 PENUTUP

Bab ini berisi tentang kesimpulan dari penelitian yang telah


dilakukan serta saran yang membangun untuk pengembangan dan
perbaikan penelitian ini pada masa yang akan datang.
BAB 2

LANDASAN TEORI

2.1 Penelitian Terkait


Penelitian ini dilakukan dengan mempelajari penelitian terdahulu yang
memiliki keterkaitan tentang analisis sentiment, metode Lexicon Based dan Naive
Bayes Classifier. Beberapa penelitian terdahulu yang digunakan sebagai dasar
pembelajaran terdapat pada Tabel 2.1

Tabel 2.1 Daftar Penelitian Terkait

No. Nama Tahun Topik Hasil

Didik Garbian Analisis Sentimen Hasil analisis sentimen,


Nugroho, Pada Jasa Ojek menghasilkan nilai
Yulison Herry Online akurasi tertinggi sebesar
1 2016
Chrisnanto, Menggunakan 80%.
Agung metode Naïve Bayes
Wahana
Analisis Sentimen Hasil menggunakan
Pada Media Sosial algoritma naive bayes
Twitter mencapai tingkat akurasi
Menggunakan Naive 89.67% dan pengaruh

Agung Bayes Classifier ekstraksi fitur n-gram


2 2018 Dengan Ekstraksi pada algoritma naive
Nugroho
Fitur N-Gram bayes sekitar 2.33% yaitu
menjadi 92.00%.

7
8

No. Nama Tahun Topik Hasil

Analisis Sentimen Hasil analisis sentiment


Jasa Transportasi terhadap jasa transportasi
Online pada Twitter online dengan naive
Brata Mas Menggunakan bayes, didapatkan hasil
Pintoko, Metode Naive Bayes sentimen positif sebesar
3 2018
Kemas Muslim Classifier 88.60% dan sentimen
L. negative sebesar 11.40%
dengan akurasi sebesar
86.80%.

2.2 Twitter
Kata Twitter berasal dari kata Tweet yang diartikan secara bebas adalah
kicauan burung. Twitter adalah sebuah perwujudan dari web 2.0 yang sukses.
Indikator web 2.0 adalah kemampuan untuk berinteraksi antarpengguna
[Fitriyadi., 2015]. Twitter yang didirikan oleh Evan Williams, Jack Dorsey,
Christopher “Biz” Stone, dan Noah Glass pada tahun 2006 hanya mampu
mengirim dan membaca pesan singkat atau tweet hingga 140 karakter, namun
pada tanggal 07 November 2017 bertambah hingga panjang karakternya adalah
280.

Tweet sendiri bisa terdiri dari pesan teks dan foto. Melalui tweet inilah
pengguna Twitter dapat berinteraksi lebih dekat dengan pengguna Twitter lainnya
dengan mengirimkan tentang apa yang sedang mereka pikirkan , apa yang sedang
dilakukan, tentang kejadian yang baru saja terjadi, tentang berita terkini serta hal
lainnya [Willi., 2015]. Fitur-fitur yang dapat digunakan pengguna Twitter adalah
sebagai berikut [Widiastuti., 2014]:
9

a. Followers dan Following

Followers (pengikut) merupakan akun atau orang yang mengikuti akun


yang lain, sedangkan following (mengikuti) merupakan akun atau orang yang
diikuti akun lain. Cara lain untuk menggunakan Twitter adalah untuk berbagi
informasi dengan pengikut akun sendiri. Pengguna Twitter yang mengikuti akun
itu akan menerima update dari akun tersebut, yang dibagikan di halaman utama
mereka di Twitter.

b. Direct Message

Twitter juga memungkinkan untuk mengirimkan pesan pribadi ke


pengguna yang mengikuti akun tersebut. Ini pada dasarnya adalah program e-mail
yang diterapkan ke Twitter. Jika pengguna Twitter tidak mengikuti akun tersebut,
mereka tetap dapat saling mengirim pesan lewat pesan pribadi.

c. Twitter Search

Salah satu fitur yang paling kuat dari Twitter adalah memberi kemudahan
pengguna untuk mencari orang-orang tertentu, kata kunci, subjek, dan tempat.

d. Trending Topics

Salah satu bagian yang paling menarik dari Twitter adalah treding tropics.
Trending topics ini adalah terdiri dari sepuluh topik yang sering disebut atau
dibicarkan di Twitter pada waktu tertentu. Trending topics akan berkisar dari
berita, olahraga, dan barang-barang hiburan yang menghibur.

e. Latest News

Twitter memungkinkan penggunanya dengan cepat mengejar ketinggalan


berita terbaru. Begitu seseorang tahu tentang berita terbaru, dia dapat memposting
informasi tersebut di Twitter, dan dalam beberapa detik konten yang dibagi
muncul di internet.
10

f. Tweets

Fitur ini digunakan untuk mengirim pesan, gambar, gif, polling, atau
location yang ingin dibagikan kepada orang lain.

g. Profile dan Settings

Pada fitur ini pemilik akun dapat mengubah informasi dan melakukan
perubahan keamanan dan privasi terkait akunnya.

2.3 Twitter API (Application Programming Interface)


Twitter API (Application Programming Interface) merupakan sebuah fungsi
atau perintah-perintah yang digunakan untuk mengakses aplikasi perangkat lunak
berbasis web atau web tool. Twitter menyediakan Twitter API yang
memungkinkan pengembangan pihak ketiga untuk membuat program yang
menggabungkan layanan Twitter. Dengan API para developer menggunakan
twitter API untuk membuat aplikasi, website, dan informasi lain yang berinteraksi
dengan Twitter. API menyerupai Software as a Service (SaaS), karena
pengembang perangkat lunak tidak perlu memulai dari awal untuk menulis
program [Ravindran. 2015]. Twitter API menggunakan arsitektur REST
(Representational State Transfer) sehingga Twitter API dapat digunakan pada
format data yang beragam seperti XML maupun JMSON.

Twitter API terdiri atas Twitter Search API dan Twitter Streaming API.
Perbedaan keduanya yaitu, Twitter Search API menitikberatkan fungsi pencarian
ke masa lampau sedangkan Twitter Streaming API menitikberatkan fungsi
pencarian ke masa yang akan datang [Rustiana dan Rahayu., 2017]. Twitter API
memfasilitasi pengguna untuk dapat mengirimkan request requery sebanyak 180
request/15 menit. Jika sebelum waktu 15 menit, request telah melah mencapai
180, maka harus menunggu 15 menit berikutnya untuk bisa melakukan request
kembali [Willi., 2015].
11

2.4 Analisis Sentimen


Analisis sentimen atau biasa disebut opini mining merupakan proses
memahami, mengekstrak dan mengolah data tekstual secara otomatis untuk
mendapatkan infomrasi sentiment yang terkandung dalam suatu kalimat opini.
Analisis sentimen dilakukan untuk melihat pendapat atau kecenderungan opini
terhadap sebuah masalah atau objek oleh seseorang, apakah cenderung
berpandangan atau beropini negatif atau positif [Fahrur Rozi Imam et al., 2012].

Analisis sentimen dapat dibedakan berdasarkan sumber datanya, beberapa


level yang sering digunakan dalam penelitian analisis sentimen adalah analisis
sentimen pada level dokumen dan analisis sentimen pada level kalimat.
Berdasarkan level sumber datanya analisis sentimen terbagi menjadi 2 kelompok
besar yaitu [Falahah dan Nur., 2015]:

1) Sentiment Analysis Coarse-grained

Analisis sentimen yang dilakukan pada level dokumen. Secara garis besar
fokus utama dari analisis sentimen adalah menganggap seluruh isi dokumen
sebagai sebuah sentiment positif atau sentiment negatif.

2) Fined-grained Sentiment Analysis

Analisis sentimen pada level kalimat. Fokus utama fined-grained sentiment


analysis adalah menentukan sentimen pada setiap kalimat.

2.5 Text Mining


Menurut Feldman dan Sanger [Feldman dan Sanger, 2007], text mining
dapat didefinisikan sebagai suatu proses menggali informasi yang memungkinkan
pengguna berinteraksi dengan sekumpulan dokumen dari waktu ke waktu
menggunakan berbagai macam tools analisis. Tujuan dari text mining adalah
untuk mencari kata-kata yang dapat mewakili isi dari dokumen sehingga dapat
dilakukan analisis keterhubungan antar dokumen. Jadi, sumber data yang
digunakan pada text mining adalah kumpulan teks yang memiliki format yang
12

tidak terstruktur atau minimal semi terstruktur. Adapun tugas khusus dari text
mining antara lain yaitu pengkategorisasian teks (text categorization) dan
pengelompokkan teks (text clustering).
Pada dasarnya proses kerja text mining banyak mengadopsi penelitian data
mining, namun yang menjadi perbedaan adalah pola yang digunakan oleh text
mining diambil dari sekumpulan Bahasa alami yang tidak terstruktur sedangkan
dalam data mining pola yang diambil dari database yang terstruktur [Han &
Kamber, 2006]. Tahap-tahap text mining secara umum adalah text preprocessing
dan feature selection [Feldman & Sanger 2007, Berry & Kogan 2010]. Dimana
penjelasan dari tahap-tahap tersebut adalah sebagai berikut:

2.5.1 Text Preprocessing


Text Preprocessing merupakan tahapan awal dari Text Mining, tahapan ini
meliputi proses untuk mempersiapkan data tekstual yang akan digunakan agar
diproses pada tahapan berikutnya. Proses yang dilakukan pada tahapan ini antara
lain:

1) Case folding, yaitu merubah semua karakter huruf pada sebuah kalimat
menjadi huruf kecil dan menghilangkan karakter yang dianggap tidak valid
seperti angka, tanda baca, dan Uniform Resources Locator (URL).
2) Tokenizing, yaitu memotong sebuah kalimat berdasarkan tiap kata yang
menyusunnya.
3) Stemming, yaitu merubah berbagai kata berimbuhan menjadi kata dasarnya,
tahap ini pada umumnya dilakukan untuk teks dengan bahasa Inggris, karena
teks dengan bahasa Inggris memiliki stuktur imbuhan yang tepat.
4) Tagging, yaitu merubah berbagai kata dalam bentuk lampau menjadi kata
awalnya, tahap ini pada umumnya dilakukan untuk teks dengan bahasa
Inggris atau bahasa lainnya yang memiliki bentuk lampau.
13

2.5.2 Feature Selection


Feature selection merupakan tahapan untuk mengurangi dimensi dari
sebuah data tekstual sehingga hasil dari proses Text Mining memiliki kualitas
yang lebih baik. Proses yang dilakukan pada tahapan ini adalah stopword removal
yaitu menghilangkan kata-kata yang dianggap tidak penting atau tidak
menggambarkan isi dari sebuah kalimat.

2.5.3 Text Representation


Pada tahapan ini adalah merubah data tekstual menjadi representasi yang
lebih mudah untuk diproses. Pada tahapan ini, sebuah kalimat direpresenasikan
sebagai fitur. Data tekstual akan membentuk sebuah ruang dengan jumlah objek
sebanyak jumlah kalimat yang ada dan jumlah fitur sebanyak jumlah kata yang
berbeda.

2.5.4 Application of Text Mining Techniques


Tahapan ini dilakukan penerapan teknik yang digunakan unutk
pengambilan informasi dari data tekstual yang telah diproses sebelumnya.
Terdapat beberapa tekik yang dapat digunakan diantaranya classification,
clustering, information extraction, trend analysis, distribution analysis, dan
association rules. Pemilihan teknik yang digunakan disesuaikan dengan jenis
informasi yang ingin diambil dari data tekstual yang berbeda.

2.6 Klasifikasi
Klasifikasi adalah proses pencarian sekumpulan model atau fungsi yang
menggambarkan dan membedakan kelas data dengan tujuan agar model tersebut
dapat digunakan untuk memprediksi kelas dari suatu objek yang belum diketahui
kelasnya [Putri, dan Setiadi., 2014]. Tujuan dari kategorisasi teks adalah menguji
pengklasifikasian teks yang belum diketahui kategorinya, jadi jika ada teks yang
baru dapat lebih mudah diklasifikasikan pada suatu kategori berdasarkan teks-teks
yang telah ada sebelumnya [Widaningsih, dan Suheri., 2018]. Beberapa algoritma
klasifikasi yang biasanya digunakan untuk klasifikasi teks yaitu Naive Bayes
14

Classifier (NBC), Support Vector Machine (SVM), neural network, decision tree,
dan K-Nearest neighbor (KNN). Dalam pengklasifikasian data terdapat tiga
proses yang dilakukan yaitu [Fitrianti,Risma Putri., 2018]:

1) Proses training

Pada proses training digunakan data latih yang telah diketahui label-labelnya
untuk membangun model atau fungsi.

2) Proses testing

Untuk mengetahui keakuratan model atau fungsi yang akan dibangun pada
proses training, maka digunakan data yang disebut dengan data uji untuk
memprediksi label-labelnya.

3) Proses validasi

Validasi dilakukan untuk meminimalkan kesalahan pada data validasi.

2.7 Lexicon Based


Dalam proses klasifikasi, penentuan data dilakukan pada tiap kata dalam
kalimat menggunakan lexicon based dengan rumus:
(2.1)

(2.2)

Dimana (Spositif) adalah bobot dari kalimat yang didapatkan melalui


penjumlahan n skor polaritas kata opini positif dan (Snegatif) adalah bobot dari
kalimat yang didaptkan melalui penjumlahan n skor polaritas kata opini negative.
Bobot pada tiap kalimat ini yang akan digunakan sebagai acuan untuk melakukan
proses perbandingan. Sehingga dalam satu kalimat akan diketahui total jumlah
15

niai positif (Spositif) dan juga nilai negatif (Snegatif) dari tiap-tiap kata
penyusunnya. Dari persamaan nilai sentimen dalam satu kalimat maka diperoleh
persamaan 3 dan 4 untuk menentukan orientasi sentimen dengan perbandingan
jumlah nilai positif, negatif [Kusumawati, Iin. 2017].

KalimatSentimenPositif If Spositif >Snegatif (2.3)

KalimatSentimenNegatif If Spositif <Snegatif (2.4)

2.8 Naive Bayes Classifier


Algoritma naive bayes classifier merupakan algoritma yang digunakan
untuk mencari nilai probablitas tertinggi untuk mengklasifikasikan data uji pada
kategori yang paling tepat [Feldman & Sanger 2007]. Dalam penelitian ini yang
menjadi data uji adalah dokumen tweets.
Dalam algoritma naive bayes classifier setiap dokumen direpresentasikan
dengan pasangan atribut “x1, x2, x3,..xn” dimana x1 adalah kata pertama, x2
adalah kata kedua dan seterusnya. Sedangkan V adalah himpunan kategori
sentimen. Pada saat klasifikasi algoritma akan mencari probabilitas tertinggi dari
semua kategori sentimen yang diujikan (VMAP), dimana persamaannya adalah
sebagai berikut:
(2.5)
( | ) ( )
( )

Untuk P(x1, x2, x3,…xn) nilainya konstan untuk semua kategori (Vj)
sehingga persamaan dapat ditulis sebagai berikut:
(2.6)

= ( | ) ( )

Persamaan diatas dapat disederhanakan menjadi sebagai berikut:


16

(2.7)

= ∏ ( | ) ( )

Keterangan :
Vj = kategori tweet j = 1, 2, 3, … n. Dimana dalam penelitian ini j1
adalah kategori tweet sentimen negatif, j2 adalah kategori tweet
sentimen positif dan j3 adalah kategori sentimen netral.
P (xi|Vj) = probabilitas xi pada kategori Vj
P (Vj) = probabilitas dari Vj
Untuk P(Vj) dan P(xi|Vj) dihitung pada saat pelatihan dimana persamaannya
adalah sebagai berikut: (2.8)
| |
( )
| |
(2.9)
| |
( | )
| |
Keterangan :
P(Vj) = Probabilitas setiap dokumen terhadap sekumpulan
dokumen.
P(xi|Vj) = Probabilitas kemunculan kata xi pada suatu dokumen
dengan kategori class Vj.
|docs| = Jumlah dokumen setiap kategori j.
|contoh| = Jumlah dokumen dari semua kategori.
nk = Jumlah frekuensi kemunculan tiap kata.
n = Jumlah frekuensi kemunculan kata dari setiap kategori.
Metode Naive Bayes Classifier terdiri dari dua tahap, yaitu tahap
pembelajaran dan tahap klasifikasi.

2.8.1 Tahap Pembelajaran


Tahap pembelajaran atau tahap training adalah tahap dimana dokumen
hasil tahap pre-processing sampai pada tahap pembelajaran untuk mendapatkan
17

data pembelajaran. Proses ini digunakan untuk mendapatkan nilai kemungkinan


dari P(C) dan P(W|C). Tahap pembelajaran ini dapat dilihat pada Gambar 2.1.

Gambar 2.1 Tahap Pembelajaran Naive Bayes Classifier

Proses pembelajaran ini dimulai dengan memasukkan dokumen


pembelajaran untuk pembentukan daftar kata-kata. Daftar kata-kata adalah
kumpulan kata unik data training yang kemudian akan dihitung jumlahnya.
Selanjutnya, hitung P(C) atau priors untuk setiap kategori digunakan rumus:
(2.10)

( )

Dimana Nc adalah jumlah dokumen dalam kategori c dan N adalah jumlah


dokumen yang dipakai dalam percobaan. Selanjutnya, hitung P(W|C) untuk setiap
Wk dalam daftar kata-kata dengan rumus:
(2.11)
( )
( | )
( ) | |
18

Dimana P(W|C) adalah jumlah kejadian kata W dalam kategori C,


count(C) adalah jumlah semua kata dalam kategori C dan |V| adalah jumlah kata
unik dalam semua data percobaan.

2.8.2 Tahap Pengujian


Tahap klasifikasi atau tahap uji adalah tahap dimana dokumen baru akan
mengalami proses klasifikasi berdasarkan percobaan data sebelumnya. Tahap
klasifikasi ini dapat dilihat pada Gambar 2.2.

Gambar 2.2 Alur Klasifikasi Naive Bayes Classifier

Dalam tahap klasifikasi, masukan yang dipakai adalah dokumen dan


model probabilistic yang telah dihasilkan pada tahap pembelajaran. Tahap
selanjutnya adalah penentuan kelas dengan rumus:
(2.12)
( | ) ( ( | ) ( | ) ( | ) ( | ) )
19

Setelah diperoleh hasil perhitungan untuk setiap kategori, maka kategori


untuk pengklasifikasian dokumen dipilih berdasarkan P(C|D) maksium.

2.9 Confusion Matrix


Confusion Matrix adalah sebuah tabel yang sering digunakan untuk
menggambarkan kinerja model klasifikasi pada set data pengujian yang nilai nya
telah diketahui. Confusion matrix sendiri relatif sederhana dan mudah untuk
mengerti, tetapi terminologi yang terkait dapat membingungkan apabila belum
memahami konsep dari Confusion Matrix. Tabel Confusion Matrix dapat dilihat
pada Tabel 2.2 [https://www.dataschool.io/simple-guide-to-confusion-matrix
terminology, 2018]

Tabel 2.2 Tabel Confusion Matrix

Classified as
Correct Classification
Predicted “+” Predicted “-”
Actual “+” True Positives False Negatives
Actual “-” False Positives True Negatives

Berikut adalah istilah yang ada pada Tabel 2.2 :

1. True Positive(TP) : Jumlah data positif yang diklasifikasikan sebagai


nilai positif
2. True Negative(TN) : Jumlah data negatif yang diklasifikasikan sebagai
nilai negatif.
3. False Positive(FP) : Jumlah data positif yang diklasifikasikan sebagai
nilai negatif
4. False Negative(FN) : Jumlah data negatif yang diklasifikasikan sebagai
nilai positif
20

Perhitungan akurasi dengan tabel confusion matrix pada Tabel 2.6 adalah sebagai
berikut :

1. Akurasi

Akurasi adalah tingkat kedekatan antara nilai prediksi dengan nilai actual.
Berikut adalah rumus untuk mencari akurasi berdasarkan tabel Confusion Matrix:

( )
Accuracy = ….. (2.13)

2. Presisi

Presisi didefinisikan sebagai rasio item relevan yang dipilih terhadap


semua item yang terpilih. Presisi dapat diartikan sebagai kecocokan antara
permintaan informasi dengan jawaban terhadap permintaan tersebut.

……..… (2.14)

3. Recall

Recall didefinisikan sebagai rasio dari item relevan yang dipilih terhadap
total jumlah item relevan yang tersedia. Recall dihitung dengan rumus :

Recall = ………… (2.15)

2.10 R Programming
R programming adalah suatu fasilitas perangkat lunak terpadu untuk
memanipulasi data, simulasi, kalkulasi dan peragaan grafik. R memiliki
kemampua menganalisis data dengan sangat efektif dan dilengkapi dengan
operator pengolahan array dan matriks. R memiliki kemampuan penampilan
grafik untuk peragaan datanya. R programming dapat di unduh secara gratis di
http://cran.project.org [Sussolaikah dan Alwi. 2016]. R terdiri atas:
1. Fasilitas penanganan dan penyimpanan data yang efektif.
2. Rangkaian perhitungan array, khususnya matriks.
21

3. Fasilitas grafis untuk analisis data dan tampilan baik layer maupun luar
layar.
4. Bahasa pemrograman yang berkembang dengan baik, sederhana, efektif
mencakup fungsi loop, kondisi, dan fungsi rekrusif yang ditentukan oleh
pengguna dan fasilitas input/output.

R memiliki lima objek pokok yakni karakter, angka, integer, kompleks,


boolean. Meski objek basic pada R adalah vector dan vector yang kosong dapat
ditulis menggunakan command vector(). Pada R pengguna menggunakan symbol
“<-“ sebagai operator. Seperti pada contoh berikut:

> x <- 1

> print(x) [1] 1

> x [1] 1

> msg <- “hello”

Sedangkan untuk komentar menggunakan simbol seperti contoh berikut:

x <- ## Incomplete expression.

Selain itu, R juga memiliki data frame yang berfungsi untuk tabel data pada
R. sebuah package plyr* yang dirancang oleh Hadley Wickham telah
teroptimasisasi dan bekerja dengan baik untuk data frame pada R. Data frame
mempresentasikan daftar-daftar spesial tipe yang mana setiap elemen pada daftar
tersebut memiliki panjang yang sama. Masing-masing elemen adalah kolom dan
baris. Data frame juga dibentuk dengan cara membaca dataset yang ada pada R
menggunakan command read.table() atau red.csv(). Data frame dapat disusun
menjadi matriks dengan menggunakan command data.matriks() [https://www.r-
project.org/about.html. 2019].
22

2.10.1 RStudio
RStudio tool pemrograman atau Integrated Development Environment
(IDE) Bahasa R yang memiliki antar muka lebih baik daripada RGui. RStudio
memiliki 2 versi lisensi, yaitu Open Source Edition dan Commercial Edition
[Faisal. 2017]. RStudio akan memberikan kemudahan bagi pemakai R sehingga
pengguna akan dapat menjalankan program R menjadi lebih menyenangkan
karena RStudio memberikan informasi instruksi-instruksi mengenai apa saja yang
harus dilakukan. RStudio bisa di download melalui http://www.rstudio.com/.

2.10.2 Tampilan Halaman Awal RStudio


Berikut ini adalah tampilan awal RStudio dapat dilihat pada Gambar 2.4.

Gambar 2.3 Tampilan Awal RStudio


Keterangan :
1. R Script Editor
Adalah tempat untuk menuliskan kode/instruksi/komentar R agar dapat
tersimpan dalam file.
2. Console Editor
Adalah tempat untuk menjalankan perintah (Run) dari instruksi atau kode
R yang ditulis.
23

3. Workspace & History


Tab Workspace menampilkan seluruh obyek yang aktif. Tab History
menampilkan urutan perintah (list of commands) yang telah dijalankan.
4. Files, Plot, Packages, Help
a) Tab Files menampilkan seluruh file dan folder.
b) Tab Plot akan menampilkan seluruh grafik.
c) Tab Packages akan menampilkan listing packages atau add-ons
yang diperlukan agar program berjalan dengan baik.
d) Tab Help menampilkan penjelasan yang lengkap dan komprehensif
apabila ada instruksi (code) yang tidak jelas, dilengkapi dengan
contohnya

2.11 Flowchart
Flowchart adalah suatu bagan dengan simbol-simbol tertentu yang
menggambarkan urutan proses secara mendetail dan hubungan antara suatu proses
(instruksi) dengan proses lainnya dalam suatu program [Wibawanto, wandah.
2017]. Fungsi dari simbol-simbol flowchart dapat dilihat pada Tabel 2.3 sebagai
berikut:

Tabel 2.3 Fungsi Simbol-simbol Pada Flowchart


Sumber : http://repository.usu.ac.id/bitsream/handle/123456789/41908/
Abstrack.pdf
Simbol Fungsi

Simbol process, yaiut menyatakan suatu tindakan


(proses) yang dilakukan didalam program.
24

Simbol Fungsi

Simbol offline connector, yaitu menyatakan


penghubung bila flowchart terputus disebabkan
oleh pergantian halaman (misalnya tidak cukup
dalam satu halaman)

Simbol online connector, berfungsi untuk


menyatakan sambungan dari proses ke proses yang
lainnya dalam halaman yang sama.

Simbol arus/flowline, yaitu menyatakan jalannya


arus suatu proses.

Simbol decision, yaitu menunjukkan suatu kondisi


tertentu yang akan menghasilkan dua kemungkinan
jawaban yaitu : ya/tidak.

Simbol input/outpus, menyatakan proses input atau


output tanpa tergantung jenis peralatannya.

Simbol terminal, yaitu menyatakan permulaan atau


akhir suatu program.

Simbol document, mencetak keluaran dalam bentuk


dokumen.

2.12 UML (Unified Modeling Language)


Unified Modeling Language (UML) disebut sebagai bahasa pemodelan
bukan metode. Bahasa pemodelan sebagaian besar berupa grafik yang berisi
25

notasi dari metode yang digunakan untuk mendesain secara cepat [Herlawati,
2011].
Bahasa pemodelan merupakan bagian penting dari metode. Ini merupakan
bagian kunci tertentu untuk komunikasi. Unified Modeling Language (UML)
merupakan bahasa standar untuk penulisan blueprint software yang digunakan
untuk visualisasi, spesifikasi, pembentukan dan pendokumentasian alat-alat dari
sistem software berbasis Orientasi Objek (Object-Oriented).
UML tidak hanya merupakan sebuah bahasa pemrograman visual saja,
namun juga dapat secara langsung dihubungkan ke berbagai bahasa
pemrograman, seperti JAVA, C#, C++, Visual Basic, atau bahkan dihubungkan
secara langsung ke dalam sebuah object-oriented database [Herlawati, 2011].

2.12.1 Diagram UML


UML diagram dikelompokkan dalam 3 kategori, yaitu Structure
Diagrams, Behavior Diagrams, dan Interaction Diagrams. Pembagian kategori
dan macam-macam diagram tersebut terdapat pada Gambar 2.5.

Gambar 2.4 Pengelompokkan Diagram UML

1. Structure Diagrams adalah kumpulan diagram yang digunakan untuk


menggambarkan suatu struktur statis dari sistem yang dimodelkan.
26

2. Behavior Diagrams adalah kumpulan diagram yang digunakan untuk


menggambarka kelakuan sistem atau rangkaian perubahan yang terjadi
pada sebuah sistem.
3. Interaction Diagrams adalah kumpulan diagram yang digunakan untuk
menggambarkan interaksi sistem dengan sistem lain maupun interaksi
antar subsistem pada suatu sistem.

2.12.2 Use Case Diagram


Use Case atau diagram use case merupakan pemodelan untuk kelakuan
(behavior) sistem informasi yang akan dibuat. Use case mendeskripsikan sebuah
interaksi antara satu atau lebih actor dengan sistem informasi yang akan dibuat.
Secara kasar, use case digunakan untuk mengetahui fungsi apa saja yang ada di
dalam sebuah sistem informasi dan siapa saja yang berhak menggunakan fungsi-
fungsi itu. Syarat penamaan pada use case adalah nama didefinisikan sesimpel
mungkin dan mudah dipahami.
Ada dua hal utama pada use case yaitu pendefinisian apa yang disebut
actor dan use case. Actor merupakan orang, proses, atau sistem lain yang
berinteraksi dengan sistem informasi yang akan dibuat di luar sistem informasi
yang akan dibuat itu sendiri, jadi walaupun simbol dari actor adalah gambar
orang, tapi actor belum tentu merupakan orang. Use case diagram memiliki
simbol dan fungsi seperti penjelasan Tabel 2.4.
27

Tabel 2.4 Simbol dan Fungsi Use Case Diagram


28

2.12.3 Activity Diagram


Daigram aktivitas atau activity diagram menggambarkan workflow (aliran
kerja) atau aktivitas dari sebuah sistem atau proses bisnis. Perlu diperhatikan di
sini adalah bahwa diagram aktivitas menggambarkan aktivitas sistem bukan apa
yang dilakukan oleh actor, jadi aktivitas yang dapat dilakukan oleh sistem.
Pada dasarnya activity diagram sering digunakan oleh flowchart. Diagram
ini berhubungan dengan diagram state chart. State chart diagram berfokus pada
objek yang dalam suatu proses (atau proses menjadi suatu objek). Activity diagram
berfokus pada aktivitas-aktivitas yang terjadi yang terkait dalam suatu proses
tunggal. Jadi dengan kata lain, diagram ini menunjukkan bagaimana aktivitas-
aktivitas tersebut bergantung satu sama lain. Tabel 2.5 menjelaskan simbol, nama
dan fungsi dari activity diagram.
29

Tabel 2.5 Simbol dan Fungsi Activity Diagram

Diagram aktivitas juga banyak digunakan untuk mendefinisikan hal-hal


berikut:
a. Rancangan proses bisnis di mana setiap urusan aktivitas yang
digambarkan merupakan proses bisnis sistem yang didefinisikan.
b. Urutan atau pengelompokkan tampilan dari sistem user interface di
mana setiap aktivitas dianggap memiliki sebuah rancangan antarmuka
tampilan.
c. Rancangan pengujian di mana setiap aktivitas dianggap memerlukan
sebuah pengujian yang perlu didefinisikan kasus ujinya.
30

2.12.4 Sequence Diagram


Seequence diagram merupakan salah satu diagram interaction yang
menjelaskan bagaimana suatu operasi itu dilakukan, pesan apa yang dikirim dan
kapan pelaksanaannya. Diagram ini diatur berdasarkan waktu. Objek-objek yang
berkaitan dengan proses berjalannya operasi diurutkan dari kiri ke kanan
berdasarkan waktu terjadinya pesan yang terurut.
Sequence diagram adalah suatu diagram yang menggambarkan interaksi
antar objek dan mengindikasikan komunikasi diantara ibjek-objek tersebut.
Diagram ini juga menunjukkan serangkaian pesan yang diperlukan oleh objek-
objek yang melakukan suatu tugas atau aksi tertentu. Objek-objek tersebut
kemudian diurutkan dari kiri ke kanan, actor yang menginisiasi interaksi biasanya
ditaruh di paling kiri dari diagram.

Tabel 2.6 Simbol dan Fungsi Sequence Diagram

Pada diagram ini, dimensi vertical merepresentasikan waktu. Bagian palig


atas dari diagram menjadi titip awal dan waktu berjalan ke bawah sampai dengan
bagian dasar dari diagram.
Garis vertikal, disebut pada saat lifeline, dilekatkan pada setiap objek atau
aktor. Kemudian, lifeline tersebut digambarkan menjadi kontak ketika objek
melakukan suatu operasi, kotak tersebut disebut activation box. Objek dikatakan
mempunyai live activation pada saat tersebut.
31

2.13 DIA Diagram


DIA adalah free and open source software yang fungsinya untuk
membantu pembuatan dan perencanaan diagram agar lebih terstruktur. Aplikasi
DIA memiliki kelebihan, diantaranya adalah dapat berjalan di berbagai platform
seperti Windows dan MacOS, bukan hanya Linux. DIA dapat dimanfaatkan oleh
para analisis untuk membuat diagram antar entitas, diagram UML, diagram alur,
bahkan diagram networking Cisco. Sifat open source DIA diagram, dapat pula
ditambahkan bentuk atau objek baru, dengan membuat file XML sederhana
berformat .SVG (umumnya dibuat dengan Inkscape). Tampilan DIA dapat dilihat
pada Gambar 2.9

Gambar 2. 5 Tampilan Awal DIA Diagram Beserta Tools

Gambar 2.5 menunjukkan tampilan awal DIA diagram pada saat pertama
dibuka, tidak hanya form untuk membuat diagram saja yang akan tampil, tools
32

yang digunakan untuk membuat diagram juga akan muncul bersamaan saat
software dibuka.
Untuk memilih, memperbesar layer, membuat dan edit teks, memasukkan
gambar, serta membuat garis panah terdapat pada General Tool yang terdapat
pada Gambar 2.6.

Gambar 2.6 General Tool Pada DIA Diagram

Untuk membuat halaman baru, membuka file yang tersimpan, menyimpan


diagram yang sudah dibuat, mencetak, menyalin dan mengekspor diagram dapat
menggunakan Toolbar seperti pada Gambar 2.7

Gambar 2.7 Menu Toolbar DIA Diagram

Untuk membuat diagram flowchart, network, UML, serta diagram lain,


dapat menggunakan simbol yang terdapat pada Gambar 2.8.
33

Gambar 2.8 Tool Untuk Membuat Diagram Pada DIA Diagram

Dalam membuat diagram pada DIA diagram dapat memilih jenis garis atau anak
panah, tebal tipisnya suatu garis dapat dilihat pada Gambar 2.9.

Gambar 2.9 Tool Untuk Memilih Jenis Garis

2.14 Balsamiq Mockups


Balsamiq Mockups adalah alat desain antarmuka pengguna untuk
membuat gambar rangka (juga disebut mockup atau prototipe low-fidelity).
Balsamiq Mockups dapat digunakan untuk menghasilkan sketsa digital dari ide
produk serta memfasilitasi diskusi dan pemahaman sebelum kode apa pun ditulis.
Setiap file Balsamiq Mockups (dengan ekstensi file .bmpr) mewakili satu proyek
dan dapat berisi banyak mockup dan gambar, yang disimpan bersama dalam satu
file .bmpr. Mockup untuk proyek yang berbeda harus dibuat dalam file Balsamiq
Mockup yang terpisah. Untuk membuat proyek baru, pilih Project > New Project
34

dari menu. Tampilan awal dari aplikasi Balsamiq Mockups dapat dilihat pada
Gambar 2.10

Gambar 2.10 Tampilan Awal Balsamiq Mockups


Sumber : https://balsamiq.com/wireframes/desktop/docs/overview/

Pada Gambar 2.15 Balsamiq Mockups terdiri dari toolbar, UI library,


canvas, navigator panel dan properties panel. Masing-masing dijelaskan di bawah
ini :
1. Toolbar : berisi serangkaian ikon untuk melakukan tindakan pada area lain
dari antarmuka pengguna.
2. UI Library : berisi ikon dan symbol yang digunakan dalam pembuatan
mockup
3. Navigator Panel : berisi gambar atau mockup yang sudah dibuat dalam
satu file
4. Properties Panel : berisi informasi mengenai posisi, ukuran dan lain-lain
dari canvas yang sedang digunakan
5. Canvas : bagian yang dijadikan sebagai tempat untuk membuat mockup
BAB 3

METODE PENELITIAN

3.1 Perencanaan
Sistem yang dibuat terdiri dari 2 (dua) bagian yakni bagian analisis
sentimen dan website yang menampilkan hasil dari analisis sentimen. Pada bagian
analisis sentimen akan mengolah data berupa tweets yang diambil dari Twitter.
Data tweets itu diambil menggunakan koneksi RStudio terhadap Twitter API
(Application Programming Interface) dengan kata kunci “commuterline”. Jumlah
data yang diambil kurang lebih sebanyak 10.000 data tweets dengan rentang
waktu dari tanggal 3 Agustus 2019 hingga 8 Agustus 2019. Kegiatan
pengumpulan data dilakukan dengan cara studi pustaka melalui jurnal, buku dan
internet yang berkaitan dengan metode yang digunakan yaitu Lexicon Based dan
Naive Bayes Classifier. Sistem ini dibuat menggunakan bahasa pemrograman R,
karena R memiliki fleksibilitas dalam melakukan data mining Twitter.
Penggunaan tools RStudio untuk proses pengkodean dan menampilkan data.

Hasil dari proses sistem analisis sentimen akan ditampilkan pada halaman
website yang terdapat menu-menu di dalamnya. Menu yang ditampilkan
merupakan segala sesuatu yang ada pada proses analisis sentiment yaitu berupa
menu home, data tweets, database, pre-processing, analisis sentimen, dan
visualisasi. Menu home berfungsi sebagai halaman informasi mengenai apa yang
dijadikan sebagai objek analisis sentiment. Menu data tweets menampilkan data
awal tweets yang akan dianalisis. Menu database akan menampilkan kamus
positif dan kamus negatif yang digunakan oleh sistem untuk memberikan bobot
nilai dari suatu kata. Menu pre-processing adalah menu yang menampilkan hasil
dari perbaikan dan pembersihan data agar menjadi data yang siap untuk dianalisis.
Menu analisis sentimen menampilkan hasil pengklasifikasian berdasarkan metode
Lexicon Based yang bobot nilai dari setiap tweets dan nilai keseluruhan akan
dijumlahkan sehingga mempunyai nilai sentimen masing-masing. Visualisasi akan

35
36

menampilkan visaualisasi hasil dari analisis sentiment berupa histogram, pie


chart, dan wordcloud.

3.2 Analisis
Pada tahap ini akan dilakukan analisis masalah, analisis sistem,
pengumpulan data, dan analisis kebutuhan fungsional serta non-fungsional.

3.2.1 Analisis Masalah

KRL Commuter Line adalah sebuah layanan moda transportasi kereta api
penumpang di wilayah Jabodetabek. Dengan rata-rata jumlah pengguna KRL
Commuter Line per hari mencapai 1.001.438 pengguna pada hari kerja, Pengguna
KRL sangat aktif sekali dalam menyampaikan opininya melalui media sosial
Twitter. Pihak KRL Commuter Line tidak memiliki cukup waktu untuk
menganalisis informasi dari begitu banyak tweets yang ditujukan padanya. Tweets
yang ditujukan untuk KRL Commuter Line dari pengguna jasanya dapat
memberikan informasi kepada pengelola mengenai fasilitas serta layanan yang
telah diberikan apakah sudah cukup memadai atau belum. Informasi yang ada
pada tweets pengguna KRL Commute Line juga sangat dibutuhkan oleh pengelola
dalam upaya meningkatan kualitas pelayanan dan fasilitas. Berdasarkan alasan
tersebut diperlukan suatu sistem yang dapat mengelola data tweets para pengguna
jasa KRL Commuter Line menggunakan analisis sentimen.

3.2.2 Analisis Sistem


Analisis sistem merupakan penjabaran dari sistem utama ke dalam
berbagai macam komponennya dengan tujuan untuk mengidentifikasi segala
macam permasalahan yang ada sehingga nantinya dapat dilakukan
penanggulangan, perbaikan serta pengembangan sistem agar lebih baik. Analisis
sistem bertujuan untuk menganalisa bagaimana sistem bekerja, mulai dari data
masukkan sistem, proses kerja sistem, hingga hasil keluaran dari sistem. Dalam
mengimplementasikan metode Lexicon Based dan Naive Bayes Classifier akan
dibangun sebuah prototype dengan gambaran sistem yang akan tertera pada
Gambar 3.1
37

Gambar 3.1 Tahapan Pengolahan Data [Brata Mas Pintoko & Kemas Muslim L.,
2018]

3.2.2.1 Crawling Data


Data yang akan digunakan dalam penelitian ini berupa data tweets yang
mengandung kata kunci “@commuterline” yang berasal dari Twitter. Crawling
data dari Twitter, diperlukan koneksi perangkat lunak RStudio terhadap Twitter
API (Application Programming Interface) ) dengan kata kunci “commuterline”.
Jumlah data tweets yang akan diambil berjumlah maksimal 10.000 data tweets
dengan rentang waktu dari tanggal 3-8 Agustus 2019. Data hasil crawling ini akan
digunakan dalam tahapan pre-processing.

3.2.2.2 Pre-processing
Pada analisis sentiment diperlukan beberapa tahapan untuk mengolah teks
menjadi lebih terstruktur. Pre-processing adalah tahapan yang mana data
disiapkan hasil crawling data pada tahapan seblumnya untuk diolah mejadi sebuah
38

data yang siap untuk dianalis [Buntoro, et al.,2016]. Tahapan pre-processing pada
penelitian ini dapat dilihat pada Gambar 3.2

Gambar 3.2 Tahapan Pre-Processing [Brata Mas Pintoko & Kemas Muslim L.,
2018]

1) Case Fold

Case fold adalah tahap mengubah huruf pada data tweets yang awalnya
merupakan huruf kapital menjadi huruf kecil. Langkah-langkah dalam proses case
fold seperti pada Gambar 3.3
39

Gambar 3.3 Case Fold [Indraloka & Santosa, 2017]


Pada Gambar 3.3 Data tweets yang telah diperoleh setiap kata akan
diperiksa apakah mengandung huruf kapital atau tidak. Jika mengandung huruf
kapital maka huruf tersebut akan diubah menjadi huruf kecil. Setelah diubah,
maka data akan disimpan untuk menjalani tahap pre-processing selanjutnya.
Berikut Tabel 3.1 adalah contoh data tweets sebelum dan sesudah melalui tahap
case fold

Tabel 3.1 Contoh Case Fold

Input Output
Ngetem lg menuju st.gambir. udh ngetem ngetem lg menuju st.gambir. udh ngetem
st. Cakung, jatinegara, manggarai. Apa st. cakung, jatinegara, manggarai. apa
bener ini angkot @CommuterLine bener ini angkot @commuterLine

2) Filtering

Filtering adalah proses pembersihan data set dari komponen-komponen


yang tidak diperlukan seperti spesial karakter, tanda baca, url, hashtag, username,
RT (retweet), serta emoticon. Tahapan ini dilakukan setelah data Twitter melewati
tahap case fold. Alur proses filtering dapat dilihat pada Gambar 3.4
40

Gambar 3.4 Alur Filtering [Indraloka & Santosa, 2017]

Pada Gambar 3.4 Data tweets hasil case fold akan diperiksa apakah
mengandung username, RT, hastag dan URL. Jika ya, maka akan dihapus dan jika
tidak maka akan masuk pada tahap filtering selanjutnya. Data tweets akan
diperiksa apakah mengandung special karakter, tanda baca, emoticon dan spasi
berlebih. Jika ya, maka semua itu akan dihapus dan jika tidak maka akan langsung
tersimpan sebagai data hasil dari filtering. Data hasil dari tahap filtering ini akan
digunakan kembali pada tahap pre-processing selanjutnya. Berikut Tabel 3.2
adalah ilustrasi tahap filtering
41

Tabel 3.2 Contoh Filtering

Input Output
ngetem lg menuju st.gambir. udh ngetem ngetem lg menuju st gambir udh ngetem st
st. cakung, jatinegara, manggarai. apa cakung jatinegara manggarai apa bener ini
bener ini angkot @commuterLine angkot

3) Pengubahan Kata Negasi

Penggunaan kata “tidak”, “tak”, “gak”, “enggak”, “nggak”, “tanpa”, “ga”,


“bukan”, “kurang”, “jangan” dan “engga” akan mengakibatkan perubahan makna
pada kata sifat yang berada setelah penggunaan kata tersebut. Untuk
mengantisipasi hal ini maka diperlukan input manual terhadap kata-kata yang
mengandung kata tersebut dan memindahkan kata tersebut kedalam kata yang
memiliki nilai sebaliknya. Sebagai contoh apabila dalam tweets terdapat kalimat
`tidak cepat`, maka otomatis akan mengubah spasi diantara kata tersebut dengan
underscore ( _ ), sehingga menjadi kalimat `tidak_cepat`. kata `cepat` yang
seharusnya memiliki nilai sentimen positif, setelah bergabung menjadi kata
`tidak_cepat`, tidak akan dianggap sebagai kata bersentimen positif, dan berubah
menjadi sentimen negatif. Berikut Tabel 3.3 adalah ilustrasi tahap perubahan kata
negasi

Tabel 3.3 Contoh Perubahan Kata Negasi

Input Output
pelayanan krl stasiun bogor kok sekarang pelayanan krl stasiun bogor kok sekarang
tidak enak yaa nukerin duit aja tidak bisa tidak_enak yaa nukerin duit aja tidak_bisa
antrian panjang antrian panjang cuma yang jaga lo

3.2.2.3 Klasisfikasi Lexicon Based


Klasifikasi Lexicon Based akan mengklasifikasikan tweets berdasarkan
kata positif dan kata negatif pada hasil data tweets yang telah dibersihkan pada
42

tahap pre-processing dan mendefinisikannya sebagai sebuah tweets yang


cenderung memiliki sentiment positif atau negatif. Alur dari klasifikasi Lexicon
Based dapat dilihat pada Gambar 3.5

Gambar 3.5 Alur Klasifikasi Lexicon Based

Pada Gambar 3.5 Data hasil dari tahap pre-processing dicocokkan


dengan kata-kata yang terdapat dalam database kata positif dan negatif pada
penelitian yang sebelumnya. Setelah itu masing-masing kata dijumlahkan
berdasarkan sentimen positif yang bermuatan dengan nilai plus satu (+1) dan
sentimen negatif yang bermuatan dengan nilai minus satu (-1). Hasil akhir berupa
skor dari masing-masing data uji yang dijumlahkan antara skor sentiment positif
dan negatif pada rangkaian kata dalam suatu kalimat. Skor lebih besar atau sama
dengan satu bernilai positif, lebih kecil atau sama dengan minus satu bernilai
43

negatif, dan skor sama dengan nol akan bernilai positif. Contoh dari hasil
klasifikasi dengan Lexicon Base dapat dilihat pada Tabel 3.4

Tabel 3.4 Contoh Hasil Klasifikasi Lexicon Based

No Text Positif Negatif Score Sentiment

1 Terima kasih 2 0 2 Positif

2 Pelayanan cukup bagus 3 0 3 Positif

3 Walau telat tapi pelayanan cukup 4 1 3 Positif


baik terima kasih

4 AC di gerbong wanita rusak jadi 1 3 -2 Negatif


panas dan sumpek

Beberapa contoh pada database kata positif dan kata negatif yang
digunakan dalam menentukan suatu kata dalam kalimat memiliki makna sentimen
positif atau negatif pada proses Lexicon Based dapat dilihat pada Tabel 3.5 dan
3.6

Tabel 3.5 Contoh Kata Pada Kamus Positif

Adil Damai Inspiratif

Aman Efektif Istimewa

Bagus Ekonomis Jenius

Baik Gembira Kuat

Bahagia Gesit Kokoh

Bersih Gagah Lembut

Cepat Ideal Murah


44

Tabel 3.6 Contoh Kata Pada Kamus Negatif

Bau Copet Gatel

Berat Dicuri Gerah

Berdebu Dusta Gosip

Bocor Egois Hancur

Busuk Fitnah Kotor

Cacat Gadungan Lecet

Ceroboh Galak Mahal

3.2.2.4 Klasisfikasi Naïve Bayes Classifier


Pada tahap klasifikasi Naïve Bayes Classifier, data yang telah melalui
tahap pre-processing dan klasifikasi Lexicon Based akan diproses untuk
menentukan apakah data yang akan diuji termasuk kedalam sentiment positif atau
negatif. Tahapan dari klasifikasi Naïve Bayes Classifier sebegai berikut :
45

Gambar 3.6 Klasifikasi Naïve Bayes Classifier


A. Mendefinisikan Dataset

Menentukanan data yang akan digunakan dalam proses pengklasifikasian


Naïve Bayes Classifier. Data ini akan dipanggil pada awal tahap klasifikasi Naïve
Bayes Classifier. Kamudian akan dijabarkan jumlah sentiment positif serta
sentiment negatifnya dan jumlah keseluruhan data. Jumlah dari keseluruhan data
ini akan digunakan dalam penentuan jumlah pelabelan data pada tahap
selanjutnya.

B. Pelabelan Data

Proses untuk menentukan rentang data yang masuk kategori data latih dan
data uji. Proporsi pembagian data latih dan uji adalah 70:30 persen dari jumlah
data. Pelabelan dimulai data data pertama hingga data kesekian setelah dihitung
46

berapa jumlah data pada proporsi data latih dan uji. Misalkan jumlah kesulurahan
data berjumlah 1000 data, maka data yang digunakan sebagai data latih mulai dari
data ke-1 hingga data ke-700. Kemudian data uji yang akan digunakan mulai dari
data ke-701 hingga data ke-1000. Field yang digunakan adalah field sentiment
karena pada penelitian ini yang menjadi pokok perhitungan adalah sentiment
positif dan negatif.

C. Membuat DTM (Document Term Matrix)

Pembobotan kata menggunakan sintaks Document Term Matrix yang


berdasarkkan frekuensi/term kata yang sering muncul dalam data tweets . Berikut
adalah contoh dari DTM dengan penggunaan 2 kalimat berikut :

1. Terima kasih sekali


2. Terima kasih banget

Kalimat di atas akan ditandai sebagai K1 dan K2 dalam contoh DTM pada
Tabel 3.7

Tabel 3.7 Contoh Membuat DTM

Kalimat Terima Kasih Sekali Banget

K1 1 1 1 0

K2 1 1 0 1

D. Menentukan frekuensi data

Menentukan frekuensi kata yang paling sering muncul dengan batasan


muncul yang telah ditentukan menggunakan frequent word. Kemudian mencari
document term matrix dengan frequent word untuk data latih dan data uji.
47

E. Pelatihan Menggunakan Naïve Bayes Classifier

Data masukkan untuk proses pelatihan dengan metode Naïve Bayes


Classifier menggunakan data yang sudah didefinikasn sebagai dataset dan
merupakan data latih yang sudah dipisahkan pada tahap pelabelan data. Sebagai
contoh data latih yang digunakan untuk simulasi perhitungan pelatihan
menggunakan Naïve Bayes Classifier seperti pada Tabel 3.8

Tabel 3.8 Contoh Himpunan Data Latih

NO Contoh Data Sentimen


1. Tepat waktu Positif
2. Terima kasih atas pelayanan yang diberikan Positif
3. Kereta tertahan lama banget nunggu antrian Negatif
masuk stasiun manggarai
4. Ac gerbong wanita rusak jadi sumpek dan panas Negatif
banget

Data pada Tabel 3.8 merupakan data hasil dari pre-processing dan sudah
melalui tahap klasifikasi Lexicon Based yang sudah mengidintifikasikan data itu
memiliki sentimen positif atau negatif. Pada tahap pengklasifikasian Naïve Bayes
Classifier data itu digunakan kembali untuk diklasifikasikan. Data latih diubah
dalam bentuk matriks dan kemudian dilakukan pembobotan katanya seperti pada
Tabel 3.9, 3.10, dan 3.11

Tabel 3.9 Matriks 1

Tepat waktu terima Kasih atas pelayanan yang diberikan kereta Summary
1 1 Positif
1 1 1 1 1 1 Positif
1 Negatif
Negatif
48

Tabel 3.10 Matriks 2

Tertahan Lama Banget Nunggu Antrian Masuk Stasiun manggarai Summary


Positif
Positif
1 1 1 1 1 1 1 1 Negatif
1 Negatif

Tabel 3.11 Matriks 3

Ac Gerbong Wanita Rusak Jadi Panas Dan sumpek Summary


Positif
Positif
1 1 1 1 1 1 1 1 Negatif
Negatif

Apabila suatu kata mengandung kata yang didefinisikan pada tabel 3.8
maka akan diberi angka 1, apabila tidak maka dikosongkan saja. Kata yang
muncul beberapa kali hanya dihitung satu.

Kemudian dilakukan perhitungan prior dengan rumus sebagai berikut:

| |
Rumus = ( ) (4.1)
| |

Positif/ Negatif = (4.2)

Positif = 2/4= 0,5


Negatif = 2/4 = 0,5

Selanjutnya melakukan perhitungan terhadap setiap kemunculan setiap


data pada kategori positif dan negatif dengan rumus sebagai berikut:
| |
Rumus = ( | ) | |

= (4.3)
( )
49

Jumlah kemunculan kata kategori positif sebanyak 8 kata dan untuk


kategori negatif sebanyak 17 kata. Jumlah semua kata ada 25 kata. Berikut ini
adalah hasil perhitungannya dapat dilihat pada Tabel 3.12

Tabel 3.12 Hasil Perhitungan Tahap Pelatihan Naïve Bayes Classifier

Positif Negatif
P(tepat) 1+1/8+25 = 0.06 P(tepat) 0+1/17+25 = 0.0238
P(waktu) 1+1/8+25 = 0.06 P(waktu) 0+1/17+25 = 0.0238
P(terima) 1+1/8+25 = 0.06 P(terima) 0+1/17+25 = 0.0238
P(kasih) 1+1/8+25 = 0.06 P(kasih) 0+1/17+25 = 0.0238
P(atas) 1+1/8+25 = 0.06 P(atas) 0+1/17+25 = 0.0238
P(pelayanan) 1+1/8+25 = 0.06 P(pelayanan) 0+1/17+25 = 0.0238
P(yang) 1+1/8+25 = 0.06 P(yang) 0+1/17+25 = 0.0238
P(diberikan) 1+1/8+25 = 0.06 P(diberikan) 0+1/17+25 = 0.0238
P(kereta) 0+1/8+25 = 0.03 P(kereta) 1+1/17+25 = 0.0476
P(tertahan) 0+1/8+25 = 0.03 P(tertahan) 1+1/17+25 = 0.0476
P(lama) 0+1/8+25 = 0.03 P(lama) 1+1/17+25 = 0.0476
P(banget) 0+1/8+25 = 0.03 P(banget) 2+1/17+25 = 0.0714
P(nunggu) 0+1/8+25 = 0.03 P(nunggu) 1+1/17+25 = 0.0476
P(antrian) 0+1/8+25= 0.03 P(antrian) 1+1/17+25= 0.0476
P(masuk) 0+1/8+25 = 0.03 P(masuk) 1+1/17+25 = 0.0476
P(stasiun) 0+1/8+25 = 0.03 P(stasiun) 1+1/17+25 = 0.0476
P(manggarai) 0+1/8+25 = 0.03 P(manggarai) 1+1/17+25 = 0.0476
P(ac) 0+1/8+25 = 0.03 P(ac) 1+1/17+25 = 0.0476
P(gerbong) 0+1/8+25 = 0.03 P(gerbong) 1+1/17+25 = 0.0476
P(wanita) 0+1/8+25 = 0.03 P(wanita) 1+1/17+25 = 0.0476
P(rusak) 0+1/8+25 = 0.03 P(rusak) 1+1/17+25 = 0.0476
P(jadi) 0+1/8+25 = 0.03 P(jadi) 1+1/17+25 = 0.0476
P(sumpek) 0+1/8+25 = 0.03 P(sumpek) 1+1/17+25 = 0.0476
P(dan) 0+1/8+25 = 0.03 P(dan) 1+1/17+25 = 0.0476
P(panas) 0+1/8+25 = 0.03 P(panas) 1+1/17+25 = 0.0476

F. Pengujian Menggunakan Naïve Bayes Classifier


Pada tahap ini akan dilakukan proses pengujian data uji berdasarkan hasil
dari proses pelatihan menggunakan metode Naïve Bayes Classifier. Data latih
yang akan menjadi contoh data uji adalah kalimat “kereta tepat waktu banget”.
50

Berdasarkan hasil pada proses pelatihan maka dilakukan perhitungan sebagai


berikut:
1. Sentimen Positif:
Kereta * tepat * waktu * banget = 0,00000324
2. Sentimen Negatif:
Kereta * tepat * waktu * banget = 0,00000193
Berdasarkan hasil perhitungan ini, kalimat “kereta tepat waktu banget”
dikategorikan sebagai sentimen positif, terlihat dari perhitungan sntimen positif
yang lebih besar dari yang lain yaitu 0,00000324.

3.2.2.5 Visualisasi Data


Pada tahap ini akan dilakukan proses visualisasi hasil data dalam bentuk
wordcloud, histogram dan pie chart.

1) Histogram
Hasil visualisasi histogram di RStudio digunakan untuk menunjukkan
perbedaan jumlah review yang terkandung dalam sentiment negatif atau dalam
sentiment positif. Gambar 3.7 adalah bentuk tampilan visualisasi Histogram.

Gambar 3.7 Tampilan Visualisasi Histogram


Pada Gambar 3.7 garis tegak lurus (vertikal) menggambarkan banyaknya score
sentiment pada tiap kalimatnya. Garis mendatar (horizontal) menunjukkan jumlah
51

frekuensi banyaknya kalimat yang bermuatan sentiment berdasarkan score yang


didapatkan.

2) Pie Chart
Pie chart adalah sebuah bentuk diagram luas yang mudah untuk dipahami
secara sekilas. Diagram pie menunjukkan bagian dari keseluruhan (persentase)
antara sentimen positif, negatif dan netral dengan cara yang mudah dipahami.
Gambar 3.8 adalah tampilan visualisasi dalam bentuk Pie chart.

Gambar 3.8 Tampilan Visualisasi Pie Chart

3) Wordcloud

Wordcloud digunakan untuk memvisualisasikan jenis kata-kata dalam


keseluruhan tweets commuterline. Kata-kata yang ditampilkan dalam wordcloud
adalah kata-kata yang sering digunakan. Gambar 3.9 menunjukan tampilan
visualisasi Wordcloud positif, sedangkan Gambar 3.10 menunjukan visualisasi
Wordcloud negatif.
52

Gambar 3.9 Tampilan Visualisasi WordCloud Positif

Gambar 3.10 Tampilan Visualisasi WordCloud Negatif

3.3.3 Analisis Kebutuhan Fungsional


Kebutuhan fungsional adalah kebutuhan yang berisi proses-proses yang
nantinya harus disediakan oleh sistem, yaitu :

1. Menampilkan dataset tweets yang telah dinput menjadi file berekstensi


.csv.
2. Dapat menghitung probabilitas data latih dan data uji.
3. Menampilkan hasil klasifikasi sentimen positif dan negatif data uji
menggunakan Naive Bayes Classifier.
53

4. Memvisualisasikan probabilitas data menggunakan histogram, diagram


pie dan wordcloud.
5. Menampilkan akurasi sistem dengan uji coba confusion matrix

3.3.4 Analisis Kebutuhan Non-Fungsional


Kebutuhan non-fungsional adalah segala sesuatu yang dibutuhkan dalam
pembuatan aplikasi yang terdiri dari perangkat lunak dan perangkat keras. Berikut
ini merupakan kebutuhan dari system, diantaranya :

1) Perangkat lunak :
a. Sistem Operasi Windows 10
b. R-Programming 3.5.0
c. IDE RStudio
2) Perangkat keras :
a. Processor Intel Core i7-8750H CPU @2.20 GHz
b. RAM 8 GB
c. Hard disk 500 Gb

3.4 Perancangan
Pada tahap ini akan menjelaskan tentang perancangan dari sistem yang
akan dibuat mulai dari Unified Modeling Language (UML), struktur navigasi dan
perancangan antarmuka dari website dengan Shiny package.

3.4.1 Unified Modeling Language


Alur proses penggunaan dari website yang akan dibuat akan dijelaskan
dalam bentuk model UML, yaitu :

1) Use Case Diagram

Rancangan penggunaan website pada penelitian ini diilustrasikan dalam


bentuk use case diagram seperti yang pada Gambar 3.11
54

Gambar 3.11 Use Case Diagram Website

Pada Gambar 3.11 menjelaskan bahwa pengguna dapat mengakses


informasi mengenai website analisis sentimen. Pengguna dapat mengakases
halaman home yang berisi informasi analisis apa yang dimuat di website ini.
Halaman data tweets akan data awal yang akan diolah nantinya. Halaman
database akan menampilkan database kamus positif dan kamus negatif yang
digunakan dalam pengklasifikasian. Halaman pre-processing akan menampilkan
data tweets yang telah dibersihkan dan siap untuk dianalisis. Halaman analisis
sentimen akan berisikan data tweets yang sudah melalui tahap pengklasifikasian.
Halaman Visualisasi akan menampilkan visualisasi dari hasil analisis sentiment
berupa histogram, pie chart, dan wordcloud.

2) Activity Diagram

Rancangan website yang dibuat dalam activity diagram dapat dilihat pada
Gambar 3.12
55

Gambar 3.12 Activity Diagram

Gambar 3.12 di atas menggambarkan activity diagram dari pengguna.


Pengguna harus megakses websie analisis sentiment untuk dapat melihat menu
yang disediakan. Pengguna bisa melihat data tweets awal sebelum masuk pada
tahap pre-processing dan membandingkannya dengan melihat data setelah melalui
tahap pre-processing. Kemudian pengguna dapat melihat database kamus positif
dan negatif yang digunakan dalam pengklasifikasian data dan melihat bagaimana
hasil dari pengklasifikasian data tersebuat. Hasil akhir dari analisis sentiment
dapat dilihat pengguna melalui visualisasi data dalam bentuk histogram, pie chart,
dan wordcloud.

3) Class Diagram

Class diagram dalam sistem yang akan dibuat terdiri dari class website
analisis sentiment, class data tweets, class database, class prepro, class analisis,
dan class visualisasi
56

Gambar 3.13 Class Diagram

Pada Gambar 3.13 Class website analisis sentimen berfungsi untuk


menampilkan halaman web yang diakses oleh pengguna. Class website analisis
sentimen berelasi dengan class data tweets, class database, class prepro, class
analisis dan class visualisasi. Setelah class pengguna mengakses class website
analisis sentimen, maka pengguna dapat mengakses semua menu yang tersedia di
halaman website analisis sentimen.

4) Deployment Diagram

Deployment diagram pada penelitian ini menggambarkan secara umum


proses yang terjadi pada aplikasi Perancangan deployment diagram dapat dilihat
pada Gambar 3.14

Gambar 3.14 Deployment Diagram


57

Gambar 3.14 menjelaskan proses informasi yang diakses pada komputer


pengguna yang tersambung dengan internet menggunakan browser. Ketika
pengguna mengakses alamat website yang sudah ada, maka perintah akan
diteruskan melalui web server menuju application server Shiny untuk
menampilkan website analisis sentimen.

3.4.2 Rancangan Antarmuka


Hasil dari pengolahan dan pengklasifikasian data analisis sentimen
divisualisasikan dalam bentuk website dengan Shiny package. Rancangan
antarmuka website yang akan dibuat terdiri dari tampilan halaman Home, data
tweets, database, pre-processing, Lexicon Based, analisis sentiment dan about.

1. Home

Bagian awal dari tampilan website yang berisikan informasi mengenai data
apa yang disajikan oleh website diilustrasikan seperti pada Gambar 3.15

Gambar 3.15 Rancangan Antarmuka Home


58

Pada Gambar 3.15 rancangan antarmuka Home berisikan :

a) Text 1 : Menampilkan nama judul dari website


b) Text 2 : Menampilkan judul dari penelitian
c) Gambar : Menampilkan gambar yang berkaitan dengan penelitian
d) Menu 1 : Menu Home yang menampilkan halaman utama dari
peneltian yang berisikan judul dari penelitian
e) Menu 2 : Menu Data Tweets yang menampilkan data tweets yang
masih belum diolah dalam bentuk tabel
f) Menu 3 : Menu Database yang menampilkan database kamus
positif
dan negatif yang digunakan dalam proses penelitian ini
g) Menu 4 : Menu Pre-Processing yang menampilkan table data hasil
pengolahan
h) Menu 5 : Menu Analisis Sentimen yang menampilkan
pengklasifikasian data sentimen
i) Manu 6 : Menu Visualisasi yang menampilkan visualisasi hasil
sentimen
2. Menu Data Tweets

Penjabaran data awal tweets yang digunakan dalam penelitian ini sebelum
dilakukan proses pre-processing pada menu ini dalam bentuk table diilustrasikan
seperti pada Gambar 3.16
59

Gambar 3.16 Rancangan Antarmuka Data tweets

Pada Gambar 3.16 rancangan antarmuka data tweets akan berisikan table
yang merupakan data awal tweets yang diperoleh. Tabel data tweets terdiri dari
field text yang berisikan isi dari tweets, created dan lain-lainnya

3. Menu Database

Pada menu ini dijabarkan database apa saja yang digunakan dalam proses
pengklasifikasian data analisis. Database yang digunakan yakni database kamus
positif dan kamus negative diilustrasikan seperti pada Gambar 3.17
60

Gambar 3.17 Tampilan menu Database

Pada Gambar 3.17 rancangan antarmuka Datase berisikan :

a) Database 1 : Menampilkan kamus positif pada bagian tabel


b) Database 2 : Menampilkan kamus positif pada bagian tabel
c) Tabel : Isi dari database kamus positif atau negatif

4. Menu Pre-Processing

Menu ini akan menampikan hasil pengolahan data awal menjadi data-data
yang siap untuk dianalisis diilustrasikan seperti pada Gambar 3.18
61

Gambar 3.18 Rancangan Antarmuka Pre-Processing

Pada Gambar 3.18 rancangan antarmuka pre-processing akan berisikan


tabel berupa text yang merupakan hasil pengolahan data yang ada pada bagian
menu data tweets. Pada tabel tersebut akan berisikan field text yang merupakan
data tweets. Field positif dan negatif yang merupakan pembobotan berdasarkan
jumlah kata positif dan negatif pada setiap tweets. Kemudian field sentiment yang
merupakan kesimpulan apakah tweets cenderung bermuatan sentiment positif atau
negatif setelah dilakukan penjumlahan dari field positif dan negatif.

5. Menu Analisis Sentimen

Pada menu ini akan dijabarkan bagaimana bobot nilai dari setiap tweets
dan nilai keseluruhan akan dijumlahkan sehingga mempunyai nilai sentiment
masing-masing berdasarkan dari pengklasifikasian Lexicon Based. Rancangan
antarmuka analisis sentiment diilustrasikan seperti pada Gambar 3.19
62

Gambar 3.19 Rancangan Antarmuka Analisis Sentimen

Pada Gambar 3.19 rancangan antarmuka Lexicon Based akan berisikan :

a) Text : Menampilkan data tweets yang diuji


b) Positif : Menampilkan nilai positif yang terdapat pada text
c) Negatif : Menampilkan nilai negatif yang terdapat pada text
d) Score : Menampilkan nilai dari penjumlahan kata positif dan
negatif yang terdapat pada text
e) Sentimen : Menampilkan kesimpulan text yang dimaksud memiliki
nilai sentiment yang cenderung positif atau negatif

6. Menu Visualisasi

Data hasil dari pembobotan nilai pada tahap pengklasifikasian Lexicon


Based akan diklasifikasikan kembali dengan metode Naïve Bayes Classifier dan
datanya disajikan datam bentuk Histogram, pei chart, dan wordcloud
diilustrasikan seperti pada Gambar 3.20
63

Gambar 3.20 Rancangan Antarmuka Analisis Visualisasi

Pada Gambar 3.20 rancangan antarmuka analisis sentiment berisikan :

a) Histogram : Menampilkan hasil analisis sentiment yang


divisualisasikan

dalam bentuk histogram

b) Pie Chart : Menampilkan hasil analisis sentiment yang


divisualisasikan

dalam bentuk pie chart

c) Wordcloud : Menampilkan hasil analisis sentiment yang


divisualisasikan

dalam bentuk wordcloud


BAB 4

IMPLEMENTASI DAN UJI COBA

4.1 Implementasi
Pada tahap implementasi akan terbagi menjadi 2 bagian yakni tahapan
implementasi analisis sentiment dan tahapan penyajiannya hasil analisis sentiment
ke dalam visual pada website menggunakan shiny pada R-Programming.

4.1.1 Implementasi Proses Analisis Sentimen


Tahapan pengolahan data analisis sentiment pada sistem yang akan dibuat
terdiri dalam beberapa tahap seperti pada Gambar 4.1

Gambar 4.1 Tahapan Pengolahan Data [Brata Mas Pintoko & Kemas Muslim L.,
2018]

64
65

4.1.1.1 Crawling Data


1. Koneksi Twitter API

Data yang akan digunakan berasal dari Twitter dan diperlukan hak akses
untuk mengkoneksikan RStudio terhadap Twitter API (Application Programming
Interface). Hak akses itu berupa consumer key, consumer secret, access token, dan
access token secret. Tahapan untuk memperoleh hak akses itu sebagai berikut

1. Mengakses situs https://apps.twitter.com/. Diperlukan akun Twitter untuk


dapat mengaksesnya.
2. Memilih menu Create New App, kemudian melakukan pengisian data
pada Application Details sesuai dengan informasi diri dan tujuan dari
pembuatan koneksi Twitter API, seperti pada Gambar 4.2

Gambar 4.2 Tampilan Application Details pada Twitter API

Sumber : https://apps.twitter.com/

3. Setelah pembuatan aplikasi Twitter berhasil, pilih menu Keys and


Access Token. Maka akan muncul consumer key, consumer secret,
66

access token, dan access token secret yang akan digunakan untuk
mengkoneksikan nya dengan RStudio seperti pada Gambar 4.3

Gambar 4.3 Details Keys and Tokens


Sumber : https://apps.twitter.com/

Input source code untuk mendeklarasikan variable consumer key, consumer


secret, access token, dan access token secret pada perangkat lunak R yang sudah
didapatkan sebelumnya untuk mengkoneksikannya dengan Twitter API seperti

consumer_key <-'mhBvgMFEJbZX0QyWq0rXJCzPE'

consumer_secret'CnUve6PbfkWUuP9a2kNdKaTnf27t5HVWxDK734nraJKU
lvWEl4'

access_token<-
'937617648749199361ecamdSKi809lhrrTXN2GObBbH4lc4MY'

access_secret <-
'd2awAKvaufrBblxtKX2lFzJNAeg3Nco5kosulJyUrzfrM'

dibawah ini.
67

Dalam melakukan proses koneksi RStudio terhadap Twitter API, consumer


key, consumer secret, access token, dan access token secret akan dijadikan
sebagai variable dan dilakukan autentifikasi dengan menggunakan fungsi berikut

setup_twitter_oauth(consumer_key,consumer_secret,access_
token,access_secret)

Apabila koneksi yang dilakukan sukses, akan ada pilihan untuk melakukan
direct authentication. Lalu pilih “1. Yes” untuk melakukan antentifikasi koneksi
secara langsung dan perangkat lunak RStudio sudah terkoneksi dengan Twitter
API.

2. Pengambilan Data

Setelah melakukan pengkoneksian RSTudio terhadap Twitter API, data


tweets dengan akan diambil dengan parameter query “@commuterline”
menggunakan perintah searchTwitter(). Jumlah data yang digunakan dibatasi
berjumlah maksimal 10.000 data tweets dan data yang didapat akan diurutkan
berdasarkan tweets terbaru. Untuk mengaplikasikan fungsi yang diinginkan,
berikut adalah sintaks yang diperlukan

krlTweets<- searchTwitter("@commuterline", n=10000)

Source code diatas, krlTweets digunakan untuk sebagai variabel yang akan
diisi oleh data uji yang didapatkan melalui koneksi terhadap Twitter API. Untuk
mengetaui hasil pengumpulan data tweets yang didapatkan, perangkat lunak R
telah menyediakan fungsi twlistDF() untuk memasukkan data uji yang didapatkan
kedalam Data Frame. Pada Gambar 4.4 merupakan hasil crawling data
68

Gambar 4.4 Tampilan Data Tweets

Pada Gambar 4.4 merupakan data tweets hasil crawling yang didalamnya
terdapat beberapa field seperti text yang berisikan tweets, created yang
memberitahukan tanggal tweet itu dibuat dan banyak lainnya.

4.1.1.2 Pre-Processing
Tahap pre-processing adalah tahap yang dilakukan sebelum masuk pada
bagian pengkasifikasian. Tujuan dari tahap ini mengolah data untuk mejadi
sebuah data yang siap untuk dianalis. Berikut adalah penggalan source code dari
tahapan pre-processing :

1) Case Fold

tweet = tolower(tweet)
69

Source code ini digunakan untuk merubah seluruh huruf kapital yang ada
pada data menjadi huruf kecil.

tweet = gsub("(f|ht)(tp)(s?)(://)(.*)[.|/](.*)", " ", tweet)

# First we will remove retweet entities from

tweet = gsub("(RT|via)((?:\\b\\W*@\\w+)+)", " ", tweet)

# Then remove all "#Hashtag"

tweet = gsub("#\\w+", " ", tweet)

# Then remove all "@people"

tweet = gsub("@\\w+", " ", tweet)

# Then remove all the punctuation

tweet = gsub("[[:punct:]]", " ", tweet)

# Then remove numbers, we need only text for analytics

tweet = gsub("[[:digit:]]", " ", tweet)

tweet = gsub("[[:digit:]]\\w", " ", tweet)

tweet = gsub("[^[:graph:]]", " ",tweet)

tweet = stripWhitespace(tweet)

#Then Remove Space

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

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

tweet = gsub("[^\x01-\x7F]", "", tweet)

2) Filtering

Source code diatas akan menghapus tanda baca, username, hastag, dan spasi
berlebih yang ada pada data yang sudah melewati proses case fold.
70

tweet = gsub("\\stidak\\s"," tidak_",tweet)


tweet = gsub("\\stak\\s"," tidak_",tweet)
tweet = gsub("\\stdk\\s"," tidak_",tweet)
tweet = gsub("\\sg\\s"," tidak_",tweet)
tweet = gsub("\\sga\\s"," tidak_",tweet)
tweet = gsub("\\sgk\\s"," tidak_",tweet)
tweet = gsub("\\sgak\\s"," tidak_",tweet)
tweet = gsub("\\sngga\\s"," tidak_",tweet)
tweet = gsub("\\senggak\\s"," tidak_",tweet)
tweet = gsub("\\snggak\\s"," tidak_",tweet)
tweet = gsub("\\stanpa\\s"," tidak_",tweet)
tweet = gsub("\\sengga\\s"," tidak_",tweet)
tweet = gsub("\\sbelum\\s"," belum_",tweet)
tweet = gsub("\\sblm\\s"," belum_",tweet)

3) Perbaikan Kata Negasi

Source code diatas akan merubah kata mengantisipasi penggunaan kata


tidak, enggak, gak, nggak dan tanpa akan mengakibatkan perubahan makna
kalimat yang seharusnya bernilai positif menjadi negatif karena ada kata tidak di
dalam suatu kalimat. Hasil dari tahap pre-processing akan disimpan dengan nama
file cleandatatweets.csv dan hasilnya dapat dilihat pada Gambar 4.5
71

Gambar 4.5 Hasil Pre-Processing

4.1.1.3 Klasifikasi Lexicon Based


Klasifikasi yang berdasarkan kata positif dan kata negatif yang ada pada
data tweets yang telah dibersihkan pada tahap pre-processing. Klasifikasi ini telah
dicocokkan dengan kata-kata yang terdapat dalam database kata positif dan
negatif pada penelitian yang sebelumnya. Berikut adalah sintaks dalam tahapan
pengklasifikasian dengan Lexicon Based :

1) Memanggil dataset dari hasil pre-processing

krl <- readLines ("C:/Users/User/Documents/commuterline


/cleandatatweets.csv")

Source code diatas digunakan untuk memanggil data file


cleandatatweets.csv hasil dari tahap pre-processing yang digunakan untuk
pengklasifikasian Lexicon Based. Data file yang akan digunakan sudah melalui
tahap pre-processing. Nama data file tersebut adalah cleandatatweets.csv yang
lokasinya berada dalam direktori C:/Users/User/Documents/commuterline.
72

2) Menyocokan dan melakukan perhitungan Lexicon Based dengan


membuat serta menjalankan fungsi (function) score.sentiment seperti

score.sentiment = function(sentences, words.positive,


words.negative, progress='none'){

require(plyr)

require(stringr)

require(katadasaR)

list=lapply(sentences, function(sentence, words.positive,


words.negative) {

word.list = str_split(sentence, '\\s+')

source berikut:
73

pos.matches = match(words, words.positive)

neg.matches = match(words, words.negative)

pos.matches = !is.na(pos.matches)

neg.matches = !is.na(neg.matches)

pp=sum(pos.matches)

nn = sum(neg.matches)

score = sum(pos.matches) - sum(neg.matches)

list1=c(score, pp, nn)

return (list1)

}, words.positive, words.negative)

score_new=lapply(list, `[[`, 1)

pp1=score=lapply(list, `[[`, 2)

nn1=score=lapply(list, `[[`, 3)

scores.df = data.frame(score=score_new, text=sentences)

positive.df = data.frame(Positive=pp1, text=sentences)

negative.df = data.frame(Negative=nn1, text=sentences)

list_df=list(scores.df, positive.df, negative.df)

return(list_df)

Source code diatas akan melakukan pencocokan setiap kata yang ada
dalam satu kalimat dengan database kata positif dan negatif yang ada. Kemudian
memberi nilai berapa jumlah kata positif dan negatif yang ada pada setiap
kalimatnya dan dijumlahkan. Score akhirnya akan menentukan kalimat tersebut
cenderung masuk kategori sentiment positif atau negatif.
74

3) Pembuatan tabel dan menentukan sentiment pada setiap data tweets

##create table

#Creating a copy of result data frame

require(reshape)

test1=krlResult[[1]]

test2=krlResult[[2]]

test3=krlResult[[3]]

#Creating three different data frames for Score, Positive and


Negative

#Removing text column from data frame

test1$text=NULL

test2$text=NULL

test3$text=NULL

#Storing the first row(Containing the sentiment scores) in


variable q

q1=test1[1,]

q2=test2[1,]

q3=test3[1,]

qq1=melt(q1, ,var='Score')

qq2=melt(q2, ,var='Positif')

qq3=melt(q3, ,var='Negatif')

qq1['Score'] = NULL

qq2['Positif'] = NULL

qq3['Negatif'] = NULL
75

#Creating data frame

table1 = data.frame(Text=krlResult[[1]]$text, Score=qq1)

table2 = data.frame(Text=krlResult[[2]]$text, Score=qq2)

table3 = data.frame(Text=krlResult[[3]]$text, Score=qq3)

#Merging three data frames into one

table_final=data.frame(Text=table1$Text,Positif=table2$value,
Negatif=table3$value, Score=table1$value)

table_final$Sentimen<-ifelse(table_final$Score < 0,
"negatif", "positif")

positif = sum(table_final$Score > 0)

negatif = sum(table_final$Score < 0)

netral = sum(table_final$Score == 0)

table_bersih = table_final[!table_final$Score==0,]

write.csv(table_final,file='C:/Users/User/Documents/
commuterline/table_final.csv', row.names = F)

Source code diatas akan memasukkan data yang sudah dilakukan


klasifikasi menggunakan Lexicon Based ke dalam sebuah tabel dan kemudian
disimpan sebagai file table_final.csv. Hasil pengklasifikasian dengan metode
Lexicon Based dapat dilihat pada Gambar 4.6
76

Gambar 4.6 Hasil Lexicon Based

Keterangan dari field yang ada pada hasil Lexicon Based :

1. Text adalah tweets yang telah melalui tahapan pre-processing.


2. Positif adalah jumlah kata yang memiliki arti sentimen positif dalam suatu
kalimat text.
3. Negatif adalah jumlah kata yang memiliki arti sentimen negatif dalam
suatu kalimat text.
4. Score adalah selisih antara sentimen positif dengan negatif kemudian
hasilnya akan menentukan isi dari sentimen tersebut.
5. Sentimen adalah adalah kategori sentimen.

4.1.1.4 Klasifikasi Naïve Bayes Classifier


Pengklasifikasian dengan metode Naïve Bayes Classifier untuk
menentukan apakah data yang akan diuji termasuk kedalam sentiment positif atau
negatif. Berikut ini adalah tahapan proses klasifikasi menggunakan metode naive
bayes classifier :
77

1) Mendefinisikan Dataset

Memanggil file hasil pre-processsing dan klasifikasi Lexicon Based untuk


tahapan klasifikasi Naive Bayes Classifier. Berikut adalah sintaks untuk
mendefinisikan dataset :

nbc<-read.csv('C:/Users/User/Documents/commuterline/
Table_Final.csv')

str(nbc)

View(nbc)

Source code diatas digunakan untuk memanggil data file yang digunakan
untuk pengklasifikasian Naïve Bayes Classifier. Data file yang akan digunakan
sudah melalui tahap pre-processing dan tahap klasifikasi menggunakan Lexicon
Based. Nama data file tersebut adalah tabel_final.csv yang lokasi file berada
dalam direktori C:/Users/User/Documents/commuterline.

Dilanjutkan dengan melihat jumlah dan probabilitas dataset berdasarkan


field sentimen serta menampilkan panjang karakter pada setiap satu komentar.
Berikut adalah sintaks yang digunakan :

table(nbc$Sentimen)

prop.table(table(nbc$Sentimen))

nbc$Text <- as.character(nbc$Text)

nbc$textlength <- nchar(nbc$Text)

Hasil dari perhitungan probalitas field Sentimen dapat dilihat pada Gambar 4.7
78

Gambar 4.7 Hasil Probabilitas Semua Data

Pada Gambar 4.7 dapat disimpulkan bahwa pada dataset yang digunakan
dalam tahap klasifikasi Naïve Bayes Classifier berjumlah 6710 data dengan
jumlah sentiment positifnya 5653 data dan negatifnya 1057 data. Probabilitas
terhadap jumlah keseluruhan data adalah 0.8424739 positif dan 0.1575261
negatif. Data yang digunakan dan menampilkan panjang karakter dapat dilihat
pada Gambar 4.8

Gambar 4.8 Hasil Data Beserta Panjang Karakter

Keterangan Field :

1. Text adalah tweets yang disampaikan oleh pengguna KRL Commuter Line
yang telah melalui tahap pre-processing
79

2. Positif adalah jumlah kata yang memiliki arti sentiment positif dalam suatu
kalimat text
3. Negatif adalah jumlah kata yang memiliki arti sentiment negatif dalam
suatu kalimat text
4. Score adalah nilai dari penjumlahan nilai positif dan negatif
5. Sentimen adalah kategori sentiment
6. Textlength adalah banyaknya jumlah karakter dalam suatu kalimat

2) Pelabelan Data

Proses pelabelan data untuk menentukan rentang data yang masuk kategori
data latih dan data uji. Proporsi pembagian data latih dan data uji adalah 70:30
dari jumlah data. Field yang digunakan adalah field sentimen karena pada
penelitian ini yang menjadi pokok perhitungan adalah sentimen positif atau
negatif. Berikut adalah tahapan pembagian data:

a. Data Latih

Proporsi data latih adalah 70 persen dari jumlah 6710 data setelah
dilakukan tahap pre-processing sehingga data latih yang digunakan berjumlah
4697 data. Data latih itu terhitung dari data ke-1 sampai data ke-4697. Untuk
melakukan proses pelabelan serta mengetahui jumlah sentimen positif dan negatif
serta probabilitasnya dapat dituliskan dengan penggalan sintaks berikut :

## data latih semua data

commuterline_train <- nbc [1:4697,]

commuterline_train

# data latih sentimen

nbc_train_labels <- nbc[1:4697,]$Sentimen

nbc_train_labels

table(nbc_train_labels)

prop.table(table(nbc_train_labels))
80

Hasil perhitungan probabilitas data latih dapat dilihat pada Gambar 4.9

Gambar 4.9 Hasil Probabilitas Data Latih

Pada Gambar 4.9 dapat disimpulkan bahwa pada data latih penilitian ini
terdiri dari 4697 data dengan jumlah sentiment positifnya 2140 dan negatifnya
355. Probabilitas terhadap jumlah data latih adalah 0.8577154 positif dan
0.1422846 negatif.

b. Data Uji

Proporsi data latih adalah 30 persen dari jumlah 3565 data setelah
dilakukan tahap pre-processing sehingga data latih yang digunakan berjumlah
1070 data. Data latih itu terhitung dari data ke-2496 sampai data ke-3565. Untuk
melakukan proses pelabelan serta mengetahui jumlah sentimen positif dan negatif
serta probabilitasnya dapat dituliskan dengan penggalan sintaks berikut :

# data uji semua data

commuterline_test <- nbc [2496 : 3565,]

commuterline_test

# data uji sentimen

nbc_test_labels <- nbc [2496 : 3565,]$Sentimen

nbc_test_labels

table( nbc_test_labels)

prop.table( table( nbc_test_labels))


81

Hasil perhitungan probabilitas data latih dapat dilihat pada Gambar 4.10

Gambar 4.10 Hasil Probabilitas Data Uji

Pada Gambar 4.10 dapat disimpulkan bahwa pada data latih penilitian ini
terdiri dari 2495 data dengan jumlah sentiment positif 3882 dan negatif 815.
Probabilitas terhadap jumlah data latih adalah 0.826485 positif dan 0.173515
negatif.

3) Menentukan DTM (Document Term Matrix)

Pada tahap ini akan dilakukan pembobotan DTM (Document Term Matrix),
berikut adalah Sintaks dalam pembuatan DTM :

commuterlineDTM <- DocumentTermMatrix(commuterlineCorpus)

inspect(commuterlineDTM[1:5, 1:5])

inspect(commuterlineDTM)

Hasil dari pembuatan DTM dapat dilihat pada Gambar 4.11


82

Gambar 4.11 Hasil Document Term Matrix

Kemudian membuat Document Term Matrix untuk data latih dengan


sintaks sebagai berikut :

commuterlineDTM_train <- commuterlineDTM[1 : 4697,]

commuterlineDTM_train

Output dari sintaks tersebut dapat dilihat pada Gambar

Gambar 4.12 Data Latih Dalam Bentuk Document Term Matrix


83

Selanjutnya membuat document term matrix untuk data uji dengan sintaks
sebagai berikut :

commuterlineDTM_test <- commuterlineDTM[4698 : 6710,]

commuterlineDTM_test

Output dari sintaks diatas dapat dilihat pada Gambar 4.13

Gambar 4.13 Data Uji Dalam Bentuk Document Term Matrix

4) Menentukan Frekuensi Kata

Melakukan pencarian frekuensi kata yang paling sering muncul pada data
latih dengan batasan minimal 5 kali kemunculan. Proses dapat dilakukan dengan
menuliskan penggalan sintaks seperti berikut:

frequent_words <- findFreqTerms (commuterlineDTM_train , 5)

frequent_words

length(frequent_words)

Hasil pencarian frekuensi kata yang paling sering muncul dapat dilihat pada
Gambar 4.14
84

Gambar 4.14 Frekuensi Kata Yang Paling Banyak Muncul

Kemudian membuat Document Term Matrix menggunakan fungsi


frequent_words untuk data latih maupun data uji. Berikut adalah sintaks untuk
membuat DTM menggunakan frequent words :

commuterline_freq_word_train <- commuterlineDTM_train [,


frequent_words]

commuterline_freq_word_train

commuterline_freq_word_test <- commuterlineDTM_test [,


frequent_words]

commuterline_freq_word_test

Output dari sintaks diatas dapat dilihat pada Gambar 4.15

Gambar 4.15 Document Term Matrix Dengan Frequent Word


85

Metode Naïve Bayes Classifier membutuhkan suatu informasi apakah


didalam suatu kalimat terdapat kata-kata yes (positif) atau no (negatif). Berikut ini
adalah penggalan sintaksnya :

yes_or_no <- function(x){

y <- ifelse( x > 0 ,1 ,0)

y <- factor(y, levels = c(0 ,1), labels = c("No" ,"Yes"))

Setelah itu melakukan finalisasi dengan membuat fungsi final untuk data
latih dan data uji. Berikut ini adalah penggalan sintaks fungsi final data latih :

commuterline_train <- apply(commuterline_freq_word_train, 2,


yes_or_no)

data.frame(commuterline_train)

Output dari sintaks diatas dapat dilihat pada Gambar 4.16

Gambar 4.16 Fungsi Final Data Latih


86

Setelah itu melakukan finalisasi dengan membuat fungsi final untuk data
uji. Berikut ini adalah penggalan sintaks fungsi final data uji :

commuterline_test <- apply(commuterline_freq_word_test, 2,


yes_or_no)

commuterline_test

Output dari sintaks diatas dapat dilihat pada Gambar 4.17

Gambar 4.17 Fungsi Final Data Uji

5) Tahap Pelatihan

Pada tahap pelatihan ini akan dilakukan proses pembelajaran


menggunakan metode Naïve Bayes Classifier. Berikut ini adalah penggalan
sintaks untuk tahap pembelajaran menggunakan Naïve Bayes Classifier :
87

commuterlineClassifier <- naiveBayes(commuterline_train,


nbc_train_labels, laplace = 1)

system.time(commuterlineClassifier <-
naiveBayes(commuterline_train, nbc_train_labels, laplace =
1))

commuterlineClassifier

class(commuterlineClassifier)

Berikut adalah sebagian dari hasil pembelajaran data latih dengan


menggunakan metode Naïve Bayes Classifier yang dapat dilihat pada Gambar
4.18

Gambar 4.18 Hasil Pembelajaran Data Latih


88

6) Tahap Pengujian

Pada tahap pengujian ini akan dilakukan proses inti dari penelitian ini,
yakni proses pengujian data uji berdasarkan hasil dari proses pelatihan
menggunakan metode Naïve Bayes Classifier. Berikut ini adalah penggalan
sintaks untuk tahap pengujian menggunakan Naïve Bayes Classifier :

commuterline_test_pred <- predict(commuterlineClassifier,


newdata = commuterline_test)

system.time(commuterline_test_pred <-
predict(commuterlineClassifier, newdata = commuterline_test))

commuterline_test_pred

table(commuterline_test_pred)

table(commuterline_test_pred, nbc_test_labels)

prop.table(table(commuterline_test_pred, nbc_test_labels))

Waktu proses yang dibutuhkan sistem dalam mengolah data yang dapat
dilihat pada Gambar 4.19

Gambar 4.19 Output System Time

Berikut adalah sebagian dari hasil pembelajaran data uji dengan


menggunakan metode Naïve Bayes Classifier yang dapat dilihat pada Gambar
4.20
89

Gambar 4.20 Hasil Pembelajaran Data Uji

Berikut ini adalah output dari fungsi table untuk melihat jumlah sentiment
kategori positif dan negatif yang dapat dilihat pada Gambar 4.21

Gambar 4.21 Output Fungsi Table Pengujian Naive Bayes Classifier

Berikut ini adalah output dari fungsi prop.table yang dapat dilihat pada Gambar
4.22

Gambar 4.22 Output Fungsi Prop.Table Pengujian Naive Bayes Classifier

4.1.1.5 Visualisasi
Data hasil analisis sentimen akan divisualisasikan dalam bentuk
histogram, pie chart dan wordcloud. Berikut adalah source code yang digunakan :
90

1) Histogram

histogram_negative <- which(nbc$Sentimen =="negatif")

histogram_positive <- which(nbc$Sentimen =="positif")

hist1 <- hist(nbc$textlength ,main = "Histogram Bedasarkan


Panjang Karakter", col = "yellow")

hist2 <- hist(histogram_negative ,main="Histogram Data


Sentimen negatif", col = "blue")

hist3 <- hist(histogram_positive ,main="Histogram Data


Sentimen positif", col = "green")

Visualisasi dari hasil data analisis sentiment berupa histogram dapat


dilihat pada Gambar 4.23, 4.24, dan 4.25

Gambar 4.23 Histogram Berdasarkan Panjang Karakter


91

Gambar 4.24 Histogram Data Sentimen Negatif

Gambar 4.25 Histogram Data Sentimen Positif


92

2) Pie Chart

mytable <- table(nbc$Sentimen)

lbls <- paste(names(mytable), "\n",mytable, sep = "")

pie(mytable, labels = lbls, main = "Diagram Pie Dari Data


Sentimen\n (Data Positif dan Negatif)")

mytable2 <- table(nbc_train_labels)

lbls <- paste(names(mytable2),"\n", mytable2, sep = "")

pie(mytable2, labels = lbls, main = "Diagram Pie Data


Latih")

mytable3 <- table(nbc_test_labels)

lbls <- paste(names(mytable3),"\n", mytable3, sep = "")

pie(mytable3, labels = lbls, main = "Diagram Pie Data Uji")

mytable4 <- table(commuterline_test_pred)

lbls <- paste(names(mytable4),"\n", mytable4, sep = "")

pie(mytable4, labels = lbls, main = "Diagram Pie Hasil


Klasifikasi Data Uji")

Visualisasi dari hasil data analisis sentiment berupa histogram dapat


dilihat pada Gambar 4.26, 4.27, 4.28 dan 4.29
93

Gambar 4.26 Diagram Pie Hasil Klasifikasi Data Uji

Gambar 4.27 Diagram Pie Data Uji


94

Gambar 4.28 Diagram Pie Data Latih

Gambar 4.29 Diagram Pie Data Positif dan Negatif


95

3) Wordcloud

negatif_cloud <- which(nbc$Sentimen == "negatif")

positif_cloud <- which(nbc$Sentimen == "positif")

require(wordcloud)

require(RColorBrewer)

wordcloud (words = commuterlineCorpus [negatif_cloud]


,min.freq = 10 ,max.words = 100 , random.order = FALSE,
rot.per = 0.1, colors= brewer.pal (5 ,"Dark2"), main =
"Wordcloud Negatif")

wordcloud (words = commuterlineCorpus [positif_cloud]


,min.freq = 10 ,max.words = 100 , random.order = FALSE,
rot.per = 0.1, colors= brewer.pal (5 ,"Dark2"),
main="Wordcloud Positif")

Wordcloud pada program analisis sentiment ini dapat dilihat pada Gambar 4.30
dan 4.31

Gambar 4.30 Wordcloud Positif


96

Gambar 4.31 Wordcloud Negatif

4.1.2 Implementasi Website


Data analisis sentiment hingga hasilnya yang telah divisualisasikan akan
dimuat dalam website yang akan dibuat. Pada website ini tampilan yang akan
dibuat terdiri dari menu Home, Data Tweets, Database, Pre-Processing, Analisis
Sentimen, Visualisasi. Berikut adalah sebagian sintaks yang digunakan :

1. Home

Dalam membuat tampilan antarmuka Home, sintaks yang digunakan


sebagai berikut :

tabItems(tabItem(tabName ="home", h2("ANALISIS SENTIMEN


PADA TWITTER TERHADAP PENGGUNA KRL COMMUTERLINE DENGAN
MENGGUNAKAN METODE LEXICON BASED DAN NAIVE BAYES
CLASSIFIER",align = "center"),
tags$img(src='commuterline.png',height=202,
width=500,style="display : block ; margin-left : auto ;
margin-right : auto ; class : rounded mx-auto d-block")),
97

Tampilan antarmuka Home dapat dilihat pada Gambar 4.32

Gambar 4.32 Tampilan Antarmuka Home

Pada Gambar 4.32 merupakan antarmuka menu Home pada website yang
berisikan informasi mengenai apa yang dimuat pada website ini.

2. Data Tweets

Dalam membuat tampilan antarmuka Data Tweets, sintaks yang digunakan


sebagai berikut :

tabItem(tabName ="dataset",
div(dataTableOutput("dataset"),style = "font-size:150%")),

Tampilan antarmuka Data Tweets dapat dilihat pada Gambar 4.33


98

Gambar 4.33 Tampilan Antarmuka Data Tweets

Gambar 4.33 tampilan antarmuka Data Tweets yang merupakan data awal
yang digunakan dalam proses analisis sentiment ini. Data itu merupakan data yang
diambil dari Twitter yang belum melalui tahap pre-processing.

3. Database

Dalam membuat tampilan antarmuka Database, sintaks yang digunakan


sebagai berikut :

tabItem(tabName ="database",tabsetPanel(type = "tab",

tabPanel("Database
Positif",div(dataTableOutput("posilist"),style = "font-
size:150%")),

tabPanel("Database
Negatif",div(dataTableOutput("negalist"),style = "font-
size:150%")))),

Tampilan antarmuka Database dapat dilihat pada Gambar 4.34


99

Gambar 4.34 Tampilan Antarmuka Database

Gambar 4.34 merupakan tampilan antarmuka Database yang berisikan


kamus positif dan negatif. Database digunakan dalam proses analisis sentiment ini
untuk keperluan mengidentifikasi kata pada data tweets setelah melalui pre-
processing.

4. Pre-Processing

Dalam membuat tampilan antarmuka Pre-Processing, sintaks yang


digunakan sebagai berikut :

tabItem(tabName ="prepro",
div(dataTableOutput("prepro"),style = "font-
size:150%")),

Tampilan antarmuka Pre-Processing dapat dilihat pada Gambar 4.35


100

Gambar 4.35 Tampilan Antarmuka Pre-Processing

Gambar 4.35 menampilkan menu antarmuka Pre-processing yang


berisikan data tweets hasil pre-processing. Pengguna dapat melihat perbedaan dari
data awal tweets dengan data tweets hasil pre-processing ini.

5. Analisis Sentimen

Dalam membuat tampilan antarmuka Analisis Sentimen, sintaks yang


digunakan sebagai berikut :

tabItem(tabName = "lexicon",tabsetPanel(type =
"tab",tabPanel("Hasil Sentimen",div(dataTableOutput("lexi"),style
= "font-size:150%")))),

Tampilan antarmuka Analisis Sentimen dapat dilihat pada Gambar 4.36


101

Gambar 4.36 Tampilan Antarmuka Analisis Sentimen

Gambar 4.36 merupakan antarmuka halaman analisis sentiment yang


sudah melalui proses klasifikasi Lexicon Based. Menu ini berisikan tabel yang di
dalamnya terdapat field text yang berisi data tweets, field positif dan negatif yang
berisikan nilai kata positif dan negatif pada tweets tersebut. Field score
merupakan field hasil penjumlahan nilai dari field positif dan negatif. Field
sentiment berisikan kesimpulan hasil dari tiap tweets itu cenderung memiliki nilai
positif atau negatif.

6. Visualisasi

Dalam membuat tampilan antarmuka visualisasi, sintaks yang digunakan


sebagai berikut :

tabItem(tabName ="analisis", tabsetPanel(type ="tab",


tabPanel("Histogram", tags$img(src='hp.png',height=520,
width=520),

hr(),tags$img(src="hn.png",height=520, width=520),

hr(),
tags$img(src="hpk.png",height=520,width=520),align="center"),
102

tabPanel("DiagramPie",
tags$img(src="ppn.png",height=520, width=520),

hr(),

tags$img(src="pdl.png",height=520, width=520),

hr(),
tags$img(src="pdu.png",height=520, width=520),

hr(),

tags$img(src="pku.png",height=520,
width=520),align="center"),

tabPanel("Wordcloud",
h2("WORDCLOUD POSITIF",align = "center"),

tags$img(src="wp.png",height=420,width=420),
h2("WORDCLOUD NEGATIF",align = "center"),

tags$img(src="wn.png",height=420,
width=420),align="center")))))))

Tampilan antarmuka Analisis Sentimen dapat dilihat pada Gambar 4.37,


4.38, dan 4.39
103

Gambar 4.37 Tampilan Antarmuka Visualisasi Histogram

Gambar 4.38 Tampilan Antarmuka Visualisasi Pie Chart


104

Gambar 4.39 Tampilan Antarmuka Visualisasi Wordcloud

4.2 Uji Coba


Pada tahap uji coba akan dilakukan proses perhitungan akurasi dengan
Confusion Matrix. Berikut adalah sintaks membuat tabel Confusion Matrix pada
analisis sentiment ini :

conf.mat<-confusionMatrix(commuterline_test_pred,
nbc_test_labels)

conf.mat

conf.mat$byClass

conf.mat$overall

conf.mat$overall ['Accuracy']

commuterline_test_pred

table(commuterline_test_pred)
105

nbc_test_labels

table(nbc_test_labels)

View(nbc_test_labels)

View(commuterline_test_pred)

Gambar 4.40 Tabel Confusion Matrix


Kemudian melakukan proses perhitungan akurasi dengan Confusion
Matrix. Sintaks yang digunakan sebagai berikut :

conf.mat <- confusionMatrix(commuterline_test_pred,


nbc_test_labels)

conf.mat
106

Hasil dari perhitungan Confusion Matrix dapat dilihat pada Gambar 4.41

Gambar 4.41 Confusion Matrix

Akurasi yang didapatkan adalah 90,41%. Untuk membuktikannya,


dilakukan penghitungan secara manual sebagai berikut :

1. Akurasi

( )
Accuracy =

( )
Accuracy =

Accuracy = 0,9041 = 90,41%

2. Error Rate

Error Rate = 1 – Accuracy

Error Rate = 1 – 0,9041

Error Rate = 0,0959 = 9,59%

3. Presisi Positif

Pos. Precision =

Pos. Precision =

Pos. Precision = 0,9187 = 91,87%


107

4. Presisi Negatif

Neg. Precision =

Neg. Precision =

Neg. Precision = 0,6899 = 68,99%

5. Recall
Recall =

Recall =

Recall = 0,9774 = 97,74%


BAB 5

KESIMPULAN DAN SARAN

5.1 Kesimpulan
Pada penelitian ini telah dilakukan analisis sentiment pada Twitter
terhadap pengguna Commuter Line. Sistem yang dibuat terdiri dari 2 (dua) bagian
yang berbeda yakni sistem perhitungan analisis sentiment dan website analisis
sentiment. Sistem ini dibuat dengan menggunakan Bahasa R pada RStudio dengan
koneksi terhadap Twitter API (Application Programming Interface). Proses
klasifikasi dilakukan dengan menggunakan metode Lexicon Based dan Naïve
Bayes Classifier. Kemudian hasil analisis akan divisualiasikan dalam bentuk
histogram, pie chart, dan wordcloud.

Hasil akurasi yang didapat Pada penelitian analisis sentimen ini


didapatkan hasil akurasi klasifikasi data tweets dari sistem analisis sentimen
dengan menggunakan Naïve Bayes Classifier sebesar 90,41% dan kesalahan
sistem atau error rate sebesar 9,59%. Presisi positif sebesar 91,87%, presisi
negatif sebesar 68,99%, dan recall sebesar 97,74%. Maka berdasarkan hasil
analisis sentimen pada penelitian ini dapat disimpulkan bahwa KRL Commuter
Line memiliki kecenderungan sentimen positif pada saat data diambil.

5.2 Saran
Penelitian ini masih perlu pengembangan selanjutnya seperti pengambilan
data, proses pengolahan, perhitungan hingga hasil visualisasinya bisa dikerjakan
secara real-time dalam suatu sistem website. Kemudian penambahan fitur-fitur
lainnya seperti penambahan tahapan pada proses pre-processing, penyediaan
metode klasifikasi yang lain dan analisis sentiment dapat mengolah data secara
dinamis.

108
DAFTAR PUTAKA

Binanto, I. 2010. Multimedia Digital Dasar Teori dan Pengembangannya.


Yogyakarta: CV. Andi Offset.

Brata Mas Pintoko, Kemas Muslim L. 2018. Analisis Sentimen Jasa Transportasi
Online pada Twitter Menggunakan Metode Naïve Bayes Classifier.

Faisal, M. R. 2017. Seri Belajar Data Science: Klasifikasi dengen Bahasa


Pemrograman R.

Falahah, & Nur, DDA. 2015. Pengembangan Aplikasi Sentiment Analysis


menggunakan Metode Naive Bayes. Seminar Nasional Sistem Informasi
Indonesia.
Feldman, R., & Sanger, J. 2007. Text Mining Handbook: Advanced Approaches
in Analyzing Unstructured. Computational Linguistics, Vol. 34.

Fitrianti, RP. 2018. Analisis Sentimen terhadap Review Restoran dengan Teks
Bahasa Indonesia Menggunakan Algoritma K-Nearest Neighbor.
Fitriyadi, AR. 2015. Pemanfaatan Media Sosial Facebook dan Twitter untuk
Memperkenalkan Komunitas Bismania.

Han & Kamber. 2006. Data Mining: Concepts and Techniques, 2nd ed.

Herlawati Widodo Pudjo Prabowo. 2011. Menggunakan UML. Informatika,


Bandung.

https://balsamiq.com/wireframes/desktop/docs/overview/. Diakses Tanggal 3


Agustus 2019.

http://krl.co.id/. Diakses Tanggal 30 Juli 2019.

https://www.r-project.org/about.html. Diakses Tanggal 30 Juli 2019.

http://repository.usu.ac.id/bitsream/handle/123456789/41908/Abstrack.pdf.
Diakses Tanggal 30 Juli 2019.

109
110

Kusumawati, I. 2017. Analisa Sentimen Menggunakan Lexicon Based Untuk


Melihat Persepsi Masyarakat Terhadap Kenaikan Harga Rokok Pada
Media Sosial Twitter. 1-10.

Putri, EK., and Setiadi, T. 2014. Penerapan Text Mining pada Sistem Klasifikasi
Email Spam menggunakan Naive Bayes. Jurnal Sarjana Teknik
Informatika Vol. 2, No.3, Pages. 73 - 83

Ravindran, Kumar, S., & Garg, V. 2015. Mastering Social Media Mining with R.
Birmingham: Packt Publishing Ltd.

Rosandy, Triowali. 2016. Perbandingan Metode Naive Bayes Classifier dengan


Metode Decision Tree (C4.5) untuk Menganalisa Kelancaran
Pembiayaan (Studi Kasus: KSPPS/ BMT Al-Fadhila). Jurnal TIM
Darmajaya. Vol.2, No.1, Pages. 52-62.

Rustiana, D., & Rahayu, N. 2017. Analisis Sentimen Pasar Otomatif Mobil:
Tweet Twitter menggunakan Naive Bayes. Jurnal SIMETRIS. Vol.8,
No.1, Pages. 113-120
Sussolaikah, K., & Alwi, A. 2016. Sentiment Analysis Terhadap Acara Televisi
Mata Najwa Berdasarkan Opini Masyarakat Pada Microblogging Twitter.
Konferensi Nasional Teknologi Informasi dan Komunikasi, 204-211.

Wibawanto, Wanda. 2017. Desain dan Pemrograman Multimedia Pembelajaran


Interaktif. Jember:Cerdas Ulet Kreatif.
Widaningsih, S., and Suheri, A. 2018. Klasifikasi Jurnal Ilmu Komputer
Berdasarkan Pembagian Web of Science dengan Menggunakan Text
Mining. Seminar Nasional Teknologi Informasi dan Komunikasi 2018
Widiastuti, Desi Kurnia. 2014. Twitter sebagai Media Alternatif Informasi Publik.
Willi. 2015. Distributed Twitter Crawler.
LAMPIRAN

Install Package dan Library

install.packages(“devtools”)
install.packagees(“twitteR)
install.packages("reshape")
install.packages("tm")
install.packages("ggplot2")
install.packages("NLP")

library(devtools)
library(twitteR)
library(ROAuth)
library(reshape)
library(tm)
library(ggplot2)
library(NLP)

Crawling Data

consumer_key <- 'mhBvgMFEJbZX0QyWq0rXJCzPE'


consumer_secret <-
'CnUve6PbfkWUuP9a2kNdKaTnf27t5HVWxDK734nraJKUlvWEl4'
access_token <- '937617648749199361-
ecamdSKi809lhrrTXN2GObBbH4lc4MY'
access_secret <- 'd2awAKvaufrBblxtKX2lFzJNAeg3Nco5kosulJyUrzfrM'
setup_twitter_oauth(consumer_key,
consumer_secret,
access_token,
access_secret)
#the cainfo parameter is necessary only on Windows
krlTweets<- searchTwitter("@commuterline", n=10000)
head(krlTweets)
TweetsDF = twListToDF(krlTweets)
write.table(TweetsDF,
file="C:/Users/User/Documents/commuterline/datatweets.csv",
row.names = F, sep = ",")

Pre-processing Data

#cleaning data

krl_data=sapply(krlTweets, function(x) x$getText())

catch.error = function(x){

# let us create a missing value for test purpose

y = NA

# Try to catch that error (NA) we just created

L-1
2

catch_error = tryCatch(tolower(x), error=function(e) e)

# if not an error

if (!inherits(catch_error, "error"))

y = tolower(x)

# check result if error exists, otherwise the function works fine.

return(y)}

#cleaning data

cleanTweets<- function(tweet){

# Clean the tweet for sentiment analysis

# Case Fold

tweet = tolower(tweet)

# remove html links, which are not required for sentiment analysis

tweet = gsub("(f|ht)(tp)(s?)(://)(.*)[.|/](.*)", " ", tweet)

# First we will remove retweet entities from

wteet = gsub("(RT|via)((?:\\b\\W*@\\w+)+)", " ", tweet)

# Then remove all "#Hashtag"

tweet = gsub("#\\w+", " ", tweet)

# Then remove all "@people"

tweet = gsub("@\\w+", " ", tweet)

# Then remove all the punctuation

tweet = gsub("[[:punct:]]", " ", tweet)

# Then remove numbers, we need only text for analytics

tweet = gsub("[[:digit:]]", " ", tweet)

tweet = gsub("[[:digit:]]\\w", " ", tweet)

tweet = gsub("[^[:graph:]]", " ",tweet)

tweet = stripWhitespace(tweet)

#Then Remove Space

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

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

tweet = gsub("[^\x01-\x7F]", "", tweet)

#mengganti kata negasi

tweet = gsub("\\stidak\\s"," tidak_",tweet)


3

tweet = gsub("\\stak\\s"," tidak_",tweet)

tweet = gsub("\\stdk\\s"," tidak_",tweet)

tweet = gsub("\\sg\\s"," tidak_",tweet)

tweet = gsub("\\sga\\s"," tidak_",tweet)

tweet = gsub("\\sgk\\s"," tidak_",tweet)

tweet = gsub("\\sgak\\s"," tidak_",tweet)

tweet = gsub("\\sngga\\s"," tidak_",tweet)

tweet = gsub("\\senggak\\s"," tidak_",tweet)

tweet = gsub("\\snggak\\s"," tidak_",tweet)

tweet = gsub("\\stanpa\\s"," tidak_",tweet)

tweet = gsub("\\sengga\\s"," tidak_",tweet)

tweet = gsub("\\sbelum\\s"," belum_",tweet)

tweet = gsub("\\sblm\\s"," belum_",tweet)

cleanTweetsAndRemoveNAs<- function(Tweets) {

TweetsCleaned = sapply(Tweets, cleanTweets)

# Remove the "NA" tweets from this tweet list

TweetsCleaned = TweetsCleaned[!is.na(TweetsCleaned)]

names(TweetsCleaned) = NULL

# Remove the repetitive tweets from this tweet list

TweetsCleaned = unique(TweetsCleaned)

TweetsCleaned

databersih = cleanTweetsAndRemoveNAs(krlTweets)

write.csv(databersih, file =

'C:/Users/User/Documents/commuterline/cleandatatweets.csv',
row.names = F)
4

Naïve Bayes Classifier


nbc <-
read.csv('C:/Users/User/Documents/commuterline/Table_Final.csv')
str(nbc)
View(nbc)
which(!complete.cases(nbc))
table(nbc$Sentimen)
prop.table(table(nbc$Sentimen))
nbc$Text <- as.character(nbc$Text)
nbc$textlength <- nchar(nbc$Text)

require(tm)
commuterlineCorpus <- Corpus(VectorSource(nbc$Text))
print(commuterlineCorpus)
inspect(commuterlineCorpus)

#Buat DTM
commuterlineDTM <- DocumentTermMatrix(commuterlineCorpus)
inspect(commuterlineDTM[1:5, 1:5])
inspect(commuterlineDTM)

### algoritma naivebayes


## bagi menjadi dtm training dan test .
## data latih semua data
commuterline_train <- nbc [1:4697,]
commuterline_train

# data latih sentimen


nbc_train_labels <- nbc[1:4697,]$Sentimen
nbc_train_labels
table(nbc_train_labels)
prop.table(table(nbc_train_labels))

# memisahkan data training menjadi positif atau negatif


negatif <- subset( nbc_train_labels , nbc$Sentimen=="negatif")
positif<- subset( nbc_train_labels , nbc$Sentimen=="positif")

# data uji semua data


commuterline_test <- nbc [4698 : 6710,]
commuterline_test

# data uji sentimen


nbc_test_labels <- nbc [4698 : 6710,]$Sentimen
nbc_test_labels
table( nbc_test_labels)
prop.table( table( nbc_test_labels))

## buat DTM training dan test


# dtm
commuterlineDTM_train <- commuterlineDTM[1 : 4697,]
commuterlineDTM_train
commuterlineDTM_test <- commuterlineDTM[4698 : 6710,]
commuterlineDTM_test

# menemukan kalimat yang sering muncul


frequent_words <- findFreqTerms (commuterlineDTM_train , 5)
5

frequent_words
length(frequent_words)

# lalu lihat beberapa kata


frequent_words [1:10]

# membuat DTM menggunakan frequent_words


commuterline_freq_word_train <- commuterlineDTM_train[,
frequent_words]
commuterline_freq_word_train
commuterline_freq_word_test <- commuterlineDTM_test[,
frequent_words]
commuterline_freq_word_test

yes_or_no <- function(x){


y <- ifelse( x > 0 ,1 ,0)
y <- factor(y, levels = c(0 ,1), labels = c("No" ,"Yes"))
y
}

#gunakan fungsi pada commuterline_train dan commuterline_test DTM


untuk mengetahui the presence of word#
commuterline_train <- apply(commuterline_freq_word_train, 2,
yes_or_no)
data.frame(commuterline_train)
commuterline_test <- apply(commuterline_freq_word_test, 2,
yes_or_no)
commuterline_test

library("e1071")
#melatih data training dengan naive bayes classifier dengan
laplace = 1#
commuterlineClassifier <- naiveBayes(commuterline_train,
nbc_train_labels, laplace = 1)
system.time(commuterlineClassifier <-
naiveBayes(commuterline_train, nbc_train_labels, laplace = 1))
commuterlineClassifier
class(commuterlineClassifier)

#menguji data test


commuterline_test_pred <- predict(commuterlineClassifier, newdata
= commuterline_test)
system.time(commuterline_test_pred <-
predict(commuterlineClassifier, newdata = commuterline_test))
commuterline_test_pred
table(commuterline_test_pred)
table(commuterline_test_pred, nbc_test_labels)
prop.table(table(commuterline_test_pred, nbc_test_labels))

#Mengetahui akurasi perhitungan menggunakan confusion matrix#

library("caret")
6

conf.mat <- confusionMatrix(commuterline_test_pred,


nbc_test_labels)
conf.mat
conf.mat$byClass
conf.mat$overall
conf.mat$overall ['Accuracy']
commuterline_test_pred
table(commuterline_test_pred)
nbc_test_labels
table(nbc_test_labels)
View(nbc_test_labels)
View(commuterline_test_pred)

#Lihat hasilnya dalam bentuk tabel#


library("gmodels")
CrossTable(commuterline_test_pred, nbc_test_labels, prop.chisq =
F, prop.t =F, dnn=c("Actual","Predicted"))
table("Actual"= nbc_test_labels, "Predictions"=
commuterline_test_pred)

library("ggplot2")
ggplot(nbc, aes(textlength)) + geom_histogram()
ggplot(nbc, aes(textlength, fill = Sentimen)) + geom_histogram()
ggplot(nbc, aes(textlength, fill = Sentimen)) +
geom_histogram(binwidth = 10)
ggplot(nbc, aes(textlength, fill = Sentimen)) +
geom_histogram(binwidth = 6) + facet_wrap(~Sentimen)

#Histogram
library("lattice")
histogram_negative <- which(nbc$Sentimen =="negatif")
histogram_positive <- which(nbc$Sentimen =="positif")
hist1 <- hist(nbc$textlength ,main = "Histogram Bedasarkan Panjang
Karakter", col = "yellow")
hist2 <- hist(histogram_negative ,main="Histogram Data Sentimen
negatif", col = "blue")
hist3 <- hist(histogram_positive ,main="Histogram Data Sentimen
positif", col = "green")
hist4 <- histogram(~textlength | Sentimen, data = nbc, main =
"Perbandingan Panjang Karakter dengan\n Sentimen Negatif, Positif
dan Netral ")
hist5 <- histogram(~Score | Sentimen, data = nbc , main =
"Perbandingan Hasil Score dengan\n Sentimen Negatif, Positif dan
Netral")

#Diagram Pie
mytable <- table(nbc$Sentimen)
lbls <- paste(names(mytable), "\n",mytable, sep = "")
pie(mytable, labels = lbls, main = "Diagram Pie Dari Data
Sentimen\n (Data Positif dan Negatif)")
mytable2 <- table(nbc_train_labels)
lbls <- paste(names(mytable2),"\n", mytable2, sep = "")
pie(mytable2, labels = lbls, main = "Diagram Pie Data Latih")
mytable3 <- table(nbc_test_labels)
lbls <- paste(names(mytable3),"\n", mytable3, sep = "")
pie(mytable3, labels = lbls, main = "Diagram Pie Data Uji")
7

mytable4 <- table(commuterline_test_pred)


lbls <- paste(names(mytable4),"\n", mytable4, sep = "")
pie(mytable4, labels = lbls, main = "Diagram Pie Hasil Klasifikasi
Data Uji")

#Membuat wordcloud
negatif_cloud <- which(nbc$Sentimen == "negatif")
positif_cloud <- which(nbc$Sentimen == "positif")
require(wordcloud)
require(RColorBrewer)
wordcloud (words = commuterlineCorpus [negatif_cloud] ,min.freq =
10 ,max.words = 100 , random.order = FALSE, rot.per = 0.1, colors=
brewer.pal (5 ,"Dark2"), main = "Wordcloud Negatif")
wordcloud (words = commuterlineCorpus [positif_cloud] ,min.freq =
10 ,max.words = 100 , random.order = FALSE, rot.per = 0.1, colors=
brewer.pal (5 ,"Dark2"), main="Wordcloud Positif")

score.sentiment = function(sentences, words.positive,


words.negative, progress='none'){
require(plyr)
require(stringr)
require(katadasaR)
list=lapply(sentences, function(sentence, words.positive,
words.negative) {
word.list = str_split(sentence, '\\s+')
words = unlist(word.list)
words = lapply(words, katadasaR)
pos.matches = match(words, words.positive)
neg.matches = match(words, words.negative)
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
pp=sum(pos.matches)
nn = sum(neg.matches)
score = sum(pos.matches) - sum(neg.matches)
list1=c(score, pp, nn)
return (list1)
}, words.positive, words.negative)
score_new=lapply(list, `[[`, 1)
pp1=score=lapply(list, `[[`, 2)
nn1=score=lapply(list, `[[`, 3)
scores.df = data.frame(score=score_new, text=sentences)
positive.df = data.frame(Positive=pp1, text=sentences)
negative.df = data.frame(Negative=nn1, text=sentences)
list_df=list(scores.df, positive.df, negative.df)
return(list_df)
}
krl <-
readLines("C:/Users/User/Documents/commuterline/cleandatatweets.cs
v")
krl <- stripWhitespace(krl)
krlResult <- score.sentiment(krl, words.positive, words.negative)

##create table
#Creating a copy of result data frame
8

require(reshape)
test1=krlResult[[1]]
test2=krlResult[[2]]
test3=krlResult[[3]]
#Creating three different data frames for Score, Positive and
Negative
#Removing text column from data frame
test1$text=NULL
test2$text=NULL
test3$text=NULL
#Storing the first row(Containing the sentiment scores) in
variable q
q1=test1[1,]
q2=test2[1,]
q3=test3[1,]
qq1=melt(q1, ,var='Score')
qq2=melt(q2, ,var='Positif')
qq3=melt(q3, ,var='Negatif')
qq1['Score'] = NULL
qq2['Positif'] = NULL
qq3['Negatif'] = NULL
#Creating data frame
table1 = data.frame(Text=krlResult[[1]]$text, Score=qq1)
table2 = data.frame(Text=krlResult[[2]]$text, Score=qq2)
table3 = data.frame(Text=krlResult[[3]]$text, Score=qq3)
#Merging three data frames into one
table_final=data.frame(Text=table1$Text,Positif=table2$value,
Negatif=table3$value, Score=table1$value)
table_final$Sentimen <- ifelse(table_final$Score < 0, "negatif",
"positif")
positif = sum(table_final$Score > 0)
negatif = sum(table_final$Score < 0)
netral = sum(table_final$Score == 0)
table_bersih = table_final[!table_final$Score==0,]
write.csv(table_final, file =
'C:/Users/User/Documents/commuterline/table_final.csv', row.names
= F)
View(table_final)

#Score Sentiment (Sistem Perhitungan Lexicon Based)


score.sentiment = function(sentences, words.positive,
words.negative, progress='none')
{
require(plyr)
require(stringr)
list=lapply(sentences, function(sentence, words.positive,
words.negative) {
require(plyr)
require(stringr)
require(katadasaR)
sentence = gsub('[[:cntrl:]]','',sentence)
sentence = gsub('\\d+','',sentence)
sentence = gsub('\n','',sentence)
sentence = tolower(sentence)
word.list = str_split(sentence, '\\s+')
words = unlist(word.list)
9

words = sapply(words, katadasaR)


pos.matches = match(words, words.positive)
neg.matches = match(words, words.negative)
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
pp=sum(pos.matches)
nn = sum(neg.matches)
score = sum(pos.matches) - sum(neg.matches)
list1=c(score, pp, nn)
return (list1)
}, words.positive, words.negative)
score_new=lapply(list, `[[`, 1)
pp1=score=lapply(list, `[[`, 2)
nn1=score=lapply(list, `[[`, 3)
scores.df = data.frame(score=score_new, text=sentences)
positive.df = data.frame(Positive=pp1, text=sentences)
negative.df = data.frame(Negative=nn1, text=sentences)
list_df=list(scores.df, positive.df, negative.df)
return(list_df)
}
transjakartaResult = score.sentiment(transjakartaTweetscleaned,
words.positive, words.negative)

ui.R

##Intro shinydashboard package


##add pages for menu items
#install . packages("shinydashboard")
#Load required packages
library(shiny)
library(shinydashboard)
shinyUI(dashboardPage(title = "Analisis Sentimen", skin ="green",
dashboardHeader(title = (text = " Analisis
Sentimen")),

dashboardSidebar(sidebarMenu(menuItem(text
="Home", tabName ="home", icon=icon("home")),

menuSubItem("Data Tweets",
tabName="dataset",icon=icon("database")),

menuSubItem("Database", tabName="database",icon=icon("database")),

menuSubItem("Pre-processing",
tabName="prepro",icon=icon("database")),

menuItem("Analisis Sentimen", tabName


="lexicon",icon=icon("poll")),

menuItem("Visualisasi", tabName ="analisis",icon=icon("poll")))),


dashboardBody(
tags$head(
10

tags$style(HTML(".main-sidebar { font-
size: 22px; }"))
),
#within tabitems(), define the pages for
sidebar menu items
tabItems(tabItem(tabName ="home",

tags$img(src='commuterline.png', height=202,
width=500,style="display : block ; margin-left : auto ;
margin-right :
auto ; class : rounded mx-auto d-block")),

tabItem(tabName ="dataset",
div(dataTableOutput("dataset"),style = "font-size:150%")),
tabItem(tabName ="database",
tabsetPanel(type = "tab",

tabPanel("Database Positif",div(dataTableOutput("posilist"),style
= "font-size:150%")),

tabPanel("Database Negatif",div(dataTableOutput("negalist"),style
= "font-size:150%"))
)),
tabItem(tabName ="prepro",
div(dataTableOutput("prepro"),style = "font-size:150%")),
tabItem(tabName = "lexicon",
tabsetPanel(type = "tab",

tabPanel("Hasil Sentimen",div(dataTableOutput("lexi"),style =
"font-size:150%"))
)),
tabItem(tabName ="analisis",
tabsetPanel(type ="tab",

tabPanel("Histogram",

tags$img(src='HDSP.png',height=400, width=400),

tags$img(src="HDSN.png",height=400, width=400),

tags$img(src="HBPK.png",height=400, width=400),align="center"),

tabPanel("Diagram Pie",

tags$img(src="DPDSPN.png",height=400, width=400),

tags$img(src="DPDL.png",height=400, width=400),
11

tags$img(src="DPDU.png",height=400, width=400),

tags$img(src="DPHKDU.png",height=400, width=400),align="center"),

tabPanel("Wordcloud",

h2("WORDCLOUD POSITIF",align = "center"),

tags$img(src="WCP.png",height=320, width=320),

h2("WORDCLOUD NEGATIF",align = "center"),

tags$img(src="WCN.png",height=320, width=320),align="center")

))))))

server.R

#Server R
library(shiny)
library(plyr)
library(wordcloud)
library(ggplot2)
library(RColorBrewer)
library(tm)
library(plotly)
library(plotrix)
library(reshape)
shinyServer(
function(input,output) {
output$currentTime <- renderText({invalidateLater(1000)
paste(Sys.time())})
output$plot3<-renderPlot({plotSentiments3(transjakartatweetPol,
'Analisis Sentimen pada Tweets TransJakarta') })
output$value <- renderPrint({ input$radio })
output$Tabel1 = renderDataTable({table_final})
output$plot1<-
renderPlot({plotSentiments1(transjakartaSentimentDataFrame,
'Analisis Sentimen pada Tweets TransJakarta') })
output$plot2<-
renderPlot({plotSentiments2(transjakartaSentimentDataFrame,
'Polaritas terhadap Analisis pada Tweets TransJakarta') })
output$distNeg<- renderPlot({hist(table_final$Negative,
col='orange',
border = 'black',main = "Histogram Skor Negative", xlab =
"Negative Score") })
output$distpos<- renderPlot({hist(table_final$Positive,
col='skyblue',
12

border = 'black', main = "Histogram Skor Positive", xlab =


"Positive Score") })
output$distscore<- renderPlot({hist(table_final$Score,
col=rainbow(10),
border = 'black', main = "Histogram SCORE", xlab = "FINAL SCORE")
})
#Get Manufacturec
slices <- reactive({c(sum(negatif), sum(positif), sum(netral))})
labels <- c("Negatif", "Positif","Netral")
output$Chart<-renderPlot(pie + blank_theme +
theme(axis.text.x=element_blank())+
geom_text(aes(y = value/2 + c(0, cumsum(value)[-length(value)]),
label = percent(value/sum(positif+netral+negatif))), size=5))
output$Chart2 <- renderPlot(bp)
renderPlot({pie3D(slices(), labels =
labels,col=rainbow(length(labels)),explode=0.00, main="Sentiment
Analysis") })
output$Kata <-
renderPlot({getWordCloud(transjakartaSentimentDataFrame,transjakar
taTweetscleaned, transjakartaEmotion)})
output$Datas <- renderDataTable({transjakartaSentimentDataFrame})
})

Server.R

library(shiny)

library(shinydashboard)

library(readxl)

shinyServer(function(input,output,session){

##untukmenampilkandataset

output$dataset<-
renderDataTable({read.csv("data/datatweets.csv")})

output$prepro<-
renderDataTable({read.csv("data/cleandatatweet.csv")})

output$negalist<-
renderDataTable({read.csv("data/negative.csv")})

output$posilist<-
renderDataTable({read.csv("data/positive.csv")})

output$lexi<-renderDataTable({read.csv("data/Table_Final.csv")})

})
13

OUTPUT PROGRAM

 Tampilan Home

 Tampilan Data Tweets

 Tampilan Database
14

 Tampilan Pre-processing

 Tampilan Analisis Sentimen

 Tampilan Visualisasi Histogram


15

 Tampilan Visualisasi Pie Chart

 Tampilan Visualisasi Wordcloud

Anda mungkin juga menyukai