Мы уже знаем, насколько важна предварительная обработка данных в предыдущей главе. Если вы забыли об этом, вы можете прочитать здесь. Как мы знаем, предварительная обработка данных состоит из 4 этапов: очистка данных, преобразование данных, интеграция данных и сокращение данных. В этой главе мы узнаем о том, как мы используем эту «предварительную обработку данных» с использованием языка программирования Python в Google Colab.

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

Прежде всего, если вы хотите использовать Google Colab, вам следует перейти по этой ссылке и загрузить набор данных на свой Google Диск. После этого мы можем начать наше путешествие. В качестве первого шага мы импортируем некоторые библиотеки, которые нам нужны, и делаем Explore Data Analytics.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
titanic = pd.read_csv('/content/drive/My Drive/Datasets/titanic/train.csv', dtype={'Age':np.float64})
titanic.head(3)

ПРОВЕДЕНИЕ ОЧИСТКИ И АНАЛИЗА ДАННЫХ

  1. Понимание значения каждого столбца: Словарь данных: Описание переменной

Выжил — Выжил (1) или умер (0)

Pclass — класс пассажира (1 = 1-й, 2 = 2-й, 3 = 3-й)

Имя — имя пассажира

Пол — пол пассажира

Возраст — возраст пассажира

SibSp — Количество братьев и сестер/супругов на борту

Parch — количество родителей/детей на борту (некоторые дети путешествовали только с няней, поэтому для них parch=0).

Билет — Номер билета

Тариф — тариф

Кабина — Кабина

Embarked — порт посадки (C = Шербур, Q = Квинстаун, S = Саутгемптон)

2. Анализ каких столбцов совершенно бесполезен в прогнозировании выживаемости и их удаление

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

titanic.describe()

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

del titanic['Name']
del titanic['Ticket']
del titanic['Cabin']
del titanic['Fare']
titanic.head(3)

ПРЕОБРАЗОВАНИЕ ДАННЫХ

Мы можем преобразовать категориальное значение столбца «Пол» в числовое значение, используя One Hot Encoding.

def getNumber(abc):
   if abc == 'male':
     return 1
   else :
     return 2
titanic['Gender'] = titanic['Sex'].apply(getNumber)
del titanic['Sex']
titanic.head(3)

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

titanic.isnull().sum()

Мы получили информацию о том, что столбец «Возраст» имеет 177 нулевых значений. На этот раз мы восполним эти недостающие значения, используя средний возраст выживших людей.

age_mean = titanic[titanic.Survived == 1].Age.mean()
titanic['age'] = np.where(pd.isnull(titanic.Age) & titanic["Survived"] == 1,age_mean, titanic["Age"])
age_mean
titanic.head(3)

titanic.isnull().sum()

Поскольку мы получили 125 строк данных, содержащих пропущенные значения человека, который не может выжить в трагедии Титаника, в дальнейшем мы должны заполнить эти пропущенные значения.

age_mean_not_survived = titanic[titanic.Survived == 0].Age.mean()
titanic.age.fillna(age_mean_not_survived, inplace = True)
titanic.isnull().sum()

Вуаля, нам удалось заполнить недостающие значения в Age. Теперь наша задача — удалить столбец «Возраст».

del titanic['Age']
titanic.rename(columns = {'age' : 'Age'}, inplace = True)
titanic.rename(columns={'Gender' : 'Sex'}, inplace = True)

Молодец! Теперь мы хотим проверить, является ли столбец «Embarked» важным для анализа или нет, то есть зависит ли выживание человека от значения столбца «Embarked» или нет.

survivedQ = titanic[titanic.Embarked == 'Q'][titanic.Survived == 1].shape[0]
survivedC = titanic[titanic.Embarked == 'C'][titanic.Survived == 1].shape[0]
survivedS = titanic[titanic.Embarked == 'S'][titanic.Survived == 1].shape[0]
print('The number of survived Embarked Q is: ', survivedQ)
print('The number of survived Embarked C is: ', survivedC)
print('The number of survived Embarked S is: ', survivedS)

not_survivedQ = titanic[titanic.Embarked == 'Q'][titanic.Survived == 1].shape[0]
not_survivedC = titanic[titanic.Embarked == 'C'][titanic.Survived == 1].shape[0]
not_survivedS = titanic[titanic.Embarked == 'S'][titanic.Survived == 1].shape[0]
print('The number of not survived Embarked Q is: ', not_survivedQ)
print('The number of not survived Embarked C is: ', not_survivedC)
print('The number of not survived Embarked S is: ', not_survivedS)

Так как есть значительные изменения в коэффициенте выживаемости в зависимости от того, в каком порту находятся пассажиры на борту корабля. Мы не можем удалить весь вставший столбец (это полезно). Теперь в столбце Embarked есть нулевые значения, и поэтому мы можем с уверенностью сказать, что удаление некоторых строк из общего количества строк не повлияет на результат. Поэтому вместо того, чтобы пытаться заполнить эти нулевые значения некоторыми значениями. Мы можем просто удалить их.

titanic.dropna(inplace = True)
titanic.isnull().sum()

На данный момент, наконец, у нас есть четкие данные. Следующий шаг — изменить столбец Embark как категориальное значение на числовое значение.

def getEmb(str):
   if str == "S":
     return 1
   elif str == "C":
     return 2
   else:
     return 3
titanic['Embark'] = titanic['Embarked'].apply(getEmb)
titanic.head()

import matplotlib.pyplot as plt
from matplotlib import style
males = (titanic['Sex'] == 1).sum()
females = (titanic['Sex'] == 2).sum()
print(males)
print(females)
p = [males, females]
plt.pie(p, labels = ['Male', 'Female'], colors = ['green', 'yellow'], explode = (0.15, 0), startangle = 0)
plt.axis('equal')
plt.show()

MaleS = titanic[titanic.Sex == 1][titanic.Survived == 1].shape[0]
print(MaleS)
MaleN = titanic[titanic.Sex == 1][titanic.Survived == 0].shape[0]
print(MaleN)
FemaleS = titanic[titanic.Sex == 2][titanic.Survived == 1].shape[0]
print(FemaleS)
Femalen = titanic[titanic.Sex == 2][titanic.Survived == 0].shape[0]
print(FemaleN)
chart = [MaleS, MaleN, FemaleS, FemaleN]
colors = ['lightskyblue', 'yellowgreen', 'Yellow', 'Orange']
labels = ['Survived Male', 'Not Survived Male', 'Survived Female', 'Not Survived Female']
explode = [0, 0.05, 0, 0.1]
plt.pie(chart, labels = labels, colors = colors, explode = explode, startangle = 100, counterclock = False, autopct = "%.2f%%")
plt.axis("equal")
plt.show()

Если вы хотите получить доступ к полному коду этого проекта, вы можете посетить мой Github здесь

Что дальше ?

Мы узнаем о «Модели» в машинном обучении. Вам будет приятно узнать больше о модели здесь. Если вы освоили все модели, вы можете построить все, что захотите

Спасибо всем вам, не забудьте оставить заметку или комментарий для меня и всем хорошего дня :)