1. Понимание структуры и характеристик набора данных
- размер набора данных
- типы переменных
- наличия пропущенных значений
- дубликаты
2. Выявление аномалий и выбросов
3. Идентификация связей и корреляций между переменными
4. Подготовка данных для дальнейших этапов анализа
# Инструменты и методы разведочного анализа данных (EDA)
## Визуализация данных
Визуализация данных позволяет увидеть и понять паттерны, тренды и взаимосвязи в данных через графику и диаграммы.
### Гистограммы и диаграммы рассеяния
---
__Гистограмма__– это графическое представление распределения данных по различным интервалам. Она позволяет нам оценить, как часто значения попадают в определенные диапазоны и какие у нас имеются пики или провалы в данных.
__Диаграммарассеяния__ – это график, в котором каждая точка представляет собой отдельное наблюдение и показывает взаимосвязь между двумя переменными. Это может помочь нам определить, есть ли какая-либо зависимость или корреляция между ними.
__Тепловая карта__ – это графическое представление матрицы данных, где цветовая шкала показывает степень взаимосвязи между переменными. Это помогает выявить паттерны и зависимости в больших наборах данных.
```python
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# Генерируем случайные данные
data = np.random.rand(5, 5)
# Построение тепловой карты
sns.heatmap(data, annot=True, cmap='YlGnBu')
plt.title('Тепловая карта')
plt.show()
```
## Сводные статистики и меры центральной тенденции
Сводные статистики и меры центральной тенденции позволяют нам получить обобщенное представление о распределении данных и основных характеристиках. Это ключевые числовые метрики, которые помогают нам понять типичные и наиболее значимые значения в наборе данных.
- __Среднее (Mean)__: Это сумма всех значений, разделенная на количество значений. Оно представляет общую "среднюю" величину данных.
- __Медиана (Median)__: Это среднее значение двух средних значений, если количество значений четное, или среднее значение самого центрального числа, если количество значений нечетное. Медиана предоставляет более устойчивую меру центральной тенденции в присутствии выбросов.
- __Мода (Mode)__: Это значение, которое встречается наиболее часто в наборе данных. Мода может быть полезна для определения наиболее типичного значения.
```python
import numpy as np
from scipy import stats
# Генерируем случайные данные
data = np.random.randint(1, 100, 20)
# Расчет среднего
mean = np.mean(data)
print("Среднее:", mean)
# Расчет медианы
median = np.median(data)
print("Медиана:", median)
# Расчет моды
mode = stats.mode(data)
print("Мода:", mode.mode[0])
```
## Корреляционный анализ
- __Положительная корреляция__: Если одна переменная увеличивается, другая также увеличивается. Коэффициент корреляции находится в диапазоне от 0 до 1.
- __Отрицательная корреляция__: Если одна переменная увеличивается, другая уменьшается. Коэффициент корреляции находится в диапазоне от 0 до -1.
- __Нулевая корреляция__: Отсутствие линейной зависимости между переменными. Коэффициент корреляции близок к 0.
## Преобразование данных (например, нормализация или стандартизация)
__Преобразование данных__ – это процесс изменения шкалы или распределения переменных, чтобы сделать их более подходящими для анализа или моделирования. Это важный этап EDA, который помогает сгладить различия между переменными и создать более устойчивые и интерпретируемые данные. Преобразование данных может быть особенно полезным, когда у нас есть переменные с разными диапазонами значений, что может затруднять интерпретацию результатов. Это также может помочь алгоритмам машинного обучения работать более эффективно, так как они часто ожидают, что переменные будут иметь определенный масштаб или распределение.
- __Нормализация (Normalization)__: Этот метод масштабирует значения переменных так, чтобы они находились в диапазоне от 0 до 1. Это особенно полезно, когда у нас есть переменные с разными единицами измерения и масштабами.
- __Стандартизация (Standardization)__: Этот метод преобразует значения переменных так, чтобы их среднее было равно 0, а стандартное отклонение – 1. Он делает распределение более "стандартным" и симметричным.
```python
import numpy as np
from sklearn.preprocessing import MinMaxScaler, StandardScaler
# Генерируем случайные данные
data = np.array([[1, 2],
[2, 3],
[3, 4],
[4, 5]])
# Нормализация данных
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(data)
print("Нормализованные данные:")
print(normalized_data)
# Стандартизация данных
scaler = StandardScaler()
standardized_data = scaler.fit_transform(data)
print("Стандартизованные данные:")
print(standardized_data)
```
## Анализ выбросов и аномалий
__Анализ выбросов и аномалий__ – это процесс выявления и исследования значений данных, которые существенно отличаются от остальных наблюдений. Выбросы и аномалии могут возникнуть из-за ошибок в данных, случайных событий или указывать на особенности исследуемого явления.
Основные шаги анализа выбросов и аномалий:
- __Визуализация данных__: Используйте графики, такие как ящик с усами (box plot) или диаграммы рассеяния, чтобы визуально выявить потенциальные выбросы.
- __Статистический анализ__: Используйте статистические методы, чтобы определить, какие значения считаются выбросами на основе критериев, таких как интерквартильный размах или Z-оценка.
- __Принятиерешения__: Решите, какие действия необходимо предпринять с выбросами, например, удалить их, заменить на другие значения или оставить без изменений.
__Задача__: Допустим, мы хотим понять, существует ли связь между ценой продукта и его количеством продаж. Давайте рассчитаем коэффициент корреляции между этими переменными.
print("Корреляция между ценой и количеством продаж:", correlation)
```
5.__Выявление выбросов и аномалий__
В этом шаге мы будем искать выбросы и аномалии в данных. Для этого используется визуализация, например, ящик с усами (box plot).
__Задача__: Давайте определим, есть ли выбросы в столбце Количество (количество продаж продукта). Мы построим ящик с усами для этой переменной.
```python
plt.boxplot(data['Количество'])
plt.ylabel('Количество')
plt.title('Анализ выбросов в количестве продаж')
plt.show()
```
6.__Изучение категориальных переменных__
__Задача__: Пусть нас интересует, какие продукты являются наиболее популярными среди покупателей. Давайте построим график частоты продаж для каждого продукта.