bivariate_analysis
Descripción General
Módulo de análisis bivariado para estudiar relaciones entre pares de variables. Incluye correlaciones, tablas de contingencia y tests estadísticos.
Clases Principales
BivariateAnalyzer
Métodos de Análisis
analyze_numeric_vs_numeric
Análisis de relación entre dos variables numéricas.
- Parameters:
var1(str): Primera variable numéricavar2(str): Segunda variable numérica
- Returns:
Diccionario con correlaciones y regresión lineal
Análisis incluidos:
Correlación de Pearson: Relación lineal
Correlación de Spearman: Relación monotónica
Correlación de Kendall: Relación ordinal
Regresión lineal: Pendiente, intercepto, R², p-valor
Ejemplo:
results = analyzer.analyze_numeric_vs_numeric('dti', 'puntaje_datacredito')
# Correlaciones
pearson_r = results['correlations']['pearson']['r']
pearson_p = results['correlations']['pearson']['p_value']
print(f"Correlación Pearson: r={pearson_r:.3f}, p={pearson_p:.6f}")
# Regresión
slope = results['linear_regression']['slope']
r_squared = results['linear_regression']['r_squared']
print(f"Pendiente: {slope:.4f}")
print(f"R²: {r_squared:.4f}")
analyze_categorical_vs_categorical
Análisis de relación entre dos variables categóricas.
- Parameters:
var1(str): Primera variable categóricavar2(str): Segunda variable categórica
- Returns:
Diccionario con tabla de contingencia y tests
Análisis incluidos:
Tabla de contingencia: Frecuencias cruzadas
Test Chi-cuadrado: Independencia estadística
V de Cramér: Fuerza de asociación (0-1)
- Interpretación V de Cramér:
< 0.1: Asociación muy débil
0.1-0.3: Asociación débil
0.3-0.5: Asociación moderada
> 0.5: Asociación fuerte
Ejemplo:
results = analyzer.analyze_categorical_vs_categorical(
'nivel_educacion',
'nivel_riesgo'
)
# Test Chi-cuadrado
chi2 = results['chi2_test']['statistic']
p_value = results['chi2_test']['p_value']
print(f"Chi²: {chi2:.3f}, p-value: {p_value:.6f}")
if p_value < 0.05:
print("✅ Existe asociación significativa")
# V de Cramér
cramers_v = results['cramers_v']
strength = results['association_strength']
print(f"V de Cramér: {cramers_v:.3f} ({strength})")
analyze_numeric_vs_categorical
Análisis de relación entre variable numérica y categórica.
- Parameters:
numeric_var(str): Variable numéricacategorical_var(str): Variable categórica
- Returns:
Diccionario con estadísticas por grupo y tests
Análisis incluidos:
Estadísticas por grupo: Media, mediana, desv. estándar por categoría
Test ANOVA: Diferencias entre medias (paramétrico)
Test Kruskal-Wallis: Diferencias entre grupos (no paramétrico)
Ejemplo:
results = analyzer.analyze_numeric_vs_categorical(
'salario_mensual',
'nivel_riesgo'
)
# Estadísticas por grupo
print(results['grouped_statistics'])
# Test ANOVA
f_stat = results['anova_test']['f_statistic']
p_value = results['anova_test']['p_value']
print(f"F-estadístico: {f_stat:.3f}")
print(f"P-valor: {p_value:.6f}")
if p_value < 0.05:
print("✅ Diferencias significativas entre grupos")
Métodos de Visualización
create_correlation_matrix
Crea matriz de correlación interactiva.
- Parameters:
method(str): Método de correlación (“pearson”, “spearman”, “kendall”)
- Returns:
Figura de Plotly con heatmap
create_scatter_plot
Crea gráfico de dispersión con línea de regresión.
- Parameters:
var1(str): Variable para eje Xvar2(str): Variable para eje Ycolor_var(str, optional): Variable para colorear puntos
- Returns:
Figura de Plotly
create_contingency_heatmap
Crea heatmap de tabla de contingencia.
- Parameters:
var1(str): Primera variable categóricavar2(str): Segunda variable categórica
- Returns:
Figura de Plotly
create_grouped_boxplot
Crea boxplot agrupado por categoría.
- Parameters:
numeric_var(str): Variable numéricacategorical_var(str): Variable categórica
- Returns:
Figura de Plotly
Funciones de Renderizado
render_bivariate_analysis
Renderiza el módulo completo de análisis bivariado en Streamlit.
- Funcionalidades:
Matriz de correlación interactiva
Análisis numérica vs numérica
Análisis categórica vs categórica
Análisis numérica vs categórica
Visualizaciones interactivas
render_bivariate_module
Función principal para renderizar el módulo bivariado.
Ejemplo Completo
from src.bivariate_analysis import BivariateAnalyzer
import pandas as pd
# Cargar datos
df = pd.read_csv("datos_credito_hipotecario_realista.csv")
# Crear analizador
analyzer = BivariateAnalyzer(df)
# 1. Matriz de correlación
fig_corr = analyzer.create_correlation_matrix(method='pearson')
fig_corr.show()
# 2. Analizar edad vs salario
results_num = analyzer.analyze_numeric_vs_numeric('edad', 'salario_mensual')
print(f"Correlación: {results_num['correlations']['pearson']['r']:.3f}")
# 3. Scatter plot
fig_scatter = analyzer.create_scatter_plot(
'edad',
'salario_mensual',
color_var='nivel_riesgo'
)
fig_scatter.show()
# 4. Analizar educación vs riesgo
results_cat = analyzer.analyze_categorical_vs_categorical(
'nivel_educacion',
'nivel_riesgo'
)
print(f"V de Cramér: {results_cat['cramers_v']:.3f}")
# 5. Analizar salario por tipo de empleo
results_mixed = analyzer.analyze_numeric_vs_categorical(
'salario_mensual',
'tipo_empleo'
)
print(f"ANOVA p-value: {results_mixed['anova_test']['p_value']:.6f}")
Ver también
univariate_analysis - Análisis univariado
feature_engineering - Ingeniería de características
clustering - Análisis de clustering