Несогласованность в данных (data inconsistency) — это одна из самых частых и коварных проблем, которые встречаются при исследовательском анализе данных (EDA). Обнаружить её можно, обращая внимание на логические и статистические аномалии.
Вот ключевые способы и признаки, по которым можно заметить несогласованность в данных:
1. Логические несоответствия
Это ошибки, которые нарушают здравый смысл или заранее известные правила.
- Нарушение ограничений (Constraint Violations):
- Пример:
Age(возраст) >Years_in_Job(стаж). Если человеку 30 лет, он не может иметь 40 лет стажа. - Как обнаружить: Создание новых признаков, проверка логических правил (
df[df['Age'] < df['Years_in_Job']]).
- Пример:
- Дубликаты записей:
- Пример: Одинаковые строки, где все или почти все значения совпадают.
- Как обнаружить: Использование
.duplicated()в Pandas для поиска полных или частичных дубликатов.
- Несоответствие форматов:
- Пример: В столбце
Dateесть значения в разных форматах:'2023-10-15','10/15/2023','15.10.2023'. - Как обнаружить: Использование
.value_counts()или.unique()для категориальных/текстовых данных. Для дат — попытка преобразования в стандартный формат (pd.to_datetime()) – вызовет ошибку, если данные в разных форматах.
- Пример: В столбце
- Нарушение целостности данных:
- Пример: В таблице заказов есть
Order_ID=’123′, но в таблице клиентов нет клиента сCustomer_ID=’123′, хотя эти поля должны быть связаны. - Как обнаружить: Сравнение уникальных значений между связанными таблицами (например,
set(df1['id']) - set(df2['id'])).
- Пример: В таблице заказов есть
2. Статистические аномалии
Эти несоответствия проявляются в распределении и статистических показателях.
- Неожиданные выбросы (Outliers):
- Пример: В столбце
Price(цена) есть значение$1,000,000,000, тогда как остальные цены не превышают$10,000. - Как обнаружить:
- Визуализация: Боксплот (Box Plot) и диаграммы рассеяния (Scatter Plot) — самый простой способ.
- Статистика: Использование
.describe()или.min(),.max(), а также расчет Z-показателя или IQR для обнаружения статистически аномальных значений.
- Пример: В столбце
- Неправильные типы данных:
- Пример: В столбце
Age(возраст) тип данныхobject(строка), хотя ожидаетсяintилиfloat. Это может быть из-за наличия пропусков или текстовых значений типа"twenty years old". - Как обнаружить:
.info()в Pandas сразу покажет типы данных..value_counts()или.unique()для поиска нечисловых значений.
- Пример: В столбце
- Странные распределения (
SkewnessиKurtosis):- Пример: Уровень асимметрии (
.skew()) для ожидаемого симметричного признака (например, рост) слишком велик. - Как обнаружить:
- Построение гистограмм или QQ-plots.
- Расчет
.skew()или.kurtosis()для всех числовых столбцов.
- Пример: Уровень асимметрии (
3. Несоответствия в текстовых данных
Эти проблемы характерны для столбцов с текстовыми значениями.
- Проблемы с регистрами и пробелами:
- Пример:
'USA','usa','U.S.A.'— это одно и то же, но будут считаться разными категориями. - Как обнаружить: Использование
.value_counts()покажет, что одна и та же категория повторяется под разными именами.
- Пример:
- Некорректные категории:
- Пример: В столбце
Country(страна) есть значение'Russia'и'Russian Federation'. - Как обнаружить:
.value_counts()или.unique().
- Пример: В столбце
Сводка — с чего начать:
df.info(): Это даст общее представление о типах данных и количестве не-нулевых значений.df.describe(): Для числовых данных сразу можно заметить аномальные min/max, среднее и стандартное отклонение..value_counts(): Для всех категориальных столбцов, чтобы найти неконсистентные значения, опечатки или необычные категории.- Построить Box Plot для каждого числового столбца, чтобы быстро найти выбросы.