Word cloud python example

Интересное применение WordCloud

Всем привет! Хочу продемонстрировать вам, как я использовал библиотеку WordCloud для создания подарка для друга/подруги. Я решил составить облако слов по переписке с человеком, чтобы выделить основные темы, которые мы обсуждаем.

Выгружаем переписку

Для начала нам нужно будет выгрузить переписку из ВК. Как это сделать? Очень просто! Я пользовался расширением для браузера «VkOpt». Скачиваем его и устанавливаем. Теперь заходим в диалог с человеком, переписку с которым хотим скачать.

Наводим на три точки и выбираем «сохранить переписку». Далее будет окно с выбором типа файла. Я предпочитаю json.

Обработка переписки

Импортируем json и открываем наш файл с перепиской.

import json vk = open('vk2.json', 'r', encoding='utf8') vk = json.load(vk)

Теперь давайте выведем его и посмотрим как он выглядит.

Ну в общем всё ясно, массив таких вот сообщений. Каждый элемент соответствует одному облако-сообщению.

Давайте теперь вытащим из каждого сообщения его текст и разделим этот текст на слова.

mas = [] for i in range(len(vk)): mas.append(vk[i]['body'].split()) data = [] for i in mas: for j in range(len(i)): data.append(i[j].lower()) 

Теперь у нас есть массив data, в котором каждый элемент — это одно слово. Далее создадим большую строку, в которую просто запишем через пробел все наши слова.

big_string='' for i in range(len(data)): big_string+=(data[i]+' ')

WordCloud

Почти всё готово, теперь давайте воспользуемся библиотекой WordCloud и построим наше облако слов.

pip install wordcloud import matplotlib.pyplot as plt %matplotlib inline from wordcloud import WordCloud, STOPWORDS wordCloud = WordCloud(width = 10000, height = 10000, random_state=1, background_color='black', colormap='Set2', collocations=False).generate(big_string) plt.figure(figsize=(5,5)) plt.imshow(wordCloud)

Убираем стоп-слова

Так, и что же это? Не очень похоже на оригинальный подарок. Естественно всё не так просто. Дело в том, что в нашей речи и сообщениях встречается куча стоп-слов. Собственно, эти слова вы и видите на картинке. Они встречались в диалоге чаще всего, поэтому алгоритм выделил их крупным шрифтом.

Теперь наша задача: почистить строку от ненужный слов. Для этого скачаем словарик стоп-слов русского языка(https://snipp.ru/seo/stop-ru-words). Он представлен как обычный txt-шник, а значит прочитаем его и разделим по переносу строки.

stop_words = open('stop-ru.txt', 'r', encoding='utf8') stop_words = stop_words.read() stop_words = stop_words.split('\n')

Далее создадим массив clear_data, куда будем заносить слова из массива data, которые не содержатся в списке стоп-слов(т. е. нормальные слова).

clear_data=[] for i in data: if(i not in stop_words): clear_data.append(i)

А теперь формируем нашу большую строку, только теперь из нового массива и заново строим WordCloud.

big_string='' for i in range(len(clear_data)): big_string+=(clear_data[i]+' ') wordCloud = WordCloud(width = 10000, height = 10000, random_state=1, background_color='black', colormap='Set2', collocations=False).generate(big_string) plt.figure(figsize=(5,5)) plt.imshow(wordCloud)

Результат на лицо. Начинает проявляться оттенок переписки с тем или иным человеком. Ну и, естественно, куда же мы русского могучего, он тоже начинает проявляться на изображении, приходится его замазывать 🙂

Переходим на ручное управление

Так, вроде стоп-слова убрали, но картинка всё равно не выглядит привлекательной. В выборке остались различные выражения, которые мы часто используем в переписке. Например, мои слова паразиты: «ок», «ща», «крч». Что делать? Все просто. Открываем наш текстовик с русскими стоп-слова и просто вписываем туда слова, которые не должны присутствовать в новом облаке слов(не забудьте сохранить текстовик, перед повторным чтением).

P.S. На самом деле есть и второй вариант удалить слова паразиты. Создадим массив, который заполним словами паразитами, и подадим его как параметр в WordCloud. Тоже хороший вариант, но мне больше нравится с текстовиком.

stopw = ['а', 'ок', 'крч'] #массив слов, которые хотим удалить #подадим массив stopw в WordCloud как параметр stopwords wordCloud = WordCloud(width = 1000, height = 1000, random_state=1, background_color='black', colormap='Set2', collocations=False, stopwords=stopw).generate(big_string)

Таким образом, мы всё глубже и глубже погружаемся в чертоги нашей переписки. Обычно появляются слова, соответствующие темам, которые вы и ваш друг часто обсуждаете.

Форма облака слов

Теперь давайте воспользуемся одной фишкой WordCloud. Оформим наше облако слов в виде какой-то картинки. Я выберу банальное сердечко)

from PIL import Image original_image = Image.open('путь до картинки') image = original_image.resize([2000,2000], Image.ANTIALIAS) image = np.array(image)

Подадим в функцию нашу картинку как параметр mask.

wordCloud = WordCloud(width = 1000, height = 1000, random_state=1, background_color='black', colormap='Set2', collocations=False, stopwords=stopw, mask=image).generate(big_string)

Вот такая штука у меня получилась.

По-хорошему, нужно удалить ещё около десятка слов, для более-менее приятной картины, но я уверен ту вы справитесь сами)

P.S. Выбирайте черно-белые изображения предметов. Лучше всего, если они выглядят как силуэты. С .png у меня не прошло, поэтому я сохранял в .jpg, может быть у вас получится.

Итог

Я нарисовал облако слов, которое отражает тональность переписки с тем или иным человеком. Дополнительно, в облаке содержатся слова, которые соответствуют тем темам, которые вы часто обсуждали в диалоге. Как вариант, можно сохранить эту картинку, распечатать, поставить в рамочку и вручить как подарок вашему собеседнику. Ему будет очень приятно, ведь всегда интересно посмотреть на то, как оценивает вашу переписку алгоритм)

Источник

Creating Wordclouds in Python: The Quick and Easy Guide

You are currently viewing Creating Wordclouds in Python: The Quick and Easy Guide

The Analytics Club

Word clouds (tag clouds) are a great way to visualize text data. And python makes it easy to create one. This post will cover 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.

There are several free word cloud generator tools for general use. They could be instrumental if you’re preparing one for presentations or to include in a document. You don’t have to redo all the programming work. But you’d often have to generate word clouds dynamically or in large batches. This is where word cloud creations become tricky.

So, how to make word cloud programmatically? That’s the focus of this post. We will start with a basic word cloud and move on to create more advanced word cloud art.

Let’s build our phrase cloud generator (people sometimes call word cloud that way)

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.

You can install the WordCloud library from PyPI.

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

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 have to load them in a different way.

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

  • reads a Pandas dataframe from a CSV
  • join all the user reviews
  • 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 build a 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.

WordCoud created in Python

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, and so on.

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 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.

WordCloud created in Python in shape

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 created 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")

Generating word clouds in Python is easy. But there are free word cloud generators on the internet too. These can help if you create a tag cloud for a single use, like for a presentation. For instance, Word Art is the most creative best word cloud generator.

Some of these tools even can generate clickable word clouds. But these free word cloud generators have serious limitations regarding scalability and programmability.

But when you need to create a bulk of word clouds at once or periodically create them, you might need programmatic word cloud creation. This is where our Python word cloud generator comes in handy. You, too, may need your word cloud generator.

Thuwarakesh

A tech voyager, sailing through the data science seas for 11+ years, charting courses of knowledge to enlighten fellow travelers.

You Might Also Like

How to Find the Index of an Element in a List in Python?

How to Find the Index of an Element in a List in Python?

3 Techniques to Scrape Any Websites Using Python

01/17/2022

3 Techniques to Scrape Any Websites Using Python

How to Learn and Improve Your Python Coding Skills With Free Resources?

04/12/2022

How to Learn and Improve Your Python Coding Skills With Free Resources?

How do we work

Readers support The Analytics Club. We earn through display ads. Also, when you buy something we recommend, we may get an affiliate commission. But it never affects your price or what we pick.

Источник

Читайте также:  Php int long int
Оцените статью