Skill Tracer
Skills › Knowledge Work Plugins › explore-data

explore-data

skill · 325 lines · Apache-2.0 · data/skills/explore-data/SKILL.md

The facts

Its description

Profile and explore a dataset to understand its shape, quality, and patterns. Use when encountering a new table or file, checking null rates and column distributions, spotting data quality issues like duplicates or suspicious values, or deciding which dimensions and metrics to analyze.

The description the agent reads to decide when to use it.

From its settingsline 3

When it starts

The agent picks this skill when someone has a new table or file and wants it profiled before doing any real analysis — its shape, column types, null rates, duplicates, and other quality issues. The description frames it as the lay-of-the-land step for an unfamiliar dataset, whether it lives in a connected warehouse or arrives as an uploaded file.

Things a person might say (the model's guesses)

  • “I just got a new CSV export from finance — can you tell me what's actually in it?”
  • “Profile the orders table in our warehouse for me.”
  • “Before I start analyzing this dataset, check it for nulls, duplicates, and weird values.”

A model's summary of when it is used.

A model's reading

What it takes when started

<table or file>

What to type after its name when you start it.

From its settingsline 4

Stops for a person

1 line stops to ask a person

Lines that stop and wait for a person before going on. Found by matching words, so treat them as pointers.

Found by matching wordsline 36

Licence

Apache-2.0, from data/LICENSE

The terms its author shares it under, which let it be shown here.

From the repositorylicence text

The text

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1---
2name: explore-data
3description: Profile and explore a dataset to understand its shape, quality, and patterns. Use when encountering a new table or file, checking null rates and column distributions, spotting data quality issues like duplicates or suspicious values, or deciding which dimensions and metrics to analyze.
4argument-hint: "<table or file>"
5---
6
7# /explore-data - Profile and Explore a Dataset
8
9> If you see unfamiliar placeholders or need to check which tools are connected, see [CONNECTORS.md](../../CONNECTORS.md).
11Generate a comprehensive data profile for a table or uploaded file. Understand its shape, quality, and patterns before diving into analysis.

/explore-data - Profile and Explore a Dataset

If you see unfamiliar placeholders or need to check which tools are connected, see CONNECTORS.md.

Generate a comprehensive data profile for a table or uploaded file. Understand its shape, quality, and patterns before diving into analysis.

Raw lines 1 to 12
13## Usage
15```
16/explore-data <table_name or file>
17```

Usage

/explore-data <table_name or file>
Raw lines 13 to 18
19## Workflow
21### 1. Access the Data
23**If a data warehouse MCP server is connected:**
251. Resolve the table name (handle schema prefixes, suggest matches if ambiguous)
262. Query table metadata: column names, types, descriptions if available
273. Run profiling queries against the live data
29**If a file is provided (CSV, Excel, Parquet, JSON):**
311. Read the file and load into a working dataset
322. Infer column types from the data
34**If neither:**
361. Ask the user to provide a table name (with their warehouse connected) or upload a file
372. If they describe a table schema, provide guidance on what profiling queries to run

1. Access the Data

If a data warehouse MCP server is connected:

  1. Resolve the table name (handle schema prefixes, suggest matches if ambiguous)
  2. Query table metadata: column names, types, descriptions if available
  3. Run profiling queries against the live data

If a file is provided (CSV, Excel, Parquet, JSON):

  1. Read the file and load into a working dataset
  2. Infer column types from the data

If neither:

  1. Ask the user to provide a table name (with their warehouse connected) or upload a file
  2. If they describe a table schema, provide guidance on what profiling queries to run
Raw lines 21 to 38
Uses an outside tool MCP :23
Involves a person Ask the user :36
39### 2. Understand Structure
41Before analyzing any data, understand its structure:
43**Table-level questions:**
44- How many rows and columns?
45- What is the grain (one row per what)?
46- What is the primary key? Is it unique?
47- When was the data last updated?
48- How far back does the data go?
50**Column classification** — categorize each column as one of:
51- **Identifier**: Unique keys, foreign keys, entity IDs
52- **Dimension**: Categorical attributes for grouping/filtering (status, type, region, category)
53- **Metric**: Quantitative values for measurement (revenue, count, duration, score)
54- **Temporal**: Dates and timestamps (created_at, updated_at, event_date)
55- **Text**: Free-form text fields (description, notes, name)
56- **Boolean**: True/false flags
57- **Structural**: JSON, arrays, nested structures

2. Understand Structure

Before analyzing any data, understand its structure:

Table-level questions:

  • How many rows and columns?
  • What is the grain (one row per what)?
  • What is the primary key? Is it unique?
  • When was the data last updated?
  • How far back does the data go?

Column classification — categorize each column as one of:

  • Identifier: Unique keys, foreign keys, entity IDs
  • Dimension: Categorical attributes for grouping/filtering (status, type, region, category)
  • Metric: Quantitative values for measurement (revenue, count, duration, score)
  • Temporal: Dates and timestamps (created_at, updated_at, event_date)
  • Text: Free-form text fields (description, notes, name)
  • Boolean: True/false flags
  • Structural: JSON, arrays, nested structures
Raw lines 39 to 58
59### 3. Generate Data Profile
61Run the following profiling checks:
63**Table-level metrics:**
64- Total row count
65- Column count and types breakdown
66- Approximate table size (if available from metadata)
67- Date range coverage (min/max of date columns)
69**All columns:**
70- Null count and null rate
71- Distinct count and cardinality ratio (distinct / total)
72- Most common values (top 5-10 with frequencies)
73- Least common values (bottom 5 to spot anomalies)
75**Numeric columns (metrics):**
76```
77min, max, mean, median (p50)
78standard deviation
79percentiles: p1, p5, p25, p75, p95, p99
80zero count
81negative count (if unexpected)
82```
84**String columns (dimensions, text):**
85```
86min length, max length, avg length
87empty string count
88pattern analysis (do values follow a format?)
89case consistency (all upper, all lower, mixed?)
90leading/trailing whitespace count
91```
93**Date/timestamp columns:**
94```
95min date, max date
96null dates
97future dates (if unexpected)
98distribution by month/week
99gaps in time series
100```
102**Boolean columns:**
103```
104true count, false count, null count
105true rate
106```
108**Present the profile as a clean summary table**, grouped by column type (dimensions, metrics, dates, IDs).

3. Generate Data Profile

Run the following profiling checks:

Table-level metrics:

  • Total row count
  • Column count and types breakdown
  • Approximate table size (if available from metadata)
  • Date range coverage (min/max of date columns)

All columns:

  • Null count and null rate
  • Distinct count and cardinality ratio (distinct / total)
  • Most common values (top 5-10 with frequencies)
  • Least common values (bottom 5 to spot anomalies)

Numeric columns (metrics):

min, max, mean, median (p50)
standard deviation
percentiles: p1, p5, p25, p75, p95, p99
zero count
negative count (if unexpected)

String columns (dimensions, text):

min length, max length, avg length
empty string count
pattern analysis (do values follow a format?)
case consistency (all upper, all lower, mixed?)
leading/trailing whitespace count

Date/timestamp columns:

min date, max date
null dates
future dates (if unexpected)
distribution by month/week
gaps in time series

Boolean columns:

true count, false count, null count
true rate

Present the profile as a clean summary table, grouped by column type (dimensions, metrics, dates, IDs).

Raw lines 59 to 109
110### 4. Identify Data Quality Issues
112Apply the quality assessment framework below. Flag potential problems:
114- **High null rates**: Columns with >5% nulls (warn), >20% nulls (alert)
115- **Low cardinality surprises**: Columns that should be high-cardinality but aren't (e.g., a "user_id" with only 50 distinct values)
116- **High cardinality surprises**: Columns that should be categorical but have too many distinct values
117- **Suspicious values**: Negative amounts where only positive expected, future dates in historical data, obviously placeholder values (e.g., "N/A", "TBD", "test", "999999")
118- **Duplicate detection**: Check if there's a natural key and whether it has duplicates
119- **Distribution skew**: Extremely skewed numeric distributions that could affect averages
120- **Encoding issues**: Mixed case in categorical fields, trailing whitespace, inconsistent formats

4. Identify Data Quality Issues

Apply the quality assessment framework below. Flag potential problems:

  • High null rates: Columns with >5% nulls (warn), >20% nulls (alert)
  • Low cardinality surprises: Columns that should be high-cardinality but aren't (e.g., a "user_id" with only 50 distinct values)
  • High cardinality surprises: Columns that should be categorical but have too many distinct values
  • Suspicious values: Negative amounts where only positive expected, future dates in historical data, obviously placeholder values (e.g., "N/A", "TBD", "test", "999999")
  • Duplicate detection: Check if there's a natural key and whether it has duplicates
  • Distribution skew: Extremely skewed numeric distributions that could affect averages
  • Encoding issues: Mixed case in categorical fields, trailing whitespace, inconsistent formats
Raw lines 110 to 121
122### 5. Discover Relationships and Patterns
124After profiling individual columns:
126- **Foreign key candidates**: ID columns that might link to other tables
127- **Hierarchies**: Columns that form natural drill-down paths (country > state > city)
128- **Correlations**: Numeric columns that move together
129- **Derived columns**: Columns that appear to be computed from others
130- **Redundant columns**: Columns with identical or near-identical information

5. Discover Relationships and Patterns

After profiling individual columns:

  • Foreign key candidates: ID columns that might link to other tables
  • Hierarchies: Columns that form natural drill-down paths (country > state > city)
  • Correlations: Numeric columns that move together
  • Derived columns: Columns that appear to be computed from others
  • Redundant columns: Columns with identical or near-identical information
Raw lines 122 to 131
132### 6. Suggest Interesting Dimensions and Metrics
134Based on the column profile, recommend:
136- **Best dimension columns** for slicing data (categorical columns with reasonable cardinality, 3-50 values)
137- **Key metric columns** for measurement (numeric columns with meaningful distributions)
138- **Time columns** suitable for trend analysis
139- **Natural groupings** or hierarchies apparent in the data
140- **Potential join keys** linking to other tables (ID columns, foreign keys)

6. Suggest Interesting Dimensions and Metrics

Based on the column profile, recommend:

  • Best dimension columns for slicing data (categorical columns with reasonable cardinality, 3-50 values)
  • Key metric columns for measurement (numeric columns with meaningful distributions)
  • Time columns suitable for trend analysis
  • Natural groupings or hierarchies apparent in the data
  • Potential join keys linking to other tables (ID columns, foreign keys)
Raw lines 132 to 141
142### 7. Recommend Follow-Up Analyses
144Suggest 3-5 specific analyses the user could run next:
146- "Trend analysis on [metric] by [time_column] grouped by [dimension]"
147- "Distribution deep-dive on [skewed_column] to understand outliers"
148- "Data quality investigation on [problematic_column]"
149- "Correlation analysis between [metric_a] and [metric_b]"
150- "Cohort analysis using [date_column] and [status_column]"

7. Recommend Follow-Up Analyses

Suggest 3-5 specific analyses the user could run next:

  • "Trend analysis on [metric] by [time_column] grouped by [dimension]"
  • "Distribution deep-dive on [skewed_column] to understand outliers"
  • "Data quality investigation on [problematic_column]"
  • "Correlation analysis between [metric_a] and [metric_b]"
  • "Cohort analysis using [date_column] and [status_column]"
Raw lines 142 to 151
152## Output Format
154```
155## Data Profile: [table_name]
157### Overview
158- Rows: 2,340,891
159- Columns: 23 (8 dimensions, 6 metrics, 4 dates, 5 IDs)
160- Date range: 2021-03-15 to 2024-01-22
162### Column Details
163[summary table]
165### Data Quality Issues
166[flagged issues with severity]
168### Recommended Explorations
169[numbered list of suggested follow-up analyses]
170```
172---

Output Format

## Data Profile: [table_name]

### Overview
- Rows: 2,340,891
- Columns: 23 (8 dimensions, 6 metrics, 4 dates, 5 IDs)
- Date range: 2021-03-15 to 2024-01-22

### Column Details
[summary table]

### Data Quality Issues
[flagged issues with severity]

### Recommended Explorations
[numbered list of suggested follow-up analyses]

Raw lines 152 to 173
174## Quality Assessment Framework

Quality Assessment Framework

Raw lines 174 to 175
176### Completeness Score
178Rate each column:
179- **Complete** (>99% non-null): Green
180- **Mostly complete** (95-99%): Yellow -- investigate the nulls
181- **Incomplete** (80-95%): Orange -- understand why and whether it matters
182- **Sparse** (<80%): Red -- may not be usable without imputation

Completeness Score

Rate each column:

  • Complete (>99% non-null): Green
  • Mostly complete (95-99%): Yellow -- investigate the nulls
  • Incomplete (80-95%): Orange -- understand why and whether it matters
  • Sparse (<80%): Red -- may not be usable without imputation
Raw lines 176 to 183
184### Consistency Checks
186Look for:
187- **Value format inconsistency**: Same concept represented differently ("USA", "US", "United States", "us")
188- **Type inconsistency**: Numbers stored as strings, dates in various formats
189- **Referential integrity**: Foreign keys that don't match any parent record
190- **Business rule violations**: Negative quantities, end dates before start dates, percentages > 100
191- **Cross-column consistency**: Status = "completed" but completed_at is null

Consistency Checks

Look for:

  • Value format inconsistency: Same concept represented differently ("USA", "US", "United States", "us")
  • Type inconsistency: Numbers stored as strings, dates in various formats
  • Referential integrity: Foreign keys that don't match any parent record
  • Business rule violations: Negative quantities, end dates before start dates, percentages > 100
  • Cross-column consistency: Status = "completed" but completed_at is null
Raw lines 184 to 192
193### Accuracy Indicators
195Red flags that suggest accuracy issues:
196- **Placeholder values**: 0, -1, 999999, "N/A", "TBD", "test", "xxx"
197- **Default values**: Suspiciously high frequency of a single value
198- **Stale data**: Updated_at shows no recent changes in an active system
199- **Impossible values**: Ages > 150, dates in the far future, negative durations
200- **Round number bias**: All values ending in 0 or 5 (suggests estimation, not measurement)

Accuracy Indicators

Red flags that suggest accuracy issues:

  • Placeholder values: 0, -1, 999999, "N/A", "TBD", "test", "xxx"
  • Default values: Suspiciously high frequency of a single value
  • Stale data: Updated_at shows no recent changes in an active system
  • Impossible values: Ages > 150, dates in the far future, negative durations
  • Round number bias: All values ending in 0 or 5 (suggests estimation, not measurement)
Raw lines 193 to 201
202### Timeliness Assessment
204- When was the table last updated?
205- What is the expected update frequency?
206- Is there a lag between event time and load time?
207- Are there gaps in the time series?

Timeliness Assessment

  • When was the table last updated?
  • What is the expected update frequency?
  • Is there a lag between event time and load time?
  • Are there gaps in the time series?
Raw lines 202 to 208
209## Pattern Discovery Techniques

Pattern Discovery Techniques

Raw lines 209 to 210
211### Distribution Analysis
213For numeric columns, characterize the distribution:
214- **Normal**: Mean and median are close, bell-shaped
215- **Skewed right**: Long tail of high values (common for revenue, session duration)
216- **Skewed left**: Long tail of low values (less common)
217- **Bimodal**: Two peaks (suggests two distinct populations)
218- **Power law**: Few very large values, many small ones (common for user activity)
219- **Uniform**: Roughly equal frequency across range (often synthetic or random)

Distribution Analysis

For numeric columns, characterize the distribution:

  • Normal: Mean and median are close, bell-shaped
  • Skewed right: Long tail of high values (common for revenue, session duration)
  • Skewed left: Long tail of low values (less common)
  • Bimodal: Two peaks (suggests two distinct populations)
  • Power law: Few very large values, many small ones (common for user activity)
  • Uniform: Roughly equal frequency across range (often synthetic or random)
Raw lines 211 to 220
221### Temporal Patterns
223For time series data, look for:
224- **Trend**: Sustained upward or downward movement
225- **Seasonality**: Repeating patterns (weekly, monthly, quarterly, annual)
226- **Day-of-week effects**: Weekday vs. weekend differences
227- **Holiday effects**: Drops or spikes around known holidays
228- **Change points**: Sudden shifts in level or trend
229- **Anomalies**: Individual data points that break the pattern

Temporal Patterns

For time series data, look for:

  • Trend: Sustained upward or downward movement
  • Seasonality: Repeating patterns (weekly, monthly, quarterly, annual)
  • Day-of-week effects: Weekday vs. weekend differences
  • Holiday effects: Drops or spikes around known holidays
  • Change points: Sudden shifts in level or trend
  • Anomalies: Individual data points that break the pattern
Raw lines 221 to 230
231### Segmentation Discovery
233Identify natural segments by:
234- Finding categorical columns with 3-20 distinct values
235- Comparing metric distributions across segment values
236- Looking for segments with significantly different behavior
237- Testing whether segments are homogeneous or contain sub-segments

Segmentation Discovery

Identify natural segments by:

  • Finding categorical columns with 3-20 distinct values
  • Comparing metric distributions across segment values
  • Looking for segments with significantly different behavior
  • Testing whether segments are homogeneous or contain sub-segments
Raw lines 231 to 238
239### Correlation Exploration
241Between numeric columns:
242- Compute correlation matrix for all metric pairs
243- Flag strong correlations (|r| > 0.7) for investigation
244- Note: Correlation does not imply causation -- flag this explicitly
245- Check for non-linear relationships (e.g., quadratic, logarithmic)

Correlation Exploration

Between numeric columns:

  • Compute correlation matrix for all metric pairs
  • Flag strong correlations (|r| > 0.7) for investigation
  • Note: Correlation does not imply causation -- flag this explicitly
  • Check for non-linear relationships (e.g., quadratic, logarithmic)
Raw lines 239 to 246
247## Schema Understanding and Documentation

Schema Understanding and Documentation

Raw lines 247 to 248
249### Schema Documentation Template
251When documenting a dataset for team use:
253```markdown
254## Table: [schema.table_name]
256**Description**: [What this table represents]
257**Grain**: [One row per...]
258**Primary Key**: [column(s)]
259**Row Count**: [approximate, with date]
260**Update Frequency**: [real-time / hourly / daily / weekly]
261**Owner**: [team or person responsible]
263### Key Columns
265| Column | Type | Description | Example Values | Notes |
266|--------|------|-------------|----------------|-------|
267| user_id | STRING | Unique user identifier | "usr_abc123" | FK to users.id |
268| event_type | STRING | Type of event | "click", "view", "purchase" | 15 distinct values |
269| revenue | DECIMAL | Transaction revenue in USD | 29.99, 149.00 | Null for non-purchase events |
270| created_at | TIMESTAMP | When the event occurred | 2024-01-15 14:23:01 | Partitioned on this column |
272### Relationships
273- Joins to `users` on `user_id`
274- Joins to `products` on `product_id`
275- Parent of `event_details` (1:many on event_id)
277### Known Issues
278- [List any known data quality issues]
279- [Note any gotchas for analysts]
281### Common Query Patterns
282- [Typical use cases for this table]
283```

Schema Documentation Template

When documenting a dataset for team use:

## Table: [schema.table_name]

**Description**: [What this table represents]
**Grain**: [One row per...]
**Primary Key**: [column(s)]
**Row Count**: [approximate, with date]
**Update Frequency**: [real-time / hourly / daily / weekly]
**Owner**: [team or person responsible]

### Key Columns

| Column | Type | Description | Example Values | Notes |
|--------|------|-------------|----------------|-------|
| user_id | STRING | Unique user identifier | "usr_abc123" | FK to users.id |
| event_type | STRING | Type of event | "click", "view", "purchase" | 15 distinct values |
| revenue | DECIMAL | Transaction revenue in USD | 29.99, 149.00 | Null for non-purchase events |
| created_at | TIMESTAMP | When the event occurred | 2024-01-15 14:23:01 | Partitioned on this column |

### Relationships
- Joins to `users` on `user_id`
- Joins to `products` on `product_id`
- Parent of `event_details` (1:many on event_id)

### Known Issues
- [List any known data quality issues]
- [Note any gotchas for analysts]

### Common Query Patterns
- [Typical use cases for this table]
Raw lines 249 to 284
285### Schema Exploration Queries
287When connected to a data warehouse, use these patterns to discover schema:
289```sql
290-- List all tables in a schema (PostgreSQL)
291SELECT table_name, table_type
292FROM information_schema.tables
293WHERE table_schema = 'public'
294ORDER BY table_name;
296-- Column details (PostgreSQL)
297SELECT column_name, data_type, is_nullable, column_default
298FROM information_schema.columns
299WHERE table_name = 'my_table'
300ORDER BY ordinal_position;
302-- Table sizes (PostgreSQL)
303SELECT relname, pg_size_pretty(pg_total_relation_size(relid))
304FROM pg_catalog.pg_statio_user_tables
305ORDER BY pg_total_relation_size(relid) DESC;
307-- Row counts for all tables (general pattern)
308-- Run per-table: SELECT COUNT(*) FROM table_name
309```

Schema Exploration Queries

When connected to a data warehouse, use these patterns to discover schema:

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

-- Column details (PostgreSQL)
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_name = 'my_table'
ORDER BY ordinal_position;

-- Table sizes (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 counts for all tables (general pattern)
-- Run per-table: SELECT COUNT(*) FROM table_name
Raw lines 285 to 310
311### Lineage and Dependencies
313When exploring an unfamiliar data environment:
3151. Start with the "output" tables (what reports or dashboards consume)
3162. Trace upstream: What tables feed into them?
3173. Identify raw/staging/mart layers
3184. Map the transformation chain from raw data to analytical tables
3195. Note where data is enriched, filtered, or aggregated

Lineage and Dependencies

When exploring an unfamiliar data environment:

  1. Start with the "output" tables (what reports or dashboards consume)
  2. Trace upstream: What tables feed into them?
  3. Identify raw/staging/mart layers
  4. Map the transformation chain from raw data to analytical tables
  5. Note where data is enriched, filtered, or aggregated
Raw lines 311 to 320
321## Tips
323- For very large tables (100M+ rows), profiling queries use sampling by default -- mention if you need exact counts
324- If exploring a new dataset for the first time, this command gives you the lay of the land before writing specific queries
325- The quality flags are heuristic -- not every flag is a real problem, but each is worth a quick look

Tips

  • For very large tables (100M+ rows), profiling queries use sampling by default -- mention if you need exact counts
  • If exploring a new dataset for the first time, this command gives you the lay of the land before writing specific queries
  • The quality flags are heuristic -- not every flag is a real problem, but each is worth a quick look
Raw lines 321 to 325

From anthropics/knowledge-work-plugins at 2574e29, 2026-10-27. Skills read by DeepSeek V4.1 Flash on 2026-11-04. Summary and techniques by Claude Opus 5.5 on 2026-11-06.