Crea tu propia nube de palabras (Word Cloud)

Compartir

Nubes de palabras usando python

 

Las nubes de palabras (también conocidas como nubes de texto o nubes de etiquetas o en inglés word clouds) funcionan de manera simple: cuanto más aparece una palabra específica en una fuente de datos textuales (como un discurso, publicación de blog o base de datos), más grande y audaz aparece en la nube.

Afortunadamente, ya existe un paquete de Python para generar nubes de palabras. El paquete, llamado word_cloud, fue desarrollado por Andreas Mueller. Puede obtener más información sobre el paquete siguiendo este enlace.

Usemos este paquete para aprender cómo generar una nube de palabras para un documento de texto dado.

Primero, instalemos el paquete.

Instalando el paquete

# instalar wordcloud
!conda install -c conda-forge wordcloud==1.4.1 --yes

# importar paquete y el set stopwords
from wordcloud import WordCloud, STOPWORDS

print ('Wordcloud está instalado e importado!')

 

Las nubes de palabras se usan comúnmente para realizar análisis de alto nivel y visualización de datos de texto. En consecuencia,  trabajemos con un ejemplo que implique el análisis de datos de texto. Intentemos analizar una novela corta escrita por Lewis Carroll titulada Alice’s Adventures in Wonderland. Avancemos y descarguemos un archivo .txt de la novela. Puedes descargarlo clickando aquí

# descargar archivo y guardar como alice_novel.txt
!wget --quiet https://gist.github.com/89b87cfdbab308e62748748c66d9ec92

# abrir el archivo y guardarlo en la variable alice_novel
alice_novel = open('alice_novel.txt', 'r', encoding='latin-1').read()
    
print ('Archivo descargado y guardado!')

 

Stopwords

A continuación, usemos stopwords que importamos de word_cloud. Usamos el conjunto de funciones para eliminar stopwords redundantes.

stopwords = set(STOPWORDS)

 

Cree un objeto de nube de palabras y genere una nube de palabras. Para simplificar, generemos una nube de palabras utilizando solo las primeras 2000 palabras de la novela.

alice_wc = WordCloud(
    background_color='white',
    max_words=274058,
    stopwords=stopwords
)

# generate the word cloud
alice_wc.generate(alice_novel)

 

Graficando la nube

¡Increíble! Ahora que se creó la nube de palabras, visualicémosla.

# graficar la nube de palabras
plt.imshow(alice_wc, interpolation='bilinear')
plt.axis('off')
plt.show()

 

word cloud 2

¡Interesante! Entonces, en las primeras 2000 palabras de la novela, las palabras más comunes son Alice, said, little, Queen, y así sucesivamente. Cambiemos el tamaño de la nube para que podamos ver las palabras menos frecuentes un poco mejor.

fig = plt.figure()
fig.set_figwidth(14) # set width
fig.set_figheight(18) # set height

# graficar la nube
plt.imshow(alice_wc, interpolation='bilinear')
plt.axis('off')
plt.show()

 

word cloud 3

Limpiando palabras no importantes

¡Mucho mejor! Sin embargo, said no es realmente una palabra importante o informativa. Añádalo a nuestras stopwords y vuelva a generar la nube.

stopwords.add('said')
stopwords.add('come')
stopwords.add('went')
stopwords.add('way')


# regenerar la nube
alice_wc.generate(alice_novel)

# graficar la nube
fig = plt.figure()
fig.set_figwidth(14) # set width
fig.set_figheight(18) # set height

plt.imshow(alice_wc, interpolation='bilinear')
plt.axis('off')
plt.savefig("resultado2.png")
plt.show()

 

word cloud 4

Usando máscaras

¡Excelente! ¡Esto se ve realmente interesante! Otra cosa interesante que puede implementar con el paquete word_cloud es superponer las palabras en una máscara de cualquier forma. Usemos una máscara de Alice y su conejo. Ya hemos creado la máscara para usted, así que vamos a descargarla y llamarla alice_mask.png.

# descargar imagen
!wget --quiet https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DV0101EN/labs/Images/alice_mask.png
    
# guardar máscara como alice_mask
alice_mask = np.array(Image.open('alice_mask.png'))
    
print('Imagen descargada y guardada!')

 

Para mostrar la imagen

fig = plt.figure()
fig.set_figwidth(14) # set width
fig.set_figheight(18) # set height

plt.imshow(alice_mask, cmap=plt.cm.GnBu, interpolation='bilinear')
plt.axis('off')
plt.show()

 

Dar forma a la nube de palabras según la máscara es sencillo con el paquete word_cloud. Para simplificar, continuaremos usando las primeras 2000 palabras de la novela.

# iniciar un objeto de nube de palabras
alice_wc = WordCloud(background_color='WHITE', max_words=274058, mask=alice_mask, stopwords=stopwords)

# generar la nube de palabras
alice_wc.generate(alice_novel)

# graficar la nube de palabras
fig = plt.figure()
fig.set_figwidth(14) # set width
fig.set_figheight(18) # set height

plt.imshow(alice_wc, interpolation='bilinear')
plt.axis('off')
plt.savefig("resultado.png")
plt.show()

word cloud 5

 

Realmente muy llamativo.

Te invito a que lo pruebes con un libro que te guste y no solo analizando las primeras 2000 palabras sino todo el texto completo, importante que el formato esté en .txt

En la caja de comentarios espero ver los enlaces a sus nubes de palabras.  =D


Compartir

Entradas relacionadas

Deja tu comentario