diff --git a/layout-review/04_missing_handler.html b/layout-review/04_missing_handler.html index 8475a01..53aca8e 100644 --- a/layout-review/04_missing_handler.html +++ b/layout-review/04_missing_handler.html @@ -63,39 +63,44 @@
- -
+ +

Missingness profile

+
+
Rows
2,150
+
Cells missing
1,043
+
% cells missing
8.1%
+
Complete rows
1,388
+
+
+ + + + + + + + + + +
columndtypemissingmissing_pctdisguisedhas_missing
respondent_idobject00.0%0False
agefloat641878.7%61True
regionobject1426.6%142True
incomefloat6432915.3%118True
satisfactionfloat64954.4%40True
commentsobject29013.5%290True
+
+ +
+ + +
Options
-

Missingness profile

-
-
Rows
2,150
-
Cells missing
1,043
-
% cells missing
8.1%
-
Complete rows
1,388
-
- -
- - - - - - - - - - -
columndtypemissingmissing_pctdisguisedhas_missing
respondent_idobject00.0%0False
agefloat641878.7%61True
regionobject1426.6%142True
incomefloat6432915.3%118True
satisfactionfloat64954.4%40True
commentsobject29013.5%290True
-
- -
-

Strategy

+
+ layers + Resolution order: per-column overrideglobal strategypreset. The most specific setting wins; layers it overrides are dimmed. +
-
+
info Overridden by Global strategy → median (set under Advanced options). Presets apply only when global is “(use preset)”.
+
detect-only (standardize sentinels to NaN, no fill or drop) safe-fill (numeric → median, categorical → mode) drop-incomplete (drop any row with missing) @@ -121,7 +126,7 @@

Strategy override

-
(use preset)
+
median
drop_row / drop_col use the thresholds below. mean / median / interpolate are numeric only — non-numeric columns fall back to the categorical strategy.
@@ -135,11 +140,11 @@
-
1.00
+
1.00
-
1.00
+
1.00
@@ -164,13 +169,13 @@

Set a different strategy for specific columns. Leave any row blank to use the global strategy.

- + - - - - - + + + + +
ColumnOverride
ColumnOverrideResolves to
agemedian
regionmode
income
satisfaction
commentsconstant
age(global)median · global
region(global)mode · global → categorical fallback
income(global)median · global
satisfaction(global)median · global
commentsconstantconstant · this column
@@ -198,28 +203,14 @@

Missingness — before vs. after

- + - - - - - - - -
columnbefore_missingbefore_pctafter_missingafter_pct
columnbefore_missingbefore_pctafter_missingafter_pctstrategy
respondent_id00.000.0
age1878.700.0
region1426.600.0
income32915.300.0
satisfaction954.400.0
comments29013.500.0
-
- -

Strategy applied per column

-
- - - - - - - - + + + + + +
columnstrategy
agemedian
regionmode
incomemedian
satisfactionmedian
commentsconstant
respondent_id00.000.0
age1878.700.0median
region1426.600.0mode
income32915.300.0median
satisfaction954.400.0median
comments29013.500.0constant
diff --git a/layout-review/app.css b/layout-review/app.css index 11b3a04..9ce8263 100644 --- a/layout-review/app.css +++ b/layout-review/app.css @@ -330,6 +330,20 @@ code, .dt-mono { font-family: var(--font-mono); font-size: 0.92em; font-feature- .dt-radio .dot { width: 16px; height: 16px; border-radius: 50%; border: 1px solid var(--border-strong); display: inline-block; flex-shrink: 0; } .dt-radio.on .dot { border: 5px solid var(--ink); } +/* Strategy precedence legend + overridden state (Fix Missing Values). + Makes the preset -> global -> per-column resolution order legible and + visibly dims a layer when a more specific layer wins. */ +.dt-precedence { + display: flex; align-items: center; gap: 8px; + background: var(--surface-hover); border: 1px solid var(--border); + border-radius: var(--r-md); padding: 9px 13px; margin: 0 0 14px; + font-size: 12.5px; color: var(--ink-secondary); line-height: 1.4; +} +.dt-precedence .dt-mi { font-family: "Material Symbols Outlined"; font-size: 18px; color: var(--ink-tertiary); flex-shrink: 0; } +.dt-precedence strong { color: var(--ink); font-weight: 600; } +.dt-radio-row.is-overridden { opacity: 0.5; } +.dt-radio-row.is-overridden .dt-radio { text-decoration: line-through; text-decoration-color: var(--ink-tertiary); } + /* Slider */ .dt-slider { margin: 14px 0 6px; } .dt-slider .track { position: relative; height: 4px; background: var(--border-strong); border-radius: 2px; }