View on GitHub

AI Fundamentals – Guayerd x IBM

Repositorio educativo del curso de Fundamentos de Inteligencia Artificial

🧠 Clase 6 – Limpieza y Transformación de Datos con Python (Pandas)

🎯 Objetivos


📊 1. Limpieza y transformación de datos

Es la etapa 3 del ciclo de vida del dato, esencial para garantizar calidad antes del análisis.

Propósito:

👉 Estandarizar = aplicar criterios comunes a todo el dataset.


💾 2. Formatos de datos más comunes

Formato Descripción Ejemplo de uso
CSV Datos tabulares separados por comas Exportaciones de sistemas o Excel
JSON Datos anidados y flexibles APIs o configuraciones
Excel (.xlsx) Hojas de cálculo Informes corporativos
Bases de datos Estructuras relacionales SQL, MySQL, SQLite

📍 Pandas puede leer y escribir todos estos formatos.


🧰 3. Pandas (Panel Data)

🔹 Instalación y uso

pip install pandas

import pandas as pd

🔹 Estructuras principales

Estructura Descripción Ejemplo
Series (.s) Arreglo unidimensional (índice + valor) Columna única
DataFrame (.df) Tabla bidimensional de Series Conjunto de datos

📥 4. Lectura de archivos con Pandas

Formato Comando Parámetros útiles
CSV pd.read_csv("archivo.csv") encoding='utf-8', sep=';'
JSON pd.read_json("archivo.json") orient='records'
Excel pd.read_excel("archivo.xlsx") sheet_name="Hoja1"

➡️ Todos los comandos devuelven un DataFrame listo para analizar.


🔍 5. Inspección inicial del dataset

Aspecto Comando Descripción
Dimensiones df.shape Filas × columnas
Tipos de datos df.dtypes Variables numéricas o categóricas
Valores faltantes df.isnull().sum() Conteo de celdas vacías
Primeros registros df.head() Vista rápida del inicio
Resumen general df.info() Tipos y memoria

⚠️ 6. Desafíos comunes en los datos

Problema Descripción Ejemplo
Valores faltantes Celdas vacías o NaN Edad sin registrar
Duplicados Registros repetidos Cliente ingresado dos veces
Inconsistencias Diferentes formatos “Argentina”, “argentina”, “ARG”
Atípicos Valores extremos Salario de 999999
Tipos incorrectos Texto en lugar de número “12” en vez de 12

🧩 7. Tratamiento de valores faltantes

Estrategia Comando Descripción
Detección df.isnull() o df.isna() Identificar celdas vacías
Eliminación df.dropna() Quitar filas con valores faltantes
Rellenar con valor constante df.fillna(0) Sustituir por 0 o texto
Rellenar con estadístico df.fillna(df['columna'].median()) Usar promedio o mediana

📑 8. Eliminación de duplicados

Estrategia Comando Descripción
Detección df.duplicated() Marca duplicados (True/False)
Eliminación total df.drop_duplicates() Quita duplicados completos
Por columnas df.drop_duplicates(subset=['col1', 'col2']) Según variables clave
Mantener primero/último keep='first' o keep='last' Conserva uno

🧮 9. Inconsistencias de formato

Tipo Solución Ejemplo
Texto .str.lower(), .str.strip() “ Cliente ” → “cliente”
Fechas pd.to_datetime(df['fecha']) Unificar formato fecha
Números pd.to_numeric(df['precio']) Asegurar tipo numérico
Categorías Reemplazar variaciones “Sí”, “si”, “SI” → “Sí”

📊 10. Valores atípicos (outliers)

Definición: Datos que se alejan mucho del resto del conjunto.

Métodos para tratarlos:


🔢 11. Tipos de datos incorrectos

Acción Comando Descripción
Verificar df.dtypes Mostrar tipo actual
Convertir manualmente df['columna'].astype('int') Cambiar tipo
Fechas pd.to_datetime() Estandarizar fechas
Números pd.to_numeric() Forzar conversión

🔄 12. Transformaciones básicas

Operación Comando Descripción
Filtrado df[df['columna'] > 100] Subconjunto de datos
Agrupación df.groupby('columna').mean() Promedios por grupo
Ordenamiento df.sort_values('columna') Ordenar registros
Selección df[['col1', 'col2']] Elegir columnas específicas

☕ Ejercicio – “Café de barrio”

Datos

Mes Ventas ($) Temp (°C) Publicidad ($) Personal Satisfacción
Ene 15000 18 800 4 4.2
Feb 22000 25 1200 5 4.5
Mar 18000 22 900 4 4.1
Abr 28000 28 1500 6 4.8
May 25000 30 1300 5 4.6

🧩 Tareas

Solución en Pandas:

import pandas as pd

# --- Creación del DataFrame ---
# Se define un diccionario con los datos del café.
data = {
    'Mes': ['Ene','Feb','Mar','Abr','May'],
    'Ventas': [15000,22000,18000,28000,25000],
    'Temp': [18,25,22,28,30],
    'Publicidad': [800,1200,900,1500,1300],
    'Personal': [4,5,4,6,5],
    'Satisfaccion': [4.2,4.5,4.1,4.8,4.6]
}
# Se convierte el diccionario a un DataFrame de Pandas para poder analizarlo.
df = pd.DataFrame(data)


# --- Tarea 1: Calcular la correlación entre temperatura y ventas ---
# Se seleccionan las dos columnas y se aplica el método .corr() para ver su relación.
correlacion_temp_ventas = df['Temp'].corr(df['Ventas'])
print(f"1. Correlación Temperatura-Ventas: {correlacion_temp_ventas:.4f}")


# --- Tarea 2: Identificar el mes con mejor retorno publicitario ---
# Se calcula una nueva columna 'Retorno_Publicitario', dividiendo las ventas entre el gasto de publicidad.
df['Retorno_Publicitario'] = df['Ventas'] / df['Publicidad']
# Se busca el índice de la fila con el valor más alto en la nueva columna 'Retorno_Publicitario'.
indice_max_retorno = df['Retorno_Publicitario'].idxmax()
# Se usa .loc para obtener el nombre del 'Mes' en la fila con el mayor retorno.
mes_max_retorno = df.loc[indice_max_retorno, 'Mes']
print(f"2. Mes con mejor retorno publicitario: {mes_max_retorno}")


# --- Tarea 3: Analizar la relación entre personal y satisfacción ---
# Se calcula la correlación entre las columnas 'Personal' y 'Satisfaccion'.
correlacion_personal_satisfaccion = df['Personal'].corr(df['Satisfaccion'])
print(f"3. Correlación Personal-Satisfacción: {correlacion_personal_satisfaccion:.4f}")

🧱 13. Proyecto – Tienda Aurelion

Tareas del equipo: