Введение
Когда я начинаю новый аналитический проект, я не сразу строю сложные графики и не спешу проверять гипотезы.
Сначала я провожу EDA — exploratory data analysis, или исследовательский анализ данных.
Простыми словами, EDA — это первое знакомство с данными. На этом этапе аналитик пытается понять, что лежит в датасете, насколько данные качественные, какие в них есть проблемы, закономерности и ограничения.
“Для меня EDA — это как осмотр карты перед путешествием. Прежде чем идти дальше, нужно понять, где мы находимся, какие есть дороги, где возможны ошибки и куда вообще стоит смотреть.”
Зачем нужен EDA
EDA помогает не просто «посмотреть данные», а подготовить основу для правильного анализа.
- какие данные у нас есть
- сколько строк и столбцов в таблице
- какие типы данных используются
- есть ли пропуски
- есть ли дубликаты
- есть ли выбросы
- как распределены значения
- какие признаки могут быть важны для анализа
- какие ограничения есть у данных
“Хороший EDA не даёт финального ответа на бизнес-вопрос, но показывает, насколько данным можно доверять и как с ними работать дальше.”
Сначала я изучаю структуру данных
Первый шаг — понять, из чего состоит датасет. Я смотрю количество строк и столбцов, названия колонок, типы данных, первые строки таблицы, описание признаков и период, за который собраны данные.
df.head()
df.info()
df.shape
df.describe()Наблюдение
Ошибки часто появляются не из-за сложной статистики, а из-за неправильного понимания данных.
Затем я проверяю типы данных
После общего знакомства я смотрю, корректно ли определились типы данных. Дата может храниться как текст, числовой столбец может быть записан как object, категория может быть обычной строкой, а булевый признак может быть записан как 0 и 1.
df['date'] = pd.to_datetime(df['date'])Потом я ищу пропуски
Пропуски — одна из самых частых проблем в данных. Я проверяю не только количество пропусков, но и их долю.
df.isna().sum()
df.isna().mean()“С пропусками нельзя работать автоматически по принципу «всё заменить на ноль». Иногда это исказит анализ.”
Дальше я проверяю дубликаты
Дубликаты могут сильно искажать результаты анализа. Если одна и та же покупка или один и тот же пользователь случайно попали в таблицу дважды, мы можем завысить выручку, количество заказов или активность пользователей.
df.duplicated().sum()
df.duplicated(subset=['user_id']).sum()Наблюдение
При проверке дубликатов я всегда задаю вопрос: что должна означать одна строка в этой таблице?
Затем я смотрю распределения
После проверки качества данных я начинаю изучать сами значения. Для числовых признаков смотрю минимум, максимум, среднее, медиану, квартили, выбросы и форму распределения. Для категориальных признаков — количество уникальных значений, частые и редкие категории.
Числовые признаки
- минимум
- максимум
- среднее
- медиана
- квартили
- выбросы
- форма распределения
Категориальные признаки
- количество уникальных значений
- самые частые категории
- редкие категории
- распределение по группам
Я проверяю выбросы
Выбросы — это значения, которые сильно отличаются от остальных. Они не всегда являются ошибкой. Иногда это реальные, но редкие случаи, поэтому я не удаляю их автоматически.
- это ошибка в данных или реальное наблюдение?
- сильно ли это значение влияет на среднее?
- стоит ли анализировать данные с выбросами и без них?
- нужно ли использовать медиану вместо среднего?
Я изучаю связи между признаками
После базового анализа я смотрю, как признаки связаны между собой.
- зависит ли выручка от рекламного канала
- отличаются ли пользователи разных устройств
- связан ли рейтинг заведения с ценовой категорией
- различается ли конверсия между группами
- меняется ли средний чек по районам
df.groupby('channel')['revenue'].sum()
df.groupby('category')['rating'].mean()“Связь между признаками не всегда означает причинно-следственную зависимость.”
Я строю первые визуализации
Визуализации помогают быстрее увидеть структуру данных. Я использую гистограммы для распределений, boxplot для выбросов, столбчатые диаграммы для сравнения категорий, линейные графики для динамики, scatter plot для связи между числовыми признаками и heatmap для корреляций.
гистограмма — для распределений
boxplot — для выбросов
столбчатая диаграмма — для сравнения категорий
линейный график — для динамики
scatter plot — для связи между числовыми признаками
heatmap — для корреляций
Я фиксирую ограничения данных
Один из важных результатов EDA — понимание ограничений. Это важно указывать в проекте, потому что ограничения влияют на выводы.
- в некоторых столбцах много пропусков
- данные есть только за короткий период
- часть пользователей не попала в выборку
- не все категории представлены равномерно
- некоторые метрики рассчитаны только для части строк
“Лучше честно обозначить ограничение, чем сделать красивый, но слабый вывод.”
После EDA я формулирую первые выводы
В конце первичного анализа я собираю основные наблюдения: какие данные пригодны для анализа, какие проблемы были найдены, какие признаки требуют обработки, какие сегменты выделяются, какие метрики стоит анализировать глубже и какие гипотезы можно проверить дальше.
Мой чек-лист EDA
Изучить структуру данных
Проверить названия и смысл столбцов
Посмотреть типы данных
Проверить пропуски
Проверить дубликаты
Изучить числовые признаки
Изучить категориальные признаки
Найти выбросы
Построить первые графики
Проверить связи между признаками
Зафиксировать ограничения данных
Сформулировать первые выводы
Заключение
EDA — это фундамент любого аналитического проекта.
На этом этапе аналитик знакомится с данными, проверяет их качество, ищет первые закономерности и понимает, какие ограничения есть у анализа.
Для меня EDA — это не просто технический этап. Это способ задать данным правильные вопросы.
“Хороший анализ начинается не с красивого графика, а с понимания: что лежит в данных, насколько им можно доверять и какой бизнес-вопрос мы хотим решить.”
Посмотреть мои аналитические проекты
В портфолио я показываю, как применяю EDA в Python, SQL и BI-проектах.
Перейти к проектам