Исследовательский анализ данных — это как рыться в холодильнике, чтобы увидеть, с какими ингредиентами вам придется работать. Иногда вы находите что-то неожиданное и в итоге делаете шедевр, а иногда просто делаете бутерброд. - Неизвестный

Если вы начинающий повар данных, вы знаете, как важно знать свои ингредиенты, прежде чем начать готовить. Исследовательский анализ данных (EDA) — это секретный соус в жизненном цикле науки о данных, который помогает выявить скрытые закономерности, аномалии и взаимосвязи, которые могут быть разницей между успехом и неудачей в любом проекте анализа данных. Но с чего начать? Какие вопросы следует задать? Не бойтесь, в этой статье мы исследуем мир EDA, раскрывая ключевые шаги, которым нужно следовать, и важные вопросы, которые необходимо задать. Итак, давайте погрузимся в мир исследования данных!

Трехэтапный EDA:

Не существует единственно правильного способа проведения EDA, поскольку это не только наука, но и искусство. Однако с практикой вы можете разработать и усовершенствовать свою собственную методологию. Чтобы упростить этот процесс, я суммировал общие цели EDA в следующие этапы:

  1. Понимание структуры и качества ваших данных
  2. Понимание формы ваших данных
  3. Выявление закономерностей и взаимосвязей в ваших данных

Давайте углубимся в них немного подробнее.

Понимание структуры и качества данных

EDA дает возможность ознакомиться с набором данных, с которым вы будете работать. Это включает в себя идентификацию различных функций, проверку отсутствующих значений и оценку общего качества данных. Обратите внимание, что в этой статье я буду использовать термин «функции», а не «переменные», но считаю их взаимозаменяемыми в контексте этой статьи и использую то, что вам удобнее.

Понимание структуры данных

Во-первых, мы наблюдаем структуру наших данных с высокого уровня, включая количество наблюдений и признаков, их типы и то, как они организованы.

Классифицировать функции

Далее, давайте классифицируем наши функции. Это проинформирует нас о том, как мы визуализируем и обрабатываем их. Мы можем определить каждую функцию как:

  • Категория. Они представляют определенное количество категорий и могут быть номинальными или порядковыми.
  • Непрерывный: числовые данные, которые могут принимать бесконечный диапазон значений.
  • Другое: у вас могут быть такие функции, как свободный текст. Хотя технически это категориальные данные, вы можете рассматривать их как отдельные значения, а не как элементы категории.

Это также отличное время, чтобы взглянуть на типы данных. Если у вас есть категориальный признак, который является порядковым и представлен числами, вы захотите представить его целым числом, а не числом с плавающей запятой. Другой пример — числовые данные в строке или символьном поле.

Определите ключевые функции

Как только мы узнаем типы функций, которые у нас есть, давайте определим ключевые функции.
Мы можем вернуться к нашей формулировке проблемы и бизнес-проблеме, чтобы помочь с этим.

С помощью контролируемого метода машинного обучения мы рассмотрим, что мы будем использовать в качестве нашей «цели». Эта функция представляет результат, который мы пытаемся предсказать (также известный как «метка», «зависимая переменная» или «переменная ответа»). Например, если мы строим модель для прогнозирования цен на жилье, нашей целью будет цена.

С неконтролируемым методом, таким как кластеризация, мы можем подумать о том, какие функции мы будем использовать в качестве входных данных для кластеризации.

Оцените качество данных

Затем мы определяем пропущенные значения в каждом поле и думаем, как мы можем их обработать перед анализом. Многие модели машинного обучения не работают с пропущенными значениями, поэтому нам нужно будет иметь дело с ними при предварительной обработке данных. Также неплохо подумать, почему они отсутствуют, поскольку этого можно было бы избежать на этапе сбора данных.

Понимание отдельных особенностей — одномерный анализ

Как только мы поймем, какие функции у нас есть в данных, и представим, как мы можем с ними справиться, мы можем начать смотреть на форму данных, которые они содержат.

Одним из основных инструментов, которые мы будем использовать, является визуализация. EDA часто включает в себя создание визуализаций данных, чтобы помочь выявить закономерности и взаимосвязи, которые могут быть не очевидны сразу. Визуализации могут помочь определить корреляции между переменными, тенденциями во времени и выявить потенциальные выбросы.

Сводные статистические данные

Во-первых, мы обобщим характеристики отдельных признаков. Мы можем создать сводные таблицы следующих описательных статистик.

  • Центральная тенденция(среднее, медиана, мода)
  • Вариабельность (стандартное отклонение, дисперсия, диапазон, межквартильный диапазон)

Вот несколько примеров кода сводной статистики в Python и R соответственно:

import pandas as pd

# Load data from a CSV file
data = pd.read_csv("data.csv")

# Get summary statistics
summary = data["column_name"].describe()

# Print summary statistics
print(summary)
# Load data from a CSV file
data <- read.csv("data.csv")

# Get summary statistics
summary <- summary(data$column_name)

# Print summary statistics
print(summary)

Сюжеты

Мы также можем создавать графики распределений, чтобы получить визуальное представление о функциях и понять:

  • Тип распространения
  • Асимметрия

Для категориальных функций вы можете создавать гистограммы частоты. Для непрерывного можно построить гистограмму.

Вот примеры на Python и R:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Load data into a pandas DataFrame
data = pd.read_csv('data.csv')

# Plot a histogram with a KDE
sns.histplot(data, x='column_name', kde=True)
plt.title('Distribution of Data')
plt.xlabel('Column Name')
plt.ylabel('Frequency')

# Show the plot
plt.show()
# Load data from a CSV file
data <- read.csv("data.csv")

# Plot a histogram with a KDE
library(ggplot2)
ggplot(data, aes(x=column_name)) +
  geom_histogram(aes(y=..density..), binwidth=0.5, color="black", fill="white") +
  geom_density(alpha=.2, fill="#FF6666") +
  ggtitle("Distribution of Data") +
  xlab("Column Name") +
  ylab("Density")

Определите выбросы и аномалии.

Выбросы и аномалии в данных могут потребовать дальнейшего изучения или исправления. Понимая распределения, мы можем легче идентифицировать любые аномалии.

Повторите это для каждой из ваших функций одну за другой и отметьте любые аномалии или заслуживающие внимания наблюдения, которые могут быть полезны в вашем анализе.

Выявление взаимосвязей в ваших данных —Двумерный анализ

После того, как мы рассмотрели наши функции по отдельности, мы можем приступить к рассмотрению взаимосвязей между парами функций. Это поможет раскрыть взаимосвязь между переменными. Это та часть, которая даст вам возможность генерировать гипотезы для дальнейшего анализа.

Корреляции между функциями и целью

Это поможет нам понять взаимосвязь между функциями и результатом, который мы тестируем. Это даст информацию о том, какие функции важно включить в нашу модель (выбор функций). Отличный способ сделать это — рассчитать коэффициент корреляции между вашей целью и всеми остальными функциями и построить гистограмму корреляции.

Примеры:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Load data from a CSV file
data = pd.read_csv("data.csv")

# Calculate correlations between all pairs of variables in the dataset
corr = data.corr()

# Get correlations fo target and sort by descending order
corr = corr['target'].sort_values(ascending=False)

# Create barplot using the Seaborn library.
sns.barplot(x=corr.index, y=corr)

# Rotate x-axis labels for readability
plt.xticks(rotation=90)

# Show the plot
plt.show()
# Load data from a CSV file
data <- read.csv("data.csv")

# Calculate correlations
corr <- cor(data)

# Get correlations for target variable
target_corr <- corr["target", ]

# Sort correlations by descending order
target_corr <- sort(target_corr, decreasing=TRUE)

# Create barplot
library(ggplot2)
ggplot(data.frame(variable=names(target_corr), correlation=target_corr), aes(x=variable, y=correlation)) +
  geom_bar(stat="identity", fill="blue") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  labs(title="Correlations with target variable")

Корреляции между другими переменными

Коррелированные или избыточные функции в наших данных могут негативно повлиять на наши модели, и мы обычно хотим уменьшить избыточность. Лучший способ визуализировать это — тепловая карта корреляции. Другим полезным типом графика является «парный график», который суммирует отношения между парами объектов и отображает их в одной команде.

Примеры:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Load data from a CSV file
data = pd.read_csv("data.csv")

# Calculate correlations between all pairs of variables in the dataset
corr = data.corr()

# Create heatmap of the correlations using the Seaborn library. 
# The annot=True parameter adds numeric annotations to the heatmap,
sns.heatmap(corr, annot=True, cmap="coolwarm")

# Show the plot
plt.show()
# Load data from a CSV file
data <- read.csv("data.csv")

# Calculate correlations between all pairs of variables in the dataset
corr <- cor(data)

# Create heatmap using the corrplot library. 
# The type="upper" parameter displays only the upper triangle of the heatmap
# (since the correlations matrix is symmetric)
library(corrplot)
corrplot(corr, type="upper", method="circle", tl.col="black", tl.srt=45)

# Show the plot

Мы должны принять к сведению любые группы признаков, которые демонстрируют корреляцию друг с другом, и пересмотреть их при построении нашей модели. Удаление избыточных функций часто может улучшить производительность модели.

Формулирование гипотез

EDA включает в себя формулирование гипотез и проверку их на данных. Этот процесс включает в себя задавание вопросов о данных и проверку того, подтверждают ли данные или опровергают эти гипотезы. Мы также можем проверить предположения статистических моделей или методов, такие как нормальность или независимость.

Полезный инструмент

Для пользователей Python ценный инструмент под названием Pandas Profiling — это быстрый и эффективный способ профилирования ваших данных. Он выполняет многие из вышеперечисленных задач за один раз и может значительно сэкономить время. После создания отчета вы можете открыть HTML-файл в веб-браузере для его просмотра. Отчет включает интерактивные визуализации и таблицы, которые позволяют более подробно изучить данные.

Пример в питоне:

import pandas as pd
import pandas_profiling as pp

# Load data from a CSV file
data = pd.read_csv("data.csv")

# Generate the report
report = pp.ProfileReport(data)

# Save the report as an HTML file
report.to_file("report.html")

Вы также можете отобразить отчет в блокноте Jupyter, используя следующий код:

# Render the report as a Jupyter notebook widget
display(report)

Идем глубже

Если мы хотим пойти глубже, мы можем провести многофакторный анализ. Хотя человеческому мозгу трудно концептуализировать отношения между более чем двумя функциями, мы можем думать об этом как о более глубоком паттерне или взаимодействии.

Многомерный анализ — это мощный инструмент для исследовательского анализа данных (EDA), поскольку он позволяет специалистам по данным одновременно исследовать взаимосвязи между несколькими переменными. Вот некоторые распространенные типы многомерного анализа, которые можно использовать в EDA:

  • Кластерный анализ.Кластерный анализ – это метод, при котором похожие наблюдения или переменные группируются в кластеры на основе их сходства или расстояния. Это может помочь определить закономерности и взаимосвязи в данных и разделить их на значимые группы.
  • Факторный анализ. Факторный анализ — это статистический метод, позволяющий выявить лежащие в основе факторы или конструкции, которые нельзя непосредственно наблюдать в данных. Это может помочь выявить общие закономерности и взаимосвязи между переменными и сократить количество переменных в анализе.
  • Анализ основных компонентов (АПК): АПК – это метод, который уменьшает размерность набора данных путем преобразования его в набор некоррелированных переменных, называемых основными компонентами. Это может помочь выявить закономерности и взаимосвязи в данных и упростить сложные наборы данных.

Заключение

Проводя тщательный EDA, мы можем раскрыть весь потенциал наших данных и убедиться, что в итоге мы получим осмысленный анализ или модель.

Как только мы узнаем, что находится в холодильнике, мы можем приготовить шедевр… или просто сделать бутерброд.