{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "fa4e93af-e6ed-a472-55c0-34cad364be31"
      },
      "source": [
        "# Initialize"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "2d639705-aa24-41b3-efba-7d4dcad26ef9"
      },
      "outputs": [],
      "source": [
        "import pandas as pd\n",
        "import numpy as np"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "678246bc-93a1-40bc-aff3-ecdbde9b457a"
      },
      "outputs": [],
      "source": [
        "data_train = pd.read_csv('../input/train.csv')\n",
        "data_test = pd.read_csv('../input/test.csv')\n",
        "data_train.info()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "49bac341-3052-77df-1ec0-13db72fb53dd"
      },
      "source": [
        "## Fix missing value"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "0cfcddec-e8fc-a5aa-c269-a16c66c2eba0"
      },
      "outputs": [],
      "source": [
        "data_x = data_train[['Pclass', 'Age', 'Sex', 'SibSp', 'Parch', 'Fare', 'Embarked']]\n",
        "data_y = data_train['Survived']\n",
        "age_mean = data_x['Age'].dropna().median()\n",
        "fare_mean = data_x['Fare'].dropna().median()\n",
        "data_x['Age'].fillna(age_mean, inplace=True)\n",
        "data_x['Fare'].fillna(fare_mean, inplace=True)\n",
        "data_x['Embarked'].fillna('S', inplace=True)\n",
        "for i in range(1, 4):\n",
        "    data_x.loc[data_x.Pclass == i, 'Pclass'] = str(i)\n",
        "data_x.head()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "c30b427a-02b0-f52a-e02b-40170f20730b"
      },
      "source": [
        "## Split dataset\n",
        "* 75% for training\n",
        "* 25% for testing"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "3e47222a-c4a3-e5a2-76e1-663da31bc0ed"
      },
      "outputs": [],
      "source": [
        "from sklearn.model_selection import train_test_split\n",
        "x_train, x_test, y_train, y_test = train_test_split(data_x, data_y, test_size=0.25, random_state=33)\n",
        "y_train.value_counts()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "c47b8530-7bc2-ca67-d2b6-726dd48a7715"
      },
      "source": [
        "# Core algorithms\n",
        "## Feature extraction"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "b4d43f27-9384-baa7-450f-394d3690934d"
      },
      "outputs": [],
      "source": [
        "from sklearn.feature_extraction import DictVectorizer\n",
        "vec = DictVectorizer(sparse=False)\n",
        "x_train = vec.fit_transform(x_train.to_dict(orient='record'))\n",
        "x_test = vec.transform(x_test.to_dict(orient='record'))\n",
        "vec.get_feature_names()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "864c0677-8d36-2e78-1cee-1f5b1420e284"
      },
      "source": [
        "## Decision tree"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "8a974103-7ee2-b965-5d6a-109fb92d37aa"
      },
      "outputs": [],
      "source": [
        "from sklearn.tree import DecisionTreeClassifier\n",
        "dtc = DecisionTreeClassifier()\n",
        "dtc.fit(x_train, y_train)\n",
        "dtc_y_predict = dtc.predict(x_test)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "f6fff3b6-d9b2-eae1-26c2-1a25cd7ceeb3"
      },
      "source": [
        "# Validation"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "82260a58-3d82-4394-151e-50a425f2a94e",
        "collapsed": true
      },
      "outputs": [],
      "source": [
        "from sklearn.metrics import classification_report"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "73301159-e32d-3c3c-5450-4e57442f6d5c"
      },
      "source": [
        "## Decision tree"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "3aaac709-81ad-45e4-d81c-8baeababb5ab"
      },
      "outputs": [],
      "source": [
        "dtc.score(x_test, y_test)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "68cc5fd5-3bd1-8740-f1b5-a3101a3392d4"
      },
      "outputs": [],
      "source": [
        "print(classification_report(y_test, dtc_y_predict, target_names=['died', 'surived']))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "393f2d9a-a850-3b45-76d5-fc1d9713ef94",
        "collapsed": true
      },
      "source": [
        "# Run"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "4e299db2-d7b8-9b51-cdca-d8f8a1603b84"
      },
      "outputs": [],
      "source": [
        "run_x = data_test[['Pclass', 'Age', 'Sex', 'SibSp', 'Parch', 'Fare', 'Embarked']]\n",
        "run_x['Age'].fillna(age_mean, inplace=True)\n",
        "run_x['Fare'].fillna(fare_mean, inplace=True)\n",
        "for i in range(1, 4):\n",
        "    run_x.loc[run_x.Pclass == i, 'Pclass'] = str(i)\n",
        "run_x = vec.transform(run_x.to_dict(orient='record'))\n",
        "run_y_predict = dtc.predict(run_x)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "35d5b06b-3f85-9221-33d8-c0eeede964ba"
      },
      "outputs": [],
      "source": [
        "pd.DataFrame({'PassengerId': data_test.PassengerId, 'Survived': run_y_predict}).to_csv('gender_submission_1.csv', index =False)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "f65f5505-cc21-5242-8035-e9425c8ed0b9",
        "collapsed": true
      },
      "outputs": [],
      "source": [
        ""
      ]
    }
  ],
  "metadata": {
    "_change_revision": 0,
    "_is_fork": false,
    "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.0"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}