Anda di halaman 1dari 38

152

BAB V
KESIMPULAN DAN SARAN

5.1 Kesimpulan
Berdasarkan hasil analisis dan pembahasan yang telah dijelaskan penulis pada
bagian intreprestasi hasil, maka diperoleh beberapa simpulan sebagai berikut.

1. Berdasarkan analisis deskriptif terhadap tweet calon presiden Indonesia


2024 yang dilakukan oleh Netizen pada Media Social Twitter, data tweet
pada hasil penggambaran umum mengenai data analisis sentimen
menunjukan hasil bahwa netizen media social twitter terhadap topic
penelitian memberikan opini yang baik atau sentiment yang positif. Pada
analisis deskriptif diperoleh informasi, bahwa dari data tweet yang diambil
dari hasil crawling, Netizen di media social twitter lebih banyak
mengungkapkan opininya lebih condong kearah yang positif yakni untuk
data tweet yang memiliki sentimen positif 356 data tweet Sedangkan untuk
data tweet yang memiliki sentimen negatif sebesar 169 data tweet yang
diungkapan oleh netizen melalui media social twitter.

2. Penerapan metode klasifikasi Naïve Bayes Classifier dalam


pengklasifikasian sentimen positif dan sentimen negatif pada data tweet
netizen di media social twitter terhadap Calon Presiden Indonesia 2024,
pada masing-masing ke empat scenario yakni 60:40, 70:30, 80:20 dan 90:10
penulis melakukan pengukuran nilai akurasi dengan machine learning
dengan menghasilkan klasifikasi sebesara 69,20%, 69.47%, 70.23% dan
70,76%.

Pada skenario 1 dengan 60 % data latih atau 315 tweet dan 40% data uji
atau 210 tweet dengan menghasilkan 69,20%. Skenario 2 dengan 70 % data
latih atau 367 tweet dan 30% data uji atau 158 tweet menghasilkan
153

klasifikasi 69,47%. Skenario 3 dengan 80 % data latih atau 420 tweet dan
20% data uji atau 105 tweet menghasilkan 70,23%. Kemudian pada
skenario 4 dengan 90 % data latih atau 472 tweet dan 10% data uji atau 53
tweet menghasilkan klasifikasi 70,76%. Nilai akurasi tersebut menunjukkan
bahwa metode Naïve Bayes Classifier memiliki klasifikasi sentiment yang
cukup baik.

3. Untuk Meningkatkan Hasil Akurasi dari analisis klasifikasi dengan


menambah Data Training Dan Uji pada penelitian bisa mendapatkan lebih
dari 2000 tweet dikarenakan pada tahapan seleksi data tweet yang duplikasi
dan banyak akun bot sehingga pada saat data uji yang dimasukkan tidak
dikenali pada data training Semakin banyak data training yang digunakan
maka semakin tinggi akurasi dari pengujian klasifikasi yang dihasilkan dan
ketepatan sistem dalam mengenali data uji akan lebih baik karena machine
learning mampu mengenali banyak kalimat dan kosakata yang bervariasi
yang dijadikan sebagai pembelajaran machine learning.

4. Visualisasi data dari hasil klasifikasi yang dilakukan.

Penulis menggali informasi berupa data tweet yang paling sering


didiskusikan oleh tweet netizen pada media social twitter mengenai Calon
Presiden Tahun 2024. representasi visual dari data yang mencantumkan
sejumlah kata penting yang sering muncul dalam data dengan menggunakan
word cloud.

A. Word cloud sentimen positif untuk data tweet positif, diketahui ada
beberapa kata-kata yang paling sering muncul diantaranya: Calon, Presiden,
ganjar pranowo, Ridwan kamil, puan, ganjar, pranowo, Indonesia, dukung,
Indonesia, pilpres, wakil, presiden dan lainnya.
154

B. Word cloud sentimen negatif untuk data tweet pada media social twitter,
diketahui ada beberapa kata-kata yang paling sering muncul diantaranya:
Calon, Presiden, nasdem, cebong, pilpres, pemilu, anies, Prabowo, ganjar
pranowo, Indonesia, Jokowi, Cebong, bodoh dan Lainya.
155

5.2 Saran
Berdasarkan hasil penelitian yang telah dilakukan maka ada beberapa saran yang
disampaikan diantaranya sebagai berikut.

1. Dalam penelitian ini menggunakan data dengan 2 Variabel Independent,


yaitu Datetime, Tweet Id dan Tweet Dan Username sedangkan untuk
Variabel dengan hasil labeling yakni Sentimen Positif, Netral dan Negatif.
Untuk penelitian selanjutnya, pembaca dapat menggunakan variabel yang
lebih banyak, agar dapat semakin banyak variabel yang dapat dianalisis
deskriptif.

2. Untuk Melakukan Tahapan Preprocessing khususnya pada tahapan


Formalisasi pembaca harus lebih cermas dan teliti saat melakukan
pembuatan slangword untuk merubah kata yang belum baku seperti yang
memiliki singkatan dan kata Bahasa gaul dengan menyesuaikan semua data
tweet yang diambil. Pada tahapan ini berdasarkan kata baku untuk pengubah
penggunaan kata tidak baku menjadi baku sesuai dengan KBBI sehingga
pada visualisasi data pada menvisualisasikan kata-kata lebih tepat sesuai
dengan KBBI.

3. Pada Saat proses pelabelan sentimen, sebaiknya lebih banyak lagi orang
yang melabeling (anatator) sehingga pembagian data lebih sedikit sehingga
orang yang melabeli dapat focus melabeling dengan cermat hasil data tweet
ketika menjumpai kaimat awal dan akhir pada proses labeling memudahkan
seorang anatator sehingga hasil labeling dan seleksi data maksimal.

4. Dalam penelitian ini penulis menggunakan data tweet yang diambil pada
tanggal 01 Agustus 2022 s/d 1 November 2022 dengan jumlah tweet data
sebesar adalah 2000 tweet. Untuk penelitian selanjutnya, dapat
menggunakan jumlah data training yang lebih banyak, agar semakin tinggi
akurasi dari pengujian klasifikasi yang dihasilkan dan ketepatan sistem
dalam mengenali data uji akan lebih baik karena machine learning mampu
156

mengenali banyak kalimat dan kosakata yang bervariasi yang dijadikan


sebagai pembelajaran machine learning.

5. Sebagai pertimbangan pembaca bisa mencoba melakukan eksperimen


dengan metode klasifikasi lainya seperti Support Vector Machine (SVM),
K-Nearest Neighbor (K-NN) Random Forest, Decision Tree dan Logistic
Regression dikarenakan dalam beberapa tinjauan studi terdahulu salah satu
metode tersebut memiliki nilai akurasi yang cukup baik bisa
dipertimbangkan untuk menjadi salah satu algoritma yang digunakan untuk
menganalisis sentimen dari media social twitter.
157

DAFTAR PUSTAKA

Neves, L., Silva, V., Barbieri, F., (2022). “Twitter Topic Classification”.
Jurnal Cardiff University. arXiv:2209.09824v1. DOI :
https://doi.org/10.48550/arXiv.2209.09824

Agastya, I. M. A., (2018) "Pengaruh Stemmer Bahasa Indonesia Terhadap


Peforma Analisis Sentimen Terjemahan Ulasan Film." Jurnal Tekno Kompak, vol.
12, no. 1, 15 Feb. 2018, pp. 18-23, doi:10.33365/jtk.v12i1.70.

Sulastri, S., & Diartono, D. A. (2019). Analisa Jejaring Sosial Twitter


Menggunakan Klastering K-Means dan Hirarki Agglomeratif.

Medhat, W., Hassan, A,. Korashy, H., (2014). “Sentiment analysis algorithms and
applications: A survey”. Ain Shams Engineering Journal. doi :
https://doi.org/10.1016/j.asej.2014.04.011

Wongkar, M & Angdresey, A., (2019). "Sentiment Analysis Using Naive


Bayes Algorithm Of The Data Crawler: Twitter," 2019 Fourth International
Conference on Informatics and Computing (ICIC), 2019, pp. 1-5, doi:
10.1109/ICIC47613.2019.8985884.

Pravina, A.M., Cholissodin, I., Adikara, P.P., (2019). Analisis Sentimen


Tentang Opini Maskapai Penerbangan pada Dokumen Twitter
Menggunakan Algoritme Support Vector Machine (SVM). Jurnal
Pengembangan Teknologi Informasi dan Ilmu Komputer, Vol 3, pp 2789-
2797. https://j-ptiik.ub.ac.id/index.php/j-ptiik/article/view/4793
158

Hidayat, E.Y., Hardiansyah, R.W., & Affandy, (2021). “Analisis Sentimen


Twitter untuk Menilai Opini Terhadap Perusahaan Publik Menggunakan
Algoritma Deep Neural Network”. Jurnal Nasional Teknologi dan Sistem
Informasi, Vol 7 no 2. Pp 108-118 .
doi:10.25077/TEKNOSI.v7i2.2021.108-118

Setiawan,E.P. & Ismurjanti (2018). Penggunaan Internet sebagai sumber


informasi dalam penyusunan karya ilmiah Siswa SMA Negeri 8 Yogyakarta.
Jurnal Kajian Informasi & Perpustakaan. Vol. 6, No. 2. Pp.170-182.
https://doi.org/10.24198/jkip.v6i2.18590

Dainamang, S.A., Hayarin, N., Chandranegara, D.R., (2021). “Analisis Sentimen


Media Sosial Twitter Terhadap RUU Omnibus Law dengan Metode Naïve Bayes
dan Particle Swarm Optimization“. Jurnal Komputika Sistem Komputer. Vol 11
no 2. pp 211-218. Doi : https://doi.org/10.34010/komputika.v11i2.6037

Darwis, D., Siskawati, N., Abidin, Z,, (2021). “Penerapan Algoritma Naive
Bayes untuk Analisis Sentimen Review Data Twitter BMKG Nasional”. Journal
Teknokompak. Volume 15(1) DOI: https://doi.org/10.33365/jtk.v15i1.744

Priyo Sutopo, D. C. Z. A., (2016). SISTEM INFORMASI EKSEKUTIF


SEBARAN PENJUALAN. Jurnal Informatika Mulawarman, Volume 1, pp.
23-28. DOI http://dx.doi.org/10.30872/jim.v11i1.199.

Seno, D.W., & Wibowo, A., (2019). “Analisis Sentimen Data Twitter
Tentang Pasangan Capres-Cawapres Pemilu 2019 Berbasis Metode Lexicon Dan
159

Support Vector Machine”. Jurnal Ilmiah FIFO. Volume 11(2), pp.144-145. DOI:
http://dx.doi.org/10.22441/fifo.2019.v11i2.004

Padli, H., (2019). “PENGATURAN MASA JABATAN PRESIDEN


SUATU UPAYA MENEGAKAN PRINSIP KONSTITUSIONALISME DI
INDONESIA”. Jurnal Kertha Semaya. Vol 9(10). pp.1796-1808. DOI:
https://doi.org/10.24843/KS.2021.v09.i10.p06.

Fitriyyah, S.N.J., Safriadi, N., Pratama, E.E., (2019) “Analisis Sentimen


Calon Presiden Indonesia 2019 dari Media Sosial Twitter Menggunakan Metode
Naive Bayes”. Jurnal Edukasi dan Penelitian Informatika. Vol 5(3) . p.279-285.
DOI : http://dx.doi.org/10.26418/jp.v5i3.34368

Wahyudi, H.,(2018). “ANALISIS FAKTOR-FAKTOR YANG


DIPERTIMBANGKAN NETIZEN DALAM MELAKUKAN TRANSAKSI E-
COMMERCE DI KOTA PONTIANAK”. Jurnal Ekonomi Integra. Vol 7(1) .
pp.50-69. DOI: https://doi.org/10.51195/iga.v7i1.111

Farhan, M.A (2022) “Application of Presidential Threshold In Indonesia And


Comparison With Several Countries”. Jurnal Wacana Hukum dan sains” Vol.
18(1). pp. 56 – 67. DOI: https://doi.org/10.55173/yurisdiksi.v18i1.124.

Frederick, Brian and Elder, Laurel. (2022) "Public Opinion and the Candidate
Spouses in the 2020 Democratic Presidential Primary" The Forum, vol. 20, no. 2,
2022, pp. 275-292. https://doi.org/10.1515/for-2022-2056.
160

Ahuja, V., Shakeel, M., (2021). “Twitter Presence of Jet Airways-Deriving


Customer Insights Using Netnography and Wordclouds”. Procedia Computer
Science. Volume 122. P.17-24. DOI:
https://doi.org/10.1016/j.procs.2017.11.336.

Sari, F., & Wibowo, A. (2019). Analisis Sentimen Pelanggan Toko Online jd.id
Menggunakan Metode Naïve Bayes Classifier Berbasis Konversi Ikon
Emosi. Simetris: Jurnal Teknik Mesin, Elektro dan Ilmu Komputer, 10(2), 681-
686. doi:https://doi.org/10.24176/simet.v10i2.3487

Mardi, Y. (2017). Data Mining: Klasifikasi Menggunakan Algoritma C4. 5. Edik


Informatika , 213-219.

Ceswell, John W.. (2010). Research Design John W. Creswell. Yogyakarta: John
W. Creswell.

Sugiyono. (2014.). Metode Penelitian kuantitatif, kualitatif dan R & D / Sugiyono.


Bandung :: Alfabeta,.

Mohssen Mohammed, Muhammad Badruddin Khan, & Eihab Bashier


Mohammed Bashier. (2017). Machine Learning : Algorithms and Applications.
CRC Press.

Sukmadinata, N. S. (2009). Metode Penelitian Pendidikan. Bandung: Rosdakarya


161

LAMPIRAN

Lampiran 1. Script Crawling Data Tweet

1. Mengimpor Library

import snscrape.modules.twitter as sntwitter


import pandas as pd
import re

2. Crawling Data

def clean_tweet(tweet):
return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-
9A-Za-z \t])|(\w+:\/\/\S+)", " ", tweet).split())

# Membuat array untuk menambahkan data tweet ke


tweets_list = []

#Menggunakan TwitterSearchScraper untuk sortir


data dan menambahkan tweet ke array
for i,tweet in
enumerate(sntwitter.TwitterSearchScraper('Calon
Presiden 2024 & Calon Presiden since:2022-08-01
until:2022-11-01').get_items()):
if i>=2000:
break
tweets_list.append([tweet.date, tweet.id,
tweet.content, tweet.user.username])

# Membuat kerangka data dari daftar tweet di atas


tweet = pd.DataFrame(tweets_list,
162

columns=['Datetime', 'Tweet Id', 'Tweet',


'Username'])

#Melihat Data Tweet yang diambil


tweet

#Mengubah file menjadi CSV DAN XLSX


frames = [tweet]
hasil =
pd.concat(frames).drop_duplicates().reset_index(
drop=True)

hasil.to_csv(r'hasilcrawling.csv', index=False)

tweet = pd.read_csv('hasilcrawling.csv')

tweet = pd.DataFrame(tweet)
tweet.to_excel ('hasilcrawling.xlsx', index =
False, header=True)
163

Lampiran 2. Proses Labeling Data Tweet

Link:
https://docs.google.com/spreadsheets/d/19bWE_9LoSTZa4KlAf2h8QgenlsmXzG
OeFxkIJWP__qk/edit?usp=sharing
164

Lampiran 3. Script Analisa Data pada Data Tweet

1. Analisis Deskriptif
import pandas as pd
df = pd.read_excel("filepreprocessing.xlsx")
df.head(10)

#melihat banyak sentimen dari tiap sentimen


df.groupby('Label').describe()

#Analisis Deskriptif
df = pd.read_excel('filepreprocessing.xlsx')

df.sort_index(inplace=True)
df.sample(n=10)
165

#melihat distribusi banyak ulasan berdasar rating


import matplotlib.pyplot as plt
_, ax1 = plt.subplots(figsize=(7,6))
stars_histogram =
df['Label'].value_counts().sort_index()
stars_histogram.plot(kind='bar', width=0.7,
color='yellow')
plt.xlabel('Sentimen')
plt.ylabel('jumlah Sentimen')
plt.tight_layout()
plt.show()
166

2. Teks Preprocessing
Load Data

import pandas as pd
tweets = pd.read_csv('hasilseleksi.csv')
tweets.head()

Cleansing

import re
def cleaningulasan(tweets):
#menghapus mention, link, hashtag
tweets = re.sub(r'@[A-Za-a0-9]+',' ',tweets)
tweets = re.sub(r'#[A-Za-z0-9]+',' ',tweets)
tweets = re.sub(r"http\S+",' ',tweets)
tweets = re.sub(r'[0-9]+',' ',tweets)
tweets = re.sub(r"[-()\"#/@;:<>{}'+=~|.!?,_]",
" ", tweets)
tweets = tweets.strip(' ')
return tweets
tweets['Cleaning']=
tweets['Tweet'].apply(cleaningulasan)

#menghapus non ASCII (emoticon, chinese word,


.etc)
def clearEmoji(tweets):
167

return tweets.encode('ascii',
'ignore').decode('ascii')
tweets['HapusEmoji']=
tweets['Cleaning'].apply(clearEmoji)

def replaceTOM(tweets):
pola = re.compile(r'(.)\1{2,}', re.DOTALL)
return pola.sub(r'\1', tweets)
tweets['3/Lebih']=
tweets['HapusEmoji'].apply(replaceTOM)

Case Folding

def casefoldingText(tweets):
tweets = tweets.lower()
return tweets
tweets['CaseFolding']=
tweets['3/Lebih'].apply(casefoldingText)

Tokenizing

import nltk
nltk.download('punkt')
from nltk.tokenize import word_tokenize
def tokenizingText(tweets):
tweets = word_tokenize(tweets)
return tweets
tweets['Tokenizing']=
tweets['CaseFolding'].apply(tokenizingText)

Formalisasi
168

def convertToSlangword(tweets):
kamusSlang = eval(open("slangwords.txt").read())
pattern = re.compile(r'\b( ' + '|'.join
(kamusSlang.keys())+r')\b')
content = []
for kata in tweets:
filterSlang = pattern.sub(lambda x:
kamusSlang[x.group()],kata)
content.append(filterSlang.lower())
tweets = content
return tweets

tweets['Formalisasi'] =
tweets['Tokenizing'].apply(convertToSlangword)

Stopword Removal
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords

daftar_stopword = stopwords.words('indonesian')
# ---------------------------- manualy add
stopword ------------------------------------
# append additional stopword
daftar_stopword.extend(["yg","dg","rt"])
daftar_stopword = set(daftar_stopword)

def stopwordText(words):
return [word for word in words if word not in
daftar_stopword]

tweets['Stopword Removal'] =
tweets['Formalisasi'].apply(stopwordText)
169

Stemming

from Sastrawi.Stemmer.StemmerFactory import


StemmerFactory
import swifter

factory = StemmerFactory()
stemmer = factory.create_stemmer()

def stemmed_wrapper(term):
return stemmer.stem(term)

term_dict = {}

for document in tweets['Stopword Removal']:


for term in document:
if term not in term_dict:
term_dict[term] = ' '

for term in term_dict:


term_dict[term] = stemmed_wrapper(term)
print(term,":" ,term_dict[term])

def stemmingText(document):
return [term_dict[term] for term in
document]

tweets['Stemming'] = tweets['Stopword
Removal'].swifter.apply(stemmingText)
170

Merubah File Menjadi CSV Dan Excel


tweet = pd.DataFrame(tweets)
tweet.to_excel ('filepreprocessing.xlsx', index = False,
header=True)
tweet.to_csv ('filepreprocessing.csv', index = False,
header=True)

3. Pembobotan Kata (TF-IDF)

MEMPLOT DATA YANG SERING MUNCUL


import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.read_csv('filepreprocessingutf.csv')

import difflib
#body_list = df['body'].tolist()
review_tweet_list = df['Stemming'].tolist()

#body = body_list
reviews = review_tweet_list
s = difflib.SequenceMatcher(None,
reviews).ratio()
print("Jumlah RRatio:", s,"\n")

def freq_words(x, terms = 30):


all_words = ' '.join([text for text in x ])
all_words = all_words.split()

fdist = FreqDist(all_words)
171

words_df =
pd.DataFrame({'word':list(fdist.keys()),
'count':list(fdist.values())})

# Memlihi 10 Data Kata Tweet yang sering


muncul
d = words_df.nlargest(columns="count",
n=terms)
plt.figure(figsize=(25,7))
ax = seaborn.barplot (data=d, x="word",
y="count")
ax.set(ylabel = 'Count')
plt.show()

# menampilkan 10 Data Tweet yang sering muncul


freq_words(df['Stemming'], 10)
172

PEMBOBOTAN KATA
from sklearn.feature_extraction.text import
CountVectorizer
from sklearn.feature_extraction.text import
TfidfTransformer
cver = CountVectorizer(stop_words='english',
min_df=1, max_df=.5, ngram_range=(1,2))
cver

from itertools import islice


from nltk.corpus import stopwords
global str

cver.fit(review_tweet_list)
list(islice(cver.vocabulary_.items(),20))

len(cver.vocabulary_)

hitung_cver = cver.transform(review_tweet_list)
print('sparse matrix shape:', hitung_cver.shape)
print('hitung nonzero:',hitung_cver.nnz)
print('sparsity: %.2f%%' % (100.0 * hitung_cver.nnz /
(hitung_cver.shape[0] * hitung_cver.shape[1])))

# menghitung frekuensi kemunculan term


occ =
np.asarray(hitung_cver.sum(axis=0)).ravel().tolist
()
hitung_df =
pd.DataFrame({'term':cver.get_feature_names(),
'kemunculan': occ})
hitung_df.sort_values(by='kemunculan',
ascending=False).head(20)
173
174

#JUMLAH TERM SETIAP DOKUMEN MELAKUKAN TFIDF TRANSFORMER


UNTUK MENGHITUNG
#BOBOT UNTUK SETIAP ISTILAH DALAM SETIAP DOKUMEN

transformer = TfidfTransformer()
transformer_weights =
transformer.fit_transform(hitung_cver)
transformer_weights

weights =
np.asarray(transformer_weights.mean(axis=0)).ravel().to
list()
weights_df =
pd.DataFrame({'term':cver.get_feature_names(),'Weight':
weights})
weights_df.sort_values(by='Weight',
ascending=False).head(20)
175

4. Pengujian Validasi

acc_score = cross_val_score(NB, x_train, y_train, cv=5,


scoring='accuracy')
pre_score = cross_val_score(NB, x_train, y_train, cv=5,
scoring='precision_macro')
rec_score = cross_val_score(NB, x_train, y_train, cv=5,
scoring='recall_macro')
f_score = cross_val_score(NB, x_train, y_train, cv=5, scoring='f1_macro')

5. Klasifikasi

Skenario 1

# MEMBACA DATA
import pandas as pd
df = pd.read_csv('filepreprocessingutf.csv')

#membagi data training dan data testing


from sklearn.feature_extraction.text import TfidfVectorizer,
CountVectorizer
from sklearn import model_selection
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder

X = df['Stemming']
Y = df['Label']

#Split data terbagi menjadi skema 60 Data Training 40 untuk


Data Test
x_train, x_test, y_train, y_test =
model_selection.train_test_split(X, Y, test_size=0.4)
vectorizer = TfidfVectorizer()
x_train = vectorizer.fit_transform(x_train)
x_test = vectorizer.transform(x_test)
Encoder = LabelEncoder()
176

y_train = Encoder.fit_transform(y_train)
y_test = Encoder.fit_transform(y_test)

#menghitung jumlah data training


len(y_train)

#menghitung jumlah data testing


len(y_test)

from sklearn.model_selection import cross_val_score


from sklearn import naive_bayes

NB = naive_bayes.MultinomialNB()
NB.fit(x_train,y_train)
y_pred = NB.predict(x_test) #prediksi

acc_score = cross_val_score(NB, x_train, y_train, cv=5,


scoring='accuracy')
pre_score = cross_val_score(NB, x_train, y_train, cv=5,
scoring='precision_macro')
rec_score = cross_val_score(NB, x_train, y_train, cv=5,
scoring='recall_macro')
f_score = cross_val_score(NB, x_train, y_train, cv=5,
scoring='f1_macro')

print('Hasil Accuracy : %s' % (acc_score))


print('Hasil Rata - Rata Accuracy : %s' % acc_score.mean())
print('Hasil Precision : %s' % (pre_score))
print('Hasil Rata - Rata Precision : %s' % pre_score.mean())
print('Hasil Recall : %s' % (rec_score))
print('Hasil Rata - Rata Recall : %s' % rec_score.mean())
print('Hasil F-Measure : %s' % (f_score))
print('Hasil Rata - Rata F-Measure : %s' % f_score.mean())
177

Skenario 2

# METODE KLASIFIKASI
# MEMBACA DATA
import pandas as pd
df = pd.read_csv('filepreprocessingutf.csv')

#membagi data training dan data testing


from sklearn.feature_extraction.text import TfidfVectorizer,
CountVectorizer
from sklearn import model_selection
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder

X = df['Stemming']
Y = df['Label']

#Split data terbagi menjadi skema 70 Data Training 30 untuk


Data Test
x_train, x_test, y_train, y_test =
model_selection.train_test_split(X, Y, test_size=0.3)
vectorizer = TfidfVectorizer()
x_train = vectorizer.fit_transform(x_train)
x_test = vectorizer.transform(x_test)
Encoder = LabelEncoder()
y_train = Encoder.fit_transform(y_train)
y_test = Encoder.fit_transform(y_test)
178

#menghitung jumlah data training


len(y_train)

#menghitung jumlah data testing


len(y_test)

from sklearn.model_selection import cross_val_score


from sklearn import naive_bayes

NB = naive_bayes.MultinomialNB()
NB.fit(x_train,y_train)
y_pred = NB.predict(x_test) #prediksi

acc_score = cross_val_score(NB, x_train, y_train, cv=5,


scoring='accuracy')
pre_score = cross_val_score(NB, x_train, y_train, cv=5,
scoring='precision_macro')
rec_score = cross_val_score(NB, x_train, y_train, cv=5,
scoring='recall_macro')
f_score = cross_val_score(NB, x_train, y_train, cv=5,
scoring='f1_macro')

print('Hasil Accuracy : %s' % (acc_score))


print('Hasil Rata - Rata Accuracy : %s' % acc_score.mean())
print('Hasil Precision : %s' % (pre_score))
print('Hasil Rata - Rata Precision : %s' % pre_score.mean())
print('Hasil Recall : %s' % (rec_score))
print('Hasil Rata - Rata Recall : %s' % rec_score.mean())
print('Hasil F-Measure : %s' % (f_score))
print('Hasil Rata - Rata F-Measure : %s' % f_score.mean())
179

Skenario 3

# METODE KLASIFIKASI
# MEMBACA DATA
import pandas as pd
df = pd.read_csv('filepreprocessingutf.csv')

#membagi data training dan data testing


from sklearn.feature_extraction.text import TfidfVectorizer,
CountVectorizer
from sklearn import model_selection
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder

X = df['Stemming']
Y = df['Label']

#Split data terbagi menjadi skema 80 Data Training 20 untuk


Data Test
x_train, x_test, y_train, y_test =
model_selection.train_test_split(X, Y, test_size=0.2)
vectorizer = TfidfVectorizer()
x_train = vectorizer.fit_transform(x_train)
x_test = vectorizer.transform(x_test)
Encoder = LabelEncoder()
y_train = Encoder.fit_transform(y_train)
y_test = Encoder.fit_transform(y_test)

#menghitung jumlah data training


len(y_train)

#menghitung jumlah data testing


len(y_test)
180

from sklearn.model_selection import cross_val_score


from sklearn import naive_bayes

NB = naive_bayes.MultinomialNB()
NB.fit(x_train,y_train)
y_pred = NB.predict(x_test) #prediksi

acc_score = cross_val_score(NB, x_train, y_train, cv=5,


scoring='accuracy')
pre_score = cross_val_score(NB, x_train, y_train, cv=5,
scoring='precision_macro')
rec_score = cross_val_score(NB, x_train, y_train, cv=5,
scoring='recall_macro')
f_score = cross_val_score(NB, x_train, y_train, cv=5,
scoring='f1_macro')

print('Hasil Accuracy : %s' % (acc_score))


print('Hasil Rata - Rata Accuracy : %s' % acc_score.mean())
print('Hasil Precision : %s' % (pre_score))
print('Hasil Rata - Rata Precision : %s' % pre_score.mean())
print('Hasil Recall : %s' % (rec_score))
print('Hasil Rata - Rata Recall : %s' % rec_score.mean())
print('Hasil F-Measure : %s' % (f_score))
print('Hasil Rata - Rata F-Measure : %s' % f_score.mean())
181

Skenario 4

# METODE KLASIFIKASI
# MEMBACA DATA
import pandas as pd
df = pd.read_csv('filepreprocessingutf.csv')

#membagi data training dan data testing


from sklearn.feature_extraction.text import TfidfVectorizer,
CountVectorizer
from sklearn import model_selection
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder

X = df['Stemming']
Y = df['Label']

#Split data terbagi menjadi skema 60 Data Training 40 untuk


Data Test
x_train, x_test, y_train, y_test =
model_selection.train_test_split(X, Y, test_size=0.3)
vectorizer = TfidfVectorizer()
x_train = vectorizer.fit_transform(x_train)
x_test = vectorizer.transform(x_test)
Encoder = LabelEncoder()
y_train = Encoder.fit_transform(y_train)
y_test = Encoder.fit_transform(y_test)

#menghitung jumlah data training


len(y_train)

#menghitung jumlah data testing


len(y_test)
182

from sklearn.model_selection import cross_val_score


from sklearn import naive_bayes

NB = naive_bayes.MultinomialNB()
NB.fit(x_train,y_train)
y_pred = NB.predict(x_test) #prediksi

acc_score = cross_val_score(NB, x_train, y_train, cv=5,


scoring='accuracy')
pre_score = cross_val_score(NB, x_train, y_train, cv=5,
scoring='precision_macro')
rec_score = cross_val_score(NB, x_train, y_train, cv=5,
scoring='recall_macro')
f_score = cross_val_score(NB, x_train, y_train, cv=5,
scoring='f1_macro')

print('Hasil Accuracy : %s' % (acc_score))


print('Hasil Rata - Rata Accuracy : %s' % acc_score.mean())
print('Hasil Precision : %s' % (pre_score))
print('Hasil Rata - Rata Precision : %s' % pre_score.mean())
print('Hasil Recall : %s' % (rec_score))
print('Hasil Rata - Rata Recall : %s' % rec_score.mean())
print('Hasil F-Measure : %s' % (f_score))
print('Hasil Rata - Rata F-Measure : %s' % f_score.mean())
183

6. Evaluasi Model

#Confusion Matrix
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_pred)

from sklearn.metrics import confusion_matrix


import seaborn as sns
import matplotlib.pyplot as plt

f, ax = plt.subplots(figsize=(8, 5))
sns.heatmap(confusion_matrix(y_test, y_pred), annot=True,
fmt=".0f", ax=ax)
class_label = ["negatif","positif"]
plt.xlabel("Predicted Label")
plt.ylabel("True Label")
plt.show()
184

Skenario 2

#Confusion Matrix
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_pred)

from sklearn.metrics import confusion_matrix


import seaborn as sns
import matplotlib.pyplot as plt

f, ax = plt.subplots(figsize=(8, 5))
sns.heatmap(confusion_matrix(y_test, y_pred), annot=True,
fmt=".0f", ax=ax)
class_label = ["negatif","positif"]
plt.xlabel("Predicted Label")
plt.ylabel("True Label")
plt.show()
185

Skenario 3

#Confusion Matrix
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_pred)

from sklearn.metrics import confusion_matrix


import seaborn as sns
import matplotlib.pyplot as plt

f, ax = plt.subplots(figsize=(8, 5))
sns.heatmap(confusion_matrix(y_test, y_pred), annot=True,
fmt=".0f", ax=ax)
class_label = ["negatif","positif"]
plt.xlabel("Predicted Label")
plt.ylabel("True Label")
plt.show()
186

Skenario 4

#Confusion Matrix
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_pred)

from sklearn.metrics import confusion_matrix


import seaborn as sns
import matplotlib.pyplot as plt

f, ax = plt.subplots(figsize=(8, 5))
sns.heatmap(confusion_matrix(y_test, y_pred), annot=True,
fmt=".0f", ax=ax)
class_label = ["negatif","positif"]
plt.xlabel("Predicted Label")
plt.ylabel("True Label")
plt.show()
187

7. Visualisasi Data

import matplotlib.pyplot as plt


import pandas as pd

#Read Data

df = pd.read_csv("filepreprocessingutf.csv")

df.sort_index(inplace=True)
df.sample(n=10)

sentiment_count = df["Label"].value_counts()
plt.pie(sentiment_count,
labels=sentiment_count.index,
autopct='%1.1f%%', shadow=True, startangle=140)
plt.show()
188

print("Jumlah tweets Negatif:


{}".format(df[df["Label"]=="Positif"].count()[0]))
print("Jumlah tweets Positif:
{}".format(df[df["Label"]=="Negatif"].count()[0]))

Word Cloud

#Import

pos_tweets = df[df["Label"]=="Positif"]
txt = " ".join(tweet.lower() for tweet in
pos_tweets["Stemming"])
wordcloud = WordCloud().generate(txt)
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()
189

neg_tweets = df[df["Label"]=="Negatif"]
txt = " ".join(tweet.lower() for tweet in
neg_tweets["Stemming"])
wordcloud = WordCloud().generate(txt)
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()

Anda mungkin juga menyukai