Исследовательский анализ данных — это как рыться в холодильнике, чтобы увидеть, с какими ингредиентами вам придется работать. Иногда вы находите что-то неожиданное и в итоге делаете шедевр, а иногда просто делаете бутерброд. - Неизвестный
Если вы начинающий повар данных, вы знаете, как важно знать свои ингредиенты, прежде чем начать готовить. Исследовательский анализ данных (EDA) — это секретный соус в жизненном цикле науки о данных, который помогает выявить скрытые закономерности, аномалии и взаимосвязи, которые могут быть разницей между успехом и неудачей в любом проекте анализа данных. Но с чего начать? Какие вопросы следует задать? Не бойтесь, в этой статье мы исследуем мир EDA, раскрывая ключевые шаги, которым нужно следовать, и важные вопросы, которые необходимо задать. Итак, давайте погрузимся в мир исследования данных!
Трехэтапный EDA:
Не существует единственно правильного способа проведения EDA, поскольку это не только наука, но и искусство. Однако с практикой вы можете разработать и усовершенствовать свою собственную методологию. Чтобы упростить этот процесс, я суммировал общие цели EDA в следующие этапы:
- Понимание структуры и качества ваших данных
- Понимание формы ваших данных
- Выявление закономерностей и взаимосвязей в ваших данных
Давайте углубимся в них немного подробнее.
Понимание структуры и качества данных
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, мы можем раскрыть весь потенциал наших данных и убедиться, что в итоге мы получим осмысленный анализ или модель.
Как только мы узнаем, что находится в холодильнике, мы можем приготовить шедевр… или просто сделать бутерброд.