¡Hola a todos y bienvenidos a mi espacio de aprendizaje! Hoy, me emociona guiarlos a través de un viaje práctico en el mundo del análisis de datos con Python. Como saben, la teoría es importante, pero es en la práctica donde realmente consolidamos nuestros conocimientos. Por eso, he preparado este artículo para que, juntos, dominemos los fundamentos del análisis de datos de una manera muy aplicada, utilizando herramientas reales y enfrentando desafíos comunes.

Mi objetivo principal con este artículo es que, al finalizarlo, ustedes se sientan cómodos y capaces de abordar proyectos de análisis de datos desde cero. Aprenderemos a cargar datos, limpiarlos, explorarlos a fondo, crear visualizaciones impactantes y, lo más importante, interpretar nuestros hallazgos para tomar decisiones informadas.

Metodología: Nuestros Compañeros de Viaje – Los Datasets

Para hacer este aprendizaje lo más realista posible, he seleccionado dos datasets que nos permitirán explorar diferentes facetas del análisis de datos. Nuestro primer compañero será el famoso dataset del Titanic, ideal para sumergirnos en el mundo de la limpieza y el preprocesamiento de datos. Luego, nos aventuraremos con el dataset de California Housing, perfecto para desarrollar nuestras habilidades en el análisis exploratorio, la visualización y la interpretación de resultados.

He estructurado este artículo para que cada sección sea un pequeño proyecto en sí mismo, con objetivos de aprendizaje claros:

  • Carga y Limpieza con el Titanic: Aprenderemos a identificar y manejar datos faltantes, duplicados y a transformar variables para que estén listas para el análisis.
  • Exploración y Visualización con California Housing: Descubriremos patrones, relaciones y anomalías en los datos a través de diversas técnicas de visualización.
  • Interpretación y Conclusión: Traduciremos nuestros hallazgos técnicos en conocimientos accionables.

Cada línea de código que verán está pensada para ser clara, comentada y reproducible. Mi idea es que ustedes puedan replicar todo el proceso en sus propias máquinas y experimentar de primera mano el poder de Python en el análisis de datos.

Códigos: Manos a la Obra

Proyecto 1: Limpieza y Preprocesamiento del Dataset del Titanic

El primer paso en cualquier proyecto de análisis de datos es cargar nuestros datos. Para este proyecto, utilizaremos la librería pandas, que es una herramienta indispensable para trabajar con datos tabulares en Python.

Objetivo de Aprendizaje: Cargar un dataset y realizar una inspección inicial para entender su estructura y la presencia de datos faltantes.

import pandas as pd
import numpy as np

# Cargar el dataset del Titanic
try:
    titanic_df = pd.read_csv('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')
    print("Dataset del Titanic cargado exitosamente.")
except Exception as e:
    print(f"Error al cargar el dataset: {e}")

# Inspección inicial
print("\nPrimeras 5 filas del dataset:")
print(titanic_df.head())

print("\nInformación general del dataset:")
print(titanic_df.info())

print("\nConteo de valores nulos por columna:")
print(titanic_df.isnull().sum())


📊 Salida:

Dataset del Titanic cargado exitosamente.

Primeras 5 filas del dataset:
   PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0            1         0       3  ...   7.2500   NaN         S
1            2         1       1  ...  71.2833   C85         C
2            3         1       3  ...   7.9250   NaN         S
3            4         1       1  ...  53.1000  C123         S
4            5         0       3  ...   8.0500   NaN         S

[5 rows x 12 columns]

Información general del dataset:

RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    str    
 4   Sex          891 non-null    str    
 5   Age          714 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    str    
 9   Fare         891 non-null    float64
 10  Cabin        204 non-null    str    
 11  Embarked     889 non-null    str    
dtypes: float64(2), int64(5), str(5)
memory usage: 118.9 KB
None

Conteo de valores nulos por columna:
PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64


Como pueden observar, las columnas ‘Age’, ‘Cabin’ y ‘Embarked’ tienen valores nulos. ‘Cabin’ tiene un porcentaje muy alto de valores nulos, lo que sugiere que podríamos considerar eliminarla o imputarla con mucho cuidado. ‘Age’ y ‘Embarked’ tienen menos nulos, y podemos manejarlos de forma más sencilla.

Objetivo de Aprendizaje: Manejar valores faltantes en diferentes columnas, incluyendo imputación y eliminación, y transformar variables categóricas.

# Imputar valores faltantes en 'Age' con la media
titanic_df['Age'].fillna(titanic_df['Age'].mean(), inplace=True)

# Imputar valores faltantes en 'Embarked' con la moda (el valor más frecuente)
titanic_df['Embarked'].fillna(titanic_df['Embarked'].mode()[0], inplace=True)

# Eliminar la columna 'Cabin' debido a la gran cantidad de valores nulos
titanic_df.drop('Cabin', axis=1, inplace=True)

# Verificar nuevamente los valores nulos
print("\nConteo de valores nulos después de la limpieza:")
print(titanic_df.isnull().sum())

# Transformar 'Sex' y 'Embarked' a valores numéricos (One-Hot Encoding)
titanic_df = pd.get_dummies(titanic_df, columns=['Sex', 'Embarked'], drop_first=True)

# Mostrar las primeras filas con las transformaciones
print("\nDataset después de la transformación de variables categóricas:")
print(titanic_df.head())


📊 Salida:

Conteo de valores nulos después de la limpieza:
PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Embarked         2
dtype: int64

Dataset después de la transformación de variables categóricas:
   PassengerId  Survived  Pclass  ... Sex_male  Embarked_Q  Embarked_S
0            1         0       3  ...     True       False        True
1            2         1       1  ...    False       False       False
2            3         1       3  ...    False       False        True
3            4         1       1  ...    False       False        True
4            5         0       3  ...     True       False        True

[5 rows x 12 columns]


¡Excelente! Ahora nuestro dataset del Titanic está mucho más limpio y listo para un análisis más profundo. Hemos abordado los valores faltantes y hemos transformado nuestras variables categóricas en un formato numérico, lo cual es esencial para muchos modelos de aprendizaje automático.

Proyecto 2: Análisis Exploratorio de Datos y Visualización con el Dataset de California Housing

Para nuestro segundo proyecto, nos centraremos en el análisis exploratorio de datos (EDA) y la visualización, utilizando el dataset de California Housing. Este dataset es perfecto para explorar relaciones entre variables y entender la distribución de los datos.

Objetivo de Aprendizaje: Cargar un dataset y realizar un análisis exploratorio inicial para comprender las estadísticas descriptivas y las distribuciones de las variables.

from sklearn.datasets import fetch_california_housing
import seaborn as sns
import matplotlib.pyplot as plt

# Cargar el dataset de California Housing
try:
    california_housing = fetch_california_housing(as_frame=True)
    housing_df = california_housing.frame
    housing_df['MedHouseVal'] = california_housing.target # Añadir la variable objetivo al DataFrame
    print("Dataset de California Housing cargado exitosamente.")
except Exception as e:
    print(f"Error al cargar el dataset: {e}")

# Inspección inicial
print("\nPrimeras 5 filas del dataset de California Housing:")
print(housing_df.head())

print("\nInformación general del dataset:")
print(housing_df.info())

print("\nEstadísticas descriptivas del dataset:")
print(housing_df.describe())


📊 Salida:

Error al cargar el dataset: HTTP Error 403: Forbidden

Primeras 5 filas del dataset de California Housing:


Con la función .describe(), obtenemos un resumen estadístico de cada columna numérica, lo que nos da una idea rápida de la media, desviación estándar, valores mínimos y máximos, y los cuartiles. Esto es crucial para identificar posibles valores atípicos o distribuciones sesgadas.

Objetivo de Aprendizaje: Crear visualizaciones clave para entender las distribuciones de las variables y las relaciones entre ellas.

# Distribución de la variable objetivo (Median House Value)
plt.figure(figsize=(10, 6))
sns.histplot(housing_df['MedHouseVal'], kde=True, bins=50)
plt.title('Distribución del Valor Medio de las Viviendas en California')
plt.xlabel('Valor Medio de la Vivienda')
plt.ylabel('Frecuencia')
plt.show()

# Matriz de correlación para entender las relaciones entre variables
plt.figure(figsize=(12, 10))
sns.heatmap(housing_df.corr(), annot=True, cmap='coolwarm', fmt=".2f")
plt.title('Matriz de Correlación de Variables en California Housing')
plt.show()

# Diagrama de dispersión de "MedInc" (Ingreso Medio) vs "MedHouseVal" (Valor Medio de la Vivienda)
plt.figure(figsize=(10, 7))
sns.scatterplot(x='MedInc', y='MedHouseVal', data=housing_df, alpha=0.6)
plt.title('Relación entre Ingreso Medio y Valor Medio de la Vivienda')
plt.xlabel('Ingreso Medio (en decenas de miles de dólares)')
plt.ylabel('Valor Medio de la Vivienda (en cientos de miles de dólares)')
plt.show()

Estas visualizaciones nos ofrecen información muy valiosa. El histograma nos muestra la distribución de los precios de las casas, notando una concentración en ciertos rangos. La matriz de correlación es una herramienta poderosa para identificar rápidamente qué variables están más relacionadas entre sí. Por ejemplo, podemos ver una fuerte correlación positiva entre MedInc (ingreso medio) y MedHouseVal (valor medio de la vivienda), lo cual es intuitivo. El diagrama de dispersión de MedInc vs MedHouseVal visualiza claramente esta relación, mostrando cómo a medida que el ingreso medio aumenta, el valor de la vivienda también tiende a aumentar.

Conclusiones: Lo que Hemos Aprendido y Próximos Pasos

Hemos recorrido un camino fascinante a través de dos proyectos de análisis de datos prácticos. Con el dataset del Titanic, enfrentamos el desafío de la limpieza y el preprocesamiento, aprendiendo a manejar datos faltantes y a preparar nuestras variables para el análisis. Con el dataset de California Housing, exploramos el poder del análisis exploratorio de datos y la visualización, descubriendo patrones y relaciones importantes en nuestros datos.

Estos ejercicios son solo la punta del iceberg. El análisis de datos es un campo vasto y en constante evolución. Los conocimientos y habilidades que hemos adquirido hoy son fundamentales, pero siempre hay más que aprender.

Para seguir profundizando, les recomiendo explorar:

  • Modelado Predictivo: Una vez que los datos están limpios y entendidos, el siguiente paso lógico es construir modelos que puedan predecir resultados futuros.
  • Bases de Datos y SQL: Aprender a extraer datos de bases de datos es una habilidad esencial para cualquier analista de datos.
  • Herramientas de BI: Familiarizarse con herramientas como Tableau o Power BI para crear dashboards interactivos.
  • Más Datasets: Practicar con diferentes tipos de datos les ayudará a desarrollar su intuición y sus habilidades de resolución de problemas.

Recuerda que siempre siempre vas a aprender un bit a la vez!


🤖 Automatiza tu trading en 5 días con Python

Únete a mi Mini-Curso gratuito por email. Aprende a extraer datos reales, crear indicadores cuantitativos y hacer backtesting profesional.