{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "8ca352d7-08aa-36b4-fb2d-3c9854a8d86a"
      },
      "source": [
        "\u8f7d\u5165\u6570\u636e\u6e05\u6d17\u548c\u5206\u6790\u9700\u8981\u7528\u5230\u7684\u5e93"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "2df621e0-e03c-7aaa-6e08-40ed1d7dfecc"
      },
      "outputs": [],
      "source": [
        "import pandas as pd\n",
        "import numpy as np\n",
        "import seaborn as sns\n",
        "import matplotlib.pyplot as plt\n",
        "from sklearn.svm import SVC, LinearSVC\n",
        "from sklearn.linear_model import LinearRegression\n",
        "% matplotlib inline"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "d56d5e71-4277-7a74-5306-7d5af4c7f263"
      },
      "outputs": [],
      "source": [
        "#\u5bfc\u5165\u6570\u636e\u96c6\n",
        "train_df = pd.read_csv('../input/train.csv')\n",
        "test_df = pd.read_csv('../input/test.csv')\n",
        "combine = [train_df, test_df]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "02250c81-7e15-c195-2e86-5adbd15c9d30"
      },
      "outputs": [],
      "source": [
        "#\u67e5\u770b\u5b57\u6bb5\n",
        "train_df.columns"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "54452e23-f4d3-919f-c734-80a35dc9ae08"
      },
      "outputs": [],
      "source": [
        "#\u67e5\u770b\u5404\u5b57\u6bb5\u7684\u4fe1\u606f\n",
        "train_df.info()\n",
        "print('_'*40)\n",
        "test_df.info()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "6bbea362-77b6-5385-f0a8-fb53afd088b7"
      },
      "outputs": [],
      "source": [
        "#\u53ef\u4ee5\u770b\u5230Alley\u3001FireplaceQu\u3001PoolQC\u3001Fence\u3001MiscFeature\u7b49\u5b57\u6bb5\u6709\u592a\u591a\u7684\u7f3a\u635f\u503c\u4e86\uff0c\u5bf9\u4e8e\u6784\u5efa\u6a21\u578b\u4e0d\u4f1a\u6709\u592a\u591a\u7684\u5e2e\u52a9\uff0c\u56e0\u6b64drop\u6389\u8fd9\u4e9b\u6570\u636e\n",
        "print(\"Before\", train_df.shape, test_df.shape, combine[0].shape, combine[1].shape)\n",
        "#\u5254\u9664\u65e0\u6548\u5b57\u6bb5\n",
        "train_df = train_df.drop(['Alley', 'PoolQC','Fence','MiscFeature','FireplaceQu','Utilities', 'Street','LandSlope'], axis=1)\n",
        "test_df = test_df.drop(['Alley', 'PoolQC','Fence','MiscFeature','FireplaceQu','Utilities', 'Street','LandSlope'], axis=1)\n",
        "combine = [train_df, test_df]\n",
        "\n",
        "\"After\", train_df.shape, test_df.shape, combine[0].shape, combine[1].shape"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "f4e257f0-1dfd-0774-b346-f2a1b2a068cc"
      },
      "source": [
        "### Relationship with categorical features"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "36766737-f1a3-fe40-dbec-63c31be4d5e0"
      },
      "outputs": [],
      "source": [
        "train_df.describe(include=['O'])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "8dd97341-7b91-ea51-3411-49ea4efaf4cd"
      },
      "outputs": [],
      "source": [
        "#MSZoning\u4e0esaleprice\u7684\u5173\u7cfb\n",
        "train_df[['MSZoning', 'SalePrice']].groupby(['MSZoning'], as_index=False).mean().sort_values(by='SalePrice', ascending=False)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "db040973-0adc-e126-e657-1d8934b5a5c8"
      },
      "outputs": [],
      "source": [
        "#LandContour\u4e0esaleprice\u7684\u5173\u7cfb\n",
        "train_df[['LandContour', 'SalePrice']].groupby(['LandContour'], as_index=False).mean().sort_values(by='SalePrice', ascending=False)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "e2b7a1ce-9eb7-4a08-5f80-c2c04e212ea7"
      },
      "outputs": [],
      "source": [
        "#HouseStyle\u4e0esaleprice\u7684\u5173\u7cfb\n",
        "train_df[['HouseStyle', 'SalePrice']].groupby(['HouseStyle'], as_index=False).mean().sort_values(by='SalePrice', ascending=False)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "d859f151-e2d2-ed61-8f3a-6d42f95f02e6"
      },
      "outputs": [],
      "source": [
        "#RoofStyle\u4e0esaleprice\u7684\u5173\u7cfb\n",
        "train_df[['RoofStyle', 'SalePrice']].groupby(['RoofStyle'], as_index=False).mean().sort_values(by='SalePrice', ascending=False)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "353def35-0f26-998d-b9a4-7356f95e80ad"
      },
      "outputs": [],
      "source": [
        "#ExterQual\u4e0esaleprice\u7684\u5173\u7cfb\n",
        "train_df[['ExterQual', 'SalePrice']].groupby(['ExterQual'], as_index=False).mean().sort_values(by='SalePrice', ascending=False)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "7647e8e6-9fa3-9b2e-03ee-d60ae6ec151c"
      },
      "outputs": [],
      "source": [
        "#Heating\u4e0esaleprice\u7684\u5173\u7cfb\n",
        "train_df[['Heating', 'SalePrice']].groupby(['Heating'], as_index=False).mean().sort_values(by='SalePrice', ascending=False)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "8f12c58e-b751-9305-7bc9-356b602b9583"
      },
      "outputs": [],
      "source": [
        "#CentralAir\u4e0esaleprice\u7684\u5173\u7cfb\n",
        "train_df[['CentralAir', 'SalePrice']].groupby(['CentralAir'], as_index=False).mean().sort_values(by='SalePrice', ascending=False)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "951017b2-555f-9f9b-edb3-34fc27f3bdc2"
      },
      "outputs": [],
      "source": [
        "#KitchenQual\u4e0eSaleprice\u7684\u5173\u7cfb\n",
        "train_df[['KitchenQual', 'SalePrice']].groupby(['KitchenQual'], as_index=False).mean().sort_values(by='SalePrice', ascending=False)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "bdf14e60-93dd-6076-de4f-00362d8df062"
      },
      "outputs": [],
      "source": [
        "#SaleCondition\u4e0esaleprice\u7684\u5173\u7cfb\n",
        "train_df[['SaleCondition', 'SalePrice']].groupby(['SaleCondition'], as_index=False).mean().sort_values(by='SalePrice', ascending=False)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "b31bc890-46bf-618c-e668-17879763ad23"
      },
      "source": [
        "\u901a\u8fc7\u5206\u6790\u53ef\u4ee5\u770b\u5230\u4e0a\u9762\u7684\u8fd9\u4e9b\u5b57\u6bb5\u4e0esaleprice\u5177\u6709\u660e\u663e\u7684\u5173\u7cfb\uff0c\u53ef\u4ee5\u5c06\u8fd9\u4e9b\u5b57\u6bb5\u8bbe\u4e3a\u7279\u5f81\u5411\u91cf\n",
        "\u5e76\u5c06\u4e0a\u9762\u7684\u5b57\u6bb5\u6570\u503c\u5316"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "26d0fddc-cb09-af7d-9f03-a07233fa6c9e"
      },
      "outputs": [],
      "source": [
        "#box plot overallqual/saleprice\n",
        "train_df['KitchenQual']=train_df['KitchenQual'].map({'TA':0,'Gd':1,'Ex':2,'Fa':3}).astype(int)\n",
        "test_df['KitchenQual']=test_df['KitchenQual'].map({'TA':0,'Gd':1,'Ex':2,'Fa':3,np.NaN:4}).astype(int)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "590da500-3e48-7059-4f0b-1ef1801dd1db"
      },
      "outputs": [],
      "source": [
        "train_df['MSZoning']=train_df['MSZoning'].map({'FV':0,'RL':1,'RH':2,'RM':3,'C (all)':4}).astype(int)\n",
        "\n",
        "test_df['MSZoning']=test_df['MSZoning'].map({'FV':0,'RL':1,'RH':2,'RM':3,'C (all)':4,np.NaN:5}).astype(int)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "ae050133-0603-c643-cb21-281cb8f26dcf"
      },
      "outputs": [],
      "source": [
        "for dataset in combine:\n",
        "    dataset['LandContour'] = dataset['LandContour'].map( {'HLS': 0, 'Low': 1, 'Lvl': 2,'Bnk':3} ).astype(int)\n",
        "    dataset['HouseStyle'] = dataset['HouseStyle'].map( {'2.5Fin': 0, '2Story': 1, '1Story': 2,'SLvl':3,'2.5Unf':4,'1.5Fin':5,'SFoyer':6,'1.5Unf':7} ).astype(int)\n",
        "    dataset['RoofStyle'] = dataset['RoofStyle'].map( {'Shed': 0, 'Hip': 1, 'Flat': 2,'Mansard':3,'Gable':4,'Gambrel':5} ).astype(int)\n",
        "    dataset['ExterQual'] = dataset['ExterQual'].map( {'Ex': 0, 'Gd': 1, 'TA': 2,'Fa':3} ).astype(int)\n",
        "    dataset['Heating'] = dataset['Heating'].map( {'GasA': 0, 'GasW': 1, 'OthW': 2,'Wall':3,'Grav':4,'Floor':5} ).astype(int)\n",
        "    dataset['CentralAir'] = dataset['CentralAir'].map( {'Y': 0, 'N': 1} ).astype(int)\n",
        "    dataset['SaleCondition'] = dataset['SaleCondition'].map( {'Partial': 0, 'Normal': 1, 'Alloca': 2,'Family':3,'Abnorml':4,'AdjLand':5} ).astype(int)\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "f65b4d02-66ba-2f09-4441-263ebcf6c75f"
      },
      "outputs": [],
      "source": [
        "#\u67e5\u770bsaleprice\u7684\u5206\u5e03\u60c5\u51b5\n",
        "sns.distplot(train_df['SalePrice']);"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "b75e5f62-307b-f5f4-79ac-38815a7a6da4"
      },
      "source": [
        "### Relationship with categorical features"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "06f8d02c-d779-f8fd-7f48-ba3c5166eda8"
      },
      "source": [
        "#### Correlation matrix (heatmap style)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "4eb7a6ef-adf5-6abf-947d-c95afdc477b8"
      },
      "outputs": [],
      "source": [
        "#correlation matrix\n",
        "var = 'MSSubClass'\n",
        "data = pd.concat([train_df['SalePrice'], train_df[var]], axis=1)\n",
        "f, ax = plt.subplots(figsize=(8, 6))\n",
        "fig = sns.boxplot(x=var, y=\"SalePrice\", data=data)\n",
        "fig.axis(ymin=0, ymax=800000);"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "bc33db9e-9ee3-6cfe-7643-a2aff5a9234d"
      },
      "outputs": [],
      "source": [
        "#TotalBsmtSF Vs SalePrice \u5448\u73b0\u7ebf\u6027\u5173\u7cfb\n",
        "var = 'TotalBsmtSF'\n",
        "data = pd.concat([train_df['SalePrice'], train_df[var]], axis=1)\n",
        "data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "26e18a67-a75a-f6cd-a5ed-7e303576ba75"
      },
      "outputs": [],
      "source": [
        "#box plot overallqual/saleprice\n",
        "var = 'OverallQual'\n",
        "data = pd.concat([train_df['SalePrice'], train_df[var]], axis=1)\n",
        "f, ax = plt.subplots(figsize=(8, 6))\n",
        "fig = sns.boxplot(x=var, y=\"SalePrice\", data=data)\n",
        "fig.axis(ymin=0, ymax=800000);"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "2cd4af35-4a12-cfe4-6791-c5c2c9f68206"
      },
      "outputs": [],
      "source": [
        "# YearBuilt vs saleprice\n",
        "var = 'YearBuilt'\n",
        "data = pd.concat([train_df['SalePrice'], train_df[var]], axis=1)\n",
        "f, ax = plt.subplots(figsize=(8, 4))\n",
        "fig = sns.boxplot(x=var, y=\"SalePrice\", data=data)\n",
        "fig.axis(ymin=0, ymax=800000);\n",
        "plt.xticks(rotation=90);"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "7df84401-1679-3030-c754-1c2e29fb7e01"
      },
      "outputs": [],
      "source": [
        "#FullBath vs saleprice\n",
        "var = 'FullBath'\n",
        "data = pd.concat([train_df['SalePrice'], train_df[var]], axis=1)\n",
        "f, ax = plt.subplots(figsize=(8, 6))\n",
        "fig = sns.boxplot(x=var, y=\"SalePrice\", data=data)\n",
        "fig.axis(ymin=0, ymax=800000);\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "5a8db5de-d3f9-9a28-f220-bb05d51c53d0"
      },
      "outputs": [],
      "source": [
        "#scatterplot\n",
        "sns.set()\n",
        "cols = ['SalePrice', 'OverallQual',  'TotalBsmtSF',  'YearBuilt','MSSubClass']\n",
        "sns.pairplot(train_df[cols], size = 1.5)\n",
        "plt.show();"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "e09c450c-0ea7-a56f-632b-3140a7962ec3"
      },
      "outputs": [],
      "source": [
        "#\u5728\u6d4b\u8bd5\u96c6\u4e2d'TotalBsmtSF'\u542b\u6709na\u503c\uff0c\u586b\u5145\u62100\n",
        "test_df['TotalBsmtSF']=test_df['TotalBsmtSF'].fillna('0')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "ca2f89e7-1c16-c3ae-6fe0-ab4eaf7e52a1"
      },
      "outputs": [],
      "source": [
        "#missing data\n",
        "train=train_df[['KitchenQual','MSZoning','LandContour','HouseStyle','RoofStyle','ExterQual',\n",
        "                'Heating','CentralAir','SaleCondition','MSSubClass','TotalBsmtSF','Fireplaces','YearBuilt','OverallQual','SalePrice']]\n",
        "test=test_df[['KitchenQual','MSZoning','LandContour','HouseStyle','RoofStyle','ExterQual',\n",
        "                'Heating','CentralAir','SaleCondition','MSSubClass','TotalBsmtSF','Fireplaces','YearBuilt','OverallQual']]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "f43f72c5-5457-1f47-e8ef-502db4355086"
      },
      "outputs": [],
      "source": [
        "#\u67e5\u770b\u5904\u7406\u540e\u7684\u8bad\u7ec3\u96c6\u548c\u6d4b\u8bd5\u96c6\n",
        "train.head()\n",
        "test.head()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "06852f05-22e9-6ea3-ae37-c08f83ed401f"
      },
      "source": [
        "### Univariate analysis"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "49a133fb-b713-45bd-ca42-c1ca0eb4d3f6"
      },
      "outputs": [],
      "source": [
        "#\u67e5\u770b\u6d4b\u8bd5\u96c6\u4e0e\u8bad\u7ec3\u96c6\u7684shape\n",
        "X_train = train.drop('SalePrice', axis=1)\n",
        "Y_train = train['SalePrice']\n",
        "X_test  = test\n",
        "X_train.shape, Y_train.shape, X_test.shape"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "ae1b038a-9016-1412-bfb8-e2a27022a02f"
      },
      "source": [
        "### \u901a\u8fc7\u7ebf\u6027\u56de\u5f52\u9884\u6d4bsaleprice"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "a03b5ee8-0701-10f0-2d4c-06fcaf1fada5"
      },
      "outputs": [],
      "source": [
        "#\u901a\u8fc7\u7ebf\u6027\u56de\u5f52\u5efa\u6a21\n",
        "linReg = LinearRegression()\n",
        "linReg.fit(X_train, Y_train)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "06dfd6a2-f613-01e8-b7d0-2672dfd41db8"
      },
      "outputs": [],
      "source": [
        "print(X_test.info())\n",
        "\n",
        "linReg.score(X_train, Y_train)\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "_cell_guid": "f1e6dc70-cd42-5b93-6835-9a54c060409f"
      },
      "outputs": [],
      "source": [
        "#\u968f\u673a\u68ee\u6797\u9884\u6d4b\n",
        "random_forest = RandomForestClassifier(n_estimators=100)\n",
        "random_forest.fit(X_train, Y_train)\n",
        "Y_pred = random_forest.predict(X_test)\n",
        "random_forest.score(X_train, Y_train)\n",
        "acc_random_forest = round(random_forest.score(X_train, Y_train) * 100, 2)\n",
        "acc_random_forest"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "92018f8f-4782-5a0c-9fee-f657b6331ffd"
      },
      "source": [
        "# Conclusion"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "_cell_guid": "95c93455-85f4-e0a4-3d3a-8365bcf750e0"
      },
      "source": [
        "\u8fd9\u662f\u7b2c\u4e00\u6b21\u5728Kaggle\u4e0a\u6784\u5efa\u6a21\u578b\u9884\u6d4b\uff0c\u9884\u6d4b\u7684\u51c6\u786e\u5ea6\u8fbe\u523073.3%\uff0c\u5e0c\u671b\u4ee5\u540e\u518d\u63a5\u518d\u52b1\uff01"
      ]
    }
  ],
  "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
}