The world’s leading publication for data science, AI, and ML professionals.

The Quick and Easy Guide to Create Wordclouds in Python

Create word clouds in different shapes to convey messages better.

Photo by Pixabay from Pexels
Photo by Pixabay from Pexels

Word clouds are a great way to visualize text data. And python makes it easy to create one. In this post, we’ll go over an example of using the Wordcloud library to generate word clouds.

If you don’t know what it is, a word cloud visualizes how often words appear in a given piece of text. The more often a word appears, the larger it will be in the word cloud.

Word clouds are great for finding out customer sentiment from reviews. Also, some websites use word clouds to show the most popular topics on the site.

You can use the Monkeylearn word cloud generator tool for offline use cases. But you’d often have to generate word clouds dynamically or in large batches.

So, let’s get started!

1. Install the Wordcloud library

Wordcloud is a free and open-source Python library. As of writing this post, Wordcloud’s GitHub repo has 8.7k stars and 2.2k forks, and 62 people contribute to it.

You can install the Wordcloud library from PyPI.

pip install wordcloud

If you’re using Poetry to manage Python packages, you can use the following command.

You Are Not Still Using Virtualenv, Are You?

poetry add wordcloud

2. Load Data

For this tutorial, we’ll be using the following text.

"Python is a widely used high-level interpreted language for general-purpose programming. Created by Guido van Rossum and first released in 1991, Python has a design philosophy that emphasizes code readability, notably using significant whitespace. It provides constructs that enable clear programming on both small and large scales."

You can set this as a variable in Python, as shown below.

text = """ Python is a widely used high-level interpreted language for general-purpose Programming. Created by Guido van Rossum and first released in 1991, Python has a design philosophy that emphasizes code readability, notably using significant whitespace. It provides constructs that enable clear programming on both small and large scales. """

However, you might have to load a lot more data than this. For instance, if you have a dataset of reviews, you must load them differently.

A Better Way to Summarize Pandas Dataframes.

You can create word clouds from a Pandas Data Frame. The following code prepares a combined review text by

  • reading a pandas dataframe from a CSV;
  • joining all the user reviews, and;
  • assign it to a new variable ‘text.’
text = pd.read_csv("data.csv").Reviews.str.cat()

If you don’t have a pandas dataframe, you can also read the text from a file.

with open("data.txt", "r") as file: 
    text = file.read()

Either way, you should end up with a string of text.

3. Generate the word cloud

Now that we have the text data loaded, let’s move on to create the word cloud.

Creating a word cloud is easy with the Wordcloud library. The following code will create a word cloud from the text we loaded earlier.

from wordcloud import WordCloud 
import matplotlib.pyplot as plt 
% matplotlib inline 
wordcloud = WordCloud().generate(text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")

First, we import the WordCloud class from the word cloud library. Then, we also import matplotlib. We use the %matplotlib inline magic command so that the word cloud appears inline in the notebook.

Then, we create a WordCloud instance and generate the word cloud using the text variable.

Finally, we use the plt.imshow() function to display the word cloud. The word cloud is displayed using the default settings.

If you want to change the appearance of the word cloud, you can use different settings. For example, you can change the background color, the max_words, the max_font_size, etc.

The following code shows how to change the background color to #e2e1eb and the max_words to 10.

wordcloud = WordCloud(
    background_color="#e2e1eb", 
    max_words=10).generate(text) 
plt.imshow(wordcloud, interpolation='bilinear') 
plt.axis("off")

As you can see, the word cloud looks different with these settings. Play around with the settings to get the word cloud that you want.

Create Word clouds in a shape

You could get creative with creating word clouds. You can set the mask option to an image to get the word clouds created in shape. The masking image should have a black object on a white background. Here’s how we made our word cloud into a heart shape.

from PIL import Image 
import numpy as np 
mask_img = np.array(Image.open("./Untitled design.png"))
wordcloud = WordCloud(
    background_color="#e2e1eb", 
    max_words=100, mask=mask_img
).generate(text)

The above code will result in the following image.

Conclusion

Word clouds are an excellent way to communicate what are the hot topics.

We’ve briefly discussed how we can create a word cloud and export it into PNG using Python. We’ve also made word clouds in different shapes.

Here’s what the complete code will look like.

import pandas as pd
from wordcloud import WordCloud

import matplotlib.pyplot as plt
% matplotlib inline

text = """
Python is a widely used high-level interpreted language for general-purpose programming. Created by Guido van Rossum and first released in 1991, Python has a design philosophy that emphasizes code readability, notably using significant whitespace. It provides constructs that enable clear programming on both small and large scales.
"""

# Read and convert an mask image. It should have a white (not transparent) background with a black object.
mask_img = np.array(Image.open("./heart.png"))

#
wordcloud = WordCloud(background_color="#e2e1eb", max_words=100, mask=mask_img).generate(text)

# store to file
wordcloud.to_file("wc.png")

# Show the image
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")

Thanks for reading, friend! It seems you, and I have lots of common interests. I’d love to connect with you on LinkedIn, Twitter, and Medium

Not a Medium member yet? Please use this link to become a member because, at no extra cost for you, I earn a small commission for referring you.


Related Articles