EDA basico con Python
EDA basico con Python
Licencia: Este documento se rige por la Licencia Pública General de GNU (GNU
General Public License v3.0). Puedes encontrar una copia de la licencia en
https://www.gnu.org/licenses/gpl-3.0.html.
¿Qué es EDA?
El Análisis Exploratorio de Datos (EDA, por sus siglas en inglés: Exploratory Data
Analysis) es el proceso de investigar conjuntos de datos para resumir sus principales
características, a menudo con métodos visuales. Es un paso crucial en el ciclo de
vida de la ciencia de datos, ya que permite comprender mejor los datos antes de
aplicar técnicas de modelado más complejas.
Instalación de Bibliotecas
Bash
(Se recomienda jupyterlab o notebook para un entorno interactivo ideal para EDA).
Importación de Bibliotecas
Python
import pandas as pd
import numpy as np
%matplotlib inline
sns.set_theme(style="whitegrid")
# import warnings
# warnings.filterwarnings('ignore')
3. Carga de Datos
Los datos pueden provenir de diversas fuentes. El formato más común es CSV
(Comma Separated Values).
Python
# Cargar datos desde un archivo CSV
try:
df = pd.read_csv('tu_archivo_de_datos.csv')
except FileNotFoundError:
data_ejemplo = {
df = pd.DataFrame(data_ejemplo)
Una vez cargados los datos, el primer paso es obtener una visión general.
df.head() y df.tail()
Python
print(df.head())
print(df.tail())
df.info()
Python
df.info()
df.describe()
print(df.describe())
df.shape
Devuelve una tupla con las dimensiones del DataFrame (número de filas, número de
columnas).
Python
df.dtypes
Python
print(df.dtypes)
Los valores faltantes son comunes en los conjuntos de datos y pueden afectar el
análisis.
Python
print(df.isnull().sum())
1. Eliminación:
o df.dropna(): Elimina filas (por defecto) o columnas (axis=1) que
contienen valores nulos.
o Pros: Simple.
Python
2. Imputación:
Python
mediana_cal_mat = df['Calificacion_Matematicas'].median()
df['Calificacion_Matematicas'].fillna(mediana_cal_mat, inplace=True)
df['Horas_Estudio_Semanal'].fillna(media_horas_estudio, inplace=True)
moda_genero = df['Genero'].mode()[0]
df['Genero'].fillna(moda_genero, inplace=True)
print(df.isnull().sum())
Python
duplicados = df.duplicated().sum()
if duplicados > 0:
df.drop_duplicates(inplace=True)
Python
# df['Edad'] = df['Edad'].astype(int)
# print(df.dtypes)
7. Análisis Univariado
Variables Numéricas
Python
if 'Edad' in df.columns:
plt.figure(figsize=(8, 5))
plt.title('Distribución de Edades')
plt.xlabel('Edad')
plt.ylabel('Frecuencia')
plt.show()
if 'Calificacion_Matematicas' in df.columns:
plt.figure(figsize=(8, 5))
plt.ylabel('Frecuencia')
plt.show()
Python
if 'Calificacion_Lenguaje' in df.columns:
plt.figure(figsize=(8, 5))
sns.boxplot(x=df['Calificacion_Lenguaje'], color='lightgreen')
plt.xlabel('Calificación')
plt.show()
Python
if 'Horas_Estudio_Semanal' in df.columns:
plt.figure(figsize=(8, 5))
plt.xlabel('Horas de Estudio')
plt.ylabel('Densidad')
plt.show()
Variables Categóricas
Python
if 'Genero' in df.columns:
plt.figure(figsize=(8, 5))
plt.xlabel('Género')
plt.ylabel('Conteo')
plt.show()
print(df['Genero'].value_counts())
Python
plt.figure(figsize=(7, 7))
plt.show()
8. Análisis Bivariado
Python
if 'Horas_Estudio_Semanal' in df.columns and 'Calificacion_Matematicas' in
df.columns:
plt.figure(figsize=(10, 6))
plt.ylabel('Calificación en Matemáticas')
plt.legend(title='Género')
plt.show()
Python
df_numeric = df.select_dtypes(include=np.number)
if not df_numeric.empty:
correlation_matrix = df_numeric.corr()
print("\nMatriz de Correlación:")
print(correlation_matrix)
plt.figure(figsize=(10, 8))
plt.show()
else:
print("\nNo hay suficientes columnas numéricas para calcular la matriz de
correlación.")
Python
plt.figure(figsize=(10, 6))
plt.xlabel('Género')
plt.ylabel('Calificación en Lenguaje')
plt.show()
Python
plt.figure(figsize=(10, 6))
plt.xlabel('Género')
plt.show()
• Bar Plots (con agregación): Muestran una medida de tendencia central (ej.
media) de una variable numérica para cada categoría.
Python
plt.xlabel('Género')
plt.show()
Python
print(contingency_table)
plt.figure(figsize=(8, 6))
plt.show()
Python
plt.figure(figsize=(10, 6))
plt.xlabel('Género')
plt.ylabel('Conteo')
plt.legend(title='Nivel Socioeconómico')
plt.show()
• Usando Box Plots: Los puntos fuera de los "bigotes" del box plot suelen
considerarse outliers. Ya los hemos visto en el análisis univariado.
Python
Q3 = dataframe[columna].quantile(0.75)
IQR = Q3 - Q1
return outliers
if 'Calificacion_Matematicas' in df.columns:
if outliers_matematicas.sum() > 0:
print("Outliers detectados:")
print(df[outliers_matematicas][['ID_Estudiante', 'Calificacion_Matematicas']])
¡Este tutorial cubre los fundamentos! La práctica constante con diferentes conjuntos
de datos te ayudará a dominar el arte del EDA.