Word cloud (awan kata) atau sering disebut juga sebagai tag cloud merupakan representasi visual dari data teks. Word cloud biasanya dimanfaatkan untuk menggambarkan metadata kumpulan kata kunci atau keywords atau tags pada sebuah dokumen/website/situsweb, untuk memberikan visualisasi bentuk teks secara bebas.

Bentuk word cloud dulu seringkali ditemukan pada sidebar web untuk menampilkan kata yang paling sering muncul pada sebuah situsweb. Dalam dunia data sains, word cloud juga dimanfaatkan untuk tujuan yang sama, tetapi penggunaannya tidak hanya sebatas pada situsweb, tetapi juga pada data digital secara umum.

Misalnya saat kita ingin memetakan kata apa saja yang paling sering muncul atau diutarakan oleh sebuah akun media sosial Twitter. Kata-kata tersebut bisa dihitung dan dipetakan berdasarkan jumlah kemunculannya.

Dengan bahasa pemrograman Python, kita bisa membuat word cloud dari sekumpulan tweet yang dicuplik dari suatu akun. Salah satu library yang Python yang bisa dimanfaatkan untuk membuat word cloud yaitu Word Cloud for Python.

Ide dasar kode program di bawah ini adalah dengan cara mengumpulkan twit suatu akun, kemudian menghitung jumlah kata yang paling sering disebut, lalu memperingkat kata-kata tersebut berdasarkan jumlah kemunculannya. Bagian selanjutnya adalah memvisualisasikan kata-kata tersebut dalam bentuk word cloud, yang mana kata yang paling sering disebut akan mempunyai ukuran font yang lebih besar dibanding kata yang lain.

Selain menggunakan library Word Cloud, beberapa library lain yang dibutuhkan yaitu Tweepy, TextBlob, Pandas, Re (regex), Time, Json, serta Matplotlib.

Berikut langkah dan penjelasan kode program Python untuk membuat word cloud berdasarkan kata-kata yang diperoleh dari status Twitter. Tutorial berikut dijalankan menggunakan Jupyter Notebook dengan Python versi 3. Simpan kode program berikut dengan nama wordcloud.ipynb.


1. Deklarasikan library yang dibutuhkan dalam program.

import tweepy
from textblob import TextBlob
from tweepy import OAuthHandler

import pandas as pd
import re
import time
import json

import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator

2. Untuk mendapatkan izin penggunaan API Twitter, perlu dituliskan terlebih dahulu kode aksesnya. Kode akses ini bisa didapatkan atau request melalui tautan ini. Pada contoh berikut ganti tulisan <masukkan kode di sini> sesuai dengan kode yang Anda dapatkan dari tautan tersebut.

access_token = "<masukkan kode di sini>"
access_token_secret ="<masukkan kode di sini>"
consumer_key ="<masukkan kode di sini>"
consumer_secret="<masukkan kode di sini>"

3. Script di bawah ini diperlukan untuk melakukan membuat objek otentikasi dengan memasukkan kode token pada poin 2

authenticate = tweepy.OAuthHandler(consumer_key, consumer_secret) 
authenticate.set_access_token(access_token, access_token_secret) 
api = tweepy.API(authenticate, wait_on_rate_limit = True)

4. Bagian selanjutnya adalah melakukan scraping 200 twit terakhir (jumlah maksimum yang diizinkan atau boleh diganti ke jumlah yang lebih kecil). Jika diperhatikan, di bagian ini kita bisa memasukkan username akun Twitter yang akan diambil datanya melalui variabel screen_name. Misalkan pada contoh ini, akun yang akan diambil datanya adalah akun @lfc.

posts = api.user_timeline(screen_name="lfc", count = 300, lang ="en", tweet_mode="extended")

5. Langkah selanjutnya yaitu membuat dataframe bernama Tweets. Dataframe ini berfungsi sebagai alat bantu untuk membersihkan tweet dari karakter-karakter yang tidak berguna, seperti menghilangkan mentions akun, menghilangkan hashtag, menghilangkan retweet (RT), serta menghilangkan hyperlink atau URL pada tweets.

df = pd.DataFrame([tweet.full_text for tweet in posts], columns=['Tweets'])

6. Membuat fungsi bernama cleanTxt untuk membersihkan tweet seperti yang dijelaskan pada poin 5. Fungsi ini memanfaatkan library regex (re) untuk menghapus karakter-karakter yang tidak diperlukan.

def cleanTxt(text):
    text = re.sub('@[A-Za-z0–9]+', '', text) #Removing @mentions
    text = re.sub('#', '', text) # Removing '#' hash tag
    text = re.sub('RT[\s]+', '', text) # Removing RT
    text = re.sub('https?:\/\/\S+', '', text) # Removing hyperlink
    return text

7. Melakukan proses membersihkan kumpulan tweet (dalam bentuk dataframe) menggunakan fungsi pada poin 6.


df['Tweets'] = df['Tweets'].apply(cleanTxt)

8. Membangkitkan library wordcloud yang secara otomatis akan memecah kalimat sekaligus mengurutkan jumlah kata yang paling sering muncul. Pengaturan bentuk visualisasi wordcloud juga bisa dilakukan pada bagian ini dengan cara mengubah nilai parameter. Misal jika ingin mengubah warna word cloud, menentukan font terbesar dan terkecil, menentukan jumlah kata yang ingin dimasukkan ke dalam visualisasi, dsb. Lebih detailnya bisa dibaca melalui dokumentasi Word Cloud di sini.

allWords = ' '.join([twts for twts in df['Tweets']])
wordCloud = WordCloud(colormap="Blue", width=1600, height=800, random_state=30, max_font_size=200, min_font_size=20).generate(allWords)

9. Menampilkan visualisasi word cloud menggunakan fungsi plot (plt)

plt.figure( figsize=(20,10), facecolor='k')
plt.imshow(wordCloud, interpolation="bilinear")
plt.axis('off')
plt.show()

10. Jika kode tersebut dijalankan maka tampilan word cloud-nya akan seperti ini. Isi word cloud akan berbeda jika script tersebut dijalankan pada waktu yang lain, menyesuaikan isi konten tweet terakhir pada saat Anda menjalankan script di atas.

11. Jika ingin menyimpan word cloud tersebut dalam bentuk file bernama wordcloud.png, sisipkan sebaris kode berikut di bagian paling bawah. File ini akan otomatis disimpan pada folder yang sama dengan folder wordcloud.ipynb.

plt.savefig('wordcloud.png', facecolor='k', bbox_inches='tight')

12. Sekarang coba ubah nilai parameter colormap=”Reds” menjadi colormap=”gray”, maka visualisasi word cloud-nya menjadi seperti di bawah ini.

13. Ada banyak nilai parameter yang bisa coba Anda masukkan dan tentunya sudah terdaftar pada library Word Cloud, diantaranya: ‘Accent’, ‘Accent_r’, ‘Blues’, ‘Blues_r’, ‘BrBG’, ‘BrBG_r’, ‘BuGn’, ‘BuGn_r’, ‘BuPu’, ‘BuPu_r’, ‘CMRmap’, ‘CMRmap_r’, ‘Dark2’, ‘Dark2_r’, ‘GnBu’, ‘GnBu_r’, ‘Greens’, ‘Greens_r’, ‘Greys’, ‘Greys_r’, ‘OrRd’, ‘OrRd_r’, ‘Oranges’, ‘Oranges_r’, ‘PRGn’, ‘PRGn_r’, ‘Paired’, ‘Paired_r’, ‘Pastel1’, ‘Pastel1_r’, ‘Pastel2’, ‘Pastel2_r’, ‘PiYG’, ‘PiYG_r’, ‘PuBu’, ‘PuBuGn’, ‘PuBuGn_r’, ‘PuBu_r’, ‘PuOr’, ‘PuOr_r’, ‘PuRd’, ‘PuRd_r’, ‘Purples’, ‘Purples_r’, ‘RdBu’, ‘RdBu_r’, ‘RdGy’, ‘RdGy_r’, ‘RdPu’, ‘RdPu_r’, ‘RdYlBu’, ‘RdYlBu_r’, ‘RdYlGn’, ‘RdYlGn_r’, ‘Reds’, ‘Reds_r’, ‘Set1’, ‘Set1_r’, ‘Set2’, ‘Set2_r’, ‘Set3’, ‘Set3_r’, ‘Spectral’, ‘Spectral_r’, ‘Wistia’, ‘Wistia_r’, ‘YlGn’, ‘YlGnBu’, ‘YlGnBu_r’, ‘YlGn_r’, ‘YlOrBr’, ‘YlOrBr_r’, ‘YlOrRd’, ‘YlOrRd_r’, ‘afmhot’, ‘afmhot_r’, ‘autumn’, ‘autumn_r’, ‘binary’, ‘binary_r’, ‘bone’, ‘bone_r’, ‘brg’, ‘brg_r’, ‘bwr’, ‘bwr_r’, ‘cividis’, ‘cividis_r’, ‘cool’, ‘cool_r’, ‘coolwarm’, ‘coolwarm_r’, ‘copper’, ‘copper_r’, ‘cubehelix’, ‘cubehelix_r’, ‘flag’, ‘flag_r’, ‘gist_earth’, ‘gist_earth_r’, ‘gist_gray’, ‘gist_gray_r’, ‘gist_heat’, ‘gist_heat_r’, ‘gist_ncar’, ‘gist_ncar_r’, ‘gist_rainbow’, ‘gist_rainbow_r’, ‘gist_stern’, ‘gist_stern_r’, ‘gist_yarg’, ‘gist_yarg_r’, ‘gnuplot’, ‘gnuplot2’, ‘gnuplot2_r’, ‘gnuplot_r’, ‘gray’, ‘gray_r’, ‘hot’, ‘hot_r’, ‘hsv’, ‘hsv_r’, ‘inferno’, ‘inferno_r’, ‘jet’, ‘jet_r’, ‘magma’, ‘magma_r’, ‘nipy_spectral’, ‘nipy_spectral_r’, ‘ocean’, ‘ocean_r’, ‘pink’, ‘pink_r’, ‘plasma’, ‘plasma_r’, ‘prism’, ‘prism_r’, ‘rainbow’, ‘rainbow_r’, ‘seismic’, ‘seismic_r’, ‘spring’, ‘spring_r’, ‘summer’, ‘summer_r’, ‘tab10’, ‘tab10_r’, ‘tab20’, ‘tab20_r’, ‘tab20b’, ‘tab20b_r’, ‘tab20c’, ‘tab20c_r’, ‘terrain’, ‘terrain_r’, ‘twilight’, ‘twilight_r’, ‘twilight_shifted’, ‘twilight_shifted_r’, ‘viridis’, ‘viridis_r’, ‘winter’, ‘winter_r’

Pada tutorial selanjutnya, saya akan coba membuat tutorial untuk membuat Word Cloud dengan pola-pola yang lebih unik.

Kode program di atas secara penuh bisa dituliskan sebagai berikut:

import tweepy
from textblob import TextBlob
from tweepy import OAuthHandler

import pandas as pd
import re
import time
import json

import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator

access_token = "<masukkan kode di sini>" 
access_token_secret ="<masukkan kode di sini>" 
consumer_key ="<masukkan kode di sini>" 
consumer_secret="<masukkan kode di sini>"

# Membuat objek otentikasi
authenticate = tweepy.OAuthHandler(consumer_key, consumer_secret) 
    
# Memasukkan kode akses token dan kode secret akses token
authenticate.set_access_token(access_token, access_token_secret) 
    
# Membuat objek API ketika melewatkan informasi otentifikasi
api = tweepy.API(authenticate, wait_on_rate_limit = True)

# Mengekstrak 200 twit terakhir dari user Twitter
posts = api.user_timeline(screen_name="lfc", count = 200, lang ="en", tweet_mode="extended")

# # Membuat dataframe dengan kolom bernama Tweets 
df = pd.DataFrame([tweet.full_text for tweet in posts], columns=['Tweets'])

# Membuat fungsi untuk membersihkan twit
def cleanTxt(text):
    text = re.sub('@[A-Za-z0–9]+', '', text) #Removing @mentions
    text = re.sub('#', '', text) # Removing '#' hash tag
    text = re.sub('RT[\s]+', '', text) # Removing RT
    text = re.sub('https?:\/\/\S+', '', text) # Removing hyperlink
    return text


# Proses membersihkan dataframe menggunakan fungsi cleanTxt
df['Tweets'] = df['Tweets'].apply(cleanTxt)


# Visualisasi Word Cloud
allWords = ' '.join([twts for twts in df['Tweets']])
wordCloud = WordCloud(colormap="gray", width=1600, height=800, random_state=30, max_font_size=200, min_font_size=20).generate(allWords)

# Menampilkan (Plotting) Word Cloud
plt.figure( figsize=(20,10), facecolor='k')
plt.imshow(wordCloud, interpolation="bilinear")
plt.axis('off')
plt.show()

 

Komentar

You can subscribe to my newsletter to get updates (no spam).

powered by TinyLetter