UNIVERSITAS GUNADARMA
FAKULTAS ILMU KOMPUTER & TEKNOLOGI INFORMASI
Disusun Oleh :
Nama : Rizky Rafliadi Ramadhan
NPM : 16115198
Jurusan : Sistem Informasi
Pembimbing : Dr. Kemal Ade Sekarwati, S.Kom., MMSI.
JAKARTA
2019
1
PERNYATAAN ORISINALITAS DAN PUBLIKASI
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.
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
iv
ABSTRACT
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.
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
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
xiii
BAB 1
PENDAHULUAN
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.
2
3
Bab ini berisi secara singkat teori-teori yang relevan dan digunakan
sebagai dasar dalam penyelesaian masalah yang menjadi topik
pada penelitian ini.
BAB 5 PENUTUP
LANDASAN TEORI
7
8
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
b. Direct Message
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
f. Tweets
Fitur ini digunakan untuk mengirim pesan, gambar, gif, polling, atau
location yang ingin dibagikan kepada orang lain.
Pada fitur ini pemilik akun dapat mengubah informasi dan melakukan
perubahan keamanan dan privasi terkait akunnya.
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
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.
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:
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.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
(2.2)
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].
Untuk P(x1, x2, x3,…xn) nilainya konstan untuk semua kategori (Vj)
sehingga persamaan dapat ditulis sebagai berikut:
(2.6)
= ( | ) ( )
(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.
( )
Classified as
Correct Classification
Predicted “+” Predicted “-”
Actual “+” True Positives False Negatives
Actual “-” False Positives True Negatives
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
……..… (2.14)
3. Recall
Recall didefinisikan sebagai rasio dari item relevan yang dipilih terhadap
total jumlah item relevan yang tersedia. Recall dihitung dengan rumus :
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.
> x <- 1
> x [1] 1
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.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:
Simbol Fungsi
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].
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.
Dalam membuat diagram pada DIA diagram dapat memilih jenis garis atau anak
panah, tebal tipisnya suatu garis dapat dilihat pada Gambar 2.9.
dari menu. Tampilan awal dari aplikasi Balsamiq Mockups dapat dilihat pada
Gambar 2.10
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
3.2 Analisis
Pada tahap ini akan dilakukan analisis masalah, analisis sistem,
pengumpulan data, dan analisis kebutuhan fungsional serta non-fungsional.
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.
Gambar 3.1 Tahapan Pengolahan Data [Brata Mas Pintoko & Kemas Muslim L.,
2018]
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
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
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
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
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
negatif, dan skor sama dengan nol akan bernilai positif. Contoh dari hasil
klasifikasi dengan Lexicon Base dapat dilihat pada Tabel 3.4
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
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.
Kalimat di atas akan ditandai sebagai K1 dan K2 dalam contoh DTM pada
Tabel 3.7
K1 1 1 1 0
K2 1 1 0 1
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
Tepat waktu terima Kasih atas pelayanan yang diberikan kereta Summary
1 1 Positif
1 1 1 1 1 1 Positif
1 Negatif
Negatif
48
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.
| |
Rumus = ( ) (4.1)
| |
= (4.3)
( )
49
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
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.
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.
3) Wordcloud
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.
2) Activity Diagram
Rancangan website yang dibuat dalam activity diagram dapat dilihat pada
Gambar 3.12
55
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
4) Deployment Diagram
1. Home
Bagian awal dari tampilan website yang berisikan informasi mengenai data
apa yang disajikan oleh website diilustrasikan seperti pada Gambar 3.15
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
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
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
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
6. Menu Visualisasi
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.
Gambar 4.1 Tahapan Pengolahan Data [Brata Mas Pintoko & Kemas Muslim L.,
2018]
64
65
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
Sumber : https://apps.twitter.com/
access token, dan access token secret yang akan digunakan untuk
mengkoneksikan nya dengan RStudio seperti pada Gambar 4.3
consumer_key <-'mhBvgMFEJbZX0QyWq0rXJCzPE'
consumer_secret'CnUve6PbfkWUuP9a2kNdKaTnf27t5HVWxDK734nraJKU
lvWEl4'
access_token<-
'937617648749199361ecamdSKi809lhrrTXN2GObBbH4lc4MY'
access_secret <-
'd2awAKvaufrBblxtKX2lFzJNAeg3Nco5kosulJyUrzfrM'
dibawah ini.
67
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
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
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 = stripWhitespace(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
require(plyr)
require(stringr)
require(katadasaR)
source berikut:
73
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
pp=sum(pos.matches)
nn = sum(neg.matches)
return (list1)
}, words.positive, words.negative)
score_new=lapply(list, `[[`, 1)
pp1=score=lapply(list, `[[`, 2)
nn1=score=lapply(list, `[[`, 3)
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
##create table
require(reshape)
test1=krlResult[[1]]
test2=krlResult[[2]]
test3=krlResult[[3]]
test1$text=NULL
test2$text=NULL
test3$text=NULL
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
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")
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)
1) 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.
table(nbc$Sentimen)
prop.table(table(nbc$Sentimen))
Hasil dari perhitungan probalitas field Sentimen dapat dilihat pada Gambar 4.7
78
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
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 :
commuterline_train
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
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 :
commuterline_test
nbc_test_labels
table( nbc_test_labels)
Hasil perhitungan probabilitas data latih dapat dilihat pada Gambar 4.10
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.
Pada tahap ini akan dilakukan pembobotan DTM (Document Term Matrix),
berikut adalah Sintaks dalam pembuatan DTM :
inspect(commuterlineDTM[1:5, 1:5])
inspect(commuterlineDTM)
commuterlineDTM_train
Selanjutnya membuat document term matrix untuk data uji dengan sintaks
sebagai berikut :
commuterlineDTM_test
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
length(frequent_words)
Hasil pencarian frekuensi kata yang paling sering muncul dapat dilihat pada
Gambar 4.14
84
commuterline_freq_word_train
commuterline_freq_word_test
Setelah itu melakukan finalisasi dengan membuat fungsi final untuk data
latih dan data uji. Berikut ini adalah penggalan sintaks fungsi final data latih :
data.frame(commuterline_train)
Setelah itu melakukan finalisasi dengan membuat fungsi final untuk data
uji. Berikut ini adalah penggalan sintaks fungsi final data uji :
commuterline_test
5) Tahap Pelatihan
system.time(commuterlineClassifier <-
naiveBayes(commuterline_train, nbc_train_labels, laplace =
1))
commuterlineClassifier
class(commuterlineClassifier)
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 :
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
Berikut ini adalah output dari fungsi table untuk melihat jumlah sentiment
kategori positif dan negatif yang dapat dilihat pada Gambar 4.21
Berikut ini adalah output dari fungsi prop.table yang dapat dilihat pada Gambar
4.22
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
2) Pie Chart
3) Wordcloud
require(wordcloud)
require(RColorBrewer)
Wordcloud pada program analisis sentiment ini dapat dilihat pada Gambar 4.30
dan 4.31
1. Home
Pada Gambar 4.32 merupakan antarmuka menu Home pada website yang
berisikan informasi mengenai apa yang dimuat pada website ini.
2. Data Tweets
tabItem(tabName ="dataset",
div(dataTableOutput("dataset"),style = "font-size:150%")),
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
tabPanel("Database
Positif",div(dataTableOutput("posilist"),style = "font-
size:150%")),
tabPanel("Database
Negatif",div(dataTableOutput("negalist"),style = "font-
size:150%")))),
4. Pre-Processing
tabItem(tabName ="prepro",
div(dataTableOutput("prepro"),style = "font-
size:150%")),
5. Analisis Sentimen
tabItem(tabName = "lexicon",tabsetPanel(type =
"tab",tabPanel("Hasil Sentimen",div(dataTableOutput("lexi"),style
= "font-size:150%")))),
6. Visualisasi
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")))))))
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)
conf.mat
106
Hasil dari perhitungan Confusion Matrix dapat dilihat pada Gambar 4.41
1. Akurasi
( )
Accuracy =
( )
Accuracy =
2. Error Rate
3. Presisi Positif
Pos. Precision =
Pos. Precision =
4. Presisi Negatif
Neg. Precision =
Neg. Precision =
5. Recall
Recall =
Recall =
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.
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
Brata Mas Pintoko, Kemas Muslim L. 2018. Analisis Sentimen Jasa Transportasi
Online pada Twitter Menggunakan Metode Naïve Bayes Classifier.
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.
http://repository.usu.ac.id/bitsream/handle/123456789/41908/Abstrack.pdf.
Diakses Tanggal 30 Juli 2019.
109
110
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.
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.
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
Pre-processing Data
#cleaning data
catch.error = function(x){
y = NA
L-1
2
# if not an error
if (!inherits(catch_error, "error"))
y = tolower(x)
return(y)}
#cleaning data
cleanTweets<- function(tweet){
# Case Fold
tweet = tolower(tweet)
# remove html links, which are not required for sentiment analysis
tweet = stripWhitespace(tweet)
cleanTweetsAndRemoveNAs<- function(Tweets) {
TweetsCleaned = TweetsCleaned[!is.na(TweetsCleaned)]
names(TweetsCleaned) = NULL
TweetsCleaned = unique(TweetsCleaned)
TweetsCleaned
databersih = cleanTweetsAndRemoveNAs(krlTweets)
write.csv(databersih, file =
'C:/Users/User/Documents/commuterline/cleandatatweets.csv',
row.names = F)
4
require(tm)
commuterlineCorpus <- Corpus(VectorSource(nbc$Text))
print(commuterlineCorpus)
inspect(commuterlineCorpus)
#Buat DTM
commuterlineDTM <- DocumentTermMatrix(commuterlineCorpus)
inspect(commuterlineDTM[1:5, 1:5])
inspect(commuterlineDTM)
frequent_words
length(frequent_words)
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)
library("caret")
6
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
#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")
##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)
ui.R
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")),
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",
tags$img(src="WCP.png",height=320, width=320),
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
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 Database
14
Tampilan Pre-processing