analisis sentimen

Analisis Sentiment Twitter Lexicon Hashtag #OleOut Susah Coy

Taufiksi – Astaga, saya mendapat tugas kuliah yang sangat susah yaitu analisis sentiment twitter lexicon pada mata kuliah pemrosesan bahasa alami.

Gila, susah banget asli dah mata kuliah ini. bikin pala pusing tujuh keliling. Mendingan saya nulis artikel kaya gini dari pada harus mikir tugas kuliah wkwk.

Tapi pada artikel ini saya hanya ingin memberikan dokumentasi untuk saya terhadap mata kuliah ini, supaya saya bisa membacanya lain waktu.

Ohh ya, sebelumnya saya juga mendokumentasikan tata cara crawling data twitter, nah di sini juga akan kita pakai cara tersebut.

Hanya untuk awalan aja karena proses crawling data ini proses yang harus di lewati. Mungkin bagi mahasiswa informatika yang ingin menjadi analist di perusahaan ini akan penting.

Mulai Online-kan Projectmu

Udah ngodingnya capek, tapi masih di localhost ? tenang, yang kamu perlukan hanya uploud project ke hosting agar bisa diakses orang lain. Beli hosting sekarang dan dapatkan domain gratis.

Beli Hosting

Ya begitulah, bukan mahasiswa IT jika tidak melakukan berbagai dosa sebagai mahasiswa seperti saya yang cukup malas untuk belajar wkwk.

Wah udah panjang ya hmm, kita lanjutkan basa basinya aja kali ya sebelum masuk ke tahap analisis sentiment twitter nya..

Apa Itu Analisis Sentiment

Analisis sentiment adalah sebuah tahap untuk menganalisis. Kita pecah dulu, sentiment sendiri itu adalah opini dan pendapat.

Nah jadi analisis sentiment menurut saya adalah menganalisis opini dan pendapat yang di lontarkan oleh semua orang. Analisis sentiment biasanya lebih cenderung bisa digunakan penelitian.

Seperti pada skripsi, biasanya skripsi menggunakan analisis sentiment twitter dan lain sebagainya.

Metodenya pun banyak sekali. Tidak hanya lexicon, ada yang menggunakan naive bayes, knn dan masih banyak lagi metode yang bisa di gunakan.

Apa Itu Lexicon

Lexicon jika di terjemahkan kedalam bahasa indonesia adalah kamus. Entahlah apakah bisa di gunakan sebagai acuan jika lexicon dalam dunia analisis sentiment berarti kamus juga ?

Namun yang jelas saya ketahui, lexicon itu adalah sebuah tahap untuk menganalisis sesuatu seperti naive bayes dan lain lain.

Jika ada salah, mohon jangan sungkan untuk mengoreksi, karena artikel ini hanya di gunakan untuk dokumentasi mata kuliah saya aja.

Proses Analisis Sentiment Twitter Lexicon

Ngga usah panjang panjang kali ya, langsung pada intinya. Proses analisis sentiment twitter menggunakan lexicon. Saya pun tidak tau ini benar atau salah.

Karena saya hanya mengikuti dosen dan ini merupakan hasil kerjaan saya yang saya implementasikan sendiri. Jadi misalnya tugasnya untuk meneliti hastag pon di artikel ini menggunakan hastag ole.

Begitulah, terus prosesnya ngapain aja ?

Crawling Data

Tahap pertama yang harus di lakukan adalah crawling data yang akan kita ambil adalah data dari twitter. Seperti yang sudah di jelaskan caranyanya crawling data gimana di artikel ini.

Import Dataset

Setelah kamu berhasil crawling data, kamu hanya tinggal mengimport datset yang tadi sudah di cari. Caranya memasukan code berikut ini.

import pandas as pd
# Membuat kerangka data panda
data = pd.read_csv('ponpapua.csv')
data.head()

Dropping Columns

Kamu bisa menghapus kolom yang tidak di perlukan seperti username, tanggal dan lain lain. Di sini yang kamu butuhkan hanya data twitternya saja.

# Hapus Kolom
mydata = data.drop(['id','date','user_id','user_id_str','username','name','day','hour','link','urls','photos','thumbnail','retweet','nlikes','nreplies','nretweets','quote_url','search','near','video','conversation_id','created_at','timezone','place','language','hashtags','cashtags','geo','source','user_rt_id','user_rt','retweet_id','reply_to','retweet_date','translate','trans_src','trans_dest'], axis=1)
mydata.head()

Yaps begitulah caranya dropping columns.

Cleaning Text

Proses ini di lakukan untuk menghapus tanda baca yang tidak di perlukan seperti pagar atau emoticon, bahkan sampai sama dengan akan kita bersihkan.

import re
# Tentukan fungsi untuk membersihkan teks

def clean(text):
 # Menghapus semua karakter khusus dan angka meninggalkan abjad
 text = re.sub('[^A-Za-z]+', ' ', text)
 return text

# Membersihkan teks di kolom ulasan
mydata['Cleaned Reviews'] = mydata['tweet'].apply(clean)
mydata.head()

Sudah seperti itu aja maka kamu berhasil membersihkan text.

Tokenization, POP Tagging, Stopwords Removal

Lalu kita akan masuk kedalam tahap tokenizing dan kawan kawannya. Saya pun tidak tau ini langkah sebenarnya untuk melakukan apa wkwk.

!pip install nltk
import nltk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')

from nltk.tokenize import word_tokenize
from nltk import pos_tag
nltk.download('stopwords')
from nltk.corpus import stopwords
nltk.download('wordnet')
from nltk.corpus import wordnet

# POS tagger dictionary
pos_dict = {'J':wordnet.ADJ, 'V':wordnet.VERB, 'N':wordnet.NOUN, 'R':wordnet.ADV}

def token_stop_pos(text):
 tags = pos_tag(word_tokenize(text))
 newlist =[]
 for word, tag in tags:
  if word.lower() not in set(stopwords.words('english')):
   newlist.append(tuple([word, pos_dict.get(tag[0])]))
  return newlist

mydata['POS tagged'] = mydata['Cleaned Reviews'].apply(token_stop_pos)
mydata.head()
# mydata['POS tagged'][0]

Ohh ya, jangan lupa di python ini spasi sangat berpengaruh, jadi akan mengakibatkan error yang sangat menyusahkan untuk di cari.

Lemmatization

Kemudian proses yang tidak saya tau apa itu wkwk, intinya begini proses untuk analisis sentiment twitter menggunakan lexicon.

from nltk.stem import WordNetLemmatizer
wordnet_lemmatizer = WordNetLemmatizer()

def lemmatize(pos_data):
    lemma_rew = " "
    for word, pos in pos_data:
        if not pos:
            lemma = word
            lemma_rew = lemma_rew + " " + lemma
        else:
            lemma = wordnet_lemmatizer.lemmatize(word, pos=pos)
            lemma_rew = lemma_rew + " " + lemma
    return lemma_rew

mydata['Lemma'] = mydata['POS tagged'].apply(lemmatize)
mydata.head()
# print(mydata['review'][239] + "\n" + mydata['Lemma'][239])
mydata[['tweet', 'Lemma']]

Analisis Sentiment using TextBlob

Setau saya mulai dari di sinilah tahap paling penting jika kamu ingin menganalisis sentiment. Karena mungkin ini adalah metode yang ada di dalam lexicon.

!pip install textblob

from textblob import TextBlob
# berfungsi untuk menghitung subjektivitas
def getSubjectivity(review):
    return TextBlob(review).sentiment.subjectivity

# fungsi untuk menghitung polaritas
def getPolarity(review):
    return TextBlob(review).sentiment.polarity

# berfungsi untuk menganalisis ulasan
def analysis(score):
    if score < 0:
        return 'Negative'
    elif score == 0:
        return 'Neutral'
    else:
        return 'Positive'

fin_data = pd.DataFrame(mydata[['tweet', 'Lemma']])
# fin_data['Subjectivity'] = fin_data['Lemma'].apply(getSubjectivity)
fin_data['Polarity'] = fin_data['Lemma'].apply(getPolarity)
fin_data['Analysis'] = fin_data['Polarity'].apply(analysis)
fin_data.head()
tb_counts = fin_data.Analysis.value_counts()
tb_counts
import matplotlib.pyplot as plt
%matplotlib inline

tb_count= fin_data.Analysis.value_counts()
plt.figure(figsize=(10, 7))
plt.pie(tb_counts.values, labels = tb_counts.index, explode = (0, 0, 0.25), autopct='%1.1f%%',shadow=False)
# plt.legend()

Analisis Sentiment Using Vader

Saya sudah tidak tau lagi apa yang bisa di jelaskan di sini wkw. Karena saya tidak tau apa apa tentang analisis sentimen tidak seperti teman saya yang jago jago.

!pip install vaderSentiment

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
analyzer = SentimentIntensityAnalyzer()
# berfungsi untuk menghitung sentimen vader
def vadersentimentanalysis(review):
 vs = analyzer.polarity_scores(review)
 return vs['compound']
fin_data['Vader Sentiment'] = fin_data['Lemma'].apply(vadersentimentanalysis)
# berfungsi untuk menganalisa
def vader_analysis(compound):
 if compound >= 0.5:
 return 'Positive'
 elif compound <= -0.5 :
 return 'Negative'
 else:
 return 'Neutral'

fin_data['Vader Analysis'] = fin_data['Vader Sentiment'].apply(vader_analysis)
fin_data.head()
vader_counts = fin_data['Vader Analysis'].value_counts()
vader_counts
vader_counts= fin_data['Vader Analysis'].value_counts()
plt.figure(figsize=(10, 7))
plt.pie(vader_counts.values, labels = vader_counts.index, explode = (0.1, 0, 0), autopct='%1.1f%%',shadow=False)

# plt.legend()

Analisis Sentiment using SentiWordNet

Seriusan saya semakin tidak tau wkwk, bodoh banget ya ampun haha. Gila sih wkwk.

nltk.download('sentiwordnet')
from nltk.corpus import sentiwordnet as swn

def sentiwordnetanalysis(pos_data):
 sentiment = 0
 tokens_count = 0
  for word, pos in pos_data:
   if not pos:
    continue
   lemma = wordnet_lemmatizer.lemmatize(word, pos=pos)
   if not lemma:
    continue

   synsets = wordnet.synsets(lemma, pos=pos)
   if not synsets:
    continue

   # Take the first sense, the most common
   synset = synsets[0]
   swn_synset = swn.senti_synset(synset.name())
   sentiment += swn_synset.pos_score() - swn_synset.neg_score()
   tokens_count += 1
   # print(swn_synset.pos_score(),swn_synset.neg_score(),swn_synset.obj_score()
 if not tokens_count:
  return 0
 if sentiment>0:
  return "Positive"
 if sentiment==0:
  return "Neutral"
 else:
  return "Negative"

fin_data['SWN analysis'] = mydata['POS tagged'].apply(sentiwordnetanalysis)
fin_data.head()
swn_counts= fin_data['SWN analysis'].value_counts()
swn_counts
swn_counts= fin_data['SWN analysis'].value_counts()
plt.figure(figsize=(10, 7))
plt.pie(swn_counts.values, labels = swn_counts.index, autopct='%1.1f%%', shadow=False)
# plt.legend()

Mungkin sampai tahap ini sudah selesai tinggal kita menvisualisasikan semuanya secara bersamaan.

Visual representation of TextBlob, VADER, SentiWordNet results

Kali ini kita akan menvisualisasi semua grafik di atas menjadi satu dan mungkin kita bisa menganalisis sentimentnya semuanya.

Dengan menggunakan code berikut ini.

import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize=(15,7))
plt.subplot(1,3,1)
plt.title("TextBlob results")

plt.pie(tb_counts.values, labels = tb_counts.index, explode = (0, 0), autopct='%1.1f%%',shadow=False) 
plt.subplot(1,3,2)
plt.title("VADER results")
plt.pie(vader_counts.values, labels = vader_counts.index, explode = (0, 0), autopct='%1.1f%%',shadow=False) 
plt.subplot(1,3,3)
plt.title("SentiWordNet results")
plt.pie(swn_counts.values, labels = swn_counts.index, autopct='%1.1f%%', shadow=False) 

Ohh ya kamu bisa menggunakan google colab atau jupyter notebook untuk mengoding python tersebut.

Penutup

Terima kasih sudah mengikuti artikel tidak jelas ini semoga kamu di berikan kemudahan dan kelancaran dalam segala hal. Sampai jumpa di artikel berikutnya. Babay.




Terima kasih sudah membaca artikelnya, tetap semangat jalani harimu meskipun dunia bertolak belakang dengan keinginanmu. Dan jangan lupa ngopi supaya sadar pahitnya dunia tidak semanis mimpi. Ahay

Tertanda Sayang


Taufik Nurhidayah
Traktir Kopi

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.