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()