Профиль и проверка таблицы данных
Изучает таблицу или файл: форму, пустые значения, дубликаты, странные значения, и предлагает, что анализировать дальше.
- Что делает
- Изучает таблицу или файл: форму, пустые значения, дубликаты, странные значения, и предлагает, что анализировать дальше.
- Когда брать
- Когда получил новую таблицу или файл и хочешь понять, что в нём и можно ли ему верить, прежде чем строить отчёты.
- Пример запроса
- Изучи файл clients.csv: что в нём есть, много ли пропусков и дубликатов, что стоит проанализировать.
- Нужно подключить
- хранилище данных или файл CSV/Excel
Входит в плагин data. В Cowork и Claude Code можно поставить плагин целиком.
Как включить
- Нажмите «Скачать на русском» и сохраните архив.
- В Claude откройте Настройки → Capabilities → Skills → Upload skill и выберите архив.
- Включите скилл переключателем.
Для терминала
Распакуйте архив и положите папку explore-data в ~/.claude/skills/. Файл SKILL.md должен лежать внутри этой папки.
Текст
---
name: explore-data
description: Изучи набор данных и составь его профиль, чтобы понять форму, качество и закономерности данных. Используй, когда встретил новую таблицу или файл, нужно проверить долю пустых значений и распределения по столбцам, найти проблемы качества вроде дубликатов или подозрительных значений или решить, какие разрезы и метрики анализировать.
argument-hint: "<table or file>"
---
/explore-data - Профиль и исследование набора данных
Если встретишь незнакомые подстановки или нужно проверить, какие инструменты подключены, смотри [CONNECTORS.md](../../CONNECTORS.md).
Составь подробный профиль данных для таблицы или загруженного файла. Пойми форму, качество и закономерности данных, прежде чем переходить к анализу.
Использование
/explore-data <table_name or file>
Рабочий процесс
1. Получи доступ к данным
Если подключён MCP-сервер хранилища данных:
- Определи название таблицы (учти префиксы схем, при неоднозначности предложи варианты)
- Запроси метаданные таблицы: названия столбцов, типы, описания, если они есть
- Выполни профилирующие запросы к живым данным
Если передан файл (CSV, Excel, Parquet, JSON):
- Прочитай файл и загрузи его в рабочий набор данных
- Определи типы столбцов по данным
Если нет ни того, ни другого:
- Попроси пользователя указать название таблицы (при подключённом хранилище) или загрузить файл
- Если он опишет схему таблицы, подскажи, какие профилирующие запросы выполнить
2. Пойми структуру
Прежде чем анализировать данные, пойми их структуру:
Вопросы по таблице в целом:
- Сколько строк и столбцов?
- Какова гранулярность (одна строка — это что)?
- Каков первичный ключ? Уникален ли он?
- Когда данные обновлялись в последний раз?
- Насколько далеко в прошлое уходят данные?
Классификация столбцов — отнеси каждый столбец к одному из типов:
- Идентификатор: уникальные ключи, внешние ключи, идентификаторы сущностей
- Измерение: категориальные признаки для группировки и фильтрации (статус, тип, регион, категория)
- Метрика: количественные значения для измерения (выручка, количество, длительность, оценка)
- Время: даты и метки времени (created_at, updated_at, event_date)
- Текст: поля со свободным текстом (описание, заметки, имя)
- Логический: флаги «истина/ложь»
- Структурный: JSON, массивы, вложенные структуры
3. Составь профиль данных
Выполни следующие профилирующие проверки:
Показатели по таблице в целом:
- Общее число строк
- Число столбцов и разбивка по типам
- Примерный размер таблицы (если есть в метаданных)
- Охват по датам (минимум и максимум в столбцах с датами)
Все столбцы:
- Число и доля пустых значений (null)
- Число уникальных значений и кардинальность (уникальные / всего)
- Самые частые значения (топ 5–10 с частотами)
- Самые редкие значения (нижние 5, чтобы заметить аномалии)
Числовые столбцы (метрики):
минимум, максимум, среднее, медиана (p50)
стандартное отклонение
процентили: p1, p5, p25, p75, p95, p99
число нулей
число отрицательных значений (если их быть не должно)
Строковые столбцы (измерения, текст):
минимальная длина, максимальная длина, средняя длина
число пустых строк
анализ шаблонов (следуют ли значения единому формату?)
единообразие регистра (всё в верхнем, всё в нижнем, вперемешку?)
число значений с пробелами в начале и в конце
Столбцы с датой и временем:
минимальная дата, максимальная дата
пустые даты
даты в будущем (если их быть не должно)
распределение по месяцам и неделям
пропуски во временном ряду
Логические столбцы:
число значений «истина», «ложь» и null
доля «истины»
Представь профиль в виде аккуратной сводной таблицы, сгруппированной по типам столбцов (измерения, метрики, даты, идентификаторы).
4. Найди проблемы качества данных
Примени приведённую ниже систему оценки качества. Отметь возможные проблемы:
- Высокая доля пустых значений: столбцы с >5% пустых значений (предупреждение), >20% (тревога)
- Неожиданно низкая кардинальность: столбцы, где значений должно быть много, но их мало (например, «user_id» всего с 50 уникальными значениями)
- Неожиданно высокая кардинальность: столбцы, которые должны быть категориальными, но содержат слишком много уникальных значений
- Подозрительные значения: отрицательные суммы там, где ожидаются только положительные; даты в будущем в исторических данных; очевидные значения-заглушки (например, «N/A», «TBD», «test», «999999»)
- Поиск дубликатов: проверь, есть ли естественный ключ и нет ли в нём дубликатов
- Перекос распределения: сильно скошенные числовые распределения, которые могут исказить средние значения
- Проблемы с кодировкой: смешанный регистр в категориальных полях, пробелы в конце, непоследовательные форматы
5. Найди связи и закономерности
Когда отдельные столбцы просмотрены:
- Кандидаты во внешние ключи: столбцы с идентификаторами, которые могут связывать таблицу с другими
- Иерархии: столбцы, образующие естественные пути детализации (страна > регион > город)
- Корреляции: числовые столбцы, которые меняются вместе
- Производные столбцы: столбцы, которые, судя по всему, вычислены из других
- Избыточные столбцы: столбцы с одинаковой или почти одинаковой информацией
6. Предложи интересные измерения и метрики
На основе профиля столбцов порекомендуй:
- Лучшие столбцы-измерения для срезов данных (категориальные столбцы с разумной кардинальностью, 3–50 значений)
- Ключевые столбцы-метрики для измерения (числовые столбцы со значимым распределением)
- Столбцы времени, подходящие для анализа трендов
- Естественные группировки или иерархии, заметные в данных
- Возможные ключи для соединения с другими таблицами (идентификаторы, внешние ключи)
7. Порекомендуй дальнейшие анализы
Предложи 3–5 конкретных анализов, которые пользователь мог бы сделать дальше:
- «Анализ тренда по [метрика] во времени по [столбец_времени] с группировкой по [измерение]»
- «Углублённый анализ распределения в [скошенный_столбец], чтобы понять выбросы»
- «Проверка качества данных в [проблемный_столбец]»
- «Корреляционный анализ [метрика_а] и [метрика_б]»
- «Когортный анализ на основе [столбец_даты] и [столбец_статуса]»
Формат результата
## Профиль данных: [table_name]
### Обзор
- Строк: 2 340 891
- Столбцов: 23 (8 измерений, 6 метрик, 4 даты, 5 идентификаторов)
- Диапазон дат: с 2021-03-15 по 2024-01-22
### Подробности по столбцам
[сводная таблица]
### Проблемы качества данных
[отмеченные проблемы с указанием серьёзности]
### Рекомендуемые направления исследования
[нумерованный список предлагаемых дальнейших анализов]
Система оценки качества
Оценка полноты
Оцени каждый столбец:
- Полный (>99% непустых): зелёный
- Почти полный (95–99%): жёлтый — изучи пустые значения
- Неполный (80–95%): оранжевый — выясни причину и важно ли это
- Разреженный (<80%): красный — без заполнения пропусков, возможно, непригоден
Проверки согласованности
Ищи:
- Непоследовательность форматов значений: одно и то же понятие записано по-разному («USA», «US», «United States», «us»)
- Непоследовательность типов: числа хранятся как строки, даты в разных форматах
- Ссылочная целостность: внешние ключи, которым не соответствует ни одна родительская запись
- Нарушения бизнес-правил: отрицательные количества, даты окончания раньше дат начала, проценты больше 100
- Согласованность между столбцами: статус = «completed», но completed_at пусто
Признаки недостоверности
Тревожные сигналы, указывающие на проблемы с точностью:
- Значения-заглушки: 0, -1, 999999, «N/A», «TBD», «test», «xxx»
- Значения по умолчанию: подозрительно высокая частота одного значения
- Устаревшие данные: updated_at не показывает недавних изменений в активной системе
- Невозможные значения: возраст больше 150 лет, даты в далёком будущем, отрицательная длительность
- Склонность к круглым числам: все значения заканчиваются на 0 или 5 (говорит об оценке, а не об измерении)
Оценка актуальности
- Когда таблица обновлялась в последний раз?
- Какая ожидаемая частота обновления?
- Есть ли задержка между временем события и временем загрузки?
- Есть ли пропуски во временном ряду?
Приёмы поиска закономерностей
Анализ распределения
Для числовых столбцов определи характер распределения:
- Нормальное: среднее и медиана близки, форма колоколом
- С правым смещением: длинный хвост высоких значений (типично для выручки, длительности сессий)
- С левым смещением: длинный хвост низких значений (встречается реже)
- Двугорбое: два пика (говорит о двух различных группах)
- Степенной закон: немного очень больших значений и много малых (типично для активности пользователей)
- Равномерное: примерно одинаковая частота по всему диапазону (часто синтетические или случайные данные)
Временные закономерности
В данных временных рядов ищи:
- Тренд: устойчивое движение вверх или вниз
- Сезонность: повторяющиеся закономерности (недельные, месячные, квартальные, годовые)
- Эффекты дня недели: разница между буднями и выходными
- Эффекты праздников: падения или всплески вокруг известных праздников
- Точки излома: внезапные сдвиги уровня или тренда
- Аномалии: отдельные точки данных, выбивающиеся из закономерности
Поиск сегментов
Находи естественные сегменты так:
- Ищи категориальные столбцы с 3–20 уникальными значениями
- Сравнивай распределения метрик по значениям сегментов
- Ищи сегменты со значительно отличающимся поведением
- Проверяй, однородны ли сегменты или содержат подсегменты
Исследование корреляций
Между числовыми столбцами:
- Посчитай матрицу корреляций для всех пар метрик
- Отметь сильные корреляции (|r| > 0,7) для дальнейшего изучения
- Примечание: корреляция не означает причинно-следственную связь — скажи об этом прямо
- Проверь нелинейные связи (например, квадратичные, логарифмические)
Понимание схемы и документирование
Шаблон документации схемы
При документировании набора данных для командной работы:
## Таблица: [schema.table_name]
**Описание**: [Что представляет эта таблица]
**Гранулярность**: [Одна строка соответствует...]
**Первичный ключ**: [столбец(цы)]
**Число строк**: [приблизительно, с датой]
**Частота обновления**: [в реальном времени / раз в час / раз в день / раз в неделю]
**Владелец**: [ответственная команда или человек]
### Ключевые столбцы
| Столбец | Тип | Описание | Примеры значений | Примечания |
|--------|------|-------------|----------------|-------|
| user_id | STRING | Уникальный идентификатор пользователя | "usr_abc123" | Внешний ключ к users.id |
| event_type | STRING | Тип события | "click", "view", "purchase" | 15 уникальных значений |
| revenue | DECIMAL | Выручка по транзакции в USD | 29.99, 149.00 | Null для событий, не связанных с покупкой |
| created_at | TIMESTAMP | Когда произошло событие | 2024-01-15 14:23:01 | Таблица секционирована по этому столбцу |
### Связи
- Соединяется с `users` по `user_id`
- Соединяется с `products` по `product_id`
- Родитель для `event_details` (1:много по event_id)
### Известные проблемы
- [Перечисли все известные проблемы качества данных]
- [Отметь все подводные камни для аналитиков]
### Типовые шаблоны запросов
- [Типичные сценарии использования этой таблицы]
Запросы для изучения схемы
При подключении к хранилищу данных используй эти шаблоны, чтобы изучить схему:
-- 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
Происхождение данных и зависимости
При изучении незнакомой среды данных:
- Начни с «выходных» таблиц (которые используют отчёты или дашборды)
- Проследи путь вверх по потоку: какие таблицы питают их?
- Определи слои: сырые данные, промежуточные (staging) и витрины (mart)
- Составь карту цепочки преобразований от сырых данных до аналитических таблиц
- Отметь, где данные обогащаются, фильтруются или агрегируются
Советы
- Для очень больших таблиц (100 млн строк и больше) профилирующие запросы по умолчанию используют выборку — скажи, если нужны точные подсчёты
- Если ты впервые изучаешь новый набор данных, эта команда даёт общее представление о нём, прежде чем писать конкретные запросы
- Метки качества эвристические — не каждая из них означает настоящую проблему, но каждую стоит быстро проверить
Перевод: iiuniversitet. Оригинал: https://github.com/anthropics/knowledge-work-plugins/tree/main/data/skills/explore-data, лицензия Apache-2.0. Изменения: перевод на русский язык.
Оригинал на английском
---
name: explore-data
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.
argument-hint: "<table or file>"
---
# /explore-data - Profile and Explore a Dataset
> If you see unfamiliar placeholders or need to check which tools are connected, see [CONNECTORS.md](../../CONNECTORS.md).
Generate a comprehensive data profile for a table or uploaded file. Understand its shape, quality, and patterns before diving into analysis.
## Usage
```
/explore-data <table_name or file>
```
## Workflow
### 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
### 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
### 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).
### 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
### 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
### 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)
### 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]"
## 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]
```
---
## Quality Assessment Framework
### 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
### 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
### 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)
### 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?
## Pattern Discovery Techniques
### 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)
### 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
### 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
### 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)
## Schema Understanding and Documentation
### Schema Documentation Template
When documenting a dataset for team use:
```markdown
## 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]
```
### Schema Exploration Queries
When connected to a data warehouse, use these patterns to discover schema:
```sql
-- 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
```
### 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
## 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
Источник: anthropics/knowledge-work-plugins / data / explore-data ↗. Ссылка проверена 2026-10-10.