Crea tu propia nube de palabras (Word Cloud)

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

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

     

    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.

    Te puede interesar:  Los fundamentos de las matrices NumPy | Numpy Arrays - Guía 2021

    [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:  Negocios y Ciencia 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

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir