Data Profiling logo

Data Profiling

Organization
vm0-ai
data-profiling

Profile datasets for schema, distributions, nulls, cardinality, outliers, relationships, and data quality.

Overview

Publishervm0-ai
Repositoryvm0-skills
Skill namedata-profiling
Stars
76
Forks
18
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by vm0-ai on GitHub. Read the source before you install it.

Installation

Install the Data Profiling AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/vm0-ai/vm0-skills.git /tmp/vm0-skills
mkdir -p .claude/skills
cp -r /tmp/vm0-skills/data-profiling .claude/skills/data-profiling
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Data Profiling in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Data Profiling on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Data Profiling is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Structural Reconnaissance

Table-Level Inventory

Start every new dataset encounter by answering these questions:

  • What is the total row and column count?
  • What does each row represent (the grain)?
  • Which column or columns uniquely identify a row?
  • When was the most recent data loaded?
  • What is the earliest date in the dataset?

Classifying Columns by Role

Assign every column to one of these categories:

  • Key: Primary keys, foreign keys, entity identifiers
  • Attribute: Categorical fields used for grouping or filtering (region, status, plan_type)
  • Measure: Numeric fields intended for aggregation (revenue, duration, score)
  • Timestamp: Date or datetime fields (created_at, processed_on, event_date)
  • Free-text: Unstructured strings (descriptions, comments, names)
  • Flag: Binary true/false indicators
  • Nested: JSON blobs, arrays, or embedded structures

Column-Level Inspection

Universal Checks (All Column Types)

  • Null count and null percentage
  • Count of distinct values and cardinality ratio (distinct / total rows)
  • Top 5-10 most frequent values with their occurrence counts
  • Bottom 5 least frequent values (useful for spotting anomalies)

Numeric Measures

Minimum, maximum, mean, median
Standard deviation
Percentile ladder: p1, p5, p25, p75, p95, p99
Count of zeros
Count of negatives (flag if unexpected)

Text and Categorical Fields

Shortest length, longest length, average length
Count of empty strings
Format regularity (do values follow a consistent pattern?)
Case consistency (uniform upper, uniform lower, or mixed?)
Count of values with leading or trailing whitespace

Date and Timestamp Fields

Earliest date, latest date
Count of nulls
Count of future dates (flag if the domain forbids them)
Distribution across months or weeks
Gaps in expected daily/weekly cadence

Boolean Fields

True count, false count, null count
True proportion

Discovering Relationships

After examining columns individually, look for connections:

  • Foreign key candidates: ID columns whose values likely reference another table
  • Hierarchical dimensions: Columns that nest naturally (country > region > city)
  • Correlated measures: Numeric columns that trend together
  • Computed columns: Fields that appear derived from other columns in the same table
  • Duplicated information: Columns that carry identical or near-identical content

Evaluating Data Quality

Completeness Ratings

Assign each column a tier:

  • Full (>99% populated): No action needed
  • Mostly full (95-99%): Investigate the missing values
  • Gaps present (80-95%): Determine whether the gaps are systematic and whether the column is still usable
  • Sparse (<80%): Likely unusable without imputation or supplemental data

Consistency Checks

Scan for:

  • Value normalization failures: The same concept spelled multiple ways ("USA", "US", "United States", "us")
  • Type mismatches: Numerics stored as text, dates in inconsistent formats
  • Broken references: Foreign key values with no matching parent record
  • Rule violations: Negative quantities, end dates preceding start dates, percentages outside 0-100
  • Cross-column contradictions: status = 'shipped' while ship_date is null

Accuracy Warning Signs

Patterns that suggest the data may be unreliable:

  • Sentinel values: 0, -1, 999999, "N/A", "TBD", "test", "xxx"
  • Suspiciously dominant defaults: One value appearing far more often than expected
  • Stale records: The updated_at column shows no recent activity in an active system
  • Physically impossible values: Ages above 150, dates decades in the future, negative durations
  • Rounding artifacts: Disproportionate clustering on multiples of 5 or 10 (implies estimation)

Freshness Assessment

  • What is the timestamp of the most recent row?
  • How often should this table refresh?
  • Is there measurable lag between event occurrence and warehouse arrival?
  • Are there missing days or hours in the time series?

Recognizing Patterns

Distribution Shapes

When profiling a numeric column, classify its shape:

  • Bell-shaped: Mean and median nearly equal; symmetric tails
  • Right-skewed: Long right tail with a few very large values (typical for revenue, session length)
  • Left-skewed: Long left tail with a few very small values (less common)
  • Bimodal: Two distinct peaks (suggests two merged populations)
  • Power-law: A handful of enormous values dominating; many near-zero values (user engagement metrics)
  • Uniform: Roughly flat across the range (often synthetic or randomly generated)

Time-Based Patterns

For any temporal data, investigate:

  • Trend: Persistent upward or downward drift
  • Seasonality: Recurring cycles — weekly, monthly, quarterly, annual
  • Weekday effects: Systematic weekday vs. weekend differences
  • Holiday impacts: Spikes or dips around known holidays
  • Level shifts: Abrupt, sustained changes in the baseline
  • Isolated anomalies: Single data points that break the prevailing pattern

Segment Discovery

Surface natural groupings by:

  • Identifying categorical columns with 3 to 20 distinct values
  • Comparing metric distributions across each segment value
  • Highlighting segments whose behavior diverges meaningfully from the overall
  • Checking whether apparent segments contain meaningful sub-segments

Correlation Scanning

Across numeric columns:

  • Build a pairwise correlation matrix
  • Highlight strong associations (|r| > 0.7)
  • Remember that correlation never establishes causation — note this explicitly
  • Probe for non-linear relationships (quadratic, logarithmic) that Pearson r would miss

Documenting What You Find

Dataset Summary Template

markdown

## Table: [schema.table_name]

**Purpose**: [What this table captures]
**Grain**: [One row per...]
**Primary Key**: [column(s)]
**Approximate Rows**: [count, as of date]
**Refresh Cadence**: [real-time / hourly / daily / weekly]
**Responsible Team**: [owner]

### Important Columns

| Column | Type | Meaning | Sample Values | Notes |
|--------|------|---------|---------------|-------|
| user_id | STRING | Unique user handle | "usr_abc123" | References users.id |
| event_type | STRING | Action category | "click", "view", "purchase" | 15 distinct values |
| revenue | DECIMAL | USD transaction amount | 29.99, 149.00 | Null for non-purchases |
| created_at | TIMESTAMP | Event occurrence time | 2024-01-15 14:23:01 | Partition column |

### Join Paths
- Links to `users` via `user_id`
- Links to `products` via `product_id`
- Parent of `event_details` (one-to-many on event_id)

### Known Caveats
- [Document any quality issues]
- [Note analytical gotchas]

### Typical Query Use Cases
- [List common analytical patterns against this table]

Schema Discovery Queries

When working directly against a warehouse, use these patterns:

sql
-- Enumerate tables in a schema (PostgreSQL)
SELECT table_name, table_type
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY table_name;

-- Inspect column metadata (PostgreSQL)
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_name = 'target_table'
ORDER BY ordinal_position;

-- Rank tables by storage footprint (PostgreSQL)
SELECT relname, pg_size_pretty(pg_total_relation_size(relid))
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;

-- Row count per table (general approach)
-- Execute individually: SELECT COUNT(*) FROM table_name

Tracing Data Lineage

When navigating an unfamiliar warehouse:

  1. Begin at the consumption layer — identify which tables power reports and dashboards
  2. Follow dependencies upstream: what feeds those tables?
  3. Map the raw / staging / mart architecture
  4. Track where transformations enrich, filter, or roll up the data
  5. Record any points where data is joined with external sources

Frequently asked questions

What does the Data Profiling AI skill do?

Profile datasets for schema, distributions, nulls, cardinality, outliers, relationships, and data quality.

Why use Data Profiling on TypingMind?

Because you install it once and use it with any model. Data Profiling is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Data Profiling in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/vm0-ai/vm0-skills/tree/main/data-profiling. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Data Profiling?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Data Profiling?

As many as you like. As long as a model supports skills, you can use Data Profiling with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Data Profiling AI skill free?

It is published on GitHub by vm0-ai. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇