<jupyter_start><jupyter_text>WordCloud NotebookMembuat WordCloud dari kata-kata yang terdapat pada data  1. Import LibrariesImport library yang akan digunakan<jupyter_code># Import Libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction.text import CountVectorizer
from wordcloud import WordCloud<jupyter_output><empty_output><jupyter_text>2. Load StopwordMenginput Stopword agar tidak ada Stopword yang masuk ke dalam WordCloud<jupyter_code># Create Stopword
with open("../kamus/Stopword.txt", "r") as f:
    stop_words = f.readline().split()<jupyter_output><empty_output><jupyter_text>3. Load Data & VectorizerLoad dataset hasil analisis dan vectorizer yang telah di fit sebelumnya**Load Dataset**<jupyter_code># Import data
data = pd.read_csv('../data/Data Sentiment Twitter 19 - 27 April.csv')
data.head()<jupyter_output><empty_output><jupyter_text>Memisahkan index data yang bersentimen positif dan negatif<jupyter_code>index_p = data['Tweets'][data['prediction'] == 2].index
index_n = data['Tweets'][data['prediction'] == 0].index<jupyter_output><empty_output><jupyter_text>**Load Vectorizer**<jupyter_code># Load Model
import pickle
vectorizer_tfidf = pickle.load(open('../model/vectorizer/[TRAINED] TF-IDF Vectorizer.pickle', 'rb'))
word_tfidf = pickle.load(open('../model/vectorizer/word_tfidf.pickle', 'rb'))<jupyter_output><empty_output><jupyter_text>**Nama Fitur**Mengambil nama fitur / kata - kata yang terdapat pada vectorizer<jupyter_code># Fitur
nama_fitur = vectorizer_tfidf.get_feature_names()<jupyter_output><empty_output><jupyter_text>4. Spesifikasi Kata Positif & Kata NegatifKarena akan dibuat 2 WordCloud untuk kata Positif dan kata Negatif maka perlu menspesifikasikan kata Positif dan Negatif terlebih dahulu<jupyter_code># Select Positif & Negatif
positif = word_tfidf[index_p]
negatif = word_tfidf[index_n]<jupyter_output><empty_output><jupyter_text>5. Mencari Kata Positif & Kata Negatif dengan Bobot TertinggiKarena jumlah kata yang ada sangat banyak maka akan dipilih kata dengan bobot tertinggi saja untuk ditampilkan kedalam WordCloud.<jupyter_code># Mencari Kata positif & Kata positif Dengan Bobot tertinggi
def finder(words):
    kata, top_kata = {}, {}
    for i in range(words.shape[0]):
        row = words.getrow(i).toarray()[0]
        max_ = max(row)
        for j in range(len(row)):
            if row[j] > 0:
                if nama_fitur[j] not in kata :
                    kata[nama_fitur[j]] = 1
                else :
                    kata[nama_fitur[j]] += 1
                if row[j] == max_:
                    if nama_fitur[j] in top_kata:
                        top_kata[nama_fitur[j]] += 1
                    else :
                        top_kata[nama_fitur[j]] = 1
    return kata, top_kata
positif, top_positif = finder(positif)
negatif, top_negatif = finder(negatif)
# Sorting
top_positif = {k: v for k, v in sorted(top_positif.items(), key=lambda item: item[1],reverse=True)}
top_negatif = {k: v for k, v in sorted(top_negatif.items(), key=lambda item: item[1],reverse=True)}<jupyter_output><empty_output><jupyter_text>Membuat WordCloudMembuat WordCloud untuk kata positif dan kata negatif.<jupyter_code># WordCloud kata dengan bobot terbesar Positif
w = WordCloud(width=800,height=600,mode='RGBA',stopwords=stop_words,background_color='white',max_words=5000).fit_words(top_positif)
plt.figure(figsize = (10, 10), facecolor = None) 
plt.imshow(w)
plt.axis("off") 
plt.tight_layout(pad = 0) 
plt.show()
# WordCloud kata dengan bobot terbesar Negatif
w = WordCloud(width=600,height=300,mode='RGBA',stopwords=stop_words,background_color='white', max_words=5000).fit_words(top_negatif)
plt.figure(figsize = (10, 10), facecolor = None) 
plt.imshow(w)
plt.axis("off") 
plt.tight_layout(pad = 0) 
plt.show()<jupyter_output><empty_output><jupyter_text>Eksport Kata Kedalam KamusEksport kata positif dan negatif kedalam Kamus<jupyter_code># Mengurangi duplikasi kata positif & negatif melalui perbandingan rasio kemunculan katanya
del_p, del_n = [], []
for kata in negatif.keys():
    if kata in positif:
        rasio_p = positif[kata]/sum(positif.values())
        rasio_n = negatif[kata]/sum(negatif.values())
        if rasio_p > rasio_n : 
            del_p.append(kata)
        else : 
            del_n.append(kata)
for i in del_p : 
    del positif[i]
for j in del_n : 
    del negatif[j]

# Sorting
kata_pos = sorted(positif.keys())
kata_neg = sorted(negatif.keys())
# Export Kata Positif & Kata Negatif
with open('../kamus/Kata Positif.txt','w') as p:
    p.write('\n'.join(kata_pos))

with open('../kamus/Kata Negatif.txt','w') as n:
    n.write('\n'.join(kata_neg))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11373121869782972, 'fraction_numerical': 0.010642737896494158, 'mean_word_length': 4.573255813953488, 'pattern_counts': {'":': 0, '<': 41, '<?xml version=': 0, '>': 43, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '10', 'dir': 'jupyter-structured-clean-dedup', 'id': '403637', 'license': 'MIT', 'n_tokens_mistral': 1884, 'n_tokens_neox': 1795, 'n_words': 380, 'path': 'notebook/WordCloud.ipynb', 'repo_name': 'Hyuto/Analisis-Sentimen-Corona-DKI-Jakarta', 'size': '4792'}