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ísSerial killers
: Cantidad total de asesinos en serie registradosPopulation (millions)
: Población en millones
Parte A: Carga y Exploración de Datos
Tareas
- Cargar el dataset en un DataFrame de Pandas y explorar su contenido.
- Crear una nueva columna llamada
serial_killers_norm
, que represente el número de asesinos en serie por millón de habitantes. - Ordenar los datos por el número total de asesinos (
serial_killers
) y asignar un ranking en la columnarank
. - Reordenar los datos por
serial_killers_norm
y asignar un nuevo ranking enrank_norm
. - Normalizar ambas métricas (
serial_killers
yserial_killers_norm
) dividiendo por su valor máximo, almacenando los resultados enserial_killers_nondim
yserial_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
Gráfico: Relación entre población y número de asesinos en serie
- Crear un gráfico de dispersión de
serial_killers
contrapopulation_millions
. - Representar los valores en escala logarítmica para ambas variables.
- Agregar etiquetas de país a cada punto.
- Crear un gráfico de dispersión de
Gráfico: Comparación de rankings absolutos y normalizados
- Graficar la relación entre
rank
yrank_norm
. - Usar segmentos para visualizar cómo cambia el ranking al normalizar los datos.
- Etiquetar los países en cada ranking.
- Graficar la relación entre
Gráfico: Comparación de valores normalizados
- Visualizar
serial_killers_nondim
yserial_killers_norm_nondim
en un mismo gráfico. - Aplicar escala logarítmica para el eje Y.
- Etiquetar los países en cada punto.
- Visualizar
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
Generación de datos temporales
- Crear una serie de datos con
time
(tiempo) yvalue
(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.
- Crear una serie de datos con
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
- ¿Por qué es peligroso usar polinomios de alto grado en modelos predictivos?
- ¿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.