Skip to content

Instantly share code, notes, and snippets.

@clettieri
Created June 3, 2017 17:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save clettieri/d7dd164c0f77cc79f6d2ef9599c1e313 to your computer and use it in GitHub Desktop.
Save clettieri/d7dd164c0f77cc79f6d2ef9599c1e313 to your computer and use it in GitHub Desktop.
Guide to First Kaggle Competition
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Titanic: Machine Learning from Disaster\n",
"\n",
"[Titanic Kaggle Competition](https://www.kaggle.com/c/titanic) \n",
"[Titanic Data](https://www.kaggle.com/c/titanic/data)\n",
"\n",
"The Titanic competition on Kaggle is an ongoing beginner contest. This is a great first problem to try on Kaggle. The data set is relatively small, however unlike the [Machine Learning Hello World](http://machinelearningspecialist.com/hello-world-machine-learning/) using the Iris data set, the Titanic data set does have missing values and offers more room for some feature engineering.\n",
"\n",
"### 1. Understand the Problem\n",
"\n",
"Given characteristis of the passengers onboard the Titanic, can we predict which passengers were most likely to surive?\n",
"\n",
"Our training set is labeled and the column we are trying to predict is simply a binary - did they survive yes/no. Kaggle works by giving you a labeled training set, and then an unlabeled test set. The unlabeled test set is what you make predictions on and then submit. \n",
"\n",
"The public leaderboard only shows the score for a random 50% of the test set and will score the remaining 50% when the contest concludes. Since this is an ongoing beginner contest, the second 50% of the test set will never be used.\n",
"\n",
"This is a **supervised classification** problem.\n",
"\n",
"### 2. Data Collection & Cleaning\n",
"\n",
"Download the data set from [Kaggle - Titanic Data](https://www.kaggle.com/c/titanic/data). \n",
"\n",
"Now we can load the data and begin to understand what we have and what transformations need to be done."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(891, 12)"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"#Inspect Train Data\n",
"train_df = pd.read_csv(\"train.csv\")\n",
"train_df.shape"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 891 entries, 0 to 890\n",
"Data columns (total 12 columns):\n",
"PassengerId 891 non-null int64\n",
"Survived 891 non-null int64\n",
"Pclass 891 non-null int64\n",
"Name 891 non-null object\n",
"Sex 891 non-null object\n",
"Age 714 non-null float64\n",
"SibSp 891 non-null int64\n",
"Parch 891 non-null int64\n",
"Ticket 891 non-null object\n",
"Fare 891 non-null float64\n",
"Cabin 204 non-null object\n",
"Embarked 889 non-null object\n",
"dtypes: float64(2), int64(5), object(5)\n",
"memory usage: 83.6+ KB\n"
]
}
],
"source": [
"train_df.info()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Fare</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>714.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>446.000000</td>\n",
" <td>0.383838</td>\n",
" <td>2.308642</td>\n",
" <td>29.699118</td>\n",
" <td>0.523008</td>\n",
" <td>0.381594</td>\n",
" <td>32.204208</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>257.353842</td>\n",
" <td>0.486592</td>\n",
" <td>0.836071</td>\n",
" <td>14.526497</td>\n",
" <td>1.102743</td>\n",
" <td>0.806057</td>\n",
" <td>49.693429</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.420000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>223.500000</td>\n",
" <td>0.000000</td>\n",
" <td>2.000000</td>\n",
" <td>20.125000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>7.910400</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>446.000000</td>\n",
" <td>0.000000</td>\n",
" <td>3.000000</td>\n",
" <td>28.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>14.454200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>668.500000</td>\n",
" <td>1.000000</td>\n",
" <td>3.000000</td>\n",
" <td>38.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>31.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>891.000000</td>\n",
" <td>1.000000</td>\n",
" <td>3.000000</td>\n",
" <td>80.000000</td>\n",
" <td>8.000000</td>\n",
" <td>6.000000</td>\n",
" <td>512.329200</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass Age SibSp \\\n",
"count 891.000000 891.000000 891.000000 714.000000 891.000000 \n",
"mean 446.000000 0.383838 2.308642 29.699118 0.523008 \n",
"std 257.353842 0.486592 0.836071 14.526497 1.102743 \n",
"min 1.000000 0.000000 1.000000 0.420000 0.000000 \n",
"25% 223.500000 0.000000 2.000000 20.125000 0.000000 \n",
"50% 446.000000 0.000000 3.000000 28.000000 0.000000 \n",
"75% 668.500000 1.000000 3.000000 38.000000 1.000000 \n",
"max 891.000000 1.000000 3.000000 80.000000 8.000000 \n",
"\n",
" Parch Fare \n",
"count 891.000000 891.000000 \n",
"mean 0.381594 32.204208 \n",
"std 0.806057 49.693429 \n",
"min 0.000000 0.000000 \n",
"25% 0.000000 7.910400 \n",
"50% 0.000000 14.454200 \n",
"75% 0.000000 31.000000 \n",
"max 6.000000 512.329200 "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>male</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>7.2500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>female</td>\n",
" <td>38.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>71.2833</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>female</td>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>7.9250</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>female</td>\n",
" <td>35.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>53.1000</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>male</td>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>8.0500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Sex Age SibSp \\\n",
"0 Braund, Mr. Owen Harris male 22.0 1 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
"2 Heikkinen, Miss. Laina female 26.0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
"4 Allen, Mr. William Henry male 35.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked \n",
"0 0 A/5 21171 7.2500 NaN S \n",
"1 0 PC 17599 71.2833 C85 C \n",
"2 0 STON/O2. 3101282 7.9250 NaN S \n",
"3 0 113803 53.1000 C123 S \n",
"4 0 373450 8.0500 NaN S "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"PassengerId 0\n",
"Survived 0\n",
"Pclass 0\n",
"Name 0\n",
"Sex 0\n",
"Age 177\n",
"SibSp 0\n",
"Parch 0\n",
"Ticket 0\n",
"Fare 0\n",
"Cabin 687\n",
"Embarked 2\n",
"dtype: int64"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_df.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(418, 11)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Inspect Test Data\n",
"test_df = pd.read_csv(\"test.csv\")\n",
"test_df.shape"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 418 entries, 0 to 417\n",
"Data columns (total 11 columns):\n",
"PassengerId 418 non-null int64\n",
"Pclass 418 non-null int64\n",
"Name 418 non-null object\n",
"Sex 418 non-null object\n",
"Age 332 non-null float64\n",
"SibSp 418 non-null int64\n",
"Parch 418 non-null int64\n",
"Ticket 418 non-null object\n",
"Fare 417 non-null float64\n",
"Cabin 91 non-null object\n",
"Embarked 418 non-null object\n",
"dtypes: float64(2), int64(4), object(5)\n",
"memory usage: 36.0+ KB\n"
]
}
],
"source": [
"test_df.info()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Pclass</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Fare</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>418.000000</td>\n",
" <td>418.000000</td>\n",
" <td>332.000000</td>\n",
" <td>418.000000</td>\n",
" <td>418.000000</td>\n",
" <td>417.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>1100.500000</td>\n",
" <td>2.265550</td>\n",
" <td>30.272590</td>\n",
" <td>0.447368</td>\n",
" <td>0.392344</td>\n",
" <td>35.627188</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>120.810458</td>\n",
" <td>0.841838</td>\n",
" <td>14.181209</td>\n",
" <td>0.896760</td>\n",
" <td>0.981429</td>\n",
" <td>55.907576</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>892.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.170000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>996.250000</td>\n",
" <td>1.000000</td>\n",
" <td>21.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>7.895800</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>1100.500000</td>\n",
" <td>3.000000</td>\n",
" <td>27.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>14.454200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>1204.750000</td>\n",
" <td>3.000000</td>\n",
" <td>39.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>31.500000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>1309.000000</td>\n",
" <td>3.000000</td>\n",
" <td>76.000000</td>\n",
" <td>8.000000</td>\n",
" <td>9.000000</td>\n",
" <td>512.329200</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Pclass Age SibSp Parch Fare\n",
"count 418.000000 418.000000 332.000000 418.000000 418.000000 417.000000\n",
"mean 1100.500000 2.265550 30.272590 0.447368 0.392344 35.627188\n",
"std 120.810458 0.841838 14.181209 0.896760 0.981429 55.907576\n",
"min 892.000000 1.000000 0.170000 0.000000 0.000000 0.000000\n",
"25% 996.250000 1.000000 21.000000 0.000000 0.000000 7.895800\n",
"50% 1100.500000 3.000000 27.000000 0.000000 0.000000 14.454200\n",
"75% 1204.750000 3.000000 39.000000 1.000000 0.000000 31.500000\n",
"max 1309.000000 3.000000 76.000000 8.000000 9.000000 512.329200"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>892</td>\n",
" <td>3</td>\n",
" <td>Kelly, Mr. James</td>\n",
" <td>male</td>\n",
" <td>34.5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>330911</td>\n",
" <td>7.8292</td>\n",
" <td>NaN</td>\n",
" <td>Q</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>893</td>\n",
" <td>3</td>\n",
" <td>Wilkes, Mrs. James (Ellen Needs)</td>\n",
" <td>female</td>\n",
" <td>47.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>363272</td>\n",
" <td>7.0000</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>894</td>\n",
" <td>2</td>\n",
" <td>Myles, Mr. Thomas Francis</td>\n",
" <td>male</td>\n",
" <td>62.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>240276</td>\n",
" <td>9.6875</td>\n",
" <td>NaN</td>\n",
" <td>Q</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>895</td>\n",
" <td>3</td>\n",
" <td>Wirz, Mr. Albert</td>\n",
" <td>male</td>\n",
" <td>27.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>315154</td>\n",
" <td>8.6625</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>896</td>\n",
" <td>3</td>\n",
" <td>Hirvonen, Mrs. Alexander (Helga E Lindqvist)</td>\n",
" <td>female</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>3101298</td>\n",
" <td>12.2875</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Pclass Name Sex \\\n",
"0 892 3 Kelly, Mr. James male \n",
"1 893 3 Wilkes, Mrs. James (Ellen Needs) female \n",
"2 894 2 Myles, Mr. Thomas Francis male \n",
"3 895 3 Wirz, Mr. Albert male \n",
"4 896 3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female \n",
"\n",
" Age SibSp Parch Ticket Fare Cabin Embarked \n",
"0 34.5 0 0 330911 7.8292 NaN Q \n",
"1 47.0 1 0 363272 7.0000 NaN S \n",
"2 62.0 0 0 240276 9.6875 NaN Q \n",
"3 27.0 0 0 315154 8.6625 NaN S \n",
"4 22.0 1 1 3101298 12.2875 NaN S "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"PassengerId 0\n",
"Pclass 0\n",
"Name 0\n",
"Sex 0\n",
"Age 86\n",
"SibSp 0\n",
"Parch 0\n",
"Ticket 0\n",
"Fare 1\n",
"Cabin 327\n",
"Embarked 0\n",
"dtype: int64"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_df.isnull().sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Missing Values\n",
"\n",
"We can see that there are quite a few missing values in this data set. The 'Cabin' column is missing 687 values out of 891 data points in the training set. There maybe some information gain in this column but with so many values missing it would be hard to generalize the missing values, so I am choosing to drop the 'Cabin' column.\n",
"\n",
"For 'Age' we can choose to fill in the NaNs. A simple solution would be to just use the median age.\n",
"\n",
"The 'Embarked' column only has two values missing so we can simply fill these in by the mode. \n",
"\n",
"The 'Fare' column only 1 missing value so will just use the median.\n",
"\n",
"An important thing to note is that any transformation we apply to the training set must also be applied to the test set. Therefore it would be best to store all transformations in a function that can be called on both data sets."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def clean_missing_values(df):\n",
" '''(DataFrame) -> DataFrame\n",
" \n",
" Will handle missing values in the Titanic set.\n",
" '''\n",
" #Drop Cabin\n",
" df.drop(\"Cabin\", axis=1, inplace=True)\n",
" #Fill Age with median\n",
" df['Age'].fillna(df['Age'].median(), inplace=True)\n",
" #Fill Fare with median\n",
" df['Fare'].fillna(df['Fare'].median(), inplace=True)\n",
" #Fill Embarked with mode\n",
" df['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)\n",
" \n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"PassengerId 0\n",
"Survived 0\n",
"Pclass 0\n",
"Name 0\n",
"Sex 0\n",
"Age 0\n",
"SibSp 0\n",
"Parch 0\n",
"Ticket 0\n",
"Fare 0\n",
"Embarked 0\n",
"dtype: int64"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Clean_missing_values\n",
"train_df = clean_missing_values(train_df)\n",
"test_df = clean_missing_values(test_df)\n",
"train_df.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"PassengerId 0\n",
"Pclass 0\n",
"Name 0\n",
"Sex 0\n",
"Age 0\n",
"SibSp 0\n",
"Parch 0\n",
"Ticket 0\n",
"Fare 0\n",
"Embarked 0\n",
"dtype: int64"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_df.isnull().sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3. Explore & Understand the Data\n",
"\n",
"Now that the data is cleaned and missing values have been dealt with, let's visualize and explore the data we have. Our goal is to better understand our data set and begin to come up with ideas for features we can engineer to better model this problem.\n",
"\n",
"We also need to explore some of these categorical/ non-numerical features a bit more to see the best way to encode them for our machine learning algorithm. 'Sex' and 'Embarked', only being 2 or 3 types can simply be one hot encoded. 'Ticket' and 'Name' we will need to see what can be used from that.\n",
"\n",
"The first thing we should realize is that 'PassengerID' is simply an ordered list of numbers to act as a unique identifier for our samples, therefore this should not be used in the predictive model. \n",
"\n",
"#### Quantitative EDA"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Fare</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>PassengerId</th>\n",
" <td>1.000000</td>\n",
" <td>-0.005007</td>\n",
" <td>-0.035144</td>\n",
" <td>0.034212</td>\n",
" <td>-0.057527</td>\n",
" <td>-0.001652</td>\n",
" <td>0.012658</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Survived</th>\n",
" <td>-0.005007</td>\n",
" <td>1.000000</td>\n",
" <td>-0.338481</td>\n",
" <td>-0.064910</td>\n",
" <td>-0.035322</td>\n",
" <td>0.081629</td>\n",
" <td>0.257307</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Pclass</th>\n",
" <td>-0.035144</td>\n",
" <td>-0.338481</td>\n",
" <td>1.000000</td>\n",
" <td>-0.339898</td>\n",
" <td>0.083081</td>\n",
" <td>0.018443</td>\n",
" <td>-0.549500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Age</th>\n",
" <td>0.034212</td>\n",
" <td>-0.064910</td>\n",
" <td>-0.339898</td>\n",
" <td>1.000000</td>\n",
" <td>-0.233296</td>\n",
" <td>-0.172482</td>\n",
" <td>0.096688</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SibSp</th>\n",
" <td>-0.057527</td>\n",
" <td>-0.035322</td>\n",
" <td>0.083081</td>\n",
" <td>-0.233296</td>\n",
" <td>1.000000</td>\n",
" <td>0.414838</td>\n",
" <td>0.159651</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Parch</th>\n",
" <td>-0.001652</td>\n",
" <td>0.081629</td>\n",
" <td>0.018443</td>\n",
" <td>-0.172482</td>\n",
" <td>0.414838</td>\n",
" <td>1.000000</td>\n",
" <td>0.216225</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fare</th>\n",
" <td>0.012658</td>\n",
" <td>0.257307</td>\n",
" <td>-0.549500</td>\n",
" <td>0.096688</td>\n",
" <td>0.159651</td>\n",
" <td>0.216225</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass Age SibSp Parch \\\n",
"PassengerId 1.000000 -0.005007 -0.035144 0.034212 -0.057527 -0.001652 \n",
"Survived -0.005007 1.000000 -0.338481 -0.064910 -0.035322 0.081629 \n",
"Pclass -0.035144 -0.338481 1.000000 -0.339898 0.083081 0.018443 \n",
"Age 0.034212 -0.064910 -0.339898 1.000000 -0.233296 -0.172482 \n",
"SibSp -0.057527 -0.035322 0.083081 -0.233296 1.000000 0.414838 \n",
"Parch -0.001652 0.081629 0.018443 -0.172482 0.414838 1.000000 \n",
"Fare 0.012658 0.257307 -0.549500 0.096688 0.159651 0.216225 \n",
"\n",
" Fare \n",
"PassengerId 0.012658 \n",
"Survived 0.257307 \n",
"Pclass -0.549500 \n",
"Age 0.096688 \n",
"SibSp 0.159651 \n",
"Parch 0.216225 \n",
"Fare 1.000000 "
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Correlation\n",
"train_df.corr()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0 549\n",
"1 342\n",
"Name: Survived, dtype: int64"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Total Survived\n",
"train_df['Survived'].value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Visual EDA"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHxRJREFUeJzt3X2QVdWZ7/HvjxbFIQTFdpxGaborchPkRQwdX8AaJREQ\ntSRzi5tAZhKNVLiiyU1uJTXimIpxSlI4t24mL0YcbqCCmSGaaIxdatREMFGIiWAURGLsKALSiSDa\nigF5e+4fZzcemtPdp7vP6X169+9Tdar3y9r7PA3rPL32OnuvpYjAzMyyZUDaAZiZWek5uZuZZZCT\nu5lZBjm5m5llkJO7mVkGObmbmWWQk7uZWQY5uZuZZZCTu5lZBh3TWQFJy4DLgNciYmyB/QK+DVwC\n/BW4MiKe7uy81dXVUVdX1+WAzYqxbt26nRFxck/PI2kQ8GvgOHKfl7sj4saOjnHdtnIqtm53mtyB\nHwC3Ane0s38GMCp5nQMsTn52qK6ujrVr1xbx9mZdJ+mVEp3qXeCjEbFb0kDgCUk/j4gn2zvAddvK\nqdi63Wm3TET8GtjVQZGZwB2R8yRwgqSa4sI0q2xJvd6drA5MXh6QySpeMS33zpwKbM1b35Zsa25b\nUNI8YB5AbW1tCd66bzvzpkdo2bP/qO2v3HJZl84z8rr7j9o29PiBPHvjtG7HZu+RVAWsA04HvhcR\nvy1QxnU7MW75uLKef8MVG8p6/qwoRXIvWkQsAZYANDQ09PvWT8ue/WxedOnROxb1/J+mbsEDPT6H\n5UTEQWCCpBOAeyWNjYjn2pRx3U68vWlR4XpdAq7XxSvF3TKvAiPy1k9LtpllSkS8CawCLk47FrPO\nlCK5NwKfUc65QEtEHNUlY9YXSTo5abEj6XhgKvCHdKMy61wxt0L+CLgQqJa0DbiR3JdKRMTtwIPk\nboNsIncr5GfLFaxZCmqA5Um/+wDgxxFx9JccZhWm0+QeEXM62R/AtSWLyKyCRMR64Ky04zDrKj+h\namaWQU7uZmYZ5ORuZpZBTu5mZhnk5G5mlkFO7mZmGeTkbmaWQU7uZmYZ5ORuZpZBTu5mZhnk5G5m\nlkFO7mZmGeTkbmaWQU7uZmYZ5ORuZpZBTu5mZhnk5G5mlkFO7mZmGeTkbmaWQU7uZmYZVFRyl3Sx\npBckNUlaUGD/hZJaJD2TvL5W+lDNep+kEZJWSXpe0kZJX0w7JrNiHNNZAUlVwPeAqcA24ClJjRHx\n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\n5AAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x9af59b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"#Box Plot\n",
"train_df.drop('PassengerId', axis=1).plot(kind='box', layout=(3, 2), sharex=False, subplots=True);"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x92a4710>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Scatter Matrix\n",
"from pandas.tools.plotting import scatter_matrix\n",
"scatter_matrix(train_df, figsize=(7,7));"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xe7acc88>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Bar Plot\n",
"import seaborn as sns\n",
"\n",
"sns.barplot(x='Sex', y='Survived', data=train_df);"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nX68333xTDz/8sGpqalReXm73fDgJDQ0NsixLkmRZYTU0NKht23YxngoAcLpF/SEtn376qf72t79p\nzZo1Ou+88773wiQAAMAeUcV7zJgxcrlcuuaaa7R06VJ1797d7rkAAEALoor3I488on79+tk9CwAA\niEKr8Z41a5YeeughzZ07t8klQY9ZtmyZbYMBAIDmtRrvY5funDp16hkZBgAAfL9W452WliZJevbZ\nZ3Xttdfqqquu4n3eAADEWFTv8/b5fLzPGwCAHwne5w0AgGF4nzcAAIY5qfd5X3vttbzPGwCAGIsq\n3uPHj1dubq7dswAAgChEdcJaSUmJ3XMAAIAoRXXkfe6552rixIn65S9/qYSEhMj6vLw82wYDAADN\niyre6enpds8BAACiFFW8TT/C/t38V2I9whkRbqxvsvzA02vkdLeN0TRnxpPTr4n1CABwxkUV7/79\n+5/w2ebdu3fXhg0bbBkKAAC0LKp4f/zxx5GvGxoaVFZWpoqKCtuGAgAALYvqbPPjtWnTRiNGjNDm\nzZvtmAcAAHyPqI68V69eHfnasizt2rVLbdq0sW0oAADQsqji/d0LkSQlJenxxx+3ZSAAANC6qOI9\nb948u+cAAABRavU177q6Oj388MPavn27pKMRHzBggCZMmKD9+/efkQEBAEBTrca7sLBQdXV16tmz\npzZs2KDS0lKtXr1aN998swoKCs7UjAAA4DitPm1eUVGh0tJSSdIbb7yhESNGKCUlRSkpKXrsscfO\nyIAAAKCpVo+8nc7/bd6yZYsuu+yyyHJDQ4N9UwEAgBa1euTduXNnbd++XcFgUAcOHNDll18u6WjI\nzz333DMyIAAAaKrVeN9///26++67dfDgQT344INKTEzUwoULVVxcrD//+c9nakYAAHCcVuPdv39/\nvfbaa03WjRo1Srm5uerQoYOtgwEAgOa1+pr3o48+qtra2ibrUlJSIuE+dOiQ5s+f3+xtw+GwZs+e\nLZ/Pp9zcXFVVVTXZ/ve//13jxo3T9ddfr6VLl/6QnwEAgLNKq0feI0aM0JQpU9S9e3ddfPHFOvfc\nc+VyufT1119r8+bNOnDggB544IFmb1tWVqZQKKSSkhJVVFSoqKhIixYtkiQdOXJEjz76qF566SUl\nJiZq5MiRGjNmjLp06XL6f0IAAOJMq/G+6KKLVFxcrM2bN2v9+vV688035XA41Lt3b/l8viZnn3/X\n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\nWkAYslCoUDQAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xea29278>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Bar Plot\n",
"sns.barplot(x='Embarked', y='Survived', data=train_df);"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nRETE5RQGREREXE5hQERExOUUBkRERFxOYUBERMTlFAZERERcTmFARETE5RQGREREXE5hQERExOUU\nBkRERFxOYUBERMTlFAZERERcTmFARETE5RQGREREXE5hQERExOUUBkRERFxOYUBERMTlFAZERERc\nTmFARETE5RQGREREXE5hQERExOUUBkRERFxuxsKAbdvceOONrFy5kquuuorm5uas5Y8++iif+tSn\nuPTSS3nggQdmqhkiIiJyCJ6ZKvjpp58mkUiwevVqNmzYwG233caqVasyy7/97W/z+OOPk5OTw0UX\nXcRFF11EQUHBTDVHREREJjFjYWD9+vWsWLECgKVLl7J58+as5QsXLmRwcBCPx4PjOBiGMVNNERER\nkSnMWBgYGhoiFAplHluWRSqVwuMZrnL+/PlceumlBINBzj33XPLz86csr6goB4/HmqnmioiIuNaM\nhYFQKEQ4HM48tm07EwS2bt3Kc889xzPPPENOTg7//M//zFNPPcUFF1wwaXm9vZGZaqqIiMhRqaws\n74jUM2M3EC5btowXXngBgA0bNrBgwYLMsry8PAKBAH6/H8uyKC4uZmBgYKaaIiIiIlMwHMdxZqJg\n27a56aabaGpqwnEcbr31VrZs2UIkEmHlypX84he/4Je//CVer5eamhpuvvlmfD7fpOV1dg7ORDNF\nRESOWkfqzMCMhYHDTWFARETc5kN/mUBEREQ+HBQGREREXE5hQERExOUUBkRERFxOYUBERMTlFAZE\nRERcTmFARETE5RQGREREXE5hQERExOUUBkRERFxOYUBERMTlFAZERERcTmFARETE5RQGREREXE5h\nQERExOUUBkRERFxOYUBERMTlFAZERERcTmFARETE5RQGREREXE5hQERExOUUBkRERFxOYUBERMTl\nFAZERERcTmFARETE5RQGREREXE5hQERExOUUBkRERFxOYUBERMTlFAZERERcTmFARETE5RQGRERE\nXE5hQERExOUUBkRERFxOYUBERMTlFAZERERcTmFARETE5RQGREREXE5hQERExOUUBkRERFxOYUBE\nRMTlFAZERERcTmFARETE5RQGREREXE5hQERExOUUBkRERFzOM1MF27bNTTfdxDvvvIPP5+OWW26h\ntrY2s/ztt9/mtttuw3EcysrKuP322/H7/TPVHBEREZnEjJ0ZePrpp0kkEqxevZrrr7+e2267LbPM\n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\nvPMu4IYb/oW8vHzKysrp788+c3799V/jlltuJJ1OYxgGX/3qDe+7rYfblPcM/OQnP+HJJ5/kW9/6\nFqlUissvv5yvf/3rbN++Hdu2+frXv37EGqp7BkRE3G2ibxOUBUvf97cJjmZH6p6BKcPAxRdfzOrV\nqwkGg9xxxx20tbXxH//xHziOw4UXXshTTz11RBoJCgMiIjL8rYKXW1+jN95Pkb+As6pPw/c+f2fg\naHZU3EBoGAbBYBCAtWvX8tnPfjbzvIiIyJHmt3zv+VsDMrkpw4BlWQwMDBCJRGhsbMzcJ9Da2orH\nM617D0VEROQoN+UR/dprr+WTn/wkqVSKP//zP6e8vJwnn3yS7373u1x33fS+IykiIiJHt0P+6FB7\nezu9vb0sWrQIgOeff55AIMCpp556RBo4QvcMiIiI2xwVNxAeTRQGRETEbY5UGDBnqmDbtrnxxhtZ\nuXIlV111Fc3NzROud8MNN3DHHXfMVDNERETkEGYsDDz99NMkEglWr17N9ddfz2233TZunQcffJCm\npqaZaoKIiIhMw4yFgfXr17NixQoAli5dyubNm7OWv/nmm2zcuJGVK1fOVBNERERkGmbs+4FDQ0NZ\nf6LRsixSqRQej4eOjg5+8IMfcNddd037h4uKinLweKyZaq6IiIhrzVgYCIVChMPhzGPbtjO/TfCb\n3/yG3t5err32Wjo7O4nFYjQ0NPDpT3960vJ6eyMz1VQREZGj0lHxC4Tvx7Jly1izZg0XXnghGzZs\nYMGCBZllV199NVdffTUAv/rVr9i5c+eUQUBERERmzoyFgXPPPZeXX36Zyy+/HMdxuPXWW3nssceI\nRCK6T0BEROQoot8ZEBEROUp96H9nQERERD4cFAZERERcTmFARETE5RQGREREXE5hQERExOUUBkRE\nRFxOYUBERMTlFAZERERcTmFARETE5RQGREREXE5hQERExOUUBkRERFxOYUBERMTlFAZERERcTmFA\nRETE5RQGREREXE5hQERExOUUBkRERFxOYUBERMTlFAZERERcTmFARETE5RQGREREXE5hQERExOUU\nBkRERFxOYUBERMTlFAZERERcTmFARETE5RQGREREXE5hQERExOUUBkRERFxOYUBERMTlFAZERERc\nTmFARETE5RQGREREXE5hQERExOUUBkRERFxOYUBERMTlFAZERERcTmFARETE5RQGREREXE5hQERE\nxOUUBkRERFxOYUBERMTlFAZERERcTmFARETE5TwzVbBt29x000288847+Hw+brnlFmprazPLH3/8\ncX76059iWRYLFizgpptuwjSVTURERI60GTv6Pv300yQSCVavXs3111/PbbfdllkWi8W48847+dnP\nfsaDDz7I0NAQa9asmammiIiIyBRmLAysX7+eFStWALB06VI2b96cWebz+XjwwQcJBoMApFIp/H7/\nTDVFREREpjBjlwmGhoYIhUKZx5ZlkUql8Hg8mKZJaWkpAPfddx+RSIQzzzxzyvKKinLweKyZaq6I\niIhrzVgYCIVChMPhzGPbtvF4PFmPb7/9dnbt2sX3v/99DMOYsrze3shMNVVEROSoVFaWd0TqmbHL\nBMuWLeOFF14AYMOGDSxYsCBr+Y033kg8HueHP/xh5nKBiIiIHHmG4zjOTBQ88m2CpqYmHMfh1ltv\nZcuWLUQiEZYsWcKll17KSSedlDkjcPXVV3PuuedOWl5n5+BMNFNEROSodaTODMxYGDjcFAZERMRt\nPvSXCUREROTDQWFARETE5RQGREREXE5hQERExOUUBkRERFxOYUBERMTlFAZERERcTmFARETE5RQG\nREREXE5hQERExOUUBkRERFxOYUBERMTlFAZERERcTmFARETE5RQGREREXE5hQERExOUUBkRERFxO\nYUBERMTlFAZERERcTmFARETE5RQGREREXE5hQERExOUUBkRERFxOYUBERMTlFAZERERcTmFARETE\n5RQGREREXE5hQERExOUUBkRERFxOYUBERMTlFAZERERcTmFARETE5RQGREREXE5hQERExOUUBkRE\nRFxOYUBERMTlFAZERERcTmFARETE5RQGREREXE5hQERExOUUBkRERFxOYUBERMTlFAZERERcTmFA\nRETE5RQGREREXE5hQERExOU8M1WwbdvcdNNNvPPOO/h8Pm655RZqa2szy5999ll+8IMf4PF4uPTS\nS7nsssumLO+a257N/Hvp/BL+76UnjFtnb+cQP/3NVtriuzHKd+MxTerME7jyzDMoLQiyo62fJ19t\nJp5Mk0rbNLX0jyvDMCDgMYkm7UnbYpkGAZ9FTsDDSQvLeWv3Hrr7E3g8JqW5+XT1xkmmbUryA3z2\n4/MBePCZ7fSF4+T4PYRyfCQYZN9+GyPYj1XZjDNQQrqvHFI+DMMAICfg5cwlFbzR2E7PUPxA7Q4e\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x108ba8d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Swarm Plot\n",
"sns.swarmplot(x='Fare', y='Survived', hue='Sex', data=train_df);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This plot probably the most revealing so far. The top line are those passengers that survived, we see a lot more females and we see a clustering in the far right which is the higher fare price. Where as in the bottom left we have those passengers that did not survive and it seems to be a very dense cluster of men whom had paid lower fares."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4. Prepare Data for Machine Learning Algorithims\n",
"\n",
"#### Feature Encoding\n",
"\n",
"Before we begin constructing new features, let us encode the categorical variables. Remeber that all transformations done to the training feature must also be done to the test features."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"PassengerId int64\n",
"Survived int64\n",
"Pclass int64\n",
"Name object\n",
"Sex object\n",
"Age float64\n",
"SibSp int64\n",
"Parch int64\n",
"Ticket object\n",
"Fare float64\n",
"Embarked object\n",
"dtype: object"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Which columns need to be converted still?\n",
"train_df.dtypes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Name, Sex, Ticket, and Embarked columns are non-numerical types. Sex and Embarked we saw earlier are simple binary types, those will be easy to encode using dummy varaibles. Name and ticket will need some more work to try and extract what useful information we can."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#Encode Sex Column\n",
"sex_train = pd.get_dummies(train_df['Sex'], prefix='is')\n",
"sex_test = pd.get_dummies(test_df['Sex'], prefix='is')"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>is_female</th>\n",
" <th>is_male</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>861</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>862</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>863</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>864</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>865</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>866</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>867</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>868</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>869</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>870</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>871</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>872</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>873</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>874</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>875</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>876</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>877</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>878</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>879</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>880</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>881</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>882</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>883</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>884</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>885</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>886</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>887</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>888</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>889</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>890</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>891 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" is_female is_male\n",
"0 0 1\n",
"1 1 0\n",
"2 1 0\n",
"3 1 0\n",
"4 0 1\n",
"5 0 1\n",
"6 0 1\n",
"7 0 1\n",
"8 1 0\n",
"9 1 0\n",
"10 1 0\n",
"11 1 0\n",
"12 0 1\n",
"13 0 1\n",
"14 1 0\n",
"15 1 0\n",
"16 0 1\n",
"17 0 1\n",
"18 1 0\n",
"19 1 0\n",
"20 0 1\n",
"21 0 1\n",
"22 1 0\n",
"23 0 1\n",
"24 1 0\n",
"25 1 0\n",
"26 0 1\n",
"27 0 1\n",
"28 1 0\n",
"29 0 1\n",
".. ... ...\n",
"861 0 1\n",
"862 1 0\n",
"863 1 0\n",
"864 0 1\n",
"865 1 0\n",
"866 1 0\n",
"867 0 1\n",
"868 0 1\n",
"869 0 1\n",
"870 0 1\n",
"871 1 0\n",
"872 0 1\n",
"873 0 1\n",
"874 1 0\n",
"875 1 0\n",
"876 0 1\n",
"877 0 1\n",
"878 0 1\n",
"879 1 0\n",
"880 1 0\n",
"881 0 1\n",
"882 1 0\n",
"883 0 1\n",
"884 0 1\n",
"885 1 0\n",
"886 0 1\n",
"887 1 0\n",
"888 1 0\n",
"889 0 1\n",
"890 0 1\n",
"\n",
"[891 rows x 2 columns]"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sex_train"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Embarked</th>\n",
" <th>is_female</th>\n",
" <th>is_male</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>7.2500</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>38.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>71.2833</td>\n",
" <td>C</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>7.9250</td>\n",
" <td>S</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>35.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>53.1000</td>\n",
" <td>S</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>8.0500</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Age SibSp Parch \\\n",
"0 Braund, Mr. Owen Harris 22.0 1 0 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... 38.0 1 0 \n",
"2 Heikkinen, Miss. Laina 26.0 0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) 35.0 1 0 \n",
"4 Allen, Mr. William Henry 35.0 0 0 \n",
"\n",
" Ticket Fare Embarked is_female is_male \n",
"0 A/5 21171 7.2500 S 0 1 \n",
"1 PC 17599 71.2833 C 1 0 \n",
"2 STON/O2. 3101282 7.9250 S 1 0 \n",
"3 113803 53.1000 S 1 0 \n",
"4 373450 8.0500 S 0 1 "
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Drop 'Sex' column and add our dummy df\n",
"train_df.drop('Sex', axis=1, inplace=True)\n",
"train_df = train_df.join(sex_train)\n",
"test_df.drop('Sex', axis=1, inplace=True)\n",
"test_df = test_df.join(sex_test)\n",
"#Preview\n",
"train_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#Encode Embarked\n",
"embarked_train = pd.get_dummies(train_df['Embarked'], prefix='embarked')\n",
"embarked_test = pd.get_dummies(test_df['Embarked'], prefix='embarked')"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>embarked_C</th>\n",
" <th>embarked_Q</th>\n",
" <th>embarked_S</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>861</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>862</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>863</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>864</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>865</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>866</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>867</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>868</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>869</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>870</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>871</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>872</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>873</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>874</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>875</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>876</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>877</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>878</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>879</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>880</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>881</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>882</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>883</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>884</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>885</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>886</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>887</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>888</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>889</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>890</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>891 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" embarked_C embarked_Q embarked_S\n",
"0 0 0 1\n",
"1 1 0 0\n",
"2 0 0 1\n",
"3 0 0 1\n",
"4 0 0 1\n",
"5 0 1 0\n",
"6 0 0 1\n",
"7 0 0 1\n",
"8 0 0 1\n",
"9 1 0 0\n",
"10 0 0 1\n",
"11 0 0 1\n",
"12 0 0 1\n",
"13 0 0 1\n",
"14 0 0 1\n",
"15 0 0 1\n",
"16 0 1 0\n",
"17 0 0 1\n",
"18 0 0 1\n",
"19 1 0 0\n",
"20 0 0 1\n",
"21 0 0 1\n",
"22 0 1 0\n",
"23 0 0 1\n",
"24 0 0 1\n",
"25 0 0 1\n",
"26 1 0 0\n",
"27 0 0 1\n",
"28 0 1 0\n",
"29 0 0 1\n",
".. ... ... ...\n",
"861 0 0 1\n",
"862 0 0 1\n",
"863 0 0 1\n",
"864 0 0 1\n",
"865 0 0 1\n",
"866 1 0 0\n",
"867 0 0 1\n",
"868 0 0 1\n",
"869 0 0 1\n",
"870 0 0 1\n",
"871 0 0 1\n",
"872 0 0 1\n",
"873 0 0 1\n",
"874 1 0 0\n",
"875 1 0 0\n",
"876 0 0 1\n",
"877 0 0 1\n",
"878 0 0 1\n",
"879 1 0 0\n",
"880 0 0 1\n",
"881 0 0 1\n",
"882 0 0 1\n",
"883 0 0 1\n",
"884 0 0 1\n",
"885 0 1 0\n",
"886 0 0 1\n",
"887 0 0 1\n",
"888 0 0 1\n",
"889 1 0 0\n",
"890 0 1 0\n",
"\n",
"[891 rows x 3 columns]"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"embarked_train"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>is_female</th>\n",
" <th>is_male</th>\n",
" <th>embarked_C</th>\n",
" <th>embarked_Q</th>\n",
" <th>embarked_S</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>7.2500</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>38.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>71.2833</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>7.9250</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>35.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>53.1000</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>8.0500</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Age SibSp Parch \\\n",
"0 Braund, Mr. Owen Harris 22.0 1 0 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... 38.0 1 0 \n",
"2 Heikkinen, Miss. Laina 26.0 0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) 35.0 1 0 \n",
"4 Allen, Mr. William Henry 35.0 0 0 \n",
"\n",
" Ticket Fare is_female is_male embarked_C embarked_Q \\\n",
"0 A/5 21171 7.2500 0 1 0 0 \n",
"1 PC 17599 71.2833 1 0 1 0 \n",
"2 STON/O2. 3101282 7.9250 1 0 0 0 \n",
"3 113803 53.1000 1 0 0 0 \n",
"4 373450 8.0500 0 1 0 0 \n",
"\n",
" embarked_S \n",
"0 1 \n",
"1 0 \n",
"2 1 \n",
"3 1 \n",
"4 1 "
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Drop 'Embarked' column and add our dummy df\n",
"train_df.drop('Embarked', axis=1, inplace=True)\n",
"train_df = train_df.join(embarked_train)\n",
"test_df.drop('Embarked', axis=1, inplace=True)\n",
"test_df = test_df.join(embarked_test)\n",
"#Preview\n",
"train_df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Feature Engineering & Feature Extraction\n",
"\n",
"Now we still have 'Ticket' and 'Name' as our remaining non-numerical data types. Let's do a bit more data exploration and see what features we can engineer. Since these fields aren't categories it does not make sense to encode them like we did for 'Embarked' and 'Sex'.\n",
"\n",
"'Ticket' # should be a unique value for each ticket, however there can be some info in the ticket number as to where or what cabin that ticket belonged to. Using the first character of each ticket might be able to add some information to our model.\n",
"\n",
"For 'Name', it is a similar idea where the title and/or length of the name might indicate some importance and therefore correlate with the survival. A person's title we will define as whatever string comes before a period.\n",
"\n",
"**Ticket First Character**"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"TicketFirstChar Survived\n",
"1 1 0.630137\n",
" 0 0.369863\n",
"2 0 0.535519\n",
" 1 0.464481\n",
"3 0 0.760797\n",
" 1 0.239203\n",
"4 0 0.800000\n",
" 1 0.200000\n",
"5 0 1.000000\n",
"6 0 0.833333\n",
" 1 0.166667\n",
"7 0 0.888889\n",
" 1 0.111111\n",
"8 0 1.000000\n",
"9 1 1.000000\n",
"A 0 0.931034\n",
" 1 0.068966\n",
"C 0 0.659574\n",
" 1 0.340426\n",
"F 1 0.571429\n",
" 0 0.428571\n",
"L 0 0.750000\n",
" 1 0.250000\n",
"P 1 0.646154\n",
" 0 0.353846\n",
"S 0 0.676923\n",
" 1 0.323077\n",
"W 0 0.846154\n",
" 1 0.153846\n",
"Name: Survived, dtype: float64"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Ticket first character\n",
"train_copy = train_df.copy() #Make a copy to explore some of these feature ideas\n",
"train_copy['TicketFirstChar'] = train_copy['Ticket'].apply(lambda x: str(x)[0])\n",
"train_copy['Survived'].groupby(train_copy['TicketFirstChar']).value_counts(normalize=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"** Title from Name **"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'Mrs.'"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Get Title\n",
"def get_title(name):\n",
" '''(string) -> string\n",
" \n",
" Given a name from dataframe, return the Title\n",
" '''\n",
" comma_list = name.split(\",\")\n",
" front_part_of_name = comma_list[1].split()\n",
" return front_part_of_name[0]\n",
"\n",
"#Test Function\n",
"get_title('Beckwith, Mrs. Richard Leonard (Sallie Monypeny)')"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Title Survived\n",
"Capt. 0 1.000000\n",
"Col. 0 0.500000\n",
" 1 0.500000\n",
"Don. 0 1.000000\n",
"Dr. 0 0.571429\n",
" 1 0.428571\n",
"Jonkheer. 0 1.000000\n",
"Lady. 1 1.000000\n",
"Major. 0 0.500000\n",
" 1 0.500000\n",
"Master. 1 0.575000\n",
" 0 0.425000\n",
"Miss. 1 0.697802\n",
" 0 0.302198\n",
"Mlle. 1 1.000000\n",
"Mme. 1 1.000000\n",
"Mr. 0 0.843327\n",
" 1 0.156673\n",
"Mrs. 1 0.792000\n",
" 0 0.208000\n",
"Ms. 1 1.000000\n",
"Rev. 0 1.000000\n",
"Sir. 1 1.000000\n",
"the 1 1.000000\n",
"Name: Survived, dtype: float64"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Title Survival Rate\n",
"train_copy['Title'] = train_copy['Name'].apply(get_title)\n",
"train_copy['Survived'].groupby(train_copy['Title']).value_counts(normalize=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"** Length of Name **"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"NameLength Survived\n",
"[12, 19] 0 0.779412\n",
" 1 0.220588\n",
"(19, 23] 0 0.698718\n",
" 1 0.301282\n",
"(23, 27] 0 0.680203\n",
" 1 0.319797\n",
"(27, 32] 0 0.557576\n",
" 1 0.442424\n",
"(32, 82] 1 0.674556\n",
" 0 0.325444\n",
"Name: Survived, dtype: float64"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Length of Name\n",
"train_copy['NameLength'] = train_copy['Name'].apply(len)\n",
"train_copy['Survived'].groupby(pd.qcut(train_copy['NameLength'], 5)).value_counts(normalize=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"** Size of Family **"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"FamilySize Survived\n",
"0 0 0.696462\n",
" 1 0.303538\n",
"1 1 0.552795\n",
" 0 0.447205\n",
"2 1 0.578431\n",
" 0 0.421569\n",
"3 1 0.724138\n",
" 0 0.275862\n",
"4 0 0.800000\n",
" 1 0.200000\n",
"5 0 0.863636\n",
" 1 0.136364\n",
"6 0 0.666667\n",
" 1 0.333333\n",
"7 0 1.000000\n",
"10 0 1.000000\n",
"Name: Survived, dtype: float64"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Size of Family\n",
"train_copy['FamilySize'] = train_copy['Parch'] + train_copy['SibSp']\n",
"train_copy['Survived'].groupby(train_copy['FamilySize']).value_counts(normalize=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Feature Engineering (cont'd)\n",
"\n",
"So now we have examined 4 features to add to our model. Since these need to be applied to both training and testing data we will implement them with a function. The work done above was to test and investigate our feature ideas. Looking at the differences in survival rate grouped by our new features shows there can be information gained by adding these. We can double check this is true later on by checking the feature importances of our model."
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>is_female</th>\n",
" <th>is_male</th>\n",
" <th>embarked_C</th>\n",
" <th>embarked_Q</th>\n",
" <th>embarked_S</th>\n",
" <th>FamilySize</th>\n",
" <th>Title</th>\n",
" <th>NameLength</th>\n",
" <th>TicketFirstChar</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>7.2500</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Mr.</td>\n",
" <td>23</td>\n",
" <td>A</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>38.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>71.2833</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>Mrs.</td>\n",
" <td>51</td>\n",
" <td>P</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>7.9250</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>Miss.</td>\n",
" <td>22</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>35.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>53.1000</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Mrs.</td>\n",
" <td>44</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>8.0500</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>Mr.</td>\n",
" <td>24</td>\n",
" <td>3</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Age SibSp Parch \\\n",
"0 Braund, Mr. Owen Harris 22.0 1 0 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... 38.0 1 0 \n",
"2 Heikkinen, Miss. Laina 26.0 0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) 35.0 1 0 \n",
"4 Allen, Mr. William Henry 35.0 0 0 \n",
"\n",
" Ticket Fare is_female is_male embarked_C embarked_Q \\\n",
"0 A/5 21171 7.2500 0 1 0 0 \n",
"1 PC 17599 71.2833 1 0 1 0 \n",
"2 STON/O2. 3101282 7.9250 1 0 0 0 \n",
"3 113803 53.1000 1 0 0 0 \n",
"4 373450 8.0500 0 1 0 0 \n",
"\n",
" embarked_S FamilySize Title NameLength TicketFirstChar \n",
"0 1 1 Mr. 23 A \n",
"1 0 1 Mrs. 51 P \n",
"2 1 0 Miss. 22 S \n",
"3 1 1 Mrs. 44 1 \n",
"4 1 0 Mr. 24 3 "
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Add Features to each DataFrame\n",
"def add_features(df):\n",
" #Family Size\n",
" df['FamilySize'] = df['Parch'] + df['SibSp']\n",
" #Title\n",
" df['Title'] = df['Name'].apply(get_title)\n",
" #Length of Name\n",
" df['NameLength'] = df['Name'].apply(len)\n",
" #First Letter of Ticket\n",
" df['TicketFirstChar'] = df['Ticket'].apply(lambda x: str(x)[0])\n",
" return df\n",
"\n",
"train_df = add_features(train_df)\n",
"test_df = add_features(test_df)\n",
"\n",
"train_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(891, 18)"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_df.shape"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(418, 17)"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_df.shape"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"PassengerId int64\n",
"Survived int64\n",
"Pclass int64\n",
"Name object\n",
"Age float64\n",
"SibSp int64\n",
"Parch int64\n",
"Ticket object\n",
"Fare float64\n",
"is_female uint8\n",
"is_male uint8\n",
"embarked_C uint8\n",
"embarked_Q uint8\n",
"embarked_S uint8\n",
"FamilySize int64\n",
"Title object\n",
"NameLength int64\n",
"TicketFirstChar object\n",
"dtype: object"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_df.dtypes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Encode New Features\n",
"\n",
"Now we need to convert the new non-numerical categorical features into numerical information. Since the population of titles and first ticket characters may differ between the train and test set, we need to temporarily merge the two data frames in order to encode these features. Otherwise we would have a column number mismatch if we one hot encode them seperately.\n",
"\n",
"** Merge Train & Test DF **"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'Dooley, Mr. Patrick'"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Last Passenger in Train DF (for verification later)\n",
"train_df.iloc[-1]['Name']"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'Kelly, Mr. James'"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#First Passenger in Test DF\n",
"test_df.iloc[0]['Name']"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1309, 18)"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Merge our train & test set TEMPORARILY, in order to encode the features\n",
"merged_df = train_df.append(test_df)\n",
"merged_df = merged_df.set_index(merged_df['PassengerId'])\n",
"merged_df.shape"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1309, 35)"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Get dummies for Title\n",
"title_dummies = pd.get_dummies(merged_df['Title'], prefix='title')\n",
"merged_df = merged_df.join(title_dummies)\n",
"merged_df.drop('Title', axis=1, inplace=True)\n",
"merged_df.shape"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1309, 50)"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Get dummies for TicketFirstChar\n",
"ticket_dummies = pd.get_dummies(merged_df['TicketFirstChar'], prefix='tick_first')\n",
"merged_df = merged_df.join(ticket_dummies)\n",
"merged_df.drop('TicketFirstChar', axis=1, inplace=True)\n",
"merged_df.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"** Un-Merge and Verify **\n",
"\n",
"Now let's split the merged dataframe verify that the train and test data have split back successfully and all our feature columns are as expected."
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'Dooley, Mr. Patrick'"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_df = merged_df[:891].copy()\n",
"train_df.iloc[-1]['Name']"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'Kelly, Mr. James'"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_df = merged_df.iloc[891:].copy()\n",
"test_df.iloc[0]['Name']"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#Drop survived from test set - all these values were NaN - no info was leaked\n",
"test_df.drop('Survived', axis=1, inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#Drop Name - extracted this info into NameLength and Title\n",
"train_df.drop('Name', axis=1, inplace=True)\n",
"test_df.drop('Name', axis=1, inplace=True)\n",
"#Drop Ticket - extracted this info into TicketFirstChar\n",
"train_df.drop('Ticket', axis=1, inplace=True)\n",
"test_df.drop('Ticket', axis=1, inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(891, 48)"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_df.shape"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(418, 47)"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_df.shape"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Age float64\n",
"FamilySize int64\n",
"Fare float64\n",
"NameLength int64\n",
"Parch int64\n",
"PassengerId int64\n",
"Pclass int64\n",
"SibSp int64\n",
"Survived float64\n",
"embarked_C uint8\n",
"embarked_Q uint8\n",
"embarked_S uint8\n",
"is_female uint8\n",
"is_male uint8\n",
"title_Capt. uint8\n",
"title_Col. uint8\n",
"title_Don. uint8\n",
"title_Dona. uint8\n",
"title_Dr. uint8\n",
"title_Jonkheer. uint8\n",
"title_Lady. uint8\n",
"title_Major. uint8\n",
"title_Master. uint8\n",
"title_Miss. uint8\n",
"title_Mlle. uint8\n",
"title_Mme. uint8\n",
"title_Mr. uint8\n",
"title_Mrs. uint8\n",
"title_Ms. uint8\n",
"title_Rev. uint8\n",
"title_Sir. uint8\n",
"title_the uint8\n",
"tick_first_1 uint8\n",
"tick_first_2 uint8\n",
"tick_first_3 uint8\n",
"tick_first_4 uint8\n",
"tick_first_5 uint8\n",
"tick_first_6 uint8\n",
"tick_first_7 uint8\n",
"tick_first_8 uint8\n",
"tick_first_9 uint8\n",
"tick_first_A uint8\n",
"tick_first_C uint8\n",
"tick_first_F uint8\n",
"tick_first_L uint8\n",
"tick_first_P uint8\n",
"tick_first_S uint8\n",
"tick_first_W uint8\n",
"dtype: object"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_df.dtypes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 5. Modeling\n",
"\n",
"Phew, that was a lot of work! But now we finally have a cleaned data set with some extra features that are properly encoded to get the best results possible from a machine learning algorithm. \n",
"\n",
"We can now sample some different models using cross-validation with our training set."
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#Get feature columns as list (exclude 'PassengerId' as feature)\n",
"#Get list from test b/c 'Survived' not in list\n",
"feature_columns = list(test_df)\n",
"feature_columns.remove('PassengerId')"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#Get our data as numpy arrays for sklearn\n",
"X_train = train_df[feature_columns].values\n",
"y_train = train_df['Survived'].values\n",
"X_test = test_df[feature_columns].values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Random Forest"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.820344455794\n"
]
}
],
"source": [
"from sklearn.model_selection import cross_val_score\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"\n",
"#Initialize Model\n",
"rf = RandomForestClassifier()\n",
"#Train & Test Model using Cross-Validation\n",
"cv_results = cross_val_score(rf, X_train, y_train, cv=10, scoring='accuracy')\n",
"#Output CV Results\n",
"print cv_results.mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### XGB"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.829408693678\n"
]
}
],
"source": [
"from xgboost import XGBClassifier\n",
"\n",
"#Initialize Model\n",
"xgb = XGBClassifier()\n",
"#Train & Test model\n",
"cv_results = cross_val_score(xgb, X_train, y_train, cv=10, scoring='accuracy')\n",
"print cv_results.mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 6. Evaluate & Tune Model\n",
"You could sample a few different algorithims if you'd like but I will move forward with the RandomForest and tune that for my final model. I will optimize using GridSearch."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Optimizing with GridSearchCV"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best Score: 0.837261503928, Best Parameters: {'max_features': 'auto', 'min_samples_split': 5, 'max_depth': 15}\n"
]
}
],
"source": [
"from sklearn.model_selection import GridSearchCV\n",
"\n",
"#Parameter dictionary for gridsearch\n",
"params = {'max_depth': [5, 8, 15, 25],\n",
" 'min_samples_split': [2, 5, 10, 15],\n",
" 'max_features': ['log2', 'auto', None]}\n",
"#Initialize Model\n",
"rf = RandomForestClassifier(n_estimators=100)\n",
"#Initialize GridSearch\n",
"grid_cv = GridSearchCV(rf, params, cv=5)\n",
"#Fit GridSearch\n",
"grid_cv.fit(X_train, y_train)\n",
"#Get Best Results\n",
"print \"Best Score: {}, Best Parameters: {}\".format(grid_cv.best_score_, grid_cv.best_params_)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best Score: 0.841750841751, Best Parameters: {'max_features': 'log2', 'min_samples_split': 4, 'max_depth': 25}\n"
]
}
],
"source": [
"#Expand the GridSearch\n",
"\n",
"#Parameter dictionary for gridsearch\n",
"params = {'max_depth': [20, 25, 50, 100],\n",
" 'min_samples_split': [4, 5, 6, 8],\n",
" 'max_features': ['log2', 'auto', None]}\n",
"#Initialize Model\n",
"rf = RandomForestClassifier(n_estimators=100)\n",
"#Initialize GridSearch\n",
"grid_cv = GridSearchCV(rf, params, cv=5)\n",
"#Fit GridSearch\n",
"grid_cv.fit(X_train, y_train)\n",
"#Get Best Results\n",
"print \"Best Score: {}, Best Parameters: {}\".format(grid_cv.best_score_, grid_cv.best_params_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Build Final Model\n"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
" max_depth=25, max_features='auto', max_leaf_nodes=None,\n",
" min_impurity_split=1e-07, min_samples_leaf=1,\n",
" min_samples_split=5, min_weight_fraction_leaf=0.0,\n",
" n_estimators=5000, n_jobs=1, oob_score=False,\n",
" random_state=None, verbose=0, warm_start=False)"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Initialize Optimal Model\n",
"rf = RandomForestClassifier(n_estimators=5000, max_features='auto', min_samples_split=5, max_depth=25)\n",
"#Train Model\n",
"rf.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#Make Predictions on Test Set\n",
"pred = rf.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#Create Submission file for Kaggle\n",
"pred_df = test_df.copy()\n",
"pred_df['Survived'] = pred.astype(int)\n",
"output_df = pred_df[['PassengerId', 'Survived']]\n",
"output_df.to_csv(\"predictions.csv\", index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 7. Present Results\n",
"\n",
"After a little tuning of our Random Forest we were able to get a cross validation **accuracy score of 84.17%**. Using those parameters for our final model and increasing the number of trees in our model we get a ** public leader board score of .77033**. Since there is randomness inherit in a Random Forest your actual results may differ slightly.\n",
"\n",
"#### Next Steps\n",
"\n",
"Thank you for checking out this notebook, I hope you have a better understanding of the start-to-finish process of a Kaggle competition. \n",
"\n",
"If you wish to improve on this score try playing with a few different types of models or further tuning the model. Another thing to try is to check out the feature_importances of our model and maybe select only the top 10 most predictive features to try and make a more robust model that will generalize better to the unseen data in the test set.\n",
"\n",
"If you're ready for a new data set then try out another [Kaggle Competition](https://www.kaggle.com/competitions)!"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.13"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment