Ejercicio 14: Análisis de Datos y Visualización con Python

Este ejercicio tiene como objetivo que los estudiantes trabajen con procesamiento de datos utilizando Pandas y NumPy, y visualización de datos con Plotnine. Se analizarán datos de una base sobre asesinos en serie, realizando transformaciones, normalizaciones y distintas representaciones gráficas.

Objetivos

  • Cargar y explorar un dataset utilizando Pandas.
  • Realizar transformaciones y normalizaciones de datos.
  • Crear visualizaciones para analizar tendencias y patrones.
  • Ajustar modelos de regresión y evaluar su ajuste a los datos.

Entrada de Datos

  • Archivo CSV: serial_killers.csv con las siguientes columnas:
    • Country: País
    • Serial killers: Cantidad total de asesinos en serie registrados
    • Population (millions): Población en millones

Parte A: Carga y Exploración de Datos

Tareas

  1. Cargar el dataset en un DataFrame de Pandas y explorar su contenido.
  2. Crear una nueva columna llamada serial_killers_norm, que represente el número de asesinos en serie por millón de habitantes.
  3. Ordenar los datos por el número total de asesinos (serial_killers) y asignar un ranking en la columna rank.
  4. Reordenar los datos por serial_killers_norm y asignar un nuevo ranking en rank_norm.
  5. Normalizar ambas métricas (serial_killers y serial_killers_norm) dividiendo por su valor máximo, almacenando los resultados en serial_killers_nondim y serial_killers_norm_nondim.

Pregunta de reflexión

  • ¿Por qué es importante normalizar los datos antes de compararlos?
import pandas as pd

# Cargar el dataset
# TODO: Implementar

# Crear la columna 'serial_killers_norm'
# TODO: Implementar

# Ordenar y asignar rankings
# TODO: Implementar

# Normalizar las métricas
# TODO: Implementar

Parte B: Visualización de Datos

Tareas

  1. Gráfico: Relación entre población y número de asesinos en serie

    • Crear un gráfico de dispersión de serial_killers contra population_millions.
    • Representar los valores en escala logarítmica para ambas variables.
    • Agregar etiquetas de país a cada punto.
  2. Gráfico: Comparación de rankings absolutos y normalizados

    • Graficar la relación entre rank y rank_norm.
    • Usar segmentos para visualizar cómo cambia el ranking al normalizar los datos.
    • Etiquetar los países en cada ranking.
  3. Gráfico: Comparación de valores normalizados

    • Visualizar serial_killers_nondim y serial_killers_norm_nondim en un mismo gráfico.
    • Aplicar escala logarítmica para el eje Y.
    • Etiquetar los países en cada punto.
import plotnine as p9

# Gráfico de dispersión
# TODO: Implementar

# Gráfico de comparación de rankings
# TODO: Implementar

# Gráfico de comparación de valores normalizados
# TODO: Implementar

Parte C: Ajuste de Modelos y Tendencias

Tareas

  1. Generación de datos temporales

    • Crear una serie de datos con time (tiempo) y value (cantidad de eventos en cada período).
    • Ajustar un polinomio de grado 1 (recta) y un polinomio de grado 9 a los datos.
    • Evaluar los coeficientes de cada ajuste.
  2. Gráfico: Comparación de ajustes polinomiales

    • Graficar los datos reales junto con las predicciones de los polinomios ajustados.
    • Usar facetas para mostrar ambos modelos en gráficos separados.
    • Comparar los resultados y reflexionar sobre sobreajuste (overfitting).

Preguntas de reflexión

  1. ¿Por qué es peligroso usar polinomios de alto grado en modelos predictivos?
  2. ¿Cómo podemos evaluar si un modelo se ajusta bien a los datos?
import numpy as np

# Generación de datos temporales y ajuste de polinomios
# TODO: Implementar

# Gráfico de comparación de ajustes polinomiales
# TODO: Implementar

Entrega esperada

  • Código bien estructurado en Python utilizando Pandas y Plotnine.
  • Gráficos claros y correctamente etiquetados.
  • Análisis de los resultados con reflexiones sobre normalización, ajuste de modelos y calidad de las predicciones.