Examples
Figures out which direction is better
If we shaded all the columns in this table with a uniform "big numbers = green, small numbers = red" rule, it would go against the meaning of a few of them (Losses, and ERA is better when it's lower, for example). The model picks the direction for each column, given its title and context.
docs/tests · view it live at baseball-reference.com
Knows which numbers are amounts
A lot of numbers aren't amounts; if you try to shade everything numeric, identifying things like Jersey # or Zip Code would look like they're on a scale. Practical Data asks the decision model whether a column is really a measure first, so identifiers stay are ignored.
docs/tests · synthetic test page
Knows when to use a log or linear scale
On a linear scale, the one $237 card here would flatten everything under $30 into nearly the same red colour. The model notices when ratios matter more than differences and moves that column to a log scale, so the cheap cards still read as different from each other.
docs/tests · view it live at mtggoldfish.com
Works on words, not just numbers! The model can put labels in order when the presence of that order is implied (like tropical storms, or card rarity, or medal rankings).
docs/tests · view it live at en.wikipedia.org
Ignores Total and Average rows
The first row here is the World total; considered alongside the others, it would dwarf all their numbers and make them almost indistinguishable. The model flags totals and averages as aggregates and scales around them.
docs/tests · view it live at en.wikipedia.org
Rows judged to be totals and kept out of the scale: "World".
Multiple tables can share a scale
Practical data looks for same-named columns in similar contexts and aligns their scales accordingly so they're more easily compared at a glance.
docs/tests · view it live at docs.github.com
Notices when the table is meant to be read row-wise
Not every table compares down the column. Here each row is one benchmark and the columns are models, so column-wise shading would compare numbers that have nothing to do with each other. The model reads the orientation and gives each row its own scale.
docs/tests · view it live at blog.cloudflare.com
Understands times and durations
It would be easy to treat 2:42 as text, or a ratio. Practical Data parses it as a duration, and understands minutes/hours correctly (3:00 is one more than 2:59).
docs/tests · view it live at baseball-reference.com