Skip to content

Instantly share code, notes, and snippets.

@JnBrymn-EB
Last active March 8, 2019 00:28
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JnBrymn-EB/340e7db77749e3537f920108b188a370 to your computer and use it in GitHub Desktop.
Save JnBrymn-EB/340e7db77749e3537f920108b188a370 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"source": [
"# The Kaggle Titanic Challenge\n",
"Can you build a model that predicts who will survive?\n",
"\n",
"Get the Data\n",
"https://www.kaggle.com/c/titanic/data"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"\n",
"full_train = pd.read_csv('train.csv')\n",
"kaggle_test = pd.read_csv('test.csv')\n",
"baseline_submission = pd.read_csv('gender_submission.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"source": [
"# Take a Quick Look at the Data Structure"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\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",
" <tr>\n",
" <th>5</th>\n",
" <td>6</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Moran, Mr. James</td>\n",
" <td>male</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>330877</td>\n",
" <td>8.4583</td>\n",
" <td>NaN</td>\n",
" <td>Q</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",
"5 6 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",
"5 Moran, Mr. James male NaN 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 \n",
"5 0 330877 8.4583 NaN Q "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"full_train.head(6)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Interesting fields:\n",
"* Survived - our target variable\n",
"* Demographics - Sex, Age\n",
"* Social status - Pclass, Fare\n",
"* Family - SibSp, Parch\n",
"* Other - Ticket, Cabin, Embarked"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\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>count</th>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891</td>\n",
" <td>891</td>\n",
" <td>714.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891</td>\n",
" <td>891.000000</td>\n",
" <td>204</td>\n",
" <td>889</td>\n",
" </tr>\n",
" <tr>\n",
" <th>unique</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>891</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>681</td>\n",
" <td>NaN</td>\n",
" <td>147</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>top</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Bryhl, Mr. Kurt Arnold Gottfrid</td>\n",
" <td>male</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1601</td>\n",
" <td>NaN</td>\n",
" <td>B96 B98</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>freq</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1</td>\n",
" <td>577</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>7</td>\n",
" <td>NaN</td>\n",
" <td>4</td>\n",
" <td>644</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>NaN</td>\n",
" <td>NaN</td>\n",
" <td>29.699118</td>\n",
" <td>0.523008</td>\n",
" <td>0.381594</td>\n",
" <td>NaN</td>\n",
" <td>32.204208</td>\n",
" <td>NaN</td>\n",
" <td>NaN</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>NaN</td>\n",
" <td>NaN</td>\n",
" <td>14.526497</td>\n",
" <td>1.102743</td>\n",
" <td>0.806057</td>\n",
" <td>NaN</td>\n",
" <td>49.693429</td>\n",
" <td>NaN</td>\n",
" <td>NaN</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>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.420000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" <td>NaN</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>NaN</td>\n",
" <td>NaN</td>\n",
" <td>20.125000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" <td>7.910400</td>\n",
" <td>NaN</td>\n",
" <td>NaN</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>NaN</td>\n",
" <td>NaN</td>\n",
" <td>28.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" <td>14.454200</td>\n",
" <td>NaN</td>\n",
" <td>NaN</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>NaN</td>\n",
" <td>NaN</td>\n",
" <td>38.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" <td>31.000000</td>\n",
" <td>NaN</td>\n",
" <td>NaN</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>NaN</td>\n",
" <td>NaN</td>\n",
" <td>80.000000</td>\n",
" <td>8.000000</td>\n",
" <td>6.000000</td>\n",
" <td>NaN</td>\n",
" <td>512.329200</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass Name \\\n",
"count 891.000000 891.000000 891.000000 891 \n",
"unique NaN NaN NaN 891 \n",
"top NaN NaN NaN Bryhl, Mr. Kurt Arnold Gottfrid \n",
"freq NaN NaN NaN 1 \n",
"mean 446.000000 0.383838 2.308642 NaN \n",
"std 257.353842 0.486592 0.836071 NaN \n",
"min 1.000000 0.000000 1.000000 NaN \n",
"25% 223.500000 0.000000 2.000000 NaN \n",
"50% 446.000000 0.000000 3.000000 NaN \n",
"75% 668.500000 1.000000 3.000000 NaN \n",
"max 891.000000 1.000000 3.000000 NaN \n",
"\n",
" Sex Age SibSp Parch Ticket Fare Cabin \\\n",
"count 891 714.000000 891.000000 891.000000 891 891.000000 204 \n",
"unique 2 NaN NaN NaN 681 NaN 147 \n",
"top male NaN NaN NaN 1601 NaN B96 B98 \n",
"freq 577 NaN NaN NaN 7 NaN 4 \n",
"mean NaN 29.699118 0.523008 0.381594 NaN 32.204208 NaN \n",
"std NaN 14.526497 1.102743 0.806057 NaN 49.693429 NaN \n",
"min NaN 0.420000 0.000000 0.000000 NaN 0.000000 NaN \n",
"25% NaN 20.125000 0.000000 0.000000 NaN 7.910400 NaN \n",
"50% NaN 28.000000 0.000000 0.000000 NaN 14.454200 NaN \n",
"75% NaN 38.000000 1.000000 0.000000 NaN 31.000000 NaN \n",
"max NaN 80.000000 8.000000 6.000000 NaN 512.329200 NaN \n",
"\n",
" Embarked \n",
"count 889 \n",
"unique 3 \n",
"top S \n",
"freq 644 \n",
"mean NaN \n",
"std NaN \n",
"min NaN \n",
"25% NaN \n",
"50% NaN \n",
"75% NaN \n",
"max NaN "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"full_train.describe(include='all')"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
"S 644\n",
"C 168\n",
"Q 77\n",
"Name: Embarked, dtype: int64"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"full_train['Embarked'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[<matplotlib.axes._subplots.AxesSubplot object at 0x1a1727bf98>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x1a1719be10>],\n",
" [<matplotlib.axes._subplots.AxesSubplot object at 0x1a1720b9b0>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x1a17245550>],\n",
" [<matplotlib.axes._subplots.AxesSubplot object at 0x1a1724ed30>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x1a1724ebe0>]], dtype=object)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nMH/GdgCwzc0jOfSJJHuq6oVVdU6SNyS5fQ4/BwCA+TO2A4BtbubLyrr7VFX9/ST/LsnTkvx8d39u\n1j9nSnOd2ryN6KfV6aPp6KfV6aPp6KfV6SPWhbHdutG2rUnbtq7t3D5t25o2tG0zvyA1AAAAAFvH\nPJaVAQAAALBFSA4BAAAAjNi2TQ5V1WVV9ZtVdaSqrt/oeDajqvr5qnq4qj670bFsVlV1UVV9vKru\nr6rPVdVbNjqmzaaqnllVv15Vnxn66Cc2OqbNrKqeVlW/UVUf2uhYNqOqOlpV91XVp6vqkxsdz2ZV\nVedX1Qeq6gvD76e/stExwVqsNiapiXcN47p7q+oVy47tr6oHhsf+9Yt6OlO07aqhTfdW1X+oqpcu\nO7apfydO0bbFqnp8iP/TVfWPlh3b1GP1Kdr2D5a167NV9Y2qes5wbLO/b6uOb7fqZ27Ktm3Jz9yU\nbduSn7kp27aVP3Orfl+qqmdU1fuH9+fuqtq97NjbhvLfrKrvn1ug3b3tHplcLPG3kvz5JOck+UyS\nl2x0XJvtkeR7krwiyWc3OpbN+khyYZJXDNvPSvIf/Vt6Qh9Vkm8btp+e5O4kl2x0XJv1keStSd6b\n5EMbHctmfCQ5muR5Gx3HZn8kOZTk7wzb5yQ5f6Nj8vBYy2O1MUmSy5P82+FvziVJ7h7Kn5PkweH5\ngmH7go1uz1m27a+ejjnJa0+3bdjf1L8Tp2jb4kp/77bCWP1sxslJ/lqSj22h923V8e1W/cxN2bYt\n+Zmbsm1b8jM3TdvOqL/VPnOrfl9K8veS/Ith+w1J3j9sv2R4v56R5IXD+/i0ecS5XWcOvTLJke5+\nsLv/KMn7kuzb4Jg2ne7+1SSPbHQcm1l3n+juTw3bX0lyf5KdGxvV5tITJ4fdpw8PV7pfQVXtSvK6\nJD+30bGwdVXVt2fypeXmJOnuP+ruxzY2KlibKcYk+5LcMvzNuSvJ+VV1YZLvT3JHdz/S3Y8muSPJ\nZfOPeHqrta27/8MQe5LclWTXugQ2A2sYS276sfpZtu2HkvziHMOZqSnHt1vyMzdN27bqZ26N30s2\n9WfuKbRtq33mpvm+tC+T//xLkg8kubSqaih/X3d/vbv/U5IjmbyfM7ddk0M7kzy0bP9YfKFnjYap\nfS/PJNPLMjVZKvXpJA9nMmDQRyv76SQ/muSPNzqQTayTfLSq7qmqAxsdzCb155P8bpJ/VZMlij9X\nVedtdFAwZ082tttuY75rMpmtcdp2+J34V4alFP+2qv7roWzbvG9V9WczSY780rLiLfO+fYvx7Zb/\nzE05dt+Sn7lV2ralP3OrvW9b9TM3xfelP3mPuvtUkseTPDfr+N7tmMdJN4FaocxMBp6yqvq2TH4B\n/Uh3//5Gx7PZdPc3krysqs5P8sGq+ovd7VpWy1TVDyR5uLvvqarFjY5nE3tVdx+vqhckuaOqvjD8\n7y3ftCOTpQ4/3N13V9XPJLk+yT/c2LBgrp5sbLdtxnxV9b2ZfFH97mXFW/134qeSfGd3n6yqy5P8\nmyR7so3et0yWt/z77l4+y2hLvG+rjG+39GdumrH7Vv3MrdK2Lf2Zm/I715b8zE3xfWnDP3PbdebQ\nsSQXLdvfleT4BsXCFldVT8/kl9St3f3LGx3PZjYsbVnKJppevIm8KskPVtXRTKbyvrqq/vXGhrT5\ndPfx4fnhJB/MnKbNbnHHkhxb9j9OH8gkWQTb2ZON7bbFmK+q/ptMlhzv6+7fO12+1X8ndvfvn15K\n0d0fSfL0qnpetsn7NnhDzljeshXetynGt1v2MzfN2H2rfuZWa9tW/sydxXeuLfmZO+1bfF/6k/eo\nqnYkeXYmS1vX7b3brsmhTyTZU1UvrKpzMvkHdPsGx8QWNKzzvDnJ/d39Uxsdz2ZUVc8fMuCpqnOT\nfF+SL2xsVJtPd7+tu3d19+5Mfid9rLv/1gaHtalU1XlV9azT20lek8QMtDN0939O8lBVfddQdGmS\nz29gSLAebk/yppq4JMnj3X0iyb9L8pqquqCqLsjk98a/28hAz1ZVfUeSX07yxu7+j8vKt/zvxKr6\nc8NYKlX1yky+e/xetslYvaqeneS/T3J4Wdmmf9+mHN9uyc/cNG3bqp+5Kdu2JT9z037n2sKfuWm+\nL92e5PTd/16fyXeFHsrfUJO7mb0wk5lgvz6POLflsrLuPlVVfz+TX1RPS/Lz3f25DQ5r06mqX8zk\nivbPq6pjSX68u2/e2Kg2nVcleWOS+4Y1okny9iETz8SFSQ5V1dMy+QN0W3e7TTtPxUIm02yTyd+n\n93b3r2xsSJvWDye5dRjgPZjkzRscD6zJSmOSTC7Yme7+F0k+ksndk44k+VqGf/Pd/UhV/ZNMvvgk\nyT8+Y6nBhpuibf8ok+tK/B/D779T3b03W+B34hRte32Sv1tVp5L8QZI3DF92Nv1YfYq2JclfT/LR\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1a1727ba20>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fields = ['Survived', 'Age', 'Fare', 'Parch', 'SibSp', 'Pclass']\n",
"full_train[fields].hist(bins=25, figsize=(20,15))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Create a Test Set"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn.model_selection import StratifiedShuffleSplit\n",
"\n",
"split = StratifiedShuffleSplit(n_splits=1, test_size=0.1, random_state=42)\n",
"splits = split.split(full_train, full_train['Pclass'])\n",
"train_indices, test_indices = next(splits)\n",
"train = full_train.iloc[train_indices]\n",
"test = full_train.iloc[test_indices]\n",
"\n",
"original_train = train.copy() # we're keeping a copy for later"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Creating a test/training split is super important so that you can know if your algorithm is working or just overfitting to the training data.\n",
"* The `StratifiedShuffleSplit` preserves the ratio of `Pclass` rows in the split."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Looking for Correlations"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1a1c2a0198>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1a1c35c7b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"survived = train[train['Survived'] == True].groupby('Pclass').size()\n",
"died = train[train['Survived'] == False].groupby('Pclass').size()\n",
"\n",
"data = pd.concat([survived, died], axis=1)\n",
"data.columns = ['Survived', 'Died']\n",
"data.plot.bar(title='Outcome vs First, Second, or Third Class')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sucks to be in 3rd class!"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1a20517d30>"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nPqANuygAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1a204fce80>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def f(age): \n",
" try:\n",
" return int(age/10)*10\n",
" except:\n",
" pass\n",
"survived = train[train['Survived'] == True].copy().set_index('Age').groupby(f).size()\n",
"died = train[train['Survived'] == False].copy().set_index('Age').groupby(f).size()\n",
"data = pd.concat([survived, died], axis=1)\n",
"data.columns = ['Survived', 'Died']\n",
"data.plot.bar(title='Outcome vs Age')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"20yr olds fared more poorly than the rest. Under 10yr old fared better."
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1a21dea860>"
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nDczD/YGDgbnAb4HjcrWJwO15eEZ+TR7/m/CFs2ZmNdOW6+i3B66V1Iv0wTA9Iu6U9DQwTdLFwB+A\nq3L9q4DrJM0jteQndEPcZmbWRlUTfUTMAfaoUP4Cqb++efnbwPFdEp2ZmXWab4FgZlZyTvRmZiXn\nRG9mVnJO9GZmJedEb2ZWck70ZmYl50RvZlZyTvRmZiXnRG9mVnJO9GZmJedEb2ZWck70ZmYl50Rv\nZlZyTvRmZiXnRG9mVnJO9GZmJedEb2ZWck70ZmYl50RvZlZyTvRmZiVXNdFLGiHpt5LmSnpK0jm5\nfLKkP0manf+OKExzgaR5kp6VdGh3roCZmbWudxvqrAHOi4jHJG0BNEi6J4+7LCIuLVaWtCswARgF\nDAV+LekTEbG2KwM3M7O2qdqij4jFEfFYHn4DmAsMa2WSY4BpEfFORLwIzAPGdkWwZmbWfu3qo5dU\nB+wBPJyLzpY0R9LVkrbOZcOAhYXJGmn9g8HMzLpRmxO9pAHAbcC5EfE6cAXwMaAeWAx8t6lqhcmj\nwvwmSZoladbSpUvbHbiZmbVNmxK9pD6kJH9DRPwcICJeiYi1EfEe8BPe755pBEYUJh8OLGo+z4iY\nGhFjImLMkCFDOrMOZmbWirZcdSPgKmBuRHyvUL59odrfAk/m4RnABEl9Je0EjAQe6bqQzcysPdpy\n1c3+wMnAE5Jm57KvACdKqid1y8wHTgeIiKckTQeeJl2xc5avuDEzq52qiT4iHqByv/tdrUwzBZjS\nibjMzKyL+JexZmYl50RvZlZyTvRmZiXnRG9mVnJO9GZmJedEb2ZWck70ZmYl50RvZlZyTvRmZiXn\nRG9mVnJO9GZmJedEb2ZWck70ZmYl50RvZlZyTvRmZiXnRG9mVnJO9GZmJedEb2ZWck70ZmYl50Rv\nZlZyVRO9pBGSfitprqSnJJ2Ty7eRdI+k5/L/rXO5JP1A0jxJcyTt2d0rYWZmLWtLi34NcF5E7ALs\nC5wlaVfgfODeiBgJ3JtfAxwOjMx/k4ArujxqMzNrs6qJPiIWR8RjefgNYC4wDDgGuDZXuxY4Ng8f\nA/wskt8DAyVt3+WRm5lZm7Srj15SHbAH8DCwXUQshvRhAGybqw0DFhYma8xlZmZWA21O9JIGALcB\n50bE661VrVAWFeY3SdIsSbOWLl3a1jDMzKyd2pToJfUhJfkbIuLnufiVpi6Z/H9JLm8ERhQmHw4s\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1a21c2ff60>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAETCAYAAAA4W80CAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3X2cFeV99/HPNwsCikLkwSAgSyIx\nSsRVV9TbmJuiFTQWbaqCSRUfUnysWNNUTbXBvMIdk9rY1KQ2tBrwKYia3BJjE60psfEBZRVRRCNR\nIxtQFlQUQQX89Y+5Fo+Hw56zTxx2+L5fr33tzDXXzPxmzpzfXOc6c2YUEZiZWX59rNoBmJlZ53Ki\nNzPLOSd6M7Occ6I3M8s5J3ozs5xzojczyzkneutUkuZJ+kqV1t1L0s8lrZF0RzViyANJZ0j6bQvT\n/1PS5ArrVu14KCZpjKTGKq5/pqRvbYt15SLRp4PraUnrJL0q6XpJfVsx/8uSju7MGLcXkiLtq48V\nlH1L0swqhtVZTgL2APpFxMnFEyVNk7RB0lpJb0p6WNLh2z7M6h+DksZJelDS25KaJP1G0oRK5o2I\nYyNiVmfH2FYpP4SkU6odS7V0+UQv6avAd4CvAX2Aw4BhwP2SdqpmbNuxPYFJ1Q6iNZRp7fE6DPhd\nRGxsoc7tEdEbGAD8FvipJLUytm6tjKtqJNWUKDsJuAO4CRhCdnL8B+DPtnFsnbUfJwOvp//b3HZx\nfEREl/0DdgPWAqcUlfcGVgJnpfGZwLcKpo8BGtPwzcAHwPq0rL9L5Z8DHgbeBJYBZ6TyPmRviCbg\nD8AVwMfStDOAh4Br03wvAv8nlS9LMU0uiKMHcA3wCvAa8G9ArxLb2SMt77MFZQNSzAOB/sA9qc7r\nwP80x1RiWQFcCrwAdEtl3wJmFu+bgnleBo5Ow9PIksItwNvA08CngcvT9i0DjimYdx7wbeAxYA1w\nN7B7wfTDCvbzU8CYonmnp326Hti7xPbsm+q9CSwGJqTyq4D3gQ3pdT27xLzTgFsKxkem/dMf+BTw\na2A1sAq4FehbtE8uBRYB7wHdyE6gd6Vj4yXgoqJ1zSE7dt5OsdZv7RgEeqZ9vDpt2+PAHlt5TUvu\ng4Jj/3rgXuCd5texYLrIjr+vtfA+O4PsJHgN8EbatmOLXqevFNYtmPanwHPptf8B8Juius3vl9dJ\n71HgLGBJWtevgGFFx++5ZMfvG8APAbUQ+7C0b/8C2Fi4D0nHOvD19Bq/DHy5YHpL7/W2HB8HAk+k\n1/92YDYFealTc+W2WEmnBQ/j04vXrcS0WcBPCg72kom+4EU5umB8r/RinAp0B/oBdWnaTWTJaleg\nFvgdKYmkA3cjcCZQQ5ZAX0kHYw/gmLTc3qn+PwNzgd3T8n4OfHsr23ojML1g/ALgl2n422Qnie7p\n78itHfzpjTICaODDN1xrE/27wLh08N5E9sb/+7TuvwJeKph3HvBH4LPALmSJ8JY0bXB6oxxH9uny\nT9P4gIJ5XyFLwN2A7kVxdQeWkr1RdwLGpv27T0Gst5TaD8XT0+vzj8CyNL53iqcH2Un1QeCfi/bJ\nQmAo0CvF30DWEt4J+CTZiX5c0X47Lh0b3wYebeEYPCcdDzun+gcDu5XYhnL7YCZZkj0ixdizaP7P\npGNieAv76QyyE+ZfpVjOA5aTjjG2kujJTphvkXWhdQf+huz9UVh3I/DX6fXtBZyYtmffVHYF8HDR\n8XsP0JfsfdoEjG8h9iuBx9Lw08AlRXlgI/C99Dr/X7KTYfO+a+m93trjYyeyk8XfpH1xUtqnTvRl\ng4e/BF7dyrSrgfsLDvbWJPrLgZ+VWGYN2dl5v6I35LyCA/eFgmn7pwOzsBWxGqgja0m9A3yqYNrh\nFCTJonUfDbxYMP4QcHoa/mY6ILdo8ZZYTqSD9DiyJNqD1if6+wum/RlZK7Qmje+a1tE3jc8Dri6o\nvx9ZS7uGrMVzc9G6fkX61JPm/WYL23Ik8CoFn16AnwDTCmItl+jfJ2sJryRroR28lbonAk8W7ZOz\nCsYPBV4pmudy4McF6/qvov2wvoVj8CyyTzqjyrye5fbBTOCmFuY/Ir1ePVuocwawtGB85zTPJwpe\np1KJ/nQ+ejITWQu6sG7xPvtPCj59kZ2c1pFa9Wm9nyuYPge4rIXYXwAuLng9niqYNoYs0e9StLwr\nKfNeb8Px8XkKTo6p7GG2UaLv6n30q4D+W+kDG5Smt8VQ4Pclyvvz4Zm52R/IWqbNXisYXg8QEcVl\nzX3COwMN6YvAN4FfpvJSfg30knSopGFkJ4ufpWn/SNYKuk/Si5IuK7eBEXEvWaKfUq5uCcXbsyoi\nNhWMQ7aNzZYVDP+BrEXTn+xj9cnN25/2wefIXrtS8xbbk6wF/kHR8gdvpX4pcyKib0QMjIixEdEA\nIGmgpNmS/ijpLbJulP5F8xbGNgzYs2hbvk7W393s1YLhdUDPFvpvbyY76c2WtFzSdyV1L1Gvkn3Q\n0j5cnf4PaqEOFMQeEevSYO+t1P1IbAXzRYlYiseHAd8v2Ievk50gCreneD+WjEPSEcBwsi4SgNuA\n/SXVFVR7IyLeKRj/Q4q7xfd6G46PPYE/pn1QuLxtoqsn+kfIzrpfLCyUtAtwLPBAKnqHLKk2+0TR\ncqJofBlZH1yxVWQft4YVlO1F1jXRWqvIkuLIlGj6RkSfyL4Y3EJ6I88h6076EnBPRLydpr0dEV+N\niE+StbAvkXRUBTFcQdblUrhvPrKv0pd3Wzv5VGpowfBeZPtwFdl+vrlg+/tGxC4RcXVB/eLXptBy\nYGjRl7RtfT2KfTute1RE7Eb26bH4S9rC2JaRfRor3JZdI+K4Ctf3ke2MiA0RcVVE7Ef2Pc/xZC3k\nYpXsg5b24fMp9r+oMM7WWEHBa5++5B5aVKfUe++cov3YKyIebsP6J5O9ZgslvQrMT+WF+/HjKV80\n24tsn5Z7r7f2+FgBDC76on+vVm9RG3XpRB8Ra8i+dLtO0nhJ3SXVkn1Z2EjWKoKsr+w4SbtL+gRw\ncdGiXiPrU212K3C0pFMkdZPUT1JdarXOAaZL2jW1rC8hO5u3NvYPgH8HrpU0EEDSYEnjWpjtNmAi\n8OU0TJrveEl7p4PoLWBT+isXwzyyfsvJBcW/I2tpfiG1IK8g695pj7+UtJ+kncm6me5M+/IW4M/S\npX01knqma5uHVLjc+WQnpr9Lr/0YshPd7BbnqsyuZF1Sb0oaTHZVV0seA96SdKmy6/drJH1W0iEV\nru8jx6CkP5G0fzrRvkWWdEq9pu3aB6mFeQlwpaQzJe0m6WOSPidpRoWxb80vgJGSvpg+uVzElo2s\nYv8GXC5pJICkPpK2uDS2HEk9gVPIPrHWFfz9NfDlok9SV0naSdKRZCfUOyp4r7f2+HiErJvoopRT\nvgiMbu12tVWXTvQAEfFdso/I15C9IeaTtQqOioj3UrWbya7oeBm4j+wb70LfBq5IHxf/NiJeIevD\n/irZR8eFwAGp7l+TvbFeJLsS4TayL0rb4lKyLpdH08e//wL2aWFbm9/Ue5L1ZTYbkeZdS3ZA/WtK\n4pW4guzL4OZ1rAHOB/6DrPXyDtlJsz1uJusrfpXsapKL0rqWASeQvX5NZK/b16jwuIyI94EJZJ/e\nVgH/Sva9xXPtjBeyBsRBZF9k/gL4aZlYNpEl2DqyL6dXke3DPhWu7yPHIFlCvJPsmF5CdrXKFg2K\njtgHEXEnWQPiLLLW7Gtk39vcXekytrLcVcDJZN+XrSY7Th8qM8/PyC6Xnp3eE8+QbVtrnUj2ifmm\niHi1+Q+4gaz/fXyq9yrZ1TvLyRp45xbsu5be6609Pt4n63k4I61vYrl5OlLzt+ZmZpZTXb5Fb2Zm\nLXOiNzPLOSd6M7Occ6I3M8s5J3ozs5yr/l3VgP79+0dtbW21wzAz61IaGhpWRUTZHzRuF4m+traW\nBQsWVDsMM7MuRVJFt1Fw142ZWc450ZuZ5ZwTvZlZzm0XffRmln8bNmygsbGRd999t9qhdDk9e/Zk\nyJAhdO9e6k7V5TnRm9k20djYyK677kptbS2tfCzvDi0iWL16NY2NjQwfPrxNy3DXjZltE++++y79\n+vVzkm8lSfTr169dn4QqTvTp/tpPSronjQ+XNF/SC5Jul7RTKu+Rxpem6bVtjs7McsVJvm3au99a\n06KfSnZf7GbfAa6NiBFk91c+O5WfTfZ4rr3Jnu7+nXZFaGbWgaZPn87IkSMZNWoUdXV1zJ8/v/xM\nZcydO5err766fMUK9O5d7gmNrVdRH3164s8XgOlkj6kT2dPmv5SqzCJ7+PH1ZA+SmJbK7wR+IElR\nzRvfT6v02Q/N9dd0ThxmtlntZb/o0OW9fPUXytZ55JFHuOeee3jiiSfo0aMHq1at4v33369o+Rs3\nbqRbt9Ipc8KECUyYMKFV8W5Llbbo/xn4O6D5AcT9gDcjYmMab+TDh/cOJj0UN01fk+p/hKQpkhZI\nWtDU1NTG8M3MKrdixQr69+9Pjx7Z0zH79+/PnnvuSW1tLatWrQJgwYIFjBkzBoBp06YxZcoUjjnm\nGE4//XQOPfRQFi9evHl5Y8aMoaGhgZkzZ3LhhReyZs0aamtr+eCDLFWuW7eOoUOHsmHDBn7/+98z\nfvx4Dj74YI488kieey57kNVLL73E4YcfziGHHMKVV17ZKdtdNtFLOh5YGRENhcUlqkYF0z4siJgR\nEfURUT9gQHufPW1mVt4xxxzDsmXL+PSnP83555/Pb37zm7LzNDQ0cPfdd3PbbbcxadIk5syZA2Qn\njeXLl3PwwQdvrtunTx8OOOCAzcv9+c9/zrhx4+jevTtTpkzhuuuuo6GhgWuuuYbzzz8fgKlTp3Le\neefx+OOP84lPlHukbttU0qI/Apgg6WWyBw6PJWvh9y14wO4QsmcuQta6HwqQpvche+6qmVlV9e7d\nm4aGBmbMmMGAAQOYOHEiM2fObHGeCRMm0KtXLwBOOeUU7rjjDgDmzJnDySdv+dzyiRMncvvt2WOp\nZ8+ezcSJE1m7di0PP/wwJ598MnV1dZxzzjmsWLECgIceeohTTz0VgNNOO62jNvUjyvbRR8TlwOUA\n6QnzfxsRX5Z0B3ASWfKfzIcPEp6bxh9J039d1f55M7MCNTU1jBkzhjFjxrD//vsza9YsunXrtrm7\npfgyxl122WXz8ODBg+nXrx+LFi3i9ttv50c/+tEWy58wYQKXX345r7/+Og0NDYwdO5Z33nmHvn37\nsnDhwpIxdfbVSO25jv5Ssi9ml5L1wd+Qym8A+qXyS4DL2heimVnHeP7553nhhRc2jy9cuJBhw4ZR\nW1tLQ0PWO33XXXe1uIxJkybx3e9+lzVr1rD//vtvMb13796MHj2aqVOncvzxx1NTU8Nuu+3G8OHD\nN38aiAieeuopAI444ghmz54NwK233toh21msVYk+IuZFxPFp+MWIGB0Re0fEyRHxXip/N43vnaa/\n2BmBm5m11tq1a5k8eTL77bcfo0aN4tlnn2XatGl84xvfYOrUqRx55JHU1NS0uIyTTjqJ2bNnc8op\np2y1zsSJE7nllluYOHHi5rJbb72VG264gQMOOICRI0dy991ZJ8j3v/99fvjDH3LIIYewZk3nXPGn\n7aFXpb6+Pjr1fvS+vNKs6pYsWcK+++5b7TC6rFL7T1JDRNSXm9e3QDAzyzknejOznHOiNzPLOSd6\nM7Occ6I3M8s5J3ozs5xzojezHUZNTQ11dXWMHDmSAw44gO9973ubfxG7YMECLrroolYtb8yYMXTq\npeEdxI8SNLPqaO3vW8our/zvX3r16rX5NgQrV67kS1/6EmvWrOGqq66ivr6e+vqyl6R3SW7Rm9kO\naeDAgcyYMYMf/OAHRATz5s3j+OOPB+Cdd97hrLPO4pBDDuHAAw/c/CvW9evXM2nSJEaNGsXEiRNZ\nv359NTehYm7Rm9kO65Of/CQffPABK1eu/Ej59OnTGTt2LDfeeCNvvvkmo0eP5uijj+ZHP/oRO++8\nM4sWLWLRokUcdNBBVYq8dZzozWyHVuo2MPfddx9z587lmmuuAbI7Wr7yyis8+OCDm/vxR40axahR\no7ZprG3lRG9mO6wXX3yRmpoaBg4cyJIlHz4SOyK466672GeffbaYpys+4Nx99Ga2Q2pqauLcc8/l\nwgsv3CJ5jxs3juuuu25za//JJ58E4POf//zmWwk/88wzLFq0aNsG3UZu0ZvZDmP9+vXU1dWxYcMG\nunXrxmmnncYll1yyRb0rr7ySiy++mFGjRhER1NbWcs8993Deeedx5plnMmrUKOrq6hg9enQVtqL1\nnOjNrDqqcDvwTZs2bXVa81OnILsMs9TTo3r16rX5ISFdSSUPB+8p6TFJT0laLOmqVD5T0kuSFqa/\nulQuSf8iaamkRZK6xtfSZmY5VUmL/j1gbESsldQd+K2k/0zTvhYRdxbVPxYYkf4OBa5P/83MrArK\ntugjszaNdk9/LT2W6gTgpjTfo0BfSYPaH6qZmbVFRVfdSKqRtBBYCdwfEfPTpOmpe+ZaST1S2WBg\nWcHsjanMzHZw28OjS7ui9u63ihJ9RGyKiDpgCDBa0meBy4HPAIcAuwOXpuqlLjLdIkpJUyQtkLSg\nqampTcGbWdfRs2dPVq9e7WTfShHB6tWr6dmzZ5uX0aqrbiLiTUnzgPERcU0qfk/Sj4G/TeONwNCC\n2YYAy0ssawYwA7KHg7cybjPrYoYMGUJjYyNu2LVez549GTJkSJvnL5voJQ0ANqQk3ws4GviOpEER\nsULZLw1OBJ5Js8wFLpQ0m+xL2DURsaLNEZpZLnTv3p3hw4dXO4wdUiUt+kHALEk1ZF09cyLiHkm/\nTicBAQuBc1P9e4HjgKXAOuDMjg/bzMwqVTbRR8Qi4MAS5WO3Uj+AC9ofmpmZdQTf68bMLOec6M3M\ncs6J3sws55zozcxyzonezCznnOjNzHLOid7MLOec6M3Mcs6J3sws55zozcxyzonezCznnOjNzHLO\nid7MLOec6M3Mcs6J3sws55zozcxyzonezCznyiZ6ST0lPSbpKUmLJV2VyodLmi/pBUm3S9oplfdI\n40vT9NrO3QQzM2tJJS3694CxEXEAUAeMl3QY8B3g2ogYAbwBnJ3qnw28ERF7A9ememZmViVlE31k\n1qbR7ukvgLHAnal8FnBiGj4hjZOmHyVJHRaxmZm1SkV99JJqJC0EVgL3A78H3oyIjalKIzA4DQ8G\nlgGk6WuAfh0ZtJmZVa6iRB8RmyKiDhgCjAb2LVUt/S/Veo/iAklTJC2QtKCpqanSeM3MrJVaddVN\n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\nXIsAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1a21cabbe0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"survived = train[train['Survived'] == True].groupby('SibSp').size()\n",
"died = train[train['Survived'] == False].groupby('SibSp').size()\n",
"\n",
"data = pd.concat([survived, died], axis=1)\n",
"data.columns = ['Survived', 'Died']\n",
"data.plot.bar(title='Outcome vs Number of Siblings or Spouses Aboard')\n",
"\n",
"survived = train[train['Survived'] == True].groupby('Parch').size()\n",
"died = train[train['Survived'] == False].groupby('Parch').size()\n",
"\n",
"data = pd.concat([survived, died], axis=1)\n",
"data.columns = ['Survived', 'Died']\n",
"data.plot.bar(title='Outcome vs Number of Parents or Children Aboard')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"People that were alone were much more likely to die."
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1a2257d1d0>"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1a2258aba8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"survived = train[train['Survived'] == True].groupby('Sex').size()\n",
"died = train[train['Survived'] == False].groupby('Sex').size()\n",
"\n",
"data = pd.concat([survived, died], axis=1)\n",
"data.columns = ['Survived', 'Died']\n",
"data.plot.bar(title='Outcome vs Sex')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Holy cow it was bad to be a man!"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1a20671198>"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEUCAYAAAAlXv26AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3X2clXWd//HX24EAQ0FlUAR0ULFV\nFEYdUNe1SFm8WUPbhwK2qZW7mDeb/bLd1X62Yg/5/cifaa22Jj0wqDSkzIdmbelqZHlXM0okoisi\nyQTK4A2Jgil8fn9c38HL4czMmdsDF+/n43Eec67vdfc518y8z3W+57pRRGBmZsW1S6ULMDOznuWg\nNzMrOAe9mVnBOejNzArOQW9mVnAOejOzgnPQ2w5P0kpJkypdR2skfUrSbypdR3fo7m0taZGkf+yG\n5dRICkl9uqOuonHQV1AKgD9IekvSS5JuljS4A/Nv1wHXndI/8ZuSNkj6k6TrJVVVqJZnJU3NDR+X\n6mvZtqHSwZMLwA0tHtMqWZf1Lgd9hUi6DPgq8C/AIOAYYH/gfkkfqGRt27FxETEQOBH4BPBPFarj\nIeAjueEPA8+UaHskIt7tzhV34Y1jcEQMzD3u6M66OkoZ508v8YauAEm7A1cD/xwRP4+IdyJiJTCV\nLOw/maabJ+ma3HwTJTWm598D9gN+kvbQ/jW1/42kRyS9LmmVpE+l9kGSviupSdIfJV3Z/I+WPlk8\nLOmGNN8KSX+d2ldJWivpvFwd/SRdJ+lFSS9L+pakASVeZ7+0vMNybdWSNkoaKmmIpHvTNK9K+nU5\n//wR8Qzwa+CwluMkTZD0aFrmGkk35d84JY2RdH9a38uSvpTad5F0uaTnJb0iaaGkPVsp4SGyIG92\nPNmbdsu2h1rUdp2k1yS9IOmUXPsgSXNTvX+SdE3zp5UWv5tXgZmp/TOSlqXl/ULS/u1tt1LS39h/\nSvqv9Hf0sKR9JH09LfsZSUe0mG28pKfT+O9I6p+WtUf6fTalcfdKGpFb1yJJsyQ9DLwFHNCilmGS\nlkj6YhnbpSptz3WSVgB/15nXv7Nw0FfGXwP9gR/nGyNiA/BfwN+2t4CIOAd4EfhY2kO7VtJ+af4b\ngWqgFlicZrmR7JPDAWR7nucCn84t8mhgCbAXcDuwABgPHET2xnOTpIFp2q8CB6flHwQMB/69RI1v\n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\n2Kl07wAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1a205578d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"survived = train[train['Survived'] == True].groupby('Embarked').size()\n",
"died = train[train['Survived'] == False].groupby('Embarked').size()\n",
"\n",
"data = pd.concat([survived, died], axis=1)\n",
"data.columns = ['Survived', 'Died']\n",
"data.plot.bar(title='Outcome vs Place Where Embarked')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Prepare the Data for Machine Learning Algorithms"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Get rid of fields we won't be using"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"train = train.drop(['Name', 'Ticket'], axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Deal with nulls\n",
"\n",
"Let's look at how many values are null in each field"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"PassengerId 0\n",
"Survived 0\n",
"Pclass 0\n",
"Sex 0\n",
"Age 158\n",
"SibSp 0\n",
"Parch 0\n",
"Fare 0\n",
"Cabin 618\n",
"Embarked 2\n",
"dtype: int64"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# deal with nulls\n",
"train.isnull().sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Three options for dealing with missing data.\n",
"\n",
"If too few values in a field (like `Cabin`), then we might as well just get rid of the field."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"train = train.drop('Cabin', axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If there is just a tiny bit of missing data (like `Embarked`) then we can get rid of those rows."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"train = train.dropna(subset=['Embarked'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And if it's intermediate and we still need the field (like `Age`), then we can \"impute\" the missing values."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn.preprocessing import Imputer\n",
"\n",
"# set asside non-numerical fields\n",
"non_numerical_fields = ['Sex', 'Embarked']\n",
"train_numerical = train.drop(non_numerical_fields, axis=1)\n",
"\n",
"# create imputer\n",
"imputer = Imputer(strategy='median')\n",
"\n",
"# calculate medians for each field\n",
"imputer.fit(train_numerical) # imputer.statistics_ contains vector of medians\n",
"\n",
"# fill in missing values with medians\n",
"train_numerical_imputed = imputer.transform(train_numerical)\n",
"\n",
"# stick back into DataFrame\n",
"train_numerical_imputed = pd.DataFrame(\n",
" train_numerical_imputed, \n",
" columns=train_numerical.columns,\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Prove that there are no more missing values"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"PassengerId 0\n",
"Survived 0\n",
"Pclass 0\n",
"Age 0\n",
"SibSp 0\n",
"Parch 0\n",
"Fare 0\n",
"dtype: int64"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_numerical_imputed.isnull().sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Handling Categorical Attributes\n",
"\n",
"Turn `Sex` into 0 for 'female' and 1 for 'male'"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1],\n",
" [0],\n",
" [0],\n",
" [0],\n",
" [1],\n",
" [1],\n",
" [1],\n",
" [0],\n",
" [0],\n",
" [1]])"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.preprocessing import LabelBinarizer\n",
"\n",
"binarizer = LabelBinarizer()\n",
"\n",
"binarizer.fit(train['Sex'])\n",
"\n",
"train_sex = binarizer.transform(train['Sex'])\n",
"\n",
"train_sex[:10]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Turn `Embarked` into a \"one-hot\" vector."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 0, 0],\n",
" [1, 0, 0],\n",
" [0, 0, 1],\n",
" [1, 0, 0],\n",
" [0, 0, 1],\n",
" [0, 0, 1],\n",
" [1, 0, 0],\n",
" [1, 0, 0],\n",
" [0, 0, 1],\n",
" [1, 0, 0]])"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"binarizer.fit(train['Embarked'])\n",
"train_embarked = binarizer.transform(train['Embarked'])\n",
"train_embarked[:10]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notice that if there are two categories (male/female) we get a single field. For 3 or more categories we get a vector of `n` values where only one is 1."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Feature scaling\n",
"Scaling the fields to similar ranges of values makes typically improves the performance of machine learning algorithms."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.79640045, 1. , 1. , ..., 0.125 ,\n",
" 0.16666667, 0.02975782],\n",
" [ 0.28908886, 1. , 0. , ..., 0. ,\n",
" 0. , 1. ],\n",
" [ 0.24184477, 1. , 1. , ..., 0. ,\n",
" 0. , 0.01546857],\n",
" ..., \n",
" [ 0.39032621, 1. , 1. , ..., 0.125 ,\n",
" 0.16666667, 0.03103473],\n",
" [ 0.70191226, 0. , 0. , ..., 0. ,\n",
" 0. , 0.063086 ],\n",
" [ 0.75590551, 1. , 0.5 , ..., 0. ,\n",
" 0. , 0.02537431]])"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.preprocessing import MinMaxScaler\n",
"\n",
"scaler = MinMaxScaler()\n",
"scaler.fit(train_numerical_imputed)\n",
"scaler.transform(train_numerical_imputed)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Transformation Pipelines\n",
"Rather than run every cell of this notebook to get the data into shape, it would be nice to make this process repeatable.\n",
"\n",
"You can with \"Transformation Pipelines\".\n",
"\n",
"### Transformers\n",
"\n",
"Common pattern in Scikit Learn: `fit` and `transform`.\n",
"* **Imputers** `fit` the data to find the median and `transform` the data to fill in the missing data.\n",
"* **Scalers** `fit` the data to find min and max values and `transform` the data to scale every thing into the range of 0 to 1.\n",
"* **Classifiers** `fit` the data to a model and `predict` category given new data.\n",
"\n",
"You can make your own Transformers. This one takes in a DataFrame and pulls out the fields you need."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn.base import BaseEstimator, TransformerMixin\n",
"\n",
"class DataFrameSelector(BaseEstimator, TransformerMixin):\n",
" \"\"\"Allows you to specify a DataFrame as the input to a Pipeline (see below)\"\"\"\n",
" def __init__(self, attribute_names):\n",
" self.attribute_names = attribute_names\n",
"\n",
" def fit(self, X, y=None):\n",
" return self\n",
" \n",
" def transform(self, X):\n",
" return X[self.attribute_names].values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's use it."
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([['male'],\n",
" ['female'],\n",
" ['female'],\n",
" ['female'],\n",
" ['male'],\n",
" ['male'],\n",
" ['male'],\n",
" ['female'],\n",
" ['female'],\n",
" ['male']], dtype=object)"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"selector = DataFrameSelector(['Sex'])\n",
"selector.transform(train)[:10]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Pipelines\n",
"Transformers by themselves seem like overkill until you see how they can be arranged into Pipelines.\n",
"\n",
"First let's create a pipeline for our numerical fields."
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1. , 0.34656949, 0.125 , 0.16666667, 0.02975782],\n",
" [ 0. , 0.43453129, 0. , 0. , 1. ],\n",
" [ 1. , 0.33400352, 0. , 0. , 0.01546857],\n",
" ..., \n",
" [ 1. , 0.03242021, 0.125 , 0.16666667, 0.03103473],\n",
" [ 0. , 0.76124654, 0. , 0. , 0.063086 ],\n",
" [ 0.5 , 0.3842674 , 0. , 0. , 0.02537431]])"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.pipeline import Pipeline\n",
"\n",
"numeric_pipeline = Pipeline([\n",
" ('selector', DataFrameSelector(['Pclass', 'Age', 'SibSp', 'Parch', 'Fare'])),\n",
" ('imputer', Imputer(strategy='median')),\n",
" ('scaler', MinMaxScaler()),\n",
"])\n",
"\n",
"numeric_pipeline.fit(train)\n",
"numeric_pipeline.transform(train)\n",
"\n",
"# or equivalently...\n",
"numeric_pipeline.fit_transform(train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next let's create a pipeline for the categorical fields"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# I'm hideous! DON'T LOOK AT MEEEE! explanation here: https://stackoverflow.com/a/46165319/348056\n",
"class LabelBinarizer(BaseEstimator, TransformerMixin):\n",
" def fit(self, X, y=None):\n",
" X = self.prep(X)\n",
" unique_vals = []\n",
" for column in X.T:\n",
" unique_vals.append(np.unique(column))\n",
" self.unique_vals = unique_vals\n",
" def transform(self, X, y=None):\n",
" X = self.prep(X)\n",
" unique_vals = self.unique_vals\n",
" new_columns = []\n",
" for i, column in enumerate(X.T):\n",
" num_uniq_vals = len(unique_vals[i])\n",
" encoder_ring = dict(zip(unique_vals[i], range(len(unique_vals[i]))))\n",
" f = lambda val: encoder_ring[val]\n",
" f = np.vectorize(f, otypes=[np.int])\n",
" new_column = np.array([f(column)])\n",
" if num_uniq_vals <= 2:\n",
" new_columns.append(new_column)\n",
" else:\n",
" one_hots = np.zeros([num_uniq_vals, len(column)], np.int)\n",
" one_hots[new_column, range(len(column))]=1\n",
" new_columns.append(one_hots)\n",
" new_columns = np.concatenate(new_columns, axis=0).T \n",
" return new_columns\n",
" \n",
" def fit_transform(self, X, y=None):\n",
" self.fit(X)\n",
" return self.transform(X)\n",
" \n",
" @staticmethod\n",
" def prep(X):\n",
" shape = X.shape\n",
" if len(shape) == 1:\n",
" X = X.values.reshape(shape[0], 1)\n",
" return X\n",
"\n",
"# prove it works\n",
"lbn = LabelBinarizer()\n",
"thingy = np.array([['male','male','female', 'male'], ['A', 'B', 'A', 'C']]).T\n",
"lbn.fit(thingy)\n",
"lbn.transform(thingy)\n",
"\n",
"# while I'm here I'm going to subtly cheat... heh heh heh, no one will notice\n",
"train = original_train.copy()\n",
"train = train.dropna(subset=['Embarked'])"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 1, 0, 0],\n",
" [0, 1, 0, 0],\n",
" [0, 0, 0, 1],\n",
" ..., \n",
" [1, 0, 0, 1],\n",
" [1, 0, 0, 1],\n",
" [1, 0, 0, 1]])"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"categorical_pipeline = Pipeline([\n",
" ('selector', DataFrameSelector(['Sex','Embarked'])),\n",
" ('binarizer', LabelBinarizer()),\n",
"])\n",
"\n",
"categorical_pipeline.fit_transform(train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's join the two pipelines together to mak a single dataset"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1. , 0.34656949, 0.125 , ..., 1. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0.43453129, 0. , ..., 1. ,\n",
" 0. , 0. ],\n",
" [ 1. , 0.33400352, 0. , ..., 0. ,\n",
" 0. , 1. ],\n",
" ..., \n",
" [ 1. , 0.03242021, 0.125 , ..., 0. ,\n",
" 0. , 1. ],\n",
" [ 0. , 0.76124654, 0. , ..., 0. ,\n",
" 0. , 1. ],\n",
" [ 0.5 , 0.3842674 , 0. , ..., 0. ,\n",
" 0. , 1. ]])"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.pipeline import FeatureUnion\n",
"\n",
"full_pipeline = FeatureUnion(\n",
" transformer_list=[\n",
" ('numeric_pipeline', numeric_pipeline),\n",
" ('categorical_pipeline', categorical_pipeline),\n",
" ]\n",
")\n",
"\n",
"full_pipeline.fit_transform(train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Select and Train a Model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A *LogisticRegression* model maps a bunch of numerical inputs to a binary output. Seems like a good candidate model for our current problem."
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
" intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
" penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
" verbose=0, warm_start=False)"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"\n",
"train_prepared = full_pipeline.fit_transform(train)\n",
"train_true_outcome = train['Survived']\n",
"\n",
"log_reg_model = LogisticRegression()\n",
"log_reg_model.fit(train_prepared, train_true_outcome)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's check how well it performs on the train set."
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.79724655819774715"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.metrics import accuracy_score\n",
"\n",
"predictions = log_reg_model.predict(train_prepared)\n",
"\n",
"accuracy_score(\n",
" y_true=train_true_outcome,\n",
" y_pred=predictions,\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since 68.4% of the people died then a naive model could just say that everyone died and by right 68.4% of the time. We appear to be beating that."
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.80000000000000004"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_prepared = full_pipeline.transform(test)\n",
"test_true_outcome = test['Survived']\n",
"\n",
"predictions = log_reg_model.predict(test_prepared)\n",
"\n",
"accuracy_score(\n",
" y_true=test_true_outcome,\n",
" y_pred=predictions,\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"....................._(shortcut to end if the talk is running long)_....................."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Can we do better with a *DecisionTreeClassifier*?\n",
"\n",
"Let's try something crazy. I'm going to extend to the previous data preparation by finding polynomial combinations of features and then fit a DecisionTreeModel."
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(799, 2002)"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.preprocessing import PolynomialFeatures\n",
"\n",
"extended_pipeline = Pipeline([\n",
" ('full_pipeline', full_pipeline),\n",
" ('polynomial', PolynomialFeatures(degree=5)),\n",
"])\n",
"train_extra_prepared = extended_pipeline.fit_transform(train)\n",
"train_extra_prepared.shape"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,\n",
" max_features=None, max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
" min_samples_leaf=1, min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0, presort=False, random_state=43,\n",
" splitter='best')"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.tree import DecisionTreeClassifier\n",
"\n",
"dec_tree_model = DecisionTreeClassifier(max_leaf_nodes=None, random_state=43)\n",
"dec_tree_model.fit(train_extra_prepared, train_true_outcome)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And evaluate!"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.98247809762202754"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"accuracy_score(\n",
" y_true=train_true_outcome,\n",
" y_pred=dec_tree_model.predict(train_extra_prepared),\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sweet. That's almost perfect. Let's see how it performs on our hold-out test set."
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.75555555555555554"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_extra_prepared = extended_pipeline.transform(test)\n",
"\n",
"accuracy_score(\n",
" y_true=test_true_outcome,\n",
" y_pred=dec_tree_model.predict(test_extra_prepared),\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Clearly we have overfit on the training set.\n",
"\n",
"Let's look at a better way to evaluate a model so that we aren't caught offguard."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Better Evaluation Using Cross Validation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Cross validation chops up the training set into 3 chunks.\n",
"* It then builds the model with 2 chunks and evaluates on a third chunk.\n",
"* It does this 3 times.\n",
"* This is \"fair\" because the each model is evaluated against data it has not yet seen."
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0.75280899 0.80075188 0.77819549]\n"
]
}
],
"source": [
"from sklearn.model_selection import cross_val_score\n",
"\n",
"scores = cross_val_score(\n",
" dec_tree_model,\n",
" train_extra_prepared,\n",
" train_true_outcome,\n",
" scoring='accuracy',\n",
")\n",
"print(scores)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This indicates that the true performance of this approach is going to be somewhere around 77% accuracy."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Fine-Tune Your Model"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'criterion': 'gini', 'max_depth': 5, 'splitter': 'best'}"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.model_selection import GridSearchCV\n",
"\n",
"param_grid = {\n",
" 'criterion': ['gini', 'entropy'],\n",
" 'splitter': ['best', 'random'],\n",
" 'max_depth': [2, 5, 10, 99999]\n",
"}\n",
"dec_tree_model = DecisionTreeClassifier()\n",
"grid_search = GridSearchCV(\n",
" dec_tree_model,\n",
" param_grid,\n",
" scoring='accuracy',\n",
")\n",
"grid_search.fit(train_prepared, train_true_outcome)\n",
"grid_search.best_params_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's evaluate against our test set to see how we're really doing."
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.82222222222222219"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"best_dec_tree_model = grid_search.best_estimator_\n",
"\n",
"test_prepared = full_pipeline.transform(test) # NOTE: we've gone back to a less crazy pipeline\n",
"\n",
"accuracy_score(\n",
" y_true=test_true_outcome,\n",
" y_pred=best_dec_tree_model.predict(test_prepared),\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"~80% - not bad!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Time to Submit to Kaggle\n",
"submit at https://www.kaggle.com/c/titanic/submit"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/johnb/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:5: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
" \"\"\"\n"
]
}
],
"source": [
"kaggle_prepared = full_pipeline.transform(kaggle_test)\n",
"kaggle_evaluations = best_dec_tree_model.predict(kaggle_prepared)\n",
"\n",
"submission = kaggle_test[['PassengerId']]\n",
"submission['Survived'] = kaggle_evaluations\n",
"\n",
"submission.to_csv('titanic_submission.csv', index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"--------------------------------"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"--------------------------------"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Extra Time?\n",
"How could we improve the model?\n",
"\n",
"# Short of Time?\n",
"Let's submit what we have to Kaggle"
]
},
{
"cell_type": "code",
"execution_count": 191,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/johnb/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:5: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
" \"\"\"\n"
]
}
],
"source": [
"kaggle_prepared = full_pipeline.transform(kaggle_test)\n",
"kaggle_evaluations = log_reg_model.predict(kaggle_prepared)\n",
"\n",
"submission = kaggle_test[['PassengerId']]\n",
"submission['Survived'] = kaggle_evaluations\n",
"\n",
"with open('log_reg_submission.csv', 'w') as f:\n",
" submission.to_csv(f, index=False)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment