Что такое EDA?
Исследовательский анализ данных (EDA) — это метод, используемый для анализа и обобщения наборов данных. Большинство методов EDA предполагают использование графиков.
Набор данных Titanic –
Это один из самых популярных наборов данных, используемых для понимания основ машинного обучения. Он содержит информацию обо всех пассажирах на борту корабля RMS Titanic, который, к сожалению, потерпел кораблекрушение. Этот набор данных можно использовать для прогнозирования того, выжил данный пассажир или нет.
CSV-файл можно загрузить с Kaggle.
Код: загрузка данных с помощью Pandas
#importing pandas library
import pandas as pd
#loading data
titanic = pd.read_csv('...\input\train.csv')
Seaborn:
Это библиотека Python, используемая для статистической визуализации данных. Seaborn, созданная на основе Matplotlib, обеспечивает более удобный интерфейс и простоту использования. Её можно установить с помощью следующей команды:
pip3 install seaborn
Код: Печатающая головка данных
# View first five rows of the dataset
titanic.head()
Вывод :
Код: проверка нулевых значений
titanic.isnull().sum()
Вывод :
Столбцы с нулевыми значениями: «Возраст», «Каюта», «Отплытие». Их нужно будет заполнить соответствующими значениями позже.
Характеристики: В наборе данных Titanic примерно следующие типы характеристик:
- Категориальные/номинальные: переменные, которые можно разделить на несколько категорий, но без указания порядка или приоритета.
Например, место отправления (C = Шербур; Q = Квинстаун; S = Саутгемптон) - Бинарный тип: подтип категориальных признаков, где переменная имеет только две категории.
Например: пол (мужской/женский) - Порядковые: они похожи на категориальные признаки, но имеют порядок (то есть их можно отсортировать).
Например, Pclass (1, 2, 3) - Непрерывные: они могут принимать любое значение между минимальным и максимальным значениями в столбце.
Например, возраст, стоимость проезда - Количество: они представляют собой количество значений переменной.
Например, SibSp, Parch - Бесполезные: они не влияют на конечный результат модели машинного обучения. В данном случае идентификатор пассажира, имя, номер каюты и билет могут относиться к этой категории.
Код: графический анализ
import seaborn as sns
import matplotlib.pyplot as plt
# Countplot
sns.catplot(x ="Sex", hue ="Survived",
kind ="count", data = titanic)
Вывод :
Просто взглянув на график, можно предположить, что выживаемость мужчин составляет около 20%, а женщин — около 75%. Таким образом, пол пассажира играет важную роль в определении того, выживет ли он.
Код: Pclass (порядковый номер) против Survived
# Group the dataset by Pclass and Survived and then unstack them
group = titanic.groupby(['Pclass', 'Survived'])
pclass_survived = group.size().unstack()
# Heatmap - Color encoded 2D representation of data.
sns.heatmap(pclass_survived, annot = True, fmt ="d")
Вывод:
Это помогает определить, была ли выживаемость пассажиров более высокого класса выше, чем у пассажиров более низкого класса, или наоборот. У пассажиров 1-го класса шансы на выживание выше по сравнению с пассажирами 2-го и 3-го классов. Это означает, что Pclass вносит большой вклад в выживаемость пассажиров.
Код: возраст (непрерывная функция) против выжившего
# Violinplot Displays distribution of data
# across all levels of a category.
sns.violinplot(x ="Sex", y ="Age", hue ="Survived",
data = titanic, split = True)
Вывод :
На этом графике представлен возрастной диапазон спасённых мужчин, женщин и детей. Уровень выживаемости составляет –
- Полезно для детей.
- Высоко для женщин в возрасте 20-50 лет.
- С возрастом меньше для мужчин.
Поскольку столбец «Возраст» важен, недостающие значения необходимо заполнить либо с помощью столбца «Имя» (определив возраст по обращению — «мистер», «миссис» и т. д.), либо с помощью регрессора.
После этого шага можно создать ещё один столбец — «Диапазон возраста» (на основе столбца «Возраст») и снова проанализировать данные.
Код: факторный график для Family_Size (функция Count) и размера семьи.
# Adding a column Family_Size
titanic['Family_Size'] = 0
titanic['Family_Size'] = titanic['Parch']+titanic['SibSp']
# Adding a column Alone
titanic['Alone'] = 0
titanic.loc[titanic.Family_Size == 0, 'Alone'] = 1
# Factorplot for Family_Size
sns.factorplot(x ='Family_Size', y ='Survived', data = titanic)
# Factorplot for Alone
sns.factorplot(x ='Alone', y ='Survived', data = titanic)
Family_Size обозначает количество человек в семье пассажира. Он рассчитывается путем суммирования столбцов SibSp и Parch соответствующего пассажира. Кроме того, другой столбец только добавляется, чтобы проверить свои шансы на выживание одинокого пассажира на один с семьей.
Важные замечания –
- Если пассажир один, вероятность выживания ниже.
- Если в семье больше 5 человек, шансы на выживание значительно снижаются.
Код : Гистограмма для тарифа (непрерывная функция)
# Divide Fare into 4 bins
titanic['Fare_Range'] = pd.qcut(titanic['Fare'], 4)
# Barplot - Shows approximate values based
# on the height of bars.
sns.barplot(x ='Fare_Range', y ='Survived',
data = titanic)
Вывод :
Стоимость проезда обозначает сумму, которую пассажир заплатил за проезд. Поскольку значения в этом столбце непрерывны, их необходимо разделить на отдельные категории (как в случае с функцией Возраст), чтобы получить чёткое представление. Можно сделать вывод, что если пассажир заплатил более высокую стоимость проезда, то вероятность выживания выше.
Код: графики категориального подсчета для запущенной функции
# Countplot
sns.catplot(x ='Embarked', hue ='Survived',
kind ='count', col ='Pclass', data = titanic)
Вот некоторые примечательные наблюдения:
- Большинство пассажиров сели на борт в S. Таким образом, недостающие значения можно заполнить с помощью S.
- Большинство пассажиров 3-го класса поднялись на борт из Q.
- S выглядит удачным вариантом для пассажиров первого и второго классов по сравнению с третьим классом.
Заключение :
- Столбцы, которые можно удалить, следующие:
- PassengerId, Name, Ticket, Cabin: это строки, которые нельзя классифицировать и которые не сильно влияют на результат.
- Age, Fare: вместо этого сохраняются соответствующие столбцы диапазона.
- Титанические объёмы данных можно проанализировать с помощью множества графических методов, а также корреляций между столбцами, как описано в этой статье.
- После завершения EDA полученный набор данных можно использовать для прогнозирования.