Tutorial Hands-on: Análisis de datos con Pandas

Análisis de Datos con Pandas: Guía Práctica para E-commerce

Introducción al Análisis con Pandas

En este tutorial práctico, aprenderás a procesar y analizar datos de ventas e-commerce usando Pandas. Trabajaremos con un dataset real que contiene:

  • Información de pedidos
  • Datos de productos
  • Registros de clientes
  • Ubicaciones geográficas

1. Configuración Inicial

Instalación de Bibliotecas

pip install pandas numpy matplotlib seaborn plotly

Importación de Módulos

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

2. Exploración Inicial de Datos

Carga del Dataset

df = pd.read_csv('ventas_ecommerce.csv')

Primera Inspección

# Vista general
print(df.info())

# Estadísticas descriptivas
print(df.describe())

# Valores únicos por columna
print(df.nunique())

3. Limpieza de Datos Profesional

Manejo de Valores Faltantes

# Porcentaje de valores nulos por columna
print(df.isnull().mean() * 100)

# Estrategias de limpieza
df['columna_critica'] = df['columna_critica'].fillna(df['columna_critica'].median())
df.dropna(subset=['columna_importante'], inplace=True)

Eliminación de Duplicados

df.drop_duplicates(inplace=True)

Corrección de Formatos

# Conversión de tipos
df['fecha'] = pd.to_datetime(df['fecha'])
df['precio'] = df['precio'].astype(float)

# Normalización de textos
df['categoria'] = df['categoria'].str.upper().str.strip()

4. Análisis Avanzado

Feature Engineering

# Creación de nuevas características
df['valor_total'] = df['cantidad'] * df['precio']
df['mes_venta'] = df['fecha'].dt.month

Agregaciones con GroupBy

ventas_por_categoria = df.groupby('categoria').agg({
    'valor_total': ['sum', 'mean', 'count'],
    'cliente_id': pd.Series.nunique
}).rename(columns={'cliente_id': 'clientes_unicos'})

Análisis Temporal

ventas_mensuales = df.resample('M', on='fecha')['valor_total'].sum()
ventas_mensuales.plot(title='Ventas Mensuales')

5. Visualización de Datos

Gráficos Básicos con Pandas

df['categoria'].value_counts().plot(kind='bar', title='Ventas por Categoría')

Visualización Avanzada con Seaborn

sns.boxplot(x='categoria', y='valor_total', data=df)
plt.title('Distribución de Ventas por Categoría')
plt.xticks(rotation=45)

Dashboard Interactivo con Plotly

import plotly.express as px

fig = px.sunburst(df, path=['region', 'categoria'], values='valor_total')
fig.show()

6. Optimización de Rendimiento

Técnicas de Vectorización

# Anti-patrón (lento)
for i, row in df.iterrows():
    df.at[i, 'nueva_col'] = row['precio'] * 1.1

# Buenas prácticas (rápido)
df['nueva_col'] = df['precio'] * 1.1

Reducción de Memoria

# Conversión a tipos óptimos
df['id_producto'] = df['id_producto'].astype('category')
df['precio'] = pd.to_numeric(df['precio'], downcast='float')

7. Casos de Negocio Reales

Análisis de Cohortes

# Creación de cohortes
df['cohorte'] = df['fecha'].dt.to_period('M')
cohortes = df.groupby(['cohorte', 'mes_venta']).agg({'cliente_id': pd.Series.nunique})

Pruebas A/B

grupo_control = df[df['grupo'] == 'A']['conversion']
grupo_prueba = df[df['grupo'] == 'B']['conversion']

from scipy import stats
t_test = stats.ttest_ind(grupo_control, grupo_prueba)
print(f"Resultado t-test: {t_test.pvalue:.4f}")

8. Exportación de Resultados

Guardado de Datos

# Formato CSV
df.to_csv('datos_limpios.csv', index=False)

# Formato Excel
ventas_por_categoria.to_excel('analisis_ventas.xlsx')

# Formato Pickle (alto rendimiento)
df.to_pickle('datos_optimizados.pkl')

9. Buenas Prácticas

  1. Documentación: Comenta cada transformación importante
  2. Modularización: Crea funciones reutilizables
  3. Validación: Implementa checks de calidad de datos
  4. Versionado: Guarda versiones limpias del dataset

Checklist Final

  • [ ] Exploración inicial completa
  • [ ] Datos limpios y normalizados
  • [ ] Features relevantes creadas
  • [ ] Análisis clave realizados
  • [ ] Visualizaciones efectivas
  • [ ] Resultados exportados

Recursos Adicionales

¡Ahora estás listo para analizar datos de e-commerce como un profesional con Pandas! 🚀


Publicado

en

por

Etiquetas:

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *