Visualización de datos

Clase 34 de 38Curso de Ingeniería de Datos con Python

Contenido del curso

Web scraping

Pandas

Resumen

Con Pandas y Jupyter Notebook es posible entender la composición de textos periodísticos en minutos. A partir de datasets limpios en formato CSV, el uso de métodos descriptivos, máscaras booleanas y gráficas con Matplotlib permite detectar patrones editoriales: El País publica notas más largas y El Universal concentra piezas breves, sin que exista relación evidente entre tokens del title y del body.

¿Qué revela el análisis descriptivo con pandas?

Comienza leyendo los CSV limpios y aplicando el método describe. Este entrega una panorámica de las distribuciones: media, mínimo y máximo para columnas numéricas. Un hallazgo llamativo surge al revisar tokens_title: hay casos con mínimo igual a 0. Al inspeccionarlos con una máscara booleana se confirma que no están vacíos: el title quedó en 0 porque se compone solo de stop words y fueron removidas.

Tras habilitar la magia de %matplotlib inline, se crean gráficas rápidas. La dispersión de tokens en title muestra comportamientos muy similares entre ambos diarios: la mayoría de títulos tienen entre 3 y 6 palabras. La diferencia aparece en el body: El País agrupa la mayor parte de sus artículos entre 300 y 700 palabras, mientras que El Universal se concentra entre 100 y 300. Con un pd.concat y un groupby por identificador de periódico, los histogramas refuerzan esta separación. Finalmente, una comparación gráfica entre tokens_title y tokens_body no sugiere relación clara entre ambos.

¿Cómo se validan los mínimos en tokens del título?

  • Aplicar describe para detectar valores atípicos o mínimos en 0.
  • Usar una máscara booleana con .loc para ver las filas problemáticas.
  • Interpretar el resultado: 0 puede indicar solo stop words, no vacío real.

¿Qué diferencias editoriales aparecen en el body?

  • El País: artículos extensos, entre 300 y 700 palabras.
  • El Universal: piezas breves, entre 100 y 300 palabras.
  • Implicación: políticas editoriales distintas sobre longitud y profundidad.

¿Cómo explorar datos con código reproducible?

Antes de graficar, carga datasets y explora con métodos de Pandas. Luego, habilita %matplotlib inline para ver las figuras dentro de Jupyter Notebook y compara distribuciones con plot e histogramas por grupo.

# Carga de datos import pandas as pd universal = pd.read_csv('ruta/a/clean_el_universal.csv') pais = pd.read_csv('ruta/a/clean_el_pais_2018.csv') # Estadísticos descriptivos universal.describe() pais.describe() # Inspección de títulos con 0 tokens pais.loc[pais['tokens_title'] == 0] # Gráficas en Jupyter %matplotlib inline # Comparación rápida de tokens en títulos pais['tokens_title'].plot(style='k.', label='El País') universal['tokens_title'].plot(style='r.', label='El Universal') # Comparación en body pais['tokens_body'].plot(style='k.', label='El País') universal['tokens_body'].plot(style='r.', label='El Universal') # Concatenación y comparación por periódico all_newspapers = pd.concat([universal, pais]) # Histograma de tokens del body por uid de periódico all_newspapers.groupby('newspaper_uid')['tokens_body'].hist(alpha=0.6) # Agregaciones por uid: mínimo, media y máximo all_newspapers.groupby('newspaper_uid')['tokens_body'].agg(['min', 'mean', 'max']) # Relación entre tokens de title y body all_newspapers.plot.scatter(x='tokens_title', y='tokens_body', alpha=0.3)

¿Qué tipo de gráficas conviene usar aquí?

  • Dispersión con estilo 'k.' o 'r.' para comparar series rápidas.
  • Histogramas por grupo con groupby y hist.
  • Agregaciones con .agg para min, mean y max.
  • Dispersión tokens_title vs tokens_body para revisar dependencia.

¿Qué patrones, conceptos y keywords conviene retener?

La exploración revela patrones editoriales y afianza habilidades clave para análisis descriptivo con Pandas.

  • Método describe: media, mínimo, máximo para comprender distribuciones.
  • Máscara booleana con .loc: filtrado preciso para validar supuestos.
  • Stop words y conteo de tokens: un título con 0 puede no estar vacío.
  • %matplotlib inline: mostrar gráficos dentro de Jupyter Notebook.
  • plot con estilo 'k.' y 'r.': comparación visual rápida por puntos.
  • pd.concat: unir DataFrames para análisis conjunto.
  • groupby + hist: contrastar distribuciones por newspaper_uid.
  • .agg con ['min', 'mean', 'max']: tabla sintética de métricas clave.
  • Resultado central: no se observa relación clara entre tokens del title y del body.
  • Insight editorial: El Universal publica textos cortos; El País apuesta por notas más largas.

¿Te gustaría replicar este análisis con otros medios o columnas de texto? Comparte tus dudas, ideas o variantes en los comentarios.