Scoring now follows the ISO/IEC 25012 data quality model: five inherent
characteristics, fifteen quality properties, each measured as a ratio A / B
over counted data items in the form ISO/IEC 25024 measurement functions take.
Every statistic the package computes is unchanged; what changed is how those
statistics are organised into scores.
dg_spec() declares what the data is supposed to look like — required
columns, permitted domains, valid ranges, regular expressions, referential
sets, per-record rules, credibility criteria, provenance and update
expectations. Nine of the fifteen properties have a denominator that counts
the items for which an expectation is defined, which no data set contains;
this is where it comes from. Every argument is optional.report$measures is a fifteen-row data frame giving each property's ISO code,
characteristic, value, A, B, whether it applied, and — when it did not —
which dg_spec() argument would make it apply.COMP_REG,
COMP_VAL_ESP, FAL_COMP_FICH, RIES_INCO, CONS_FORM and CONV_ACT.
FAL_COMP_FICH catches cells that are occupied but empty ("N/A",
"unknown", "-999"); CONS_FORM measures each column against its own
dominant format, excluding free text rather than scoring it near zero.report$scores now holds the five ISO characteristics — accuracy,
completeness, consistency, credibility, currentness — where it held
four dimensions.timeliness is renamed currentness, which is ISO's word for it.
report$timeliness still resolves and weights still accepts the old name.accuracy is NA unless a spec declares an interval, pattern or
reference. All three ISO accuracy properties require a declared
expectation. The old measure — outliers against an interval derived from the
data — is unchanged, reported as report$plausibility, and excluded from the
overall score, because an outlier need not be wrong and a wrong value can sit
exactly on the mean.report$missing$columns.good/warning/serious/critical bands now
break at 0.9, 0.7 and 0.5.NA and is dropped from the
aggregate rather than scored zero. NA is a statement that B could not be
counted, not a claim about the data.summary()$scores names its first column characteristic, not dimension,
and summary() gains a measures table.dg_assess() no longer aborts on its own default of verbose = TRUE. Progress
messages are interpolated by cli in the frame of the caller, which was the
internal say() helper rather than dg_assess(), so every message referring
to a local variable failed.First release. Implements the data quality framework from Demirhan (2024), MSc dissertation, University of Greenwich.
dg_assess() assesses a data frame or file and returns a dg_report object,
with print(), summary(), plot() and as.data.frame() methods.
data_quality_assessment() is kept as an alias.data argument works. The dissertation documented it in three places and
implemented it in none.dg_plots() returns figures as a named list of ggplot objects;
dg_save_plots() writes them to disk.cli, ggplot2 and base R. dplyr, car,
moments, reshape2, DescTools, mice and caret are no longer needed;
mice and caret were never used by the original code at all.iris where 25% was meant.flag_redundant_columns() no longer reports the literal strings "row" and
"col" as redundant data columns.ggplot(...) + theme_minimal() %>% print()
printed the theme and discarded the plot.moments::kurtosis()."ID" branch
is reachable. A numeric column qualifies only if its values are whole numbers,
so continuous measurements are not mistaken for keys and dropped.Regression tests cover constant columns, single-column frames, all-NA columns,
zero-row frames, perfect collinearity and single redundant pairs — each of which
produced an NA, an error or a silently wrong answer before.
duplicated.data.frame to integer-coded
row hashing: 10 million rows went from 494 s to 38 s, bit-identical result.diag(solve(cor(X))), which is independent of row count.X = A/B measures require
metadata that zero-configuration assessment does not have. See
vignette("methodology").credibility, the fifth ISO/IEC 25012 inherent characteristic, is not
measured.accuracy score substitutes a statistically derived interval for a
specified one, so it measures plausibility rather than accuracy in the ISO
sense.O(p^3) in the column count through the VIF matrix inversion.
Fine for hundreds of columns, not for tens of thousands.