Оглавление:
· Basic questions to be asked when we read the data ∘ What 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 Data ∘ Numerical Data ∘ Categorical 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 типа анализа,
- Одномерный анализ
- Двумерный анализ
- Многофакторный анализ
(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'])