Files
fn_registry/python/functions/datascience/build_boxplot_stats.md
T

4.0 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
build_boxplot_stats function py datascience 1.0.0 pure def build_boxplot_stats(numeric: dict) -> dict Deriva las estadisticas de un boxplot de Tukey desde el sub-bloque numeric de un ColumnProfile del grupo eda (salida de describe_numeric). Aplica la regla del 1.5*IQR a los percentiles p25/p50/p75 para obtener cuartiles, fences, bigotes reales y flags de outliers. Lectura defensiva con .get; NUNCA lanza. Si faltan los percentiles clave devuelve {} para que el caller omita el grafico.
eda
statistics
profiling
boxplot
tukey
iqr
datascience
name desc
numeric Sub-bloque numeric de un ColumnProfile del grupo eda (la salida de describe_numeric). Claves esperadas (todas pueden ser None): min, max, mean, median, mode, std, variance, cv, p1, p5, p25, p50, p75, p95, p99, iqr, skew, kurtosis, n_outliers, outlier_pct, zero_pct, negative_pct, distribution_type, histogram. Solo se usan p25, median/p50, p75, min, max y n_outliers.
Dict con las cifras de un boxplot horizontal de Tukey: {q1=p25, median=median(o p50), q3=p75, iqr=q3-q1, lower_fence=q1-1.5*iqr, upper_fence=q3+1.5*iqr, whisker_lo=max(min,lower_fence), whisker_hi=min(max,upper_fence), min, max, has_low_outliers=min<lower_fence, has_high_outliers=max>upper_fence, n_outliers}. Numericos en float, flags en bool nativo, n_outliers en int. Si faltan p25/median(o p50)/p75 devuelve {} (dict vacio). Cuando min/max faltan, los bigotes caen a la fence correspondiente.
false
true
test_boxplot_tukey_basico
test_percentiles_faltan_devuelve_vacio
test_median_cae_a_p50
test_whiskers_usan_fence_si_falta_min_max
test_tipos_salida_float_bool_int
python/functions/datascience/build_boxplot_stats_test.py python/functions/datascience/build_boxplot_stats.py

Ejemplo

import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from datascience.build_boxplot_stats import build_boxplot_stats

# Sub-bloque numeric tal y como lo produce describe_numeric:
numeric = {
    "min": 1.0, "max": 100.0,
    "p25": 10.0, "median": 25.0, "p75": 40.0,
    "iqr": 30.0, "n_outliers": 3,
}
box = build_boxplot_stats(numeric)
print(box["lower_fence"], box["upper_fence"])  # -35.0 85.0
print(box["whisker_lo"], box["whisker_hi"])    # 1.0 85.0
print(box["has_low_outliers"], box["has_high_outliers"])  # False True

Cuando usarla

  • Usala al dibujar un boxplot horizontal bajo el histograma en el capitulo num_distr de AutomaticEDA: convierte el bloque numeric de un ColumnProfile en las cifras exactas que el renderer necesita (cuartiles, fences, extremos de los bigotes y flags de outliers).
  • Cuando ya tengas los percentiles calculados (salida de describe_numeric) y solo necesites derivar la geometria del boxplot de Tukey sin volver a tocar los valores crudos.
  • Cuando quieras decidir si una columna tiene cola alta/baja (has_high_outliers / has_low_outliers) antes de proponer una transformacion (log, winsorize).

Gotchas

  • Funcion pura, sin I/O y determinista. Lectura defensiva con .get: NUNCA lanza. Si faltan p25, median/p50 o p75 devuelve {} (dict vacio) — el caller debe omitir el boxplot.
  • Los n_outliers que se propagan vienen del bloque z-score del profile (detect_outliers, threshold 3.0), NO de la regla IQR. Son informativos: el conteo de Tukey que esta funcion calcula son los fences (lower_fence/upper_fence), no un recuento de puntos.
  • No recibe los valores crudos de la columna, solo deriva cifras desde los percentiles ya calculados. Por eso no puede contar cuantos puntos caen fuera de las fences, solo si los extremos (min/max) las superan.
  • iqr se recalcula como q3 - q1 aunque el bloque traiga numeric['iqr']: asi funciona aunque esa clave falte.
  • Cuando min/max faltan, los bigotes caen a la fence correspondiente y los flags de outliers quedan en False (sin extremo real no se afirma cola).