Skip to content

Instantly share code, notes, and snippets.

@vinceallenvince
Created October 5, 2016 17:13
Show Gist options
  • Save vinceallenvince/58099082334230e90b3aec1bfd4f3804 to your computer and use it in GitHub Desktop.
Save vinceallenvince/58099082334230e90b3aec1bfd4f3804 to your computer and use it in GitHub Desktop.
Titanic Kaggle competition - Feature EDA - Pclass
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 184,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from __future__ import division\n",
"import operator\n",
"import math\n",
"\n",
"import pandas as pd\n",
"from pandas import Series, DataFrame\n",
"import numpy as np\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"sns.set_style('whitegrid')\n",
"%matplotlib inline\n",
"\n",
"from sklearn.cross_validation import cross_val_score\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.svm import SVC, LinearSVC\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"from sklearn.naive_bayes import GaussianNB"
]
},
{
"cell_type": "code",
"execution_count": 185,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"colors = ['#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#e6550d', '#fd8d3c', '#fdae6b', '#fdd0a2', '#31a354', '#74c476', \n",
" '#a1d99b', '#c7e9c0', '#756bb1', '#9e9ac8', '#bcbddc']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Titanic EDA - Pclass\n",
"..."
]
},
{
"cell_type": "code",
"execution_count": 186,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def check_classifiers(X_train, Y_train):\n",
" \n",
" _cv = 5\n",
" classifier_score = {}\n",
" \n",
" scores = cross_val_score(LogisticRegression(), X, y, cv=_cv)\n",
" classifier_score['LogisticRegression'] = scores.mean()\n",
" \n",
" scores = cross_val_score(KNeighborsClassifier(), X, y, cv=_cv)\n",
" classifier_score['KNeighborsClassifier'] = scores.mean()\n",
" \n",
" scores = cross_val_score(RandomForestClassifier(), X, y, cv=_cv)\n",
" classifier_score['RandomForestClassifier'] = scores.mean()\n",
" \n",
" scores = cross_val_score(SVC(), X, y, cv=_cv)\n",
" classifier_score['SVC'] = scores.mean()\n",
" \n",
" scores = cross_val_score(GaussianNB(), X, y, cv=_cv)\n",
" classifier_score['GaussianNB'] = scores.mean()\n",
"\n",
" return sorted(classifier_score.items(), key=operator.itemgetter(1), reverse=True)"
]
},
{
"cell_type": "code",
"execution_count": 187,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"X_train = pd.read_csv('data/train.csv', dtype={'Age': np.float64})\n",
"y_train = X_train['Survived']"
]
},
{
"cell_type": "code",
"execution_count": 188,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# update missing ages\n",
"_name = 'Name'\n",
"_age = 'Age'\n",
"_master = 'Master.'\n",
"_miss = 'Miss.'\n",
"_mrs = 'Mrs.'\n",
"_mr = 'Mr.'\n",
"_dr = 'Dr.'\n",
"\n",
"mean_ages = {\n",
" 'Master.': int(X_train[X_train[_name].apply(lambda x: x.find(_master)) != -1][_age].dropna().mean()),\n",
" 'Miss.': int(X_train[X_train[_name].apply(lambda x: x.find(_miss)) != -1][_age].dropna().mean()),\n",
" 'Mrs.': int(X_train[X_train[_name].apply(lambda x: x.find(_mrs)) != -1][_age].dropna().mean()),\n",
" 'Mr.': int(X_train[X_train[_name].apply(lambda x: x.find(_mr)) != -1][_age].dropna().mean()),\n",
" 'Dr.': int(X_train[X_train[_name].apply(lambda x: x.find(_dr)) != -1][_age].dropna().mean())\n",
"}\n",
"\n",
"def approx_age(nm):\n",
" if (nm.find(_master) != -1):\n",
" return mean_ages[_master]\n",
" elif (nm.find(_miss) != -1):\n",
" return mean_ages[_miss]\n",
" elif (nm.find(_mrs) != -1):\n",
" return mean_ages[_mrs]\n",
" elif (nm.find(_mr) != -1):\n",
" return mean_ages[_mr]\n",
" else:\n",
" return mean_ages[_dr]\n",
"\n",
"# where Age is nan, get the Name and apply approx_age; return a Series as index: Age\n",
"updated_ages = X_train[np.isnan(X_train[_age])][_name].apply(approx_age)\n",
"\n",
"# where Age is nan, update values\n",
"X_train[_age].fillna(updated_ages, inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 189,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"child 75\n",
"female_adult 280\n",
"male_adult 536\n",
"Name: person, dtype: int64"
]
},
"execution_count": 189,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"feature = 'person'\n",
"\n",
"# It's likely the age threshold for adults was younger in the early 1900s.\n",
"# Account of a 9 year-old boy almost getting refused a lifeboat:\n",
"# https://www.encyclopedia-titanica.org/titanic-survivor/winnie-coutts.html\n",
"# May want to try younger ages here.\n",
"child_age = 14\n",
"\n",
"def get_person(passenger):\n",
" \"\"\"\n",
" Returns a person value of 'female_adult', 'male_adult', 'child'.\n",
" \"\"\"\n",
" age, sex = passenger\n",
" \n",
" if (age < child_age):\n",
" return 'child'\n",
" elif (sex == 'female'):\n",
" return 'female_adult'\n",
" else:\n",
" return 'male_adult'\n",
" \n",
"X_train['person'] = X_train[['Age', 'Sex']].apply(get_person, axis=1)\n",
"X_train['person'].value_counts().sort_index()"
]
},
{
"cell_type": "code",
"execution_count": 190,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11c3aac10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, (axis1, axis2) = plt.subplots(1, 2, figsize=(10, 5))\n",
"\n",
"# Counts by Pclass\n",
"\n",
"total_pclass1 = X_train[X_train.Pclass == 1].shape[0]\n",
"total_pclass2 = X_train[X_train.Pclass == 2].shape[0]\n",
"total_pclass3 = X_train[X_train.Pclass == 3].shape[0]\n",
"\n",
"N = 3\n",
"p = (total_pclass1, total_pclass2, total_pclass3)\n",
"ind = np.arange(N) # the x locations for the groups\n",
"width = 0.75 # the total width of the bars\n",
"\n",
"rects1 = axis1.bar(ind, p, width, color=colors[0:4], lw=0.0)\n",
"\n",
"axis1.set_ylabel('Count')\n",
"axis1.set_title('Counts by Pclass')\n",
"axis1.set_xticks(ind + width/2)\n",
"axis1.set_xticklabels(('Pclass1', 'Pclass2', 'Pclass3'))\n",
"\n",
"# Average survived by Pclass\n",
"\n",
"p1 = (X_train[X_train.Pclass == 1].Survived.sum()/total_pclass1)\n",
"p2 = (X_train[X_train.Pclass == 2].Survived.sum()/total_pclass2)\n",
"p3 = (X_train[X_train.Pclass == 3].Survived.sum()/total_pclass3)\n",
"\n",
"N = 3\n",
"p = (p1, p2, p3)\n",
"ind = np.arange(N) # the x locations for the groups\n",
"width = 0.75 # the total width of the bars\n",
"\n",
"rects1 = axis2.bar(ind, p, width, color=colors[4:8], lw=0.0)\n",
"\n",
"axis2.set_ylabel('mean(Survived)')\n",
"axis2.set_title('Average survived by Pclass')\n",
"axis2.set_xticks(ind + width/2)\n",
"axis2.set_xticklabels(('Pclass1', 'Pclass2', 'Pclass3'))\n",
"\n",
"plt.tight_layout()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There were more passengers in third class than first and second combined. However, a disproportionate amount of third class passengers died."
]
},
{
"cell_type": "code",
"execution_count": 191,
"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",
" <th>person</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>297</th>\n",
" <td>298</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>Allison, Miss. Helen Loraine</td>\n",
" <td>female</td>\n",
" <td>2.00</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>113781</td>\n",
" <td>151.5500</td>\n",
" <td>C22 C26</td>\n",
" <td>S</td>\n",
" <td>child</td>\n",
" </tr>\n",
" <tr>\n",
" <th>305</th>\n",
" <td>306</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Allison, Master. Hudson Trevor</td>\n",
" <td>male</td>\n",
" <td>0.92</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>113781</td>\n",
" <td>151.5500</td>\n",
" <td>C22 C26</td>\n",
" <td>S</td>\n",
" <td>child</td>\n",
" </tr>\n",
" <tr>\n",
" <th>445</th>\n",
" <td>446</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Dodge, Master. Washington</td>\n",
" <td>male</td>\n",
" <td>4.00</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>33638</td>\n",
" <td>81.8583</td>\n",
" <td>A34</td>\n",
" <td>S</td>\n",
" <td>child</td>\n",
" </tr>\n",
" <tr>\n",
" <th>802</th>\n",
" <td>803</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Carter, Master. William Thornton II</td>\n",
" <td>male</td>\n",
" <td>11.00</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>113760</td>\n",
" <td>120.0000</td>\n",
" <td>B96 B98</td>\n",
" <td>S</td>\n",
" <td>child</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass Name \\\n",
"297 298 0 1 Allison, Miss. Helen Loraine \n",
"305 306 1 1 Allison, Master. Hudson Trevor \n",
"445 446 1 1 Dodge, Master. Washington \n",
"802 803 1 1 Carter, Master. William Thornton II \n",
"\n",
" Sex Age SibSp Parch Ticket Fare Cabin Embarked person \n",
"297 female 2.00 1 2 113781 151.5500 C22 C26 S child \n",
"305 male 0.92 1 2 113781 151.5500 C22 C26 S child \n",
"445 male 4.00 0 2 33638 81.8583 A34 S child \n",
"802 male 11.00 1 2 113760 120.0000 B96 B98 S child "
]
},
"execution_count": 191,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_train[(X_train['person'] == 'child') & (X_train['Pclass'] == 1)]"
]
},
{
"cell_type": "code",
"execution_count": 192,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.64705882, 0.91919192, 0.88679245])"
]
},
"execution_count": 192,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_ = X_train['Survived'].groupby([X_train['Pclass'], X_train['person']])\n",
"1 - df_.mean()[:, 'male_adult'].values"
]
},
{
"cell_type": "code",
"execution_count": 193,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\noFKXAk444QSmTJnC6quvTnt7Ox/72MeWdgguueQSHnnkES688ELWXHNNttxyS6ZPn87xxx/Pe9/7\nXhYsWMCcOXP4whe+wIYbbshVV13FlVde+ZKG+stf/jJf+9rX2GCDDZg+fTrnnHMOn/vc53qMpaey\n1l13XX784x9z9dXFIJc99thj6eu7MsvdHwMcfPDBXH755f7ylyRpmOrqw6y11lqsscYaHHPMMfZh\n9LLZN5ZUD3VfEyMzl0TEBcBuwJ7A+2t2PwWMBcYAT9ZsXwCsXu/Y6uXhhx/mwQcfZObMmXR2djJ/\nfjFf8FWvehXrrLMOAKuuuirrr78+AGPHjuX5559nnXXW4bvf/S6jR49mwYIFy2SS//znP/OVr3wF\ngMWLF7Peeuv1GkNPZT388MNstNFGrLxyUe2bbrrpMsd1ZZglSVLryUz++te/ctddd9mH0aCxbyxp\nMDVkYc/M3C8iXg38Hhhds2sMMA+YT5HM6L59ufqaszl+hSN9eed74oknWLBgARHBhAkT2GabbZg/\nfz433HADHR0dLF68eGkZixYtWvr46aef5vbbb+eUU07hsMMOY/z48UyfPp25c+fS0dGx9LXrrLMO\ne++9N2uuuSb33Xcf8+bN6zWm4447bpmy5s2bx5133slvf/tbVlppJW699VY23nhj5s2bx7333ktH\nRweZyfPPP09HRwcLFizg7rvv5sknn1way3AwXN7HUDbQz9i6kappRRcLHA88uqIn+dCOK3qEBmCD\nDTZg00035fDDD+ef//wn06dPB5a9Et2ls7OTzs5Opk6dyje/+U3WX399zjzzTP72t7+95HXrr78+\np556Kq95zWuYPXs2c+fO7TWGnspab731mDNnDgsXLmSllVbinnvuYdddd2WVVVbh8ccfB+Cuu+5a\npqwRI0bwwgsvDPTj0CB53etex3vf+1523nlnv1eSXrZ6L+y5N/D6zDwZeA54Abg1It6Tmb8CdgJm\nUSQ3pkbEKIokx8bAsi1GN+3t7cvdv8IdpJd5vkceeYQxY8aw6667Mm3aNH73u9/x9NNPc/jhh9Pe\n3s7IkSOXllH7eLXVVmPzzTdn8uTJnH322ay++uqss846LFmy5CXHnXrqqZx88sm88MILjBgxgqlT\np/aace6prO23355//vOfnHLKKYwbN461116biGDjjTfm0EMP5fTTT2eTTTZhrbXWor29nTFjxvDm\nN7+ZVVddlUsuuYS7776bfffdd3A/1Abr6Ojosx6HtZmNmZM5kM+45esGkziSmqutrY2DDz6YQw89\n9CV9mL6OaWtr40Mf+hCf/exnl/Y75s176bWoE044gaOPPvolfZje9FTWuHHjOPDAA/noRz/KuHHj\nWG211QB417vexaWXXspee+3FJptssnTxyK4/jtddd13mzJnDj3/848r3Yaqqra1tad/4sssu83sl\n6WVrq+cQqYhYFTgfeA1FwuTrwB+Bc4GRwL3AgZnZGREHAAdRLPw5NTN/uryyOzo6OofqHzz+MTZ0\ntXrdDOWFpVq9bmDpZ9DzZakhrBHt8WDfFrA3fd0uUD1rRP3s3KCRGLP3vqIh5xnKWr09ti0efK3+\nnbL/pYGwbnpvj+u9sOczwEd72LVdD689DzivnvEMN4sWLeKTn/zkMkPxJkyYsHR+oCRJ0lBjH0b1\n4PdKag0NWRND9TFy5EguvPDCZochSZK0QuzDqB78XkmtYUSzA5AkSZIkSeoPkxiSJEmSJKkSnE4i\nSZIkSWo5Q3nRVfXOkRiSJEmSJKkShvVIjIkX7Tmo5a3obddmzJjBAw88wJQpU16y/cgjj+SUU07h\n+OOPZ+edd2bbbbddum/hwoV84AMfYNasxmQFJUnS0NPsPgzYjxmOmv298jslaTAM6yTGUHXaaaf1\nuq+zs3OZ20JJkiQNFfZjNNj8TklaESYxBtHzzz/Psccey3333ccqq6zCjjvuyG233cYBBxzAv/71\nLyZPnsyee+7JpEmTuOaaa5Ye98wzz3DUUUfx1FNPse666zbxHUiSpFZlP0aDze+UpHowiTGILr30\nUl7/+tez1157sfbaa3P99dczatQozjvvPB555BEOOugg9txzz2WyyZdddhkbbbQRRxxxBHfccQe3\n3HJLk96BJElqVfZjNNj8TkmqBxf2HEQPPPAAW2yxBQBveMMbGDt2LJtssgkAa6+9Ns8++2yPxz34\n4INsttlmAGy22WasvLK5JUmS1Fj2YzTY/E5JqgeTGINogw024I477gDgL3/5C6effnqPc/g6Oztf\n8vxNb3oTt912GwD33HMPixcvrn+wkiRJNezHaLD5nZJUDyYxBtHHPvYx/vKXv/DVr36VL3zhC3zy\nk5/s8XXdG++u4/baay8uueQSRo0a1YhwJUmSlrIfo8Hmd0pSPQzrsVkDuZ3YyzFq1ChOO+00Ojo6\naG9vX2bfddddB7D0369//etL959xxhmNC1SSJA1pje7DgP2YVmDfWNJw4EgMSZIkSZJUCSYxJEmS\nJElSJZjEkCRJkiRJlWASQ5IkSZIkVYJJDEmSJEmSVAkmMSRJkiRJUiWYxJAkSZIkSZVgEkOSJEmS\nJFWCSQxJkiRJklQJJjEkSZIkSVIlmMSQJEmSJEmVYBJDkiRJkiRVgkkMSZIkSZJUCSs3OwBJUuNE\nRBvwPWBz4DngU5l5f83+vYApwGLg/Mz8QVMClaRhzLZYkgbOkRiS1Fp2A1bJzG2AY4HTu+3/BjAJ\n2BY4MiJWb3B8ktQKbIslaYBMYkhSa9kWuAYgM28B3tZt/+3AGsDo8nln40KTpJZhWyxJA2QSQ5Ja\ny1jgyZrniyOi9nfB3UAHcCdwVWbOb2RwktQibIslaYBcE0OSWst8YEzN8xGZuQQgIjYFdgbWA54G\nLo6IPTLzJ30V2tHRUY9Ylxpf19JfVO/3MVw1qn4awe9Awc+h7irZFr8cQzm24WKgn7F1U3/WzeAy\niSFJreVmYBdgekS8g+IqX5cngWeA5zOzMyIepxjO3Kf29vZBD7TWo3Ut/UX1fh/DVaPqpxH8DhSd\n5lb+HBr0R0Ml2+KBavXvFDNnNeQ0A/mMrRvrZijrrT02iSFJrWUG8P6IuLl8vn9ETAZWy8xzI+Js\n4KaIeB74M3BBk+KUpOHMtliSBsgkhiS1kMzsBA7ptvm+mv1nAWc1NChJajG2xZI0cC7sKUmSJEmS\nKsEkhiRJkiRJqgSTGJIkSZIkqRJMYkiSJEmSpEowiSFJkiRJkiqhbncniYiVgR8CbwRGAVOBvwBX\n8eLqy9/PzCsi4kDg08AiYGpmXl2vuCRJkiRJUjXV8xarewNzM3PfiFgD+APwFeC0zPxW14siYh3g\ncGAisCrFPbGvzcxFdYxNkiRJkiRVTD2TGNOAK8rHIyhGWbQDG0fEbhSjMT4HbAnclJmLgfkRMQfY\nDOioY2ySJEmSJKli6rYmRmY+k5lPR8QYimTGl4DfAUdl5nuA+4ETgLHAkzWHLgBWr1dckiRJkiSp\nmuo5EoOIWBe4EvhOZl4WEatnZlfC4qfAt4FfUSQyuowB5vWn/I6OoTtYYyjH1uqsm/ob6Gds3UiS\nJElannou7LkO8AvgM5l5fbn5FxFxWGbeCryXYsrI74GpETEKGA1sDNzVn3O0t7cPfuCDoKOjY8jG\n1upavm5mzmrIaQbyGbd83WASR5IkSepLPUdiHAu8Cjg+Ir4MdFKsgXFGRCwE/g58OjMXRMS3gZuA\nNuC4zFxOaqKFAAAgAElEQVRYx7gkSerRxIv2bMh5Zu99Rd8vkiRJ0jLqlsTIzCOAI3rYtW0Prz0P\nOK9esUiSJEmSpOqr28KekiRJkiRJg8kkhiRJkiRJqgSTGJIkSZIkqRJMYkiSJEmSpEowiSFJkiRJ\nkirBJIYkSZIkSaoEkxiSJEmSJKkSTGJIkiRJkqRKMIkhSZIkSZIqwSSGJEmSJEmqBJMYkiRJkiSp\nEkxiSJIkSZKkSjCJIUmSJEmSKsEkhiRJkiRJqgSTGJIkSZIkqRJMYkiSJEmSpEowiSFJkiRJkirB\nJIYkSZIkSaoEkxiSJEmSJKkSTGJIkiRJkqRKMIkhSZIkSZIqwSSGJEmSJEmqBJMYkiRJkiSpEkxi\nSJIkSZKkSjCJIUmSJEmSKsEkhiRJkiRJqgSTGJIkSZIkqRJMYkiSJEmSpEowiSFJkiRJkirBJIYk\nSZIkSaqElZsdgCRJkqSXb+JXZ9X9HLOPn1T3c0jS8jgSQ5IkSZIkVYJJDEmSJEmSVAkmMSRJkiRJ\nUiWYxJAkSZIkSZVgEkOSJEmSJFWCSQxJkiRJklQJJjEkSZIkSVIlrFyvgiNiZeCHwBuBUcBU4B7g\nAmAJcFdmfqZ87YHAp4FFwNTMvLpecUmSJEmSpGqqWxID2BuYm5n7RsSrgNuBPwDHZeaNEfH9iNgV\n+C1wODARWBW4KSKuzcxFdYxNkiotIl4JbA9sSJEY/hPwy8x8rqmBSZIkSXVUzyTGNOCK8vFKwGJg\nYmbeWG77ObADRef7psxcDMyPiDnAZkBHHWOTpEqKiFWBE4DdgTuAhyhGsW0DfCsirgS+mpkLejm+\nDfgesDnwHPCpzLy/Zv/bgdPKp38H9s7MhXV6O5LUkmyLJWng6rYmRmY+k5lPR8QYimTGF4G2mpc8\nBYwFxgBP1mxfAKxer7gkqeIuAq4HIjP3yMwpmfn5zPwIEMDN5Wt6sxuwSmZuAxwLnN5t/9nAfpn5\nbuAaYL1BfweSJNtiSRqgui7sGRHrArOAH2XmZRSjLrqMAeYB8ymSGd23S5KWtUdmXpOZS7rvyMwl\nmfnfwIeXc/y2FB1iMvMW4G1dOyJiI+AfwJSIuAEYl5lzBjN4SRJgWyxJA1bPhT3XAX4BfCYzry83\n3xYR787MXwM7USQ4fg9MjYhRwGhgY+Cu/pyjo2PozjgZyrG1Ouum/gb6GVs3/XJ8RPS6MzNPyszO\n5Rw/lpeOflscESPKpMhawNbAocD9wFURcWtm3vDyw5Yk1bAtlqQBqueaGMcCr6LocH8Z6AQ+C5wZ\nESOBe4HpmdkZEd8GbqKYbnJcf+f8tbe31yfyl6mjo2PIxtbqWr5uZs5qyGkG8hm3fN3Q7yRO17S8\nLYHXU0zXW0wx+uLBfhw/n2LEW5cRNaM6/gH8KTPvA4iIayiuDt7QV6H1TkCNr2vpjTfcEnbDqX6G\nW90MlJ9D3dWlLW4EL1QMXdbN0GXdDK66JTEy8wjgiB52bdfDa88DzqtXLJI0XGTmVwAi4mZg68x8\npnx+BsVaGX25GdgFmB4R7wDurNl3P/DKiFi/XGDuXcC5/Ymr3gmoR+taeuMNt4TdcKqf4VY3A9Hq\nSeUG/dFQl7a4EbxQMQBeRBq6rJshrbf2uJ4jMSRJ9bM2xQi3LiOBcf04bgbw/jIJArB/REwGVsvM\ncyPiAODScsrK/2XmzwczaEkSYFssSQNmEkOSqukc4NaImEmxSPMuwBl9HVSul3FIt8331ey/Adhq\n8MKUJHVnWyxJA1fXu5NIkuojM78B7Av8HXgE+Ehmfr+5UUmSJEn15UgMSaquoJhC8jVgD+D25oYj\nSa0pIlYHNgCWAA9k5pN9HCJJGiBHYkhSBUXEycD/A3YHVqKYT31ac6OSpNYSETtFxA3AHIrFN88C\n7o2I6yJip6YGJ0nDlCMxJKmadgQmArMzc35EvB+4AziyuWFJUmuIiAsopvR9JjPv7rbvzcABEbFX\nZu7djPgkabgyiSFJ1bSk/LfrDiWr1GyTJNXfFzPzkZ52lEmNKRHx+gbHJEnDnkkMSaqmacDlwLiI\nOALYB7ikuSFJUkvZICI26G1nZv46M//ayIAkqRWYxJCkCsrMUyJiR+Ah4A3ACZl5VZPDkqRW8pXy\n3zWBNwE3Ay8A2wB3Au9sUlySNKyZxJCkCoqInwIXUQxnXtjseCSp1WTm9gARMRPYPTP/VD5fj2KB\nT0lqqIkX7dmQ88ze+4qGnKc33p1EkqrpHGA34M8RcW5EbNfkeCSpVa3XlcAoPQys16xgJGm4cySG\nJFVQZl4NXB0Ro4GdgdMiYq3MtOMsSY3VERE/oliraATwceDG5oYkScOXSQxJqqiI2AT4GLAn8Bfg\njOZGJEkt6VPA4cDBFHeM+iXwvaZGJEnDmEkMSaqgiLgTWEyxLsakzHy0ySFJUkvKzIUR8RPgj8Av\ngHUzc3GTw5KkYcskhiRV08cz885mByFJrS4iPgp8CRhNcWeS30TEUZl5UXMjk6ThySSGJFVIRJyd\nmZ8Gvh0Rnd33Z+akJoQlSa3s8xTJi19n5uMR8VaKKSUmMSSpDvqVxIiIN2fm3d22vSMzf1ufsCRJ\nvei6bd+JzQxCkrTUC5n5VEQAkJmPRsSSJsckScPWcpMYEfFOYCXg3Ig4AGirOe4HwEb1DU+SVCsz\nO8qHU4ALgf/OzIVNDEmSWt3dEXEYMDIitgAOBf7Q5JgkadjqayTG+4H3AK8FTqrZvpgXrwZKkhrv\nbGAy8K2I+AVwUWbe0NyQJKklfYZiTYxngR8Cs4AjmxqRJA1jy01iZOaJABGxT2Ze2JCIJEl9ysyr\ngasjYjSwM3BaRKyVmes1OTRJaimZ+TRwbPkjSaqz/i7s+euI+AYwjhenlJCZn6xLVJKkPkXEJsDH\ngD2BvwBnNDciSWodETE7MyeW61/ULrTcBnRm5kpNCk2ShrX+JjGmATeWP8ushi9JaqyIuJNiat+F\nwKTMfLTJIUlSS8nMieW/I5odiyS1kv4mMUZm5lF1jUSStCLOzswzmx2EJLWyiBgHfBzYmGJNjLuB\naZn5TFMDk6RhrL+Z45si4oMRMaqu0UiS+uugZgcgSa0sIt4OJLAT8DTwAvAR4E8RsVkzY5Ok4ay/\nIzH+HTgMoOse2DjXT5Ka6S8RMQu4heLqHwCZeVLvh0iSBtHpwCcyc2btxoj4IPBNYIemRCVJw1y/\nkhiZOb7egUiSVshvax639foqSVK9jOuewADIzP+JCBPKklQn/UpiRMSXe9ruFT9Jao7M/EqzY5Ck\nFvf8cva5EL4k1Ul/p5PUXuUbCXyAYgizJKkJerilH8DfMnPdZsQjSS1oVESsS8+j4VxHTpLqpL/T\nSV5yxS8ivgpcW5eIJEl9qr2lX0SMBHYDtm5eRJLUcl4J/IqekxiOxJCkOunvSIzuXgm8YTADkSQN\nTGYuAq6IiC82OxZJQ8ujHxm7wseMBx5dwWNeO23+Cp+n6jLzjc2OQVI1NKot5kM7rvB5qqi/a2I8\nwIsZ5RHAq4Bv1CsoSdLyRcS+NU/bgDcDC5sUjiS1nIj4OnByZj7Zy/5xwOcz8/ONjUyShrf+jsTY\nruZxJzAvM1sv5S5JQ8f2NY87gbnAR5sUiyS1omnAzyLib8Cvgb8Ci4H1gEkUF1KPaF54kjQ89TeJ\n8TBwMPDe8phZEfGdzFxSt8gkSb3KzP2bHYMktbLMvA3YLiK2Bz4E7AIsAf4MnJWZs5oZnyQNV/1N\nYpwKbAj8kGLY8v7A+phdlqSGiohVgZOAaZn5u4g4HTgQuA2YnJmPNDVASWoxmXk9cH2z45CkVtHf\nJMYOwFu7Rl5ExNXAnXWLSpLUmzMohis/GBH/D9gLeCvwFuA7wIebGJsktZyI2BH4T2AcNXcqycz1\nmxaUJA1j/U1irFz+LKx5/kJdIpIkLc/WmbkpQETsSjEi40/AnyLia80NTZJa0pnAFOAuvLWqJNVd\nf5MYFwM3RMSl5fPJwCX1CUmStBy1CeTtgGNqno9qbCiSJGBuZl7V7CAkqVX0mcSIiDWAcyjmW08q\nf87IzAvrHJskaVn/iIgtgdWA1wG/BIiI7ShWxpckNdaN5fpE1wDPdW3MzF83LyRJGr6Wm8SIiLcC\nM4H9M/PnwM/L4conR8TtmXlHI4KUJC31OeAyYB3g0Mx8OiK+BPwHsHNTI5Ok1rRl+e9ba7Z1Ulz4\nkyQNsr5GYnyTYrX7G7o2ZOZxEfEr4HTgfX2dICK2Ak7OzO0jYgvgKuC+cvf3M/OKiDgQ+DSwCJia\nmVev+FuRpOGvTB5v0m3zZcCZmflkE0KSpJaWmds3OwZJaiV9JTHWqE1gdMnMX0TEKX0VHhFHA/sA\nC8pN7cBpmfmtmtesAxwOTARWBW6KiGszc1H/3oIktY6I+DpFYnhpwqJc2LNr/zjg85n5+WbEJ0mt\nJiK2BY4GXklxd5KVgPUy843NjEuShqu+khgjI2JE161Vu0TECPq3gNyfKG7317V+RjuwUUTsRjEa\n43MUQ/BuyszFwPyImANsBnT0/21IUsuYBvwsIv4G/JpiHYzFwHoUQ5fHA0c0LzxJajnnAqcA+wHf\nBnYCZjczIEkazkb0sf9XwAk9bP8ScGtfhWfmDIrOdZdbgKMz8z3A/WXZY4HaIdALgNX7KluSWlFm\n3paZ21EsuBzAwcChwMbAWZn5rsw0CSxJjfNsZp4P3AD8CzgQeE9TI5KkYayvkRjHAjMjYi/g9xRD\n5CYCjwMfGsD5flozBPqnFNnqX1EkMrqMAeb1p7COjqHbTx/KsbU666b+BvoZWzf9l5nXA9c3Ow5J\nEs+VU/kSeEdmzoqI1ZodlCQNV8tNYmTmUxHxbmB7ihWXlwDfzcwbB3i+X0TEYZl5K/Beiikjvwem\nRsQoYDTF1cS7+lNYe3v7AMOor46OjiEbW6tr+bqZOashpxnIZ9zydcOKJXEiYkfgP4FxFAlmADJz\n/cGPTJK0HKcDlwO7A78vL/71OWJZkjQwfY3EIDM7gVnlz8t1CHBmRCwE/g58OjMXRMS3gZsoOuLH\nZebCQTiXJA1nZwJTKJK+nU2ORZJaVnmnvemZ2RkR7cBGwO3NjkuShqs+kxgvV2Y+BGxTPr4N2LaH\n15wHnFfvWCRpGJmbmVc1OwhJanURsQZwakRsAOxJcde9IynWx5AkDbK6JzEkSXVxY0ScDlwDPNe1\nMTN/3byQJKklnQNcS3HHvaeAR4GLgJ2bGZQkDVcmMSSpmrYs/31rzbZOitusSpIaZ0Jmnh0Rh5RT\nor8YEU4nkaQ6MYkhSRWUmds3OwZJEgCLI2J1yvWJImJDisXwJUl1YBJDkiooIrYFjgZeSbEo8krA\nepn5xmbGJak1Tbxoz7qfY/beV9T9HAN0AnADsG5E/BTYGvhkUyOSpGFsRLMDkCQNyLnATymS0d8F\n5gAzmhqRJLWmDor29wHgDcCVQGvfM1yS6siRGJJUTc9m5vkR8UaKFfAPpOhIS5IaayZwB1B7x6i2\nJsUiScOeSQxJqqbnImIckMA7MnNWRKzW7KAkqRVl5gHNjkGSWoVJDEmqptOBy4Hdgd9HxF7Arc0N\nSZJa0k8j4lPALGBx18bMfLh5IUnS8GUSQ5IqKDOviIjpmdkZEe3ARoC39JOkxlsd+AIwt2ZbJ7B+\nc8KRpOHNJIYkVVBErAGcGhEbAHsChwNHUqyPsbzj2oDvAZsDzwGfysz7e3jdWcA/MvO4wY5dkoaZ\nPYBXZ+az/T3AtliSBs67k0hSNZ0D/B5YE3gKeBS4qB/H7QaskpnbAMdSTEt5iYg4CHjL4IUqScPa\n/cAaK3iMbbEkDZBJDEmqpgmZeTawJDMXZuYXgdf347htgWsAMvMW4G21OyNia+DtwFmDHK8kDVed\nwD0RcVNEzOr66eMY22JJGiCnk0hSNS2OiNUpOs9ExIbAkn4cNxZ4sls5IzJzSUS8BjiB4grhRwc7\nYEkapqYO4BjbYkkaIJMYklRNJwA3AOtGxE+BrYFP9uO4+cCYmucjMrMr+bEnxfSUmcBrgdER8cfM\n/HFfhXZ0dKxA6CtufF1Lb7x6f16NNpzqx7oZuoZq3WTmrwZwWF3a4kYYaD0M1fobTqwbNUqzvzMm\nMSSpmjqAGcAHgTcAVwLtwNV9HHczsAswPSLeAdzZtSMzzwTOBIiITwDR305ze3v7isa/Qh6ta+mN\nV+/Pq9GGU/1YN0NXo+qmQZ3zurTFjTCQeujo6Bh2/7dWyMy+ZhcNDutmABpUN8NNs9tjkxiSVE0z\ngTuAq2q2tfXjuBnA+yPi5vL5/hExGVgtM88d5BglST2zLZakATKJIUkVlZkHDOCYTuCQbpvv6+F1\nPxpoXJKk5bMtlqSBM4khSdX004j4FDALWNy1MTMfbl5IkiRJUn2ZxJCkalod+AIwt2ZbJ7B+c8KR\nJEmS6s8khiRV0x7AqzPz2WYHIkmSJDXKiGYHIEkakPuBNZodhCRJktRIjsSQpGrqBO6JiLuAhV0b\nM3NS80KSJEmS6sskhiRV09RmByBJkiQ1mkkMSaqgzPxVs2OQJEmSGs0khqRB9+hHxq7wMeOBR1fw\nmNdOm7/C55EkSZJUXZVOYkz86qy6n2P28U4vlyRJkiRpKPDuJJIkSZIkqRJMYkiSJEmSpEqo9HQS\nSdLQUO/pfVfXtXRJkiRVhSMxJEmSJElSJZjEkCRJkiRJlWASQ5IkSZIkVYJJDEmSJEmSVAkmMSRJ\nkiRJUiWYxJAkSZIkSZVgEkOSJEmSJFWCSQxJkiRJklQJJjEkSZIkSVIlmMSQJEmSJEmVsHK9TxAR\nWwEnZ+b2EbEBcAGwBLgrMz9TvuZA4NPAImBqZl5d77gkSZIkSVK11HUkRkQcDZwDrFJuOh04LjPf\nA4yIiF0jYh3gcGBr4APA1yNiZD3jkiRJkiRJ1VPv6SR/Aj5c87w9M28sH/8ceD+wJXBTZi7OzPnA\nHGCzOsclSZIkSZIqpq5JjMycASyu2dRW8/gpYCwwBniyZvsCYPV6xiVJkiRJkqqn7mtidLOk5vEY\nYB4wnyKZ0X37kNDR0dHQ41R/1s3wYV1KkiRJraXRSYzZEfHuzPw1sBMwC/g9MDUiRgGjgY2Buxoc\nV6/a29tX+JiOjo4BHTdcTPzqrIacZ/bxk1b4mFavG2Y2pm4aZbjVpUkZSZIkafkancQ4CjinXLjz\nXmB6ZnZGxLeBmyimmxyXmQsbHJckSZIkSRri6p7EyMyHgG3Kx3OA7Xp4zXnAefWORZIkSZIkVVe9\n704iSZIkSZI0KExiSJIkSZKkSjCJIUmSJEmSKqHRC3tWzqMfGdv3i7oZDzy6gse8dtr8FT6PJEmS\nJEmtxJEYkiRJkiSpEkxiSJIkSZKkSjCJIUmSJEmSKsEkhiRJkiRJqgSTGJIkSZIkqRJMYkiSJEmS\npEowiSFJkiRJkirBJIYkSZIkSaoEkxiSJEmSJKkSVm52AJIkSZJUa+JFe9b9HLP3vqLu55A0+ByJ\nIUmSJEmSKsEkhiRJkiRJqgSTGJIkSZIkqRJMYkiSJEmSpEowiSFJkiRJkirBJIYkSZIkSaoEkxiS\nJEmSJKkSTGJIkiRJkqRKMIkhSZIkSZIqwSSGJEmSJEmqhJWbHYAkqXEiog34HrA58Bzwqcy8v2b/\nZOCzwCLgzsw8tCmBStIwZlssSQPnSAxJai27Aatk5jbAscDpXTsi4hXAScB7MvNdwKsiYpfmhClJ\nw5ptsSQNkEkMSWot2wLXAGTmLcDbavY9D2yTmc+Xz1emuEIoSRpctsWSNEBOJ1FlPfqRsSt8zHjg\n0RU85rXT5q/weaQhbCzwZM3zxRExIjOXZGYn8ARARBwOrJaZv2xGkJI0zNkWS9IAmcSQpNYyHxhT\n83xEZi7pelLO0z4V2BDYvcGxtYyOjo5mhzCoxjc7gEFk3Qxdw6xuKtsWD7QehmL9DcWYXo7hVDca\n2pr9nTGJIUmt5WZgF2B6RLwDuLPb/rOBZzNzt4ZH1kLa29ubHcKgWtERbkOZdTN0NapuGtQ5r2xb\nPJB66OjoWPHj7l3h06ywhv1/nzmrIadpWN0MJw2qm+Gm2e2xSQxJai0zgPdHxM3l8/3LVfBXAzqA\n/YEbI+J6oBP4r8z8WXNClaRhy7ZYkgbIJIYktZByrvUh3TbfV/PY3wuSVGe2xZI0cN6dRJIkSZIk\nVYJJDEmSJEmSVAkmMSRJkiRJUiWYxJAkSZIkSZVgEkOSJEmSJFWCSQxJkiRJklQJJjEkSZIkSVIl\nNOUe1BHRATxZPn0A+BpwAbAEuCszP9OMuCRJkiRJ0tDV8CRGRKwCkJmTarb9DDguM2+MiO9HxK6Z\n+bNGxyapWiZetGdDzjN77ysach5JkiRJy9eMkRibA6tFxC+AlYAvAhMz88Zy/8+B9wMmMSRJkiRJ\n0lLNWBPjGeAbmbkjcAhwMdBWs/8pYPUmxCVJkiRJkoawZozEuA/4E0BmzomIfwATa/aPAeY1Ia6m\n6ujoaHYI6oV1I78DkiRJ0tDQjCTGJ4FNgc9ExHhgLHBtRLwnM38F7ATMakJcTdXe3t7sEAbPzOFV\nfdaNGvUdMFkiSZIkLV8zkhjnAedHxI0UdyPZD/gHcG5EjATuBaY3IS5JkiRJkjSENTyJkZmLgL17\n2LVdg0ORJEmSJEkV0oyFPSVJkiRJklaYSQxJkiRJklQJJjEkSZIkSVIlmMSQJEmSJP3/9u4u1LKy\njAP4/9gMCsHURV8aRlDwKFHJTBdloaMJBlZ4o2AMmWVKSmAfFIUhMUWWaSWWXZiTNHSh1kUgSTQz\nXUyYhBZIyJMQUdTUzaD2CaNMF3sPTXE8esb9sdb294PDYa291nrfl3fv/4aHd60No6CIAQAAAIyC\nIgYAAAAwCooYAAAAwCgoYgAAAACjsGXZHQAAeKHZvnv/Qtq5byGtAMDiWIkBAAAAjIIiBgAAADAK\nihgAAADAKChiAAAAAKOgiAEAAACMgiIGAAAAMAp+YhUAAGDkDl26bdPnnJbk0CbPOfXuJzfdDsyS\nlRgAAADAKChiAAAAAKPgdhIAWFHbd+9fSDv3LaQVAAArMQAAAICRUMQAAAAARkERAwAAABgFRQwA\nAABgFBQxAAAAgFFQxAAAAABGQREDAAAAGIUty+4ADN32vZcspJ2Hd92zkHYAAADGykoMAAAAYBQU\nMQAAAIBRUMQAAAAARkERAwAAABgFRQwAAABgFBQxAAAAgFFQxAAAAABGQREDAAAAGAVFDAAAAGAU\ntiy7AwAAwDgcunTbps85LcmhzZ703gs33Q7wwmAlBgAAADAKihgAAADAKAzmdpKqWkvyrSRvTvLv\nJFd29++W26vF2b73krm38fCue+beBjBsz5a1VfWeJJ9LciTJnu6+YykdBVhhshjgxA1pJcbFSU7u\n7rOTfCbJLUvuD8Aqesasraot0+0LkuxMclVVvXwZnQRYcbIY4AQNqYjxjiT3J0l3P5jkLcvtDsBK\n2ihrz0zyWHc/2d1HkhxMcs7iuwiw8mQxwAkaUhFjW5Injtt+qqqG1D+AVbBR1v7/a39L8pJFdQzg\nBUQWA5ygtaNHjy67D0mSqro5yQPdfe90+w/d/ZpnOv6hhx4aRscBZmjHjh1r87z+RllbVW9McmN3\nXzTdviXJwe7+4UbXlMfAqpHFAMOwXh4P5sGeSX6e5N1J7q2qtyZ5ZKOD5/3lArCiNsraR5O8vqpe\nmuSfmSxfvunZLiiPATZNFgOcoCGtxDj2lOY3TXdd0d2/XWKXAFbOelmbZEeSF3f3HVV1UZIbkqwl\n+U53f3s5PQVYXbIY4MQNpogBAAAAsBEPzgQAAABGQREDAAAAGAVFDAAAAGAUhvTrJINQVecmuTvJ\nb6a7Tkny/e6+bZ1jDyS5elYPIK2q65K8ors/O4vrrZplzE1VnZ7kzvz3s3JVdz/2fK65ipY0N69K\nsjfJ1iSHk+zq7n88n2syHLJ42OTxcMljZk0eD5csHi5ZPF9WYqxvX3ef393nJ9mZ5BNVtW1ejVXV\nKVW1N8lH5tXGClno3CTZneTW7j4vyZeS3DjHtsZu0XPz6SR7uvvcJL9OcuUc22I5ZPGwyePhksfM\nmjweLlk8XLJ4TqzEWN/xv7O9LclTSc6qqhunr/0pya5jB1TVq5PcnuTkJKcmub67f1RVX8zkDfui\nJD/o7puq6pok70/ydJJfdvd1mVTmvpvkJ0nOmO/QRm/Rc/PxJE9ML7c1yb/mOLaxW+jcdPfHptc5\nKcnpSX4/3+GxBLJ42OTxcMljZk0eD5csHi5ZPCdWYqzv/KraX1X7knwvyUeTfCPJB7r7bUnuS3Jm\nkmO/T3tGkq9294VJrk5y7XT/ZdO/c5I8Pt13eZJru/vtSR6tqpO6+/Hu/mn+943O+hY9N4e7++mq\nqiRfSfL5+Q9xtBY6N0lSVVuSPJJJsO+f7/BYAlk8bPJ4uOQxsyaPh0sWD5csnhMrMda3r7vfd/yO\nqrrz2H1K3b1nuu9YsB5Kcn1VfWi6vXX6f1eSLyd5ZZIfT/d9MMknq+q1SR6IcN6shc9NVZ2X5LZM\n7itzz98zW/jcdPdTSd5QVe/M5Mth5+yHxRLJ4mGTx8Mlj5k1eTxcsni4ZPGcWInx3P25ql6XJFX1\nqaq6OJOq2Vom94bd1d2XJzmQZK2qtia5pLsvm94HdUVNHoTz4Uwe3HJeku1Jzl7GYFbM3OZmGtJf\nT/Ku7v7V4oc2evOcm29W1c5pO3/PZDkdq08WD5s8Hi55zKzJ4+GSxcMli2dAEeO5uzrJnpo8Pfas\nTJb/JJM33T1Jbq6qnyW5IMnLuvtIksNV9YvpOfd39x8zWd5zcLqs6K9JHlzwOFbRPObmL5nMzdcy\nqYLeVVUHqur2RQ5sBczzc3Nrkhum+76Q5JoFjovlkcXDJo+HSx4za/J4uGTxcMniGVg7evTosx8F\nAAAAsGRWYgAAAACjoIgBAAAAjIIiBgAAADAKihgAAADAKChiAAAAAKOgiAEAAACMgiIGAAAAMAqK\nGNNykS0AAAALSURBVAAAAMAo/AdwtAj5n309HAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11ed812d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, (axis1, axis2, axis3) = plt.subplots(1, 3, figsize=(15, 5))\n",
"\n",
"df_ = X_train['Survived'].groupby([X_train['Pclass'], X_train['person']])\n",
"\n",
"# Counts by Pclass\n",
"\n",
"N = 3\n",
"ind = np.arange(N) # the x locations for the groups\n",
"width = 0.25 # the total width of the bars\n",
"counts = df_.count()\n",
"\n",
"rects1 = axis1.bar(ind, counts[:, 'male_adult'].values, width, color=colors[0], lw=0.0)\n",
"rects2 = axis1.bar(ind + width, counts[:, 'female_adult'].values, width, color=colors[4], lw=0.0)\n",
"rects3 = axis1.bar(ind + width*2, counts[:, 'child'].values, width, color=colors[8], lw=0.0)\n",
"\n",
"axis1.set_ylim(0, 330)\n",
"axis1.set_ylabel('Count')\n",
"axis1.set_title('Counts by Pclass')\n",
"axis1.set_xticks(ind + width*1.5)\n",
"axis1.set_xticklabels(('Pclass1', 'Pclass2', 'Pclass3'))\n",
"\n",
"axis1.legend((rects1[0], rects2[0], rects3[0]), ('male_adult', 'female_adult', 'child'), loc=2)\n",
"\n",
"# Avg survived by Pclass\n",
"\n",
"N = 3\n",
"ind = np.arange(N) # the x locations for the groups\n",
"width = 0.25 # the total width of the bars\n",
"means = df_.mean()\n",
"\n",
"rects1 = axis2.bar(ind, means[:, 'male_adult'].values, width, color=colors[0], lw=0.0)\n",
"rects2 = axis2.bar(ind + width, means[:, 'female_adult'].values, width, color=colors[4], lw=0.0)\n",
"rects3 = axis2.bar(ind + width*2, means[:, 'child'].values, width, color=colors[8], lw=0.0)\n",
"\n",
"axis2.set_ylim(0, 1)\n",
"axis2.set_ylabel('mean(Survived)')\n",
"axis2.set_title('Average survived by Pclass')\n",
"axis2.set_xticks(ind + width*1.5)\n",
"axis2.set_xticklabels(('Pclass1', 'Pclass2', 'Pclass3'))\n",
"\n",
"axis2.legend((rects1[0], rects2[0], rects3[0]), ('male_adult', 'female_adult', 'child'), loc=1)\n",
"\n",
"# Avg died by Pclass\n",
"\n",
"N = 3\n",
"ind = np.arange(N) # the x locations for the groups\n",
"width = 0.25 # the total width of the bars\n",
"means = df_.mean()\n",
"\n",
"rects1 = axis3.bar(ind, 1-means[:, 'male_adult'].values, width, color=colors[0], lw=0.0)\n",
"rects2 = axis3.bar(ind + width, 1-means[:, 'female_adult'].values, width, color=colors[4], lw=0.0)\n",
"rects3 = axis3.bar(ind + width*2, 1-means[:, 'child'].values, width, color=colors[8], lw=0.0)\n",
"\n",
"axis3.set_ylim(0, 1)\n",
"axis3.set_ylabel('mean(Died)')\n",
"axis3.set_title('Average died by Pclass')\n",
"axis3.set_xticks(ind + width*1.5)\n",
"axis3.set_xticklabels(('Pclass1', 'Pclass2', 'Pclass3'))\n",
"\n",
"axis3.legend((rects1[0], rects2[0], rects3[0]), ('male_adult', 'female_adult', 'child'), loc=2)\n",
"\n",
"plt.tight_layout()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can see the low rate of male survival when comparing counts and averages for male adults in classes 2 and 3. Those classes held four times the number of men than class 1. However, they died at a much higher rate. In fact, almost all of the men outside class 1 died."
]
},
{
"cell_type": "code",
"execution_count": 194,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# create dummy variables for person column. \n",
"_feature = 'Pclass'\n",
"\n",
"# train\n",
"dummies = pd.get_dummies(X_train[_feature], prefix='class')\n",
"X_train = X_train.join(dummies)"
]
},
{
"cell_type": "code",
"execution_count": 195,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# drop class3 as it has the lower average of survived passengers\n",
"features = ['class_1', 'class_2']"
]
},
{
"cell_type": "code",
"execution_count": 196,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[('RandomForestClassifier', 0.67915672353975665),\n",
" ('LogisticRegression', 0.67915672353975665),\n",
" ('GaussianNB', 0.67915672353975665),\n",
" ('SVC', 0.66574890231070649),\n",
" ('KNeighborsClassifier', 0.64423553977658599)]"
]
},
"execution_count": 196,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X = DataFrame(X_train[features])\n",
"y = y_train\n",
"scores = check_classifiers(X, y)\n",
"scores"
]
},
{
"cell_type": "code",
"execution_count": 197,
"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>Features</th>\n",
" <th>Coefficient Estimate</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>class_1</td>\n",
" <td>1.598518</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>class_2</td>\n",
" <td>0.969553</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Features Coefficient Estimate\n",
"0 class_1 1.598518\n",
"1 class_2 0.969553"
]
},
"execution_count": 197,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# get Correlation Coefficient for each feature using Logistic Regression\n",
"coeff_df = DataFrame(X.columns)\n",
"coeff_df.columns = ['Features']\n",
"classifier = LogisticRegression()\n",
"coeff_df[\"Coefficient Estimate\"] = pd.Series(classifier.fit(X, y).coef_[0])\n",
"\n",
"# preview\n",
"coeff_df"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"Both 'class 1' and 'class 2' features are strong predictors but not as strong as [Person](https://gist.github.com/vinceallenvince/9b1cd6bfbf5b8ad49e696715a8c8f0ad)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"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.12"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment