Практическая визуализация данных для интерактивного повествования на Python

Я хотел бы начать этот пост со старой доброй цитаты «Картинка стоит тысячи слов». Вот что такое визуализация данных. Визуализация данных является неотъемлемой частью Data Science & Data Analysis. Нам полезно не только понимать данные, но и представлять информацию о данных в форме графического представления, которое намного легче понять.

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

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

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

Посмотрите мой курс «Практическое машинное обучение на YouTube»

Понимание визуализации данных с интересным вариантом использования в Python:

Набор данных. Чтобы понять EDA, мы будем работать с набором данных по раку груди, штат Висконсин (диагностический). Здесь характеристики рассчитываются на основе оцифрованного изображения аспирата тонкой иглой (ТАП) массы молочной железы. Они описывают характеристики ядер клеток, присутствующих на изображении. Вы можете найти этот набор данных в Kaggle или UCI ML Repository. Вы также можете скачать набор данных здесь.

Ключевые задачи визуализации данных для этого набора данных:

1. График подсчета для категориальных столбцов

2. График распределения для всех столбцов

3. Парный сюжет

4. Проверка на выбросы

5. Корреляционная матрица

6. Вывод из EDA и визуализации данных

Импорт библиотек визуализации данных:

import matplotlib.pyplot as plt
import seaborn as sns

Matplotlib и Seaborn — две основные библиотеки визуализации данных в Python. Существуют также другие библиотеки, такие как Plotly и GGplot.

ПРИМЕЧАНИЕ. В предыдущем посте я объяснил, как выполнить базовый исследовательский анализ и обработку данных для этого набора данных. Так что этот код будет его продолжением.

1. График подсчета для категориальных столбцов:

Этот набор данных содержит только одну категориальную переменную («цель») с двумя категориями: 0 (доброкачественная) и 1 (злокачественная). Когда у нас есть категориальная переменная, мы будем отображать ее на счетном графике, а когда у нас есть числовая переменная, мы будем использовать график распределения.

(В этом посте я буду использовать термины переменные и столбцы взаимозаменяемо, поскольку они означают одно и то же)

sns.countplot(x='target', data=breast_cancer_data

Как мы можем ясно видеть, количество точек данных с меткой «0» больше, чем с меткой «1». Это означает, что у нас больше доброкачественных случаев по сравнению со злокачественными в наборе данных. Таким образом, мы можем сказать, что этот набор данных немного несбалансирован. График подсчета покажет общее количество в каждой категории.

2. График распределения для всех столбцов:

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

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

for column in breast_cancer_data:
     sns.displot(x=column, data=breast_cancer_data

Здесь мы выполняем цикл for, который создаст график распределения для всех столбцов в наборе данных. Я покажу график распределения для столбца «area_mean».

Мы видим, что данные для столбца «area_mean» искажены вправо. Точно так же большинство столбцов в этом наборе данных имеют правую асимметрию. Мы разберемся с этим в части Feature Engineering.

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

3. Парный сюжет:

Парный график дает парные отношения в наборе данных. Допустим, у нас есть 10 переменных в наборе данных. Когда мы реализуем парный график с этими данными, он создаст графики между этими 10 переменными. Скажем, например, первая переменная будет принята как значение по оси X, а другие переменные будут взяты как значения по оси Y отдельно. В результате у вас будет 10 графиков только для 1-й переменной. Это будет повторяться и для других переменных. Для этого конкретного набора данных мы не будем создавать парный график, поскольку у нас около 30 различных переменных, и его построение займет много времени. Таким образом, вы можете пропустить этот шаг для наборов данных с большим количеством столбцов.

Пример парного графика:

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

Если вы хотите создать парный график, вы можете использовать функцию sns.pairplot(dataframe_name)

4. Проверка на выбросы:

Обнаружение выбросов является одной из важных задач, которые нам предстоит выполнить. Большинство моделей машинного обучения, таких как модели регрессии, K-ближайшие соседи и т. д., чувствительны к выбросам. С другой стороны, выбросы не влияют на такие модели, как Random Forest. Поэтому мы должны обработать эти выбросы, прежде чем передавать данные в эти модели. Это также будет выполнено в части Feature Engineering.

Мы создадим график Box and Whisker, чтобы проверить выбросы.

for column in breast_cancer_data:
   plt.figure()
   breast_cancer_data.boxplot([column])

Приведенный выше цикл For создаст блочную диаграмму для всех столбцов в наборе данных. Я покажу блочную диаграмму только для переменной «radius_mean».

Кружки над верхним усом и под нижним усом представляют выбросы. Здесь у нас есть выбросы только в верхнем диапазоне. Я создам отдельный пост, чтобы объяснить о выбросах и о значении коробчатой ​​диаграммы. Это выходит за рамки этого поста.

5. Матрица корреляции:

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

correlation_matrix = breast_cancer_data.corr()
plt.figure(figsize=(20,20))
sns.heatmap(correlation_matrix, cbar=True, fmt='.1f', annot=True, cmap='Blues')
plt.savefig('Correlation Heat map')

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

Значения корреляции находятся в диапазоне от +1 до -1. Если корреляция между двумя переменными равна +1, это означает, что значение одной переменной увеличивается на 1 единицу, если другой переменной увеличивается на 1 единицу, и наоборот. Это называется Положительная корреляция. Если корреляция между двумя переменными равна -1, это означает, что значение одной переменной уменьшается на 1 единицу, если другая переменная увеличивается на 1 единицу, и наоборот. Это называется Отрицательная корреляция.

Вы можете понимать положительную корреляцию как прямую пропорциональность и отрицательную корреляцию как обратную пропорциональность.

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

Подробнее об этом мы поговорим в разделе «Выбор функций».

6. Вывод из EDA и визуализации данных:

  • Нет пропущенных значений в наборе данных.
  • Все переменные имеют непрерывные числовые значения, за исключением столбца Target.
  • Среднее значение немного больше, чем медиана для большинства функций. Так что это правильно перекошено. Это видно по графикам распределения.
  • Небольшой дисбаланс в наборе данных (доброкачественных (0) случаев больше, чем злокачественных (1)). Обратитесь к графику подсчета.
  • Среднее значение большинства признаков явно больше для злокачественных случаев по сравнению с доброкачественными случаями (по группам).
  • Большинство функций имеют выбросы.
  • Матрица корреляции показывает, что большинство функций сильно коррелированы. Таким образом, мы можем удалить определенные функции во время выбора функций.

Конец примечаний:

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

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