| --- |
| license: mit |
| language: |
| - es |
| tags: |
| - exploratory-data-analysis |
| - data-quality |
| - tabular |
| - pandas |
| - profiling |
| library_name: generic |
| --- |
| |
| # 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](https://github.com/aitziberluis/eda-express) |
|
|
| ## Uso |
|
|
| ```python |
| # 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 |
|
|