MAT281 - Laboratorio N°04: Manipulacion de Datos con Pandas II¶
Objetivos del laboratorio¶
- Agregar y resumir informacion con
groupbyy funciones de agregacion. - Aplicar agregaciones multiples y funciones personalizadas.
- Combinar tablas con
concatymerge(distintos tipos de join). - Reorganizar datos entre formatos wide y long (
pivot/melt). - Construir un flujo de analisis exploratorio sobre datos reales.
Instrucciones¶
Lea con atencion cada problema antes de resolverlo. Reemplace cada celda que contiene # FIXME con su propia solucion y, cuando se solicite, responda las preguntas en celdas de texto.
Nota: Puede apoyarse en asistentes virtuales (ChatGPT, Gemini, Claude) o en el autocompletado de Colab, pero asegurese de entender cada linea de codigo que entregue.
In [ ]:
Copied!
import pandas as pd
import numpy as np
import pandas as pd
import numpy as np
Dataset: Indice de Libertad de Prensa¶
Trabajaremos con tres archivos:
libertad_prensa_01.csvylibertad_prensa_02.csv: indicadores por pais en distintos periodos.libertad_prensa_codigo.csv: tabla de codigos/paises para combinar.
In [ ]:
Copied!
df1 = pd.read_csv("https://raw.githubusercontent.com/fralfaro/MAT281/main/docs/labs/data/libertad_prensa_01.csv")
df2 = pd.read_csv("https://raw.githubusercontent.com/fralfaro/MAT281/main/docs/labs/data/libertad_prensa_02.csv")
cod = pd.read_csv("https://raw.githubusercontent.com/fralfaro/MAT281/main/docs/labs/data/libertad_prensa_codigo.csv")
display(df1.head())
display(df2.head())
display(cod.head())
df1 = pd.read_csv("https://raw.githubusercontent.com/fralfaro/MAT281/main/docs/labs/data/libertad_prensa_01.csv")
df2 = pd.read_csv("https://raw.githubusercontent.com/fralfaro/MAT281/main/docs/labs/data/libertad_prensa_02.csv")
cod = pd.read_csv("https://raw.githubusercontent.com/fralfaro/MAT281/main/docs/labs/data/libertad_prensa_codigo.csv")
display(df1.head())
display(df2.head())
display(cod.head())
Problema 01 — Concatenacion¶
Tu tarea:
- Inspecciona las columnas de
df1ydf2. Si comparten estructura, concatenalos verticalmente (pd.concat) en un unico DataFramedf. - Reporta cuantas filas tiene el resultado y verifica que no se hayan perdido datos.
In [ ]:
Copied!
# FIXME
# FIXME
Problema 02 — Groupby basico¶
Usando el DataFrame combinado:
Tu tarea:
- Calcula el puntaje promedio del indice por año.
- Calcula, por region/continente (la columna que corresponda), el promedio, minimo y maximo del indice.
- ¿Cual es el grupo con el peor indice promedio?
In [ ]:
Copied!
# FIXME
# FIXME
Problema 03 — Agregaciones multiples y funciones personalizadas¶
Tu tarea:
- Usando
.agg(), calcula simultaneamentemean,stdycountdel indice por grupo. - Define una funcion personalizada
rango(x)que retornex.max() - x.min()y aplicala congroupby(...).agg(rango).
In [ ]:
Copied!
def rango(x):
# FIXME
pass
# FIXME
def rango(x):
# FIXME
pass
# FIXME
Problema 04 — Merge (combinar tablas)¶
Tu tarea:
- Combina (
pd.merge) el DataFrame de indices con la tabla de codigoscodusando la columna comun (codigo o nombre de pais). - Usa un
how="left"y verifica cuantos paises no encontraron coincidencia. - Explica brevemente la diferencia entre un
inner,leftyouterjoin.
In [ ]:
Copied!
# FIXME
# FIXME
Respuesta (joins): (explica aqui)
Problema 05 — Formatos wide y long¶
Tu tarea:
- Construye una tabla wide con
pivot_table: filas = pais, columnas = año, valores = indice. - Vuelve al formato long con
melt. - Pregunta: ¿en que situaciones es preferible el formato long (por ejemplo, para graficar con seaborn)?
In [ ]:
Copied!
# FIXME
# FIXME
Respuesta: (escribe aqui)