Como Fazer Uma Nuvem de Palavras (Bonita) em Python

Carolina Dias
5 min readJul 17, 2021

--

Nuvem de Palavras em Python

No mundo de Ciência de Dados, tão importante quanto fazer um modelo de Machine Learning super avançado com as melhores métricas é o modo que iremos apresentar nosso projeto para outras pessoas. Um bom storytelling é essencial para sermos bem compreendidos e para levarmos os pontos cruciais do nosso projeto para todos. E uma forma interessante de incrementar uma boa contagem de história com dados é utilizar uma nuvem de palavras (word cloud).

Essa técnica se baseia em contar a frequência de cada palavra em determinado texto e colocá-las com uma fonte proporcional ao número de vezes que cada palavra aparece, fazendo assim com que salte aos nossos olhos as palavras mais frequentes, com maior fonte e destaque. Existem inúmeras maneiras e ferramentas para criar uma word cloud a partir de um texto, mas aqui utilizaremos o Python, para se adequar melhor a um ambiente de análise de dados.

Semana passada mesmo, enquanto eu fazia um projeto sobre vacinas no Brasil (não, não a de COVID), me deparei com uma situação na qual uma word cloud se encaixaria bem: eu tinha o nome de cada vacina e a quantidade de aplicações de cada uma. Essa seria uma visualização típica para um gráfico de barras, mas incrementar isso com uma word cloud traria uma dimensão visual a mais para a representação dos dados. Acabei ficando com a nuvem de palavras a seguir para esse problema.

Nuvem de palavras das vacinas mais aplicadas no Brasil de 1994 a 2019.

Nesse exemplo acima, batemos o olho e direto lemos “DTP”, “BCG” e “Poliomielite”, que são realmente os três imunizantes mais aplicados no período estudado. Além disso, uma word cloud é uma ótima forma de incrementar o storytelling, pois podemos customizar seu formato e suas cores, como fiz acima, em um formato que lembra uma seringa de vacinação.

Espero que esteja convencido de que utilizar uma nuvem de palavras pode ser uma alternativa interessante para gráficos mais tradicionais. Então vamos pôr a mão na massa!

Bibliotecas Utilizadas

O ambiente utilizado foi o Jupyter Lab, mas tudo aqui pode ser feito igualmente no Google Colab ou em qualquer outro ambiente que preferir. Temos as seguintes bibliotecas:

  • wordcloud: a biblioteca que usaremos para a criação da nuvem de palavras;
  • PIL (pillow): permite a utilização de imagens com a word cloud;
  • numpy: vamos precisar dela para converter a imagem para um vetor;
  • pandas: para a utilização de datasets;
  • matplotlib: finalmente, a biblioteca para a visualização em si da nossa obra de arte!

Documentação da biblioteca “wordcloud”.

Para instalar alguma biblioteca faltante utilize “pip install nome-da-biblioteca”.

Importamos cada uma para o nosso notebook com o código abaixo.

Nuvem de Palavras Através de uma Tabela

Para nossa nuvem de palavras podemos receber os dados inicialmente em dois tipos: em um texto corrido ou em uma tabela de frequências de palavras. Aqui veremos inicialmente como fazer uma word cloud através de um arquivo .csv. Iremos utilizar o mesmo dataset que utilizei para fazer a visualização de vacinas. Esses dados foram obtidos do DATASUS, mas deixarei aqui uma versão apenas com o que queremos: o nome das vacinas e a quantidade de vezes que cada uma foi aplicada.

Os dados já limpos podem ser baixados aqui.

Vamos importar esses dados e partir pra ação!

df_vacs = pd.read_csv('dados_vacinas.csv', encoding = 'ISO-8859-1')

Após observamos esses dados, vemos que temos uma coluna com o nome do imunizante e outra coluna com o total aplicado de cada um. Já podemos partir direto para a nuvem de palavras!

O código acima nos dá a seguinte nuvem de palavras.

Nuvem de Palavras com os Parâmetros Padrão da Biblioteca “wordcloud”

Essa word cloud padrão parece meio feia. Vamos customizá-la e adicionar uma imagem de fundo. Para isso precisamos de uma imagem bem específica para ser a nossa “máscara”, com um fundo branco e a imagem com cores bem definidas. Fazer preferência por imagens em .png, pois evita artefatos na imagem trazidos pelo .jpg. Escolhi essa imagem aqui.

Vamos ver como ficou nossa word cloud após algumas customizações.

Nuvem de Palavras com os Parâmetros Melhorados

Agora sim temos uma word cloud digna! Outros parâmetros como tamanho da fonte e agrupamento por cores podem ser consultados na galeria de exemplos da documentação da biblioteca.

Nuvem de Palavras Através de um Texto

Agora não teremos mais um arquivo .csv nos dizendo a frequência de cada palavra, e sim um texto corrido. Para isso usarei o meu texto sobre o projeto de vacinas como exemplo. (Autopromoção? Claro!)

Para facilitar nossa vida e não precisarmos fazer web scraping do site (isso só já dá assunto pra outro tutorial), coloquei todo o texto em um arquivo .txt que pode ser baixado aqui. Não fiz nenhum tratamento no texto, só copiei e colei no arquivo. Vamos ver como fazer a nuvem de palavras desse texto.

Para que nossa nuvem de palavras não fique poluída com palavras como “que”, “de” ou “e”, precisamos de uma forma de remover essas “stop words”. E a biblioteca wordcloud tem exatamente esse parâmetro “stopwords” que remove da nuvem as palavras que fornecermos em uma lista. Aqui encontrei uma lista de “stopwords” da língua portuguesa. É ela que iremos utilizar.

Agora iremos usar essa imagem para gerar nossa nuvem e utilizaremos as cores dela para colorir as palavras. Com tudo isso, ficamos com o código a seguir.

E a imagem que obtemos…

Nuvem de Palavras Através de um Texto

Agora sim temos uma nuvem de palavras bem melhor e que pode muito bem ser utilizada para incrementar um storytelling!

Para conferir outros projetos ou se tiver alguma dúvida e sugestão:

--

--

Carolina Dias

A machine learning engineer learning how machines learn and a mathematician bad at math