Data visualisasi (graf, chart, infografis, dll.) dapat menyampaikan informasi penting dari suatu data, tapi bagaimana jika data yang kamu punya adalah data teks? Jika kamu menginginkan visualisasi yang menarik perhatian untuk menampilkan poin-poin penting, maka gunakanlah word cloud.
Jika kamu tidak familiar dengan word cloud, itu merupakan suatu gambar yang terdiri dari kumpulan kata, dimana besarnya kata merepresentasikan kemunculan atau tingkat kepentingan. Semakin besar suatu kata muncul, maka semakin sering suatu kata disebut dalam suatu dokumen teks. Word cloud mudah untuk dibaca dan dimengerti.
Namun, kamu mungkin bosan melihat bentuk sederhana dari word cloud. Di artikel ini, kita akan membuat word cloud dengan menggunakan python dalam setiap bentuk yang kamu inginkan. Mari kita mulai.
Jika kamu ingin melihat kode lengkap untuk artikel ini, kamu bisa mengunjungi github saya. Sebagai tambahan, artikel ini merupakan terjemahan dari artikel saya yang berjudul “Create Word Cloud into any Shape you want using Python”, sehingga mungkin beberapa kata akan sulit dimengerti. Jika kamu tertarik untuk membaca versi Bahasa Inggris, kamu bisa mengunjungi tautan di bawah ini.
Create Word Cloud into any Shape you want using Python
Untuk tata cara melakukan instalasi serta membuat word cloud sederhana, kamu bisa mengunjungi postingan yang ditulis oleh Tedy Suwega dengan tautan di bawah ini.
Wordcloud Sederhana Menggunakan Python
Meneruskan dari artikel tersebut, kita bisa menggunakan beberapa parameter lainnya untuk membuat word cloud sesuai dengan apa yang kita inginkan. Beberapa parameter tersebut diantaranya.
background_color= Warna latar belakangmax_words= Jumlah maksimal kata unik dalam satu dokumenstopwords= Daftar stopwordsmax_font_size= Ukuran huruf maksimalrandom_state= Untuk memastikan bahwa angka acak dihasilkan dalam urutan yang sama, sehingga hasilnya akan sama meskipun dilakukan beberapa kaliwidth= ukuran lebar dari outputheight= ukuran tinggi dari output
Dalam postingan ini, saya akan menggunakan artikel yang di scraping dari Internet. Saya akan menggunakan library newspaper3k. Jika kamu tidak familiar dengan library newspaper3k, kamu bisa membaca artikel berikut.
Web Scraping Berita dengan 4 Baris Kode menggunakan Python
Disini, saya akan melakukan scraping dari Wikipedia dengan artikel berjudul “Ice Cream”.
from newspaper import Article
article = Article('https://en.wikipedia.org/wiki/Ice_cream')
article.download()
article.parse()
Karena kita hanya membutuhkan teksnya saja, maka kita hanya perlu menggunakan article.text.
Mari kita coba menggunakan parameter yang sudah saya sebutkan di atas. Pertama, mari kita mengimpor stopword yang disediakan oleh library wordcloud.
from wordcloud import STOPWORDS
Lalu masukan kode berikut.
wc = WordCloud(background_color="white", max_words=2000,
stopwords=STOPWORDS, max_font_size=256,
random_state=42, width=500, height=500)
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()
Dan inilah hasilnya.

Menambah custom font
Kita juga dapat mengubah font yang digunakan. Kamu bisa mengunduh font dari situs https://www.dafont.com untuk penggunaan pribadi. Selanjutnya, masukkan alamat font ke dalam parameter.
font_path = 'path/to/font'
wc = WordCloud(stopwords=STOPWORDS, font_path=font_path,
background_color="white", max_words=2000,
max_font_size=256, random_state=42,
width=500, height=500)
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()
Dan inilah hasilnya.

Menambah custom mask
Selanjutnya, kita akan menambahkan mask untuk kata cloud. Perlu diingat bahwa latar belakang gambar yang digunakan harus berwarna putih, jika tidak, sistem akan menganggap latar belakang sebagai objek. Selain itu, latar belakang tidak dapat transparan, karena warna transparan akan dianggap hitam. Saya akan menggunakan gambar berikut sebagai mask.

Kita perlu menambahkan beberapa dependensi untuk memuat gambar.
from PIL import Image
import numpy as np
Selanjutnya, masukkan alamat font ke dalam parameter.
mask = np.array(Image.open('path/to/image'))
wc = WordCloud(stopwords=STOPWORDS, font_path=font_path,
mask=mask, background_color="white",
max_words=2000, max_font_size=256,
random_state=42, width=mask.shape[1],
height=mask.shape[0])
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()
Dan inilah hasilnya.

Adjust Colors
Kita juga dapat menyesuaikan warna sesuai dengan yang kita inginkan. Pada dasarnya kita bebas untuk menentukan warna yang akan kita gunakan, namun dalam artikel ini, saya hanya akan menggunakan fungsi warna yang banyak digunakan. Pertama-tama, kita akan menggunakan satu warna saja.
def one_color_func(word=None, font_size=None,
position=None, orientation=None,
font_path=None, random_state=None):
h = 160 # 0 - 360
s = 100 # 0 - 100
l = 50 # 0 - 100 return "hsl({}, {}%, {}%)".format(h, s, l)
Format warna yang digunakan adalah format HSL (Hue, Saturation, Lightness). Untuk lebih jelasnya, kamu bisa mengunjungi HSL Color Picker untuk mencari tahu mengenai kode warna yang akan digunakan. Lalu, untuk membuat word cloud, kita harus menambah fungsi yang telah kita buat.
wc = WordCloud(stopwords=STOPWORDS, font_path=font_path,
mask=mask, background_color="white",
max_words=2000, max_font_size=256,
random_state=42, width=mask.shape[1],
height=mask.shape[0], color_func=one_color_func)
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()
Dan hasilnya akan menjadi seperti ini.

Selain itu, kita juga dapat menghasilkan warna serupa dengan mengacaknya dalam range tertentu. Saya akan menambahkan fungsi acak lightness untuk mengatur kecerahan warna.
def similar_color_func(word=None, font_size=None,
position=None, orientation=None,
font_path=None, random_state=None):
h = 40 # 0 - 360
s = 100 # 0 - 100
l = random_state.randint(30, 70) # 0 - 100 return "hsl({}, {}%, {}%)".format(h, s, l)
Lalu, sama seperti sebelumnya. Masukan fungsi tersebut ke dalam fungsi word cloud.
wc = WordCloud(stopwords=STOPWORDS, font_path=font_path,
mask=mask, background_color="white",
max_words=2000, max_font_size=256,
random_state=42, width=mask.shape[1],
height=mask.shape[0], color_func=similar_color_func)
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()
Dan hasilnya akan seperti ini.

Sebagai tambahan, kita juga dapat menentukan banyak warna yang akan kita gunakan.
def multi_color_func(word=None, font_size=None,
position=None, orientation=None,
font_path=None, random_state=None):
colors = [[4, 77, 82],
[25, 74, 85],
[82, 43, 84],
[158, 48, 79]]
rand = random_state.randint(0, len(colors) - 1) return "hsl({}, {}%, {}%)".format(colors[rand][0], colors[rand][1], colors[rand][2])
Dan tambahkan fungsi tersebut ka dalam word cloud.
wc = WordCloud(stopwords=STOPWORDS, font_path=font_path,
mask=mask, background_color="white",
max_words=2000, max_font_size=256,
random_state=42, width=mask.shape[1],
height=mask.shape[0], color_func=multi_color_func)
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()
Dan hasilnya akan seperti ini.

Dan yang terakhir, kita juga dapat menghasilkan warna berdasarkan mask yang kita gunakan. Kita akan membutuhkan fungsi-fungsi yang disediakan oleh wordcloud.
from wordcloud import ImageColorGenerator
Kemudian tambahkan warna masking dan tambahkan fungsi ke fungsi wordcloud.
mask_colors = ImageColorGenerator(mask)
wc = WordCloud(stopwords=STOPWORDS, font_path=font_path,
mask=mask, background_color="white",
max_words=2000, max_font_size=256,
random_state=42, width=mask.shape[1],
height=mask.shape[0], color_func=mask_colors)
wc.generate(article.text)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()
Dan ini hasil akhirnya.

Seperti yang dapat kita lihat, warna word cloud mengikuti warna gambar aslinya.




