BAB IV
HASIL DAN PEMBAHASAN
Bab ini mendeskripsikan pembahasan setiap tahap dan hasil yang diperoleh dari penelitian, mulai dari Pengumpulan data, preprocessing data, klasifikasi data dan juga evaluasi sebagai tahap akhir.
4.1 Pengumpulan Dataset
Data didapatkan dari hasil proses Crawling, crawling merupakan proses pengumpulan data dari media sosial twitter dengan melakukan pencarian melalui suatu kata kunci (keywords) tertentu. Pada proses crawling ini menggunakan library twitter scrapper dengan kata kunci
@citilink, citilink . data yang di proses sebasar 2000 data. Berikut kode crawling pada library twitter scrapper sebagaimana gambar 9.
Crawling data dengan library twitter srapper harus terhubung dengan jaringan internet. Berikut hasil data crawling sebagaiman gambar 10.
Twitterscrapper “@citilink” –output citilink.csv –limit 2000 –beginddate 2018- 11-1 –enddate 2019-2-2 –csv
Gambar 9. Kode Crawling Dataset
Gambar 10. Data Tweet Hasil Crawling
Diatas adalah contoh hasil dari pengambilan dokumen, data tweet hasil crawling, yang disimpan langsung dengan format csv, dan juga dapat dijadikan format excel. Data akan diklasifikasi secara manual dengan memberikan label positif atau negatif. Klasifikasi label positif dan negatif pada dataset dilakukan secara manual dengan bantuan kata-kata besar (big og words) sebagai kamus. Berikut dataset yang telah diklasifikasi, seperti pada gambar 11.
Gambar 11. Dataset
Diatas adalah dokumen yang telah diklasifikasi secara menual dengan memberikan label positif atau negatif yang akan dijadikan data uji pada penelitian ini.
4.3 Prepocessing Data
Dataset yang telah diklasifikasi secara manual, selanjutnya akan dilakukaan proses preprocessing. Proses ini membaca setiap kata dari dokumen. Berikut penjelasan dari proses preprocessing, dan kode setiap tahap-tahap pada prose tersebut :
a) Case Folding
Tahap case folding merupakan teknik penyamaan huruf pada data tweet dengan mengubah huruf kapital jadi huruf kecil, supaya
merenggangkan kata yang berlebih-lebihan dikerenakan perbedadaan huruf, dan akan menghasilkan dokumen tweet baru. Berikut kode pada proses case folding terlihat pada gambar 12.
b) Cleansing
Tahap cleansing adalah proses yang bertujuan untuk menghilangkan tweet dari kata yang kurang dibutukan seperti simbol HTML, kata kunci, hastags(#), username, email dan simbol (!@#%<>[]=;:”,’&^$*+_-/?), yang akan menghasilkan dokumen tweet baru. berikut kode pada proses cleansing terdapat pada gambar 13.
C) convert Negation
$term = preg_split("/[\d\W\s]+/", strtolower($new_data[$x]['text']));
$new_data = array();
$i = 0;
$j = 0;
if($data != NULL){
if($data[0]==1){
// looping foreach($data[1] AS $row){
$string = $row['B'];
$regex = "@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@";
$data = preg_replace($regex, ' ', $string);
$data2 = preg_replace($regex, ' ', $data);
$text = $data2 . '';
$new_data[$j]['text'] = $text.'';
$new_data[$j]['class'] = $row['C'];
$i++;
$j++;
} }
Gambar 12. Kode Proses Case Folding
Gambar 13. Kode Proses Cleansing
c) Convert Negation
Proses convert negation bertujuan untuk transformasi kata negasi yang tergabung dalam tweet. Kata tersebut akan mengganti arti suatu sentimen pada tweet tersebut, kata negasi akan tergabung dengan kata setelahnya. Contoh kata negasi ’tidak’, banyak lagi kata negasi yang akan menghasilkan dokumen tweet baru, dan akan memberikan pengaruh terhadap proses klasifikasi dengan metode naïve bayes pada penelitian ini.
Berikut kode proses convert negation seperti pada gambar 14.
d) Stopword Removal
Stopword Removal, yakni teknik yang bertujuan untuk menghapus kata didalam dokumen dataset, kata tersebut seperti “di”, “ke”, “dari”,
“yang”, “sedang”, “ini”, karena dianggap tidak memberikan deskripsi sesuatu dalam bahasa Indonesi. Tapi pada teks klasifikasi kata semacam
$positive_words_path = "positive-words.txt";
$negative_words_path = "negative-words.txt";
$negation_words_path = "negation.txt";
$pw = file_get_contents($positive_words_path);
$nw = file_get_contents($negative_words_path);
$ne = file_get_contents($negation_words_path);
$pw = preg_split('/\s+/', $pw);
$nw = preg_split('/\s+/', $nw);
$ne = preg_split('/\s+/', $ne);
Gambar 14. Kode Proses Convert Negation
“tidak”, “bukan”, “tanpa” kurang penting sehingga kata tersebut tidak ikut dibuang. Berikut kode pada proses tersebut terdapat pada gambar 15.
4.5 Klasifikasi Naïve Bayes
Pada penelitian klasifikasi dengan metode Naïve Bayes diperlukan nilai (bobot) pada setiap kata dalam dokumen dataset yang akan diproses.
$stopwords = file_get_contents("./stopwords_en.txt");
$stopwords = preg_split("/[\s]+/", $stopwords);
$data_unclassified = [];
$data_classified = [];
$confussion_matrix = [ 'positive' => [
'positive' => 0, 'negative' => 0 ],
$totalP = 2006/6789;
$totalN = 4783/6789;
$classified['text'] = $new_data[$x]['text'];
$is_negation = 0;
foreach($term as $key => $val){
// check negation handling if(in_array($key, $ne)){
$is_negation = 1;
continue;
}
Gambar 15. Kode Proses Stopword Removal
Nilai (bobot) diperoleh dengan menghitung peluang (probabilitas) positif atau negatif terhadap kata dalam setiap dokumen dataset. Penghitungan peluang (probabilitas) positif dilakukan dengan kode pada gambar 16.
Gambar 16. kode Penghitungan Probabilitas Positif
Penghitungan peluang (probabilitas) positif bertujuan untuk menghitung nilai (bobot ) pada tiap kata dalam dokumen dataset. Data yang diperlukan dalam penghitungan ini berupa banyaknya kata berkategori positif, kemunculan tiap kata dalam dokumen yang berkategori positif, dan total keseluruhan kata. Nilai tersebut nantinya akan dipakai pada klasifikasi naïve bayes akan berpengaruh dalam menentukan besarnya akurasi yang menjadi parameter kebenaran pada penelitian ini.
Selanjutnya akan menghitung peluang (probabilitas) negatif dengan kode pada gambar 17.
if((in_array($key, $pw) && !$is_negation) || (in_array($key, $nw) &&
$is_negation)){
$classified['term'][$key]['positive'] =
pow(((2+$is_negation)/($countDataset+$countPw)), $val);
} else {
$classified['term'][$key]['positive'] = 1/($countDataset+$countPw);
}
$totalP *= $classified['term'][$key]['positive'];
Gambar 17. Kode Penghitungan Probabilitas Negatif
Penghitungan peluang (probabilitas) negatif bertujuan untuk menghitung nilai (bobot ) pada tiap kata dalam dokumen dataset. Data yang diperlukan dalam penghitungan ini berupa banyaknya kata berkategori negatif, kemunculan tiap kata dalam dokumen yang berkategori negatif, dan total keseluruhan kata. Nilai tersebut nantinya akan dipakai pada klasifikasi naïve bayes akan berpengaruh dalam menentukan besarnya akurasi yang menjadi parameter kebenaran pada penelitian ini.
Penghitungan nilai (bobot) diatas merupakan proses dimana harus dilakukan karena pada klasifikasi naïve bayes nilai (bobot) tersebut sangat dibutuhkan. Setelah proses penghitungan diatas, selanjutnya akan dilakukan klasifikasi. Berikut kode bisa dilihat pada gambar 18.
if((in_array($key, $nw) && !$is_negation) || (!in_array($key, $nw) &&
$is_negation)){
$classified['term'][$key]['negative'] =
pow(((2+$is_negation)/($countDataset+$countNw)), $val);
} else {
$classified['term'][$key]['negative'] = 1/($countDataset+$countNw);
}
$totalN *= $classified['term'][$key]['negative'];
if($is_negation) $is_negation = 0;
if((in_array($key, $pw) && !$is_negation) || (in_array($key, $nw) &&
$is_negation)){
$classified['term'][$key]['positive'] =
pow(((2+$is_negation)/($countDataset+$countPw)), $val);
} else {
$classified['term'][$key]['positive'] = 1/($countDataset+$countPw);
}
$totalP *= $classified['term'][$key]['positive'];
if((in_array($key, $nw) && !$is_negation) || (!in_array($key, $nw) &&
$is_negation)){
$classified['term'][$key]['negative'] =
pow(((2+$is_negation)/($countDataset+$countNw)), $val);
} else {
$classified['term'][$key]['negative'] = 1/($countDataset+$countNw);
}
$totalN *= $classified['term'][$key]['negative'];
if($is_negation) $is_negation = 0;
}
$classified['positive'] = $totalP;
$classified['negative'] = $totalN;
$classified['actual'] = $new_data[$x]['class'];
$classified['difference'] = abs($totalP - $totalN);
if($totalP > $totalN){ $classified['predicted'] = 'positive';
} else {
$classified['predicted'] = 'negative'; }
$confussion_matrix[$new_data[$x]['class']][$classified['predicted']]++;
array_push($data_classified, $classified);
}
echo "Unclassified : ". count($data_unclassified);
echo "</br >";
echo "Classified : ". count($data_classified);
echo "</br >"; }
Gambar 18. Klasifikasi Naive Bayes
Klasifikasi sentimen dengan naïve bayes dilakukan dengan cara membandingkan nilai (bobot) kata pada dokumen dalam dataset. Bila nilai (bobot) kata peluang (probabilitas) yang berkategori positif lebih banyak maka hasil sentimennya positif, bila nilai (bobot) kata peluang (probabilitas) yang berkategori negatif maka hasil sentimennya negatif Semua dokumen dataset akan diklasifikasi bila ditemukan nilai (bobot) pada tiap kata di dokumen dataset, dan data tidak terklasifikasi bila tidak ditemukan nilai (bobot) pada tiap kata di dokumen dataset.
4.6 Evaluasi
Evaluasi menjadi parameter keberanan dalam suatu penelitian, menghitung seberapa besar akurasi yang akan didapat. Berikut kode dari proses evaluasi pada gambar 19.
<td style="font-weight: bold;">Positive</td>
<td><?= $positive = $confussion_matrix['positive']['positive'] ?></td>
<td><?= $confussion_matrix['positive']['negative'] ?></td>
<td style="font-weight: bold;"><?= $actual_positive = $confussion_matrix['positive']['positive'] +
$confussion_matrix['positive']['negative'] ?></td></tr><tr>
<td style="font-weight: bold;">Negative</td>
<td><?= $confussion_matrix['negative']['positive'] ?></td>
<td><?= $negative = $confussion_matrix['negative']['negative'] ?></td>
<td style="font-weight: bold;"><?= $actual_negative = $confussion_matrix['negative']['positive']
+ $confussion_matrix['negative']['negative'] ?></td></tr><tr>
<td style="font-weight: bold;">Total</td>
<td style="font-weight: bold;"><?= $pos = $confussion_matrix['positive']['positive'] +
$confussion_matrix['negative']['positive'] ?></td>
<td style="font-weight: bold;"><?= $neg = $confussion_matrix['positive']['negative'] +
$confussion_matrix['negative']['negative'] ?></td>
<td style="font-weight: bold;"><?= $total = $pos + $neg ?></td></tr>
Gambar 19. Kode Penghitungan Confussion Matrix
Penghitungan confusision matrix berdasarkan rumus yang tercantum pada tabel 7.
4.7 Implementasi
Implementasi pada penelitian ini dilakukan dengan kode PHP, berupa halaman utama yang berisi menu untuk mengakses data untuk di upload yang akan langsung diproses, menghasilkan hasil penghitungan probabilitas data, dan hasil akurasi dari peneletian. Berikut tampilan halaman utama pada gambar 20.
Gambar 20. Halaman Utama
Pada halaman ini kita bisa mengakses data dari komputer, tombol upload untuk memproses data yang telah dipilih. Berikut gambaran mangakses data dari komputer terdapat pada gambar 21.
Gambar 21. Proses Mengakses Data dari Komputer
Diatas adalah proses mengakses data untuk dipilih dengan memilih tombol open. Dan data akan langsung diproses yang menghasilkan hasil dari penghitungan. Berikut hasil proses pada gambar 22.
Gambar 22. Hasil Proses Data
Dalam proses ini menampilkan jumlah kemunculan pada setiap kata, menampilkan hasil penghitungan probabilitas sentimen positif dan probabilitas sentimen negatif pada semua dokumen.
4.7 EVALUASI
Evaluasi sebagai acuan dalam penelitain ini. Parameter yang digunakan untuk penghitungan akurasi yaitu penghitungan dari tabel confusion matrix yang terdapat pada gambar 23.
Gambar 23. Confussion Matrix
Diatas adalah gambar dimana data tweet sudah terklasifikasi, akan dihitung untuk melihat akurasi yang akan didapat sebagai acuan dari kebenaran pada penelitian ini.
Gambar 24. Hasil Evaluasi
Evaluasi dilakukan sebagai parameter dari kebenaran dalam penelitian ini, dengan akurasi perhitungan dari tabel confusion matrix (matriks klasifikasi). Untuk menghitung akurasi, precision, recall. Akurasi
yang didapat mencapai 0.778 dengan waktu proses dua menit dua puluh tiga detik. Nilai akurasi adalah tingkat keberhasilan klasifikasi dari semua data.
Precision adalah data actual positif yang diprediksi benar. Recall untuk mengukur keberhasilan klasifikasi yang diprediksi dengan benar.