chong
Entry IV  ·  Tableau Frog  ·  filed under tools · statistics
№ 04 · Entry IV

Point at a difference; it tells you if it’s real.

A data explorer that inverts the usual workflow: you never pick a chart type — assign variables to axis slots and the chart kind is inferred. Then the contrast lens does the part dashboards skip: it decides, statistically, which differences deserve color.

svelte 5tauri v2~154k LoCMMXXVI — active
§ I — The lens

Enrichment, with error control

FIG. I — Select anywhere, see everywhere
Tableau Frog contrast lens showing enrichment across linked panels
Fig. I — a brushed selection recolors every panel by enrichment against the population; a two-proportion z-test with Benjamini–Hochberg correction greys out what isn't significant.

Select a subset on any panel — a bar, a brushed range, a cell — and every other panel becomes a comparison against the population. Lenses compose with Shift (gestures AND together), persist per dataset, and stay under 100ms end-to-end at a million rows: the mask intersection runs in-place on typed arrays, 18ms for an AND of two selections.

◆  § II  ◆
§ II — The assistant

AI that has to show its work

FIG. II — Hypothesis cards
AI Investigate mode generating hypothesis cards from a data selection
Fig. II — Investigate mode turns a selection into falsifiable hypothesis cards, each with a one-click test projection and a persisted verdict trail.

Ctrl+I on a selection generates hypotheses — each one phrased so the data can prove it wrong, each with a one-click projection that tests it, each verdict recorded per dataset. The privacy line is architectural, not a policy: only shape metadata (column names, types, cardinalities) ever reaches the model; raw rows cannot leave the machine, and the API key is stored outside the exportable config.

Own random forest

Deterministic, zero-dependency, pure TS — with permutation importance, partial dependence, and OOB accuracy.

Plugin charts

A documented ChartPlugin contract on window.tableauFrog — custom chart kinds register at runtime.

Eval-free expressions

log, zscore, bucket, ternary — parsed and computed in one columnar pass.

Domain-first

27 pure-TS modules run identically in a plain browser; the Rust shell only opens files.

§ III — The rough edges

Open questions

MaterialsSvelte 5, TypeScript, Tauri v2
VintageMMXXVI — active
Scale1M rows < 100ms · 29 unit + 30 e2e suites
Sourcegithub/xnmp/tableau-frog