web analytics

Crea tu propia nube de palabras (Word Cloud)

word cloud 5

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.

[wp_ad_camp_1]

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.

Índice
  1. Instalando el paquete
  2. Stopwords
  3. Graficando la nube
  4. Limpiando palabras no importantes
  5. Usando máscaras

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í

Te puede interesar:  Clases en Python [Guía Completa]

[wp_ad_camp_2]

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

[wp_ad_camp_3]

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()

 

Te puede interesar:  Cómo crear un keylogger usando Python

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.

[wp_ad_camp_4]

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.

Te puede interesar:  Introducción a APIs de datos

[wp_ad_camp_5]

# 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

  1. Tony dice:

    Muito bom suas explicações Antares! Estou na caminhada
    para chegar no ouro ainda esse ano. Caminho tá bem longe pois não
    sei fazer muito wager num dia k k k

  2. Earlene dice:

    Very well done and written mmy friend.
    I've just started blogging very recently and realized that lot of writers merely rewoek old ideas but add very little of value.
    It's terrific to see a useul article of some true value to myself and your other
    followers.
    It's on my list of details I need to replicate as a new blogger.
    Reader engagement and material value are king.

    Some fantastic ideas; you'veunquestionably made it on mmy llist of people tto watch!

    Continue the exceloent work!
    Congratulations,
    Shaine

Deja una respuesta

Subir