EDA Express — análisis exploratorio automático
Dado un dataset tabular (CSV, Excel o DataFrame), genera el análisis exploratorio que un analista haría en su primera hora: calidad de datos, estadísticos, correlaciones, alertas accionables e informe en Markdown. Todo corre en tu máquina — no hay servidor ni se envían datos a ningún sitio.
- Motor de 12 alertas de calidad con recomendación concreta: faltantes por gravedad, columnas constantes, posibles IDs, cardinalidad alta, duplicados (filas y columnas), numéricas/fechas guardadas como texto, outliers, asimetría, pares redundantes y clases desbalanceadas.
- Estadística sólida sin dependencias pesadas: correlaciones de Pearson, V de Cramér entre categóricas, eta² respecto al objetivo y PCA — implementados con pandas y numpy, sin scipy ni scikit-learn.
- Informe en Markdown listo para adjuntar o convertir a PDF.
- Código fuente, app web (Streamlit + Docker) y API REST: github.com/aitziberluis/eda-express
Uso
# pip install huggingface_hub pandas numpy tabulate requests
import sys
import pandas as pd
from huggingface_hub import snapshot_download
sys.path.insert(0, snapshot_download("aitziberluis/eda-express"))
from eda import alerts, profiler, report
df = pd.read_csv("mi_dataset.csv")
# Visión general y alertas accionables
print(profiler.overview(df))
for alerta in alerts.run_all_checks(df, target="mi_columna_objetivo"):
print(f"[{alerta['nivel']}] {alerta['columna']}: {alerta['mensaje']}")
print(f" -> {alerta['recomendacion']}")
# Estadísticos y asociaciones
print(profiler.numeric_table(df))
print(profiler.cramers_v_matrix(df))
print(profiler.eta_squared_table(df, "mi_columna_objetivo"))
# Informe completo en Markdown
md = report.build_report(df, "mi_dataset", alerts.run_all_checks(df), target=None)
open("informe.md", "w", encoding="utf-8").write(md)
O ejecuta el ejemplo incluido (usa el dataset del Titanic): python example.py
Qué incluye el análisis
| Función | Qué devuelve |
|---|---|
profiler.overview(df) |
Filas, columnas, memoria, faltantes, duplicados |
profiler.column_table(df) |
Tipo, faltantes, únicos y ejemplos por columna |
profiler.numeric_table(df) |
describe() ampliado: asimetría, curtosis, outliers IQR |
profiler.categorical_table(df) |
Cardinalidad, moda y concentración por categórica |
profiler.correlation_matrix(df) / top_correlations |
Pearson y ranking de pares |
profiler.cramers_v_matrix(df) |
Asociación entre categóricas |
profiler.eta_squared_table(df, target) |
Varianza explicada por las clases del objetivo |
profiler.pca_summary(df) |
Varianza explicada, proyección 2D y cargas |
profiler.numeric_stored_as_text(df) |
Numéricas atrapadas en columnas de texto |
profiler.dates_stored_as_text(df) |
Fechas atrapadas en columnas de texto |
profiler.duplicate_columns(df) |
Pares de columnas idénticas |
alerts.run_all_checks(df, target) |
Las 12 alertas con recomendaciones |
report.build_report(...) |
Informe completo en Markdown |
Limitaciones
- Pensado para datos tabulares de hasta unos pocos millones de celdas.
- Las alertas son heurísticas con umbrales razonables, no verdades absolutas.
- La detección de tipos mal guardados exige que ≥80% de los valores parseen.
Licencia
MIT
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support