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.