Chmura słów (ang. word cloud) to specyficzny sposób prezentowania danych tekstowych. Im dane słowo częściej pojawia się w tekście, tym jest większe na wizualizacji.
Jeszcze niedawno chmury słów były wykorzystywane np. na blogach lub stronach internetowych przy grafikach pokazujących, które słowo jest wyszukiwane najczęściej. Natomiast ostatnio coraz rzadziej widać ich wykorzystanie.
Bardzo często kolory używane w takich rodzajach wykresów są pozbawione znaczenia i mają być przede wszystkim przyjemne dla oka. Niemniej jednak w bardzo prosty sposób można do chmury słów dodać tzw. maskę, czyli kształt tła, na jakim ma się wyświetlać. Dzięki temu możecie polepszyć swoje prezentacje i bardziej zaciekawić publiczność formą prezentacji danych tekstowych.
Nakładanie maski na chmurę
Poniżej użyłem tekstów piosenek Beyonce z płyty „Dangerously In Love” przy wykorzystaniu chmury słów na dwóch różnych maskach.
Mam nadzieję, że podoba Wam się pomysł pokazywania danych na tle logo Waszych firm :).
Pamiętajcie jednak o głównej wadzie tego rodzaju wykresów: nie mają dużej dokładności, są tylko poglądowe i najczęściej używane ze względów estetycznych. Natomiast jestem pewien, że wzbogacą historie, które będziecie chcieli opowiedzieć innym i przykuć wzrok w waszych prezentacjach.
Kod PYTHON:
Wczytanie odpowiednich bibliotek:
#import libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from os import path, getcwd
from PIL import Image
from wordcloud import WordCloud, ImageColorGenerator
Wczytanie danych tekstowych (link do danych):
filtered_texts = pd.read_fwf('Beyonce_Dangerously_In_Love.txt')
text = ' '.join(filtered_texts['"Crazy In Love"'])
Kod do wygenerowania wykresu (w podkreślonej linii definiujemy jaki kolor tła, ile najczęstszych słów ma brać pod uwagę, jaką maskę tła wybieramy oraz jaka ma być maksymalna czcionka):
# read the mask; image taken from https://pixabay.com/pl/sylwetka-kobieta-dziewczyna-wyci%C4%85%C4%87-313666/
mask = np.array(Image.open(path.join(getcwd(), "silhouette-313666_1280.jpg")))
wc = WordCloud(background_color="white", max_words=500, mask=mask, max_font_size=60, random_state=2019)
# generate word cloud
wc.generate(text)
# create coloring from image
image_colors = ImageColorGenerator(mask)
image_colors.default_color = [0,0,0]
#plot wordcloud
plt.figure(figsize=[10,10])
plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
plt.axis("off");
Cały kod w języku Python możecie znaleźć na moim profilu GitHub: https://github.com/MamczurMiroslaw/chart001_wordcloud/blob/master/WordCloud_Beyonce.ipynb
W razie wątpliwości skorzystajcie z dokumentacji biblioteki: https://github.com/amueller/word_cloud
Pozdrawiam serdecznie,