Visualización de datos: dispersión léxica y wordcloud

| Última modificación: 8 de julio de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En este post veremos cómo funciona la visualización de datos de tipo string con dispersión léxica y wordcloud. La dispersión léxica y wordcloud (que significa nube de palabras) son otras formas de representar el texto. Veamos en qué consiste cada una de estas dos técnicas.

Dispersión léxica y wordcloud

Wordcloud

Lo primero que haremos en este ejercicio de visualización de datos es generar los tokens dentro de la frase para visualizarlos de una forma más representativa. La función de wordcloud va a generar internamente el cálculo de las frecuencias y nos va a mostrar un “gráfico” mucho más elegante:

#Dispersión léxica y wordcloud
import matplotlib.pyplot as plt
from wordcloud import WordCloud

Vamos a insertarle a este algoritmo algunos parámetros, como el tamaño de la fuente, el número máximo de palabras que esperamos que se use en la visualización o el fondo que queremos, entre otras cosas que podemos añadirle.

Para poner esto en una wordcloud lo que debemos hacer es pasarle el texto a la función en forma de lista.

#Dispersión léxica y wordcloud
def plot_word_cloud (text):
       wordcloud = WordCloud (max_font_size = 50, max_words = 10, background_color = "white").generate ('  '.join (text))
       plt.figure (  figsize = (12, 6))
       plt.imshow (wordcloud, interpolation = 'bilinear')
       plt.axis ('off')
       plt.show ()

Luego declaramos el texto, lo pasamos a minúsculas, le quitamos los espacios que están al principio y al final y lo separamos en tokens:

#Dispersión léxica y wordcloud
words_list = text.lower ().strip ().split ()
plot_word_cloud (words_list)

Dispersión léxica

Otra visualización bastante importante y de gran utilidad de cara al tema de visualización de texto es la dispersión léxica.

La dispersión léxica consiste en determinar, dada una palabra, cuánto tarda en volver a repetirse a lo largo de un texto. Es decir, si el texto empieza por la palabra “language” y luego esta se repite 20 palabras más tarde, guardaremos este dato y después lo mostraremos en una especie de gráfico que nos permitirá visualizar cómo es esa dispersión.

Lo que se busca evaluar con la dispersión léxica es si una o varias palabras se repiten mucho, de forma muy frecuente y muy cercana en el texto, o se repiten cada mucho tiempo en un texto muy grande.

#Dispersión léxica y wordcloud
import nltk
nltk.download ('book')
from nltk.book import text4
nltk.data.path

Para hacer este ejercicio de dispersión, nltk tiene una función denominada dispersion_plot, en la que solo tenemos que pasar los datos para que esta nos haga el resto del trabajo:

#Dispersión léxica y wordcloud
import os
import glob
import matplotlib.pyplot as plt
from nltk.draw.dispersion import dispersion_plot
#Dispersión léxica y wordcloud
! wget https://transfer.sh/KWNxRn/datasets.zip
#Dispersión léxica y wordcloud
! unzip datasets.zip

Aquí estamos usando un dataset porque necesitamos una gran cantidad de datos para ver cómo funciona la dispersión de manera óptima. Si utilizamos textos muy cortos, nos van a salir muy pocas o, incluso, una sola pestaña de visualización:

#Dispersión léxica y wordcloud
inaugural_folder = './datasets/inaugural'
inaugural_paths = [os.path.join (inaugural_folder, file) for file insorted (os.listdir (inaugural_folder)) if '.txt' in file]
#Dispersión léxica y wordcloud
inaugural_paths

Vamos a leer los datos:

#Dispersión léxica y wordcloud
texts = list ()
for file_path in inaugural_paths:
      with open (file_path, mode = 'r', encoding = 'latin - 1') as f:
               texts.append (f.read ())

Ahora visualizaremos los mil primeros caracteres del texto:

#Dispersión léxica y wordcloud
print (texts [0] [:1000])

Fellow – Citizens of the Senate and of the House of Representatives:

Among the vicissitudes incident to life no event could have filled me with greater anxieties than that of which the notification was transmitted by your order…

#Dispersión léxica y wordcloud
words = [word.lower () for text in texts for word in text.split ()]

Ahora verificaremos cuáles son las palabras que queremos trackear en nuestro texto:

target_words = [
'democracy',
'citizens',
'freedom',
'duties',
'america'
]

Ahora simplemente haremos el dispersion_plot con las palabras que hemos escogido y observamos los resultados:

#Dispersión léxica y wordcloud
plt.figure (figsize = (12, 9))
plt.style.use ('default')
dispersion_plot (words, target_words, ignore_case = True)
plt.show ()
Dispersión léxica y wordcloud

Cada punto azul es una aparición de esa palabra a lo largo de los textos.

Veamos, por ejemplo, el primer caso: la palabra democracia. El primer punto de la palabra democracia representa que entre la primera y la próxima palabra democracia han pasado 20000 palabras (el número en la parte inferior).

Para poder acceder a las opciones laborales del Big Data, una de las áreas con mejores sueldos y mayor demanda, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Con esta formación intensiva adquirirás los conocimientos imprescindibles para abrirte paso en el mundillo en poco tiempo. ¡Da el paso que impulsará tu carrera y entra ahora para pedir información!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado