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

0. Описание данных

Набор данных о цветках ириса - это особый набор информации, собранный биологом Рональдом Фишером в 1930-х годах. Набор данных содержит 3 класса по 50 экземпляров в каждом, каждый из которых относится к типу ириса.

Информация об атрибутах:

  • Длина чашелистики в см
  • Ширина чашелистики в см
  • Длина лепестка в см
  • Ширина лепестка в см
  • Сорт
    - Сетоса
    - Разноцветный
    - Вирджиния

1. Цель:

Классифицировать новый цветок как принадлежащий к одному из трех классов (Сетоса, Версиколор и Вирджиния) с учетом четырех характеристик (длина чашелистика, ширина чашелистика, длина лепестка, ширина лепестка).

2. Импорт библиотек и загрузка файла.

Импортируйте необходимые пакеты и загрузите набор данных.

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
#To read the CSV files, we use the read_csv method, as follows:
#In order to perform a basic import, pass the filename of the dataset to read_csv, and assign the resulting DataFrame to a variable (iris).
iris = pd.read_csv("iris.csv")
print(iris.head())

На скриншоте выше мы видим, что pandas преобразовали набор данных в табличный формат:

3. Подготовка данных

print(iris.info())

Наблюдения:

  1. В этом наборе данных нет пропущенных значений.
  2. Все столбцы относятся к типу данных с плавающей запятой.

Операции:

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

print(iris.shape)

Это показывает 150 экземпляров данных и 5 атрибутов, присутствующих, как мы видели ранее во введении. Вы можете увидеть подписи столбцов, используя одну строку кода, как показано ниже.

print(iris.columns)

Здесь dtype означает тип данных, который является типом объекта для всех столбцов, присутствующих в данных.

print(iris["variety"].value_counts())

Функция value_counts () сообщает, сколько точек данных для каждого класса присутствует.

4. Статистика высокого уровня

Pandas description () используется для просмотра некоторых основных статистических деталей, таких как процентиль, среднее значение, стандартное и т. Д. Фрейма данных или серии числовых значений.

print(iris.describe())

Наблюдения:

  • Набор данных содержит лишь небольшое количество записей (150).
  • Среднее - это среднее значение всех данных, а Стандартное отклонение - разброс данных означает, насколько широко данные распределены по набору данных.
  • Медиана - это центральное значение данных, а квантили - это значение конкретной характеристики в n-м проценте n = 25,50,75.

5. Визуализация данных

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

Мы рассмотрим два типа графиков:

  1. Одномерные графики, чтобы лучше понять каждый атрибут.
  2. Графики с двумя вариантами, чтобы лучше понять отношения между атрибутами.

5.1 Одномерные графики

Мы начинаем с нескольких одномерных графиков, то есть графиков каждой отдельной переменной.

5.1.1 Графики распределения

Графики распределения используются для визуальной оценки распределения точек данных в зависимости от их частоты.
* Обычно точки данных группируются в интервалы, а высота столбцов, представляющих каждую группу, увеличивается с увеличением количества точек данных
лежат в этой группе. (гистограмма)
* Функция плотности вероятности (PDF) - это вероятность того, что переменная принимает значение x. (сглаженная версия гистограммы)
* Оценка плотности ядра (KDE) - это способ оценки PDF. Площадь под кривой KDE равна 1.
* Здесь высота полосы обозначает процент точек данных в соответствующей группе.

for ojha, feature in enumerate(list(iris.columns)[:-1]):
    fg = sns.FacetGrid(iris, hue='variety', height=5)
    fg.map(sns.distplot, feature).add_legend()
    plt.show()

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

5.1.2 CDF

Кумулятивная функция вероятности или CDF определяется для любого интервала, в котором определена PDF. Предположим, что PDF определена на интервале [a, b], и пусть a ‹c‹ b. Затем CDF для интервала [a, c] получается путем накопления (отсюда и термин «кумулятивный») значения PDF для всех значений в интервале [a, c]. Обычно это достигается путем интегрирования PDF от a до c.

counts, bi = np.histogram(iris_setosa['petal.length'], bins=10, 
                                 density = True)
pdf = counts/(sum(counts))
print(pdf);
print(bi)
cdf = np.cumsum(pdf)
plt.plot(bi[1:],pdf)
plt.plot(bi[1:],cdf)
# virginica
counts, bi= np.histogram(iris_virginica['petal.length'], bins=10, 
                                 density = True)
pdf = counts/(sum(counts))
print(pdf);
print(bi)
cdf = np.cumsum(pdf)
plt.plot(bi[1:],pdf)
plt.plot(bi[1:], cdf)
#versicolor
counts, bi = np.histogram(iris_versicolor['petal.length'], bins=10, 
                                 density = True)
pdf = counts/(sum(counts))
print(pdf);
print(bi)
cdf = np.cumsum(pdf)
plt.plot(bi[1:],pdf);
plt.plot(bi[1:], cdf);
plt.show();

На графике выше показаны PDF и CDF Сетоса, Версиколор и Вирджиния. Мы можем видеть, что все цветы сетоса имеют значение меньше, чем 2. Можно также сказать, что 100% цветов сетоса имеют точку меньше, чем 2. Также 95% цветов разноцветных лепестков имеют длину лепестков меньше, чем равную 2. 5 тогда и только тогда, когда я использую 5 как порог по оси абсцисс. Таким образом, 95% цветов Versicolor будут правильно маркированы. И в 10% случаев я буду ошибаться в случае с Вирджиникой.

5.1.3 Коробчатые диаграммы

Вы также можете анализировать данные с помощью графиков, таких как контур прямоугольной диаграммы и т. Д., Библиотека Seaborn имеет широкий спектр модулей построения данных. Коробчатая диаграмма - это диаграмма, которая дает вам хорошее представление о том, как распределены значения в данных. Ящичковая диаграмма занимает меньше места и визуально представляет собой сводку из пяти цифр для точек данных в поле.
Выбросы отображаются в виде точек за пределами рамки.
1. Q1–1,5 * IQR
2. Q1 (25-й процентиль)
3. Q2 (50-й процентиль или медиана) < br /> 4. Q3 (75-й процентиль)
5. Q3 + 1,5 * IQR
Межквартильный диапазон = Q3 -Q1

sns.boxplot(x='variety',y='petal.length', data=iris) 
plt.show()

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

5.1.4 Сюжеты для скрипки

График скрипки представляет собой комбинацию прямоугольного графика и функции плотности вероятности. Он такой же, как прямоугольный график усов, с той лишь разницей, что вместо прямоугольника гистограмма будет представлять разброс данных. Сюжет для скрипки создается с помощью метода violinplot () следующим образом:

sns.violinplot(x="variety", y="petal.length", data=iris, size=8)
plt.show()

Результат предыдущего кода выглядит следующим образом:

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

5.2 Двухвариантный анализ

5.2.1 Диаграммы разброса

На точечной диаграмме (XY) есть точки, которые показывают взаимосвязь между двумя наборами данных. Диаграммы разброса показывают, насколько одна переменная зависит от другой.

iris.plot(kind='scatter',x='sepal.length',y='sepal.width')
plt.show()

Этот фрагмент выше даст мне диаграмму рассеяния относительно длины чашелистика по оси x и ширины чашелистика по оси y.

Из приведенного выше графика мы можем сказать, что длина чашелистиков варьируется от 4,0 до 8,0, а ширина чашелистиков - от 2,0 до 4,5.

Диаграмма рассеяния - это двухмерная визуализация данных, в которой точки используются для представления значений, полученных для двух разных переменных: одна отображается по оси x, а другая - по оси y.

sns.set_style("whitegrid");
sns.FacetGrid(iris, hue="variety", height=7) \
   .map(plt.scatter, "sepal.length", "sepal.width") \
   .add_legend();
plt.show();

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

5.2.2 Парные графики

plt.close();
sns.set_style("whitegrid");
sns.pairplot(iris, hue="variety", height=3);
plt.show()

Наблюдения:

График между длиной лепестка и шириной лепестка сравнительно лучше. Хотя Сетоса можно легко идентифицировать, Versicolor и Virginica частично пересекаются. Мы можем использовать условие «if-else», чтобы построить простую модель для классификации типов цветов.

ВЫВОДЫ:

Да, вы можете классифицировать новый цветок, принадлежащий к одному из трех классов (Setosa, Versicolor и Virginia), используя набор данных iris, применяя различные методы анализа данных и используя различные библиотеки Python.

Хорошего дня!