agentleFS
ExagrowExagrow/dashboard-workshop/.claude/skills/analyze-data-quality/SKILL.md

analyze-data-quality

Skill0 starsChanged 37 days agoMITView on GitHub

Use this when a participant wants to turn a dataset into a working data quality check, from picking dimensions through a scorecard dashboard built on stored, non-sensitive results.

1 other project uses a version of this.

Adopted by

Most recently taken up by

  • Other versions1 project uses a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 1

    1. openai/plugins★ 7.8ksame name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository5 other files it gives its agents.

The file

We split this skill into the rules it gives an agent

7 rules. About 0 are common, 4 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈4

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Ask the person which data quality framework to use.

    line 17
  2. Very specific:

    Before writing a single rule, look at what the data actually contains.

    line 26
  3. Distinctive:

    Write the rules in one file, one rule per entry.

    line 42
  4. Very specific:

    Run each rule over every row, never a sample.

    line 58
  5. Very specific:

    Do not store the full set of failing rows, and never commit the raw dataset itself.

    line 65
  6. Distinctive:

    Example rows must never contain personal data: Before storing an example row, strip or mask any field that identifies a specific person, …

    line 70
  7. Distinctive:

    Write this decision down next to the rule.

    line 86

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Analyze data quality

This skill walks through building a data quality check from scratch: agree what to measure, look at the real data before writing any rule, write the rules as plain code, run them over everything, record what each finding actually means, and build a dashboard from the results. Work through the steps in order and check in with the person after each one before moving to the next.

1. Agree on the dimensions

Ask the person which data quality framework to use. If they name one, such as the dimensions in the DAMA-DMBOK, work from that; if their organization has its own list or its own names, use those. Do not invent a list of your own. Then ask which dimensions apply to their data. Not every dimension applies to every dataset: if uniqueness is meaningless for this data, drop it. Write the short list you land on into the "Data quality checks" section of PLAN.md before moving on.

2. Profile the data first

Before writing a single rule, look at what the data actually contains. The raw files are in data/raw/, the local cache; read them from there with DuckDB:

  • the list of columns and what each one is supposed to mean
  • the data type of each column
  • the total row count
  • the null rate for each column
  • the range of values for numeric and date columns, and the distinct values for coded or categorical columns

This step exists so that rules are written against the data as it really is, not against what the documentation claims or what someone assumes. A column that is supposed to never be empty, but is empty a third of the time, changes what you write next.

3. Write the rules as code

Write the rules in one file, one rule per entry. Each rule needs:

  • an id, such as CMP-01, made of a short dimension prefix and a number
  • a name
  • the dimension it belongs to
  • a severity
  • the test, in one plain sentence a non-coder can read and agree with
  • why it matters to someone who uses this data
  • the SQL predicate that is true for a row that fails the rule

Writing the predicate as "true when the row fails" rather than "true when the row passes" keeps every rule readable the same way: run the predicate, and the rows it returns are the problem rows.

4. Run every rule over the whole dataset

Run each rule over every row, never a sample. A sample can hide a problem that only shows up in one slice of the data. For each rule, store only the following, as small files in data/summaries/:

  • the count and rate of failing rows
  • a small number of example failing rows, enough to see the shape of the problem

Do not store the full set of failing rows, and never commit the raw dataset itself; it stays in data/raw/, which git ignores. Storing counts, rates and a few examples is what lets these results be committed to a repository while the underlying data stays out of it entirely.

Example rows must never contain personal data. Before storing an example row, strip or mask any field that identifies a specific person, such as a name, an address, an email, or an account number. If a rule cannot be explained without showing a personal field, describe the example in words instead of storing the row.

5. Record what each finding actually means

A failing rule is not automatically a defect. For each finding, decide which of these it is:

  • a defect: the data is simply wrong and should be fixed at the source
  • a business rule the check did not know about: the data is correct, and the rule needs to be adjusted to account for it
  • a documentation gap: the data and the rule disagree because the written specification never said what actually happens

Write this decision down next to the rule. It is what turns a list of red numbers into something a team can act on.

6. Build the dashboard from the stored results

Build the dashboard from the stored counts and examples only, never from the raw data. A useful shape:

  • headline numbers: total rows checked, total rules, overall pass rate
  • a scorecard broken down by dimension, so a viewer can see at a glance which dimension is weakest
  • a card per rule, showing the plain sentence describing the test, the count and rate, one masked example, and the SQL predicate for anyone who wants to verify it

7. Re-run as new data arrives

Data quality is not a one time check. Re-run the same rules against each new batch of data as it arrives, and watch how the rates move over time. A rate that suddenly jumps is usually more interesting than a rate that stays high but steady, because it points to something that just changed upstream.


Created by Exagrow AI Consulting. Provided under the MIT License.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.