A nuvem de palavras ou word cloud é uma forma super legal de ilustrar informações textuais de forma gráfica, atrativa e de fácil compreensão para muitas pessoas. Nesse tutorial, vou ensinar como construir a sua nuvem de palavras de forma muito simples em python utilizando as bibliotecas wordcloud, newspaper3k, pandas, matplotlib e o Google Colab.

Eu nunca dei muito valor para o gráfico "nuvem de palavras" até começar a trabalhar com SEO. Nesse sentido, eu comecei a entender o que é a dimensão palavra-chave, no contexto de busca orgânica, e quais as suas características e métricas associadas. Mais tarde, eu percebi que até mesmo academicamente podemos usar esse método para fazer algumas análises mais exploratórias com transcrições de entrevistas, por exemplo.

Leia o blog post na íntegra ou pule para a parte que tiver maior interesse, clicando em um dos links do sumário abaixo:

Sumário

Por que utilizar python para fazer uma nuvem de palavras?

Um dos motivos para usar python é a maleabilidade para customizar a sua nuvem de palavras. Seria muito mais fácil utilizar um programa qualquer pronto na web (existem vários, só buscar online) mas, com o código você tem a liberdade para fazer diversos ajustes. Claro que isso requer um pouquinho mais de trabalho, mas é interessante para quem quer apresentar algo um pouco mais elaborado ou, para quem assim como eu, está aprendendo python. 💁‍♀️

Vamos explorar aqui como usar fontes diferentes e inserir a máscara de corte com base em uma imagem para dar uma personalidade para a nuvem. Além disso, dimensão de imagem e do tamanho das palavras, além das cores são alguns dos parâmetros que o word cloud permite e que vamos usar também.

PARAMETROS WORD CLOUD

Com diversos scripts disponíveis, dificilmente você não irá encontrar a melhor solução possível para ilustrar as suas informações de palavras na forma de nuvem de palavras.

Exemplo 1: Extração de conteúdo de Artigos

No primeiro exemplo, vamos criar uma nuvem de palavras com base em um artigo (Para ver como associar o tamanho das palavras a outra métrica que não seja quantidade de aparições, melhor seguir para o exemplo 2).

Para fazer a leitura de artigos, vamos usar newspaper3k. Conforme exemplo no colab, é só adicionar o link e o idioma do artigo (esse último parâmetro é opcional).

from newspaper import Article
article = Article('https://pt.wikipedia.org/wiki/Gato', 'pt-br')
article.download()
article.parse()

Você irá perceber uma série de palavras desnecessárias na primeira etapa do script. Por isso, além do atributo STOPWORDS, vamos adicionar uma lista de palavras que não queremos que apareça na nuvem:

from wordcloud import STOPWORDS

STOPWORDS = ['ver','principal','essa','vez','nas','mas','qual','principal','ele','ter','doença','pois','este','vez','ver principal','artigo principal','já','aos','pode','outro','artigo','desse','alguns','meio','entre','das','podem','esse','seu','também','são','quando','de', 'que','em','os','as','da','como','dos','ou','se','um','uma','para','na','ao','mais','por','não','ainda','muito','sua'] + list(STOPWORDS)

Para customizar a nuvem, é preciso encontrar uma imagem bem demarcada com um fundo branco como, por exemplo, essa aqui.

A partir da imagem, podemos customizar o formato e as cores da nuvem de palavras:

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.figure( figsize=(80,40) ) #ajustar tamanho imagem
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.savefig('gato.jpg')

Aqui está o resultado final:

nuvem de palavras feita em python em formato de gato

Exemplo 2: Análise de Demanda: cruzando termos com volume de buscas

Nesse caso, vou fazer uma nuvem de palavras considerando o volume de buscas das palavras, mas poderíamos utilizar a mesma lógica com impressões ou cliques do Google Search Console ou Google Ads, por exemplo.

Vamos fazer algo relacionado ao termo head tail "piano".

O primeiro passo é identificar o volume de buscas de uma lista de termos relacionados à palavra-chave piano. Para criar a lista, utilizei o Answer the Public.

Dentro do KW Planner, é só acessar o histórico de métricas, inserir a sua lista de palavras e baixar o csv com as palavras e volume de buscas (nesse caso não irei utilizar a média mensal, será apenas o volume de buscas do mês de abril de 2020 do universo do termo piano).

Dentro do Google Colab, o csv deve ser transformado em um data frame:

df = pd.read_csv('link-para-csv.csv') 

Você pode substituir o link-para-csv.csv pelo caminho do arquivo ou então por um link público do spreadsheets em formato csv por exemplo.

Com o data frame pronto, temos que transformá-lo (de lista para dicionário) pois a função que utilizaremos nesse caso requer um dicionário:

data = dict(zip(df['Keyword'].tolist(), df['Searches: Apr 2020'].tolist()))

print(data)

Para estabelecer que o tamanho das palavras é relacionado a variável de volume de buscas, vamos utilizar o parâmetro .generate_from_frequencies(data):

wc = WordCloud(background_color="white", max_words=2000,
               max_font_size=256,
               random_state=42, width=500, height=500)
wc.generate_from_frequencies(data) #ajuste do tamanho das palavras
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()

Com isso, já temos uma nuvem:

Para transformar essa nuvem em algo mais interessante visualmente, vamos utilizar o mask e o imagecolorgenerator.

A primeira etapa é escolher uma imagem para criar a máscara (deve ter fundo branco e de preferência ser relacionada à nuvem de palavras que você está criando). Eu achei essa aqui e importei no colab.

Segue nuvem de palavras gerada e o script, logo abaixo:

nuvem de palavras feita em python em formato de piano
mask_colors = ImageColorGenerator(mask)
wc = WordCloud(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_from_frequencies(data)
plt.figure( figsize=(80,40) ) #ajustar tamanho imagem
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.savefig('piano.jpg')

Links para o Google Colab

Acesse aos códigos e crie as suas próprias nuvens de palavras: