763e06c127
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.4 KiB
4.4 KiB
name, kind, lang, domain, version, purity, signature, description, tags, params, output, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | params | output | uses_functions | uses_types | returns | returns_optional | error_type | imports | tested | tests | test_file_path | file_path | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| association_matrix | function | py | datascience | 1.0.0 | pure | def association_matrix(columns: dict, strong_threshold: float = 0.5, top_n: int = 20) -> dict | Matriz de asociacion unificada de una tabla con tipos mezclados: elige la metrica correcta por par de tipos (Pearson/Spearman num-num, Cramer's V cat-cat, correlation ratio num-cat) y calcula informacion mutua normalizada comun para todos los pares. Devuelve pares evaluados, pares fuertes y leyenda de metodos. |
|
|
dict {pairs: lista de todos los pares {a, b, a_type, b_type, method, value, extra}; strong: subconjunto fuerte ordenado por relevancia desc truncado a top_n; methods_legend: dict metodo->descripcion}. Pura: con dict vacio o 1 columna devuelve pairs=[] y strong=[]. |
|
false | true |
|
python/functions/datascience/association_matrix_test.py | python/functions/datascience/association_matrix.py |
Ejemplo
from datascience import association_matrix
columns = {
# Numerica correlada linealmente con "size" (y ~ 2x + ruido pequeno).
"size": {"values": [1, 2, 3, 4, 5, 6, 7, 8], "type": "numeric"},
"price": {"values": [2.1, 4.0, 5.9, 8.1, 10.0, 12.2, 13.8, 16.1], "type": "numeric"},
# Categorica que explica la varianza de "score" (cada region -> nivel distinto).
"region": {"values": ["N", "N", "S", "S", "E", "E", "W", "W"], "type": "categorical"},
"score": {"values": [10.0, 11.0, 50.0, 49.0, 90.0, 91.0, 30.0, 31.0], "type": "numeric"},
}
result = association_matrix(columns, strong_threshold=0.5, top_n=10)
# Pares fuertes detectados (orden por relevancia):
for p in result["strong"]:
print(p["a"], p["b"], p["method"], round(p["value"], 2))
# size price pearson/spearman 1.0 -> num-num lineal casi perfecta
# region score correlation_ratio 0.99 -> la categoria explica la numerica
print(result["methods_legend"]["correlation_ratio"])
Cuando usarla
Cuando necesites una matriz de relaciones de una tabla entera mezclando tipos
(numericas, categoricas, fechas, booleanos) en una sola pasada, sin tener que
elegir a mano que metrica aplicar a cada par. Ideal en la fase EDA para detectar
de un vistazo que columnas estan asociadas (y por que metodo), priorizando los
pares fuertes. Reusa las funciones atomicas del registry (pearson,
spearman_corr, cramers_v, theils_u, correlation_ratio,
mutual_info_columns) y anade informacion mutua normalizada como medida comun
no-lineal a todos los pares.
Notas
- Pura: las atomicas que compone son puras y deterministas; no hace I/O.
pearsonno limpia None/NaN internamente, asi que los pares num-num se limpian aqui antes de llamarla (se emparejan por indice y se descartan pares con algun lado no numerico).- En num-num el
valueprincipal es el de mayor valor absoluto entre Pearson y Spearman; ambos quedan enextra(pearson,spearman). - En cat-cat el
valuees Cramer's V (simetrico) yextralleva Theil's U direccional en ambos sentidos (u_ab= U(a|b),u_ba= U(b|a)). - En num-cat el
valuees el correlation ratio (eta) llamando siempre con la categorica como primer argumento y la numerica como segundo. - Se saltan columnas con menos de 3 valores validos, y columnas
textcuya cardinalidad sea >= 90% del numero de filas (identificadores / free-text).