Оглавление:

· Basic questions to be asked when we read the dataWhat is the shape of the data?How does the data look like?What is the data type of each column?Are there any missing values in the data?How does the data look mathematically?Are there duplicate values in the data?How is the correlation between columns?
· Types of DataNumerical DataCategorical Data
· Exploratory Data Analysis
· Univariate Analysis
· Bivariate and Multivariate Analysis

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

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



Основные вопросы, которые нужно задать, когда мы читаем данные

Есть 7 основных вопросов, которые мы должны задать, когда читаем данные.

Давайте проанализируем данные о выживании на Титанике. Ниже приведены 7 основных вопросов, которые следует задать при чтении набора данных.

1. Какова форма данных?

df.shape
(891, 12)

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

2. Как выглядят данные?

df.head()

С помощью метода head() мы можем узнать, как выглядят данные.

df.sample(5)

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

3. Каков тип данных каждого столбца?

df.info()

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



4. Есть ли в данных пропущенные значения?

df.isnull().sum()

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

5. Как данные выглядят математически?

df.describe()

Приведенный выше код дает сводку числовых столбцов в нашем наборе данных.

6. Есть ли в данных повторяющиеся значения?

df.duplicated().sum()
0

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

7. Как корреляция между столбцами?

df.corr()

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

df.corr()['Survived']

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

Исследовательский анализ данных

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

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

  1. Одномерный анализ
  2. Двумерный анализ
  3. Многофакторный анализ

(Uni-Single и Variate-Variable) Когда мы анализируем данные с использованием одной переменной, это означает, что мы проводим одномерный анализ. Когда мы получаем данные с несколькими столбцами, каждый столбец можно назвать переменной, а когда мы независимо анализируем данные по каждой переменной, это называется одномерный анализ.

Когда мы выполняем анализ с использованием двух переменных одновременно, это называется двумерный анализ(bi-two, variate-variables), а выполнение анализа с использованием более чем двух переменных одновременно называется многофакторный анализ.

Типы данных:

Данные будут одного из двух типов: числовые или категориальные.

Числовые данные:

Числовые данные относятся к данным, представленным в виде чисел. Например, возраст человека, рост человека, вес человека.

Категориальные данные:

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

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

Одномерный анализ:

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

Категориальные данные

Граф

import seaborn as sns
import matplotlib.pyplot as plt
sns.countplot(df['Survived'])

Приведенный ниже график показывает, что около 550 человек не выжили, а выжило только около 350 человек.

df['Survived'].value_counts()
0    549
1    342
Name: Survived, dtype: int64
df['Survived'].value_counts().plot(kind = 'bar')

Это также можно визуализировать с помощью встроенного метода plot().

sns.countplot(df['Pclass'])

Пассажирским классом-1 ехали около 210 пассажиров, пассажирским классом -2 - около 190 пассажиров, пассажирским классом -3 - около 490 пассажиров.

sns.countplot(df['Sex'])

Около 580 пассажиров были мужчинами и около 300 женщинами.

sns.countplot(df['Embarked'])

Около 650 пассажиров высадились из Саутгемптона (S), 150 — из Шербура (C) и около 80 — из Квинсленда (Q).

Круговая диаграмма

df['Survived'].value_counts().plot(kind = 'pie' , autopct = '%.2f')

Круговая диаграмма ниже показывает, что 62% пассажиров не выжили, и только 38% выжили.

df['Pclass'].value_counts().plot(kind = 'pie' , autopct = '%.2f')

55% пассажиров путешествовали в классе 3, 21% в классе 2 и 24% в классе 1.

df['Sex'].value_counts().plot(kind = 'pie' , autopct = '%.2f')

65% пассажиров были мужчинами, 35% - женщинами.

df['Embarked'].value_counts().plot(kind = 'pie' , autopct = '%.2f')

Около 72% пассажиров высадились из Саутгемптона (S), 19% высадились из Шербура (C) и около 9% высадились из Квинсленда (Q).

Числовые данные:

Гистограмма

plt.hist(df['Age'] , bins=10)
plt.xlabel('Age')
plt.ylabel('Count')

plt.hist(df['Fare'], bins=10)
plt.xlabel('Fare')
plt.ylabel('count')

дистплот

sns.distplot(df['Age'])

sns.distplot(df['Fare'])

Блочная диаграмма

sns.boxplot(df['Age'])

sns.boxplot(df['Fare'])

Двумерный и многомерный анализ

tips = sns.load_dataset('tips')
titanic = pd.read_csv('titanic_train_data.csv')
flights = sns.load_dataset('flights')
iris = sns.load_dataset('iris')

1. Диаграмма рассеяния (численно-числовая)

sns.scatterplot(tips['total_bill'] , tips['tip'])

sns.scatterplot(tips['total_bill'] , tips['tip'] , hue=tips['sex'])

sns.scatterplot(tips['total_bill'] , tips['tip'] , hue=tips['sex'] , style=tips['smoker'])

plt.figure(figsize=(12,6))
sns.scatterplot(tips['total_bill'] , tips['tip'] , hue=tips['sex'] , style=tips['smoker'] , size=df['size'])

2. Гистограмма (числовой — категориальный)

sns.barplot(titanic['Pclass'] , titanic['Age'])

sns.barplot(titanic['Pclass'] , titanic['Fare'])

sns.barplot(titanic['Pclass'] , titanic['Fare'] ,hue = titanic['Sex'])

sns.barplot(titanic['Pclass'] , titanic['Age'] ,hue = titanic['Sex'])

3. Блочная диаграмма (числово-категориальная)

sns.boxplot(titanic['Sex'] ,titanic['Age'])

sns.boxplot(titanic['Sex'] ,titanic['Age'] , hue=titanic['Survived'])

4. Distplot (Числово-категориальный)

sns.distplot(titanic[titanic['Survived']==0]['Age'], hist=False , color='red')
sns.distplot(titanic[titanic['Survived']==1]['Age'], hist=False , color= 'green')

5. Тепловая карта (категориальный — категориальный)

pd.crosstab(titanic['Pclass'] , titanic['Survived'])
sns.heatmap(pd.crosstab(titanic['Pclass'] , titanic['Survived']), annot=True)

round(titanic.groupby('Pclass')['Survived'].mean()*100,2)
Pclass
1    62.96
2    47.28
3    24.24
Name: Survived, dtype: float64
(titanic.groupby('Pclass')['Survived'].mean()*100).plot(kind = 'bar')

round(titanic.groupby('Embarked')['Survived'].mean()*100,2)
Embarked
C    55.36
Q    38.96
S    33.70
Name: Survived, dtype: float64
(titanic.groupby('Embarked')['Survived'].mean()*100).plot(kind = 'bar')

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

sns.pairplot(iris)

sns.pairplot(iris , hue = 'species)

7. Линейный график (числовой - числовой)

new = flights.groupby('year').sum().reset_index()
sns.lineplot(new['year'] , new['passengers'])