Created
December 24, 2019 05:40
-
-
Save sanjaysheel/edd97408cbe228ab99a47eb30e40d681 to your computer and use it in GitHub Desktop.
Created on Cognitive Class Labs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
" <a href=\"https://www.bigdatauniversity.com\"><img src = \"https://ibm.box.com/shared/static/ugcqz6ohbvff804xp84y4kqnvvk3bq1g.png\" width = 300, align = \"center\"></a>\n", | |
"\n", | |
"<h1 align=center><font size = 5>Data Analysis with Python</font></h1>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# House Sales in King County, USA" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This dataset contains house sale prices for King County, which includes Seattle. It includes homes sold between May 2014 and May 2015." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<b>id</b> :a notation for a house\n", | |
"\n", | |
"<b> date</b>: Date house was sold\n", | |
"\n", | |
"\n", | |
"<b>price</b>: Price is prediction target\n", | |
"\n", | |
"\n", | |
"<b>bedrooms</b>: Number of Bedrooms/House\n", | |
"\n", | |
"\n", | |
"<b>bathrooms</b>: Number of bathrooms/bedrooms\n", | |
"\n", | |
"<b>sqft_living</b>: square footage of the home\n", | |
"\n", | |
"<b>sqft_lot</b>: square footage of the lot\n", | |
"\n", | |
"\n", | |
"<b>floors</b> :Total floors (levels) in house\n", | |
"\n", | |
"\n", | |
"<b>waterfront</b> :House which has a view to a waterfront\n", | |
"\n", | |
"\n", | |
"<b>view</b>: Has been viewed\n", | |
"\n", | |
"\n", | |
"<b>condition</b> :How good the condition is Overall\n", | |
"\n", | |
"<b>grade</b>: overall grade given to the housing unit, based on King County grading system\n", | |
"\n", | |
"\n", | |
"<b>sqft_above</b> :square footage of house apart from basement\n", | |
"\n", | |
"\n", | |
"<b>sqft_basement</b>: square footage of the basement\n", | |
"\n", | |
"<b>yr_built</b> :Built Year\n", | |
"\n", | |
"\n", | |
"<b>yr_renovated</b> :Year when house was renovated\n", | |
"\n", | |
"<b>zipcode</b>:zip code\n", | |
"\n", | |
"\n", | |
"<b>lat</b>: Latitude coordinate\n", | |
"\n", | |
"<b>long</b>: Longitude coordinate\n", | |
"\n", | |
"<b>sqft_living15</b> :Living room area in 2015(implies-- some renovations) This might or might not have affected the lotsize area\n", | |
"\n", | |
"\n", | |
"<b>sqft_lot15</b> :lotSize area in 2015(implies-- some renovations)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"You will require the following libraries " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import pandas as pd\n", | |
"import matplotlib.pyplot as plt\n", | |
"import numpy as np\n", | |
"import seaborn as sns\n", | |
"from sklearn.pipeline import Pipeline\n", | |
"from sklearn.preprocessing import StandardScaler,PolynomialFeatures\n", | |
"%matplotlib inline" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# 1.0 Importing the Data " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
" Load the csv: " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"file_name='https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DA0101EN/coursera/project/kc_house_data_NaN.csv'\n", | |
"df=pd.read_csv(file_name)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"we use the method <code>head</code> to display the first 5 columns of the dataframe." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>Unnamed: 0</th>\n", | |
" <th>id</th>\n", | |
" <th>date</th>\n", | |
" <th>price</th>\n", | |
" <th>bedrooms</th>\n", | |
" <th>bathrooms</th>\n", | |
" <th>sqft_living</th>\n", | |
" <th>sqft_lot</th>\n", | |
" <th>floors</th>\n", | |
" <th>waterfront</th>\n", | |
" <th>...</th>\n", | |
" <th>grade</th>\n", | |
" <th>sqft_above</th>\n", | |
" <th>sqft_basement</th>\n", | |
" <th>yr_built</th>\n", | |
" <th>yr_renovated</th>\n", | |
" <th>zipcode</th>\n", | |
" <th>lat</th>\n", | |
" <th>long</th>\n", | |
" <th>sqft_living15</th>\n", | |
" <th>sqft_lot15</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>0</td>\n", | |
" <td>7129300520</td>\n", | |
" <td>20141013T000000</td>\n", | |
" <td>221900.0</td>\n", | |
" <td>3.0</td>\n", | |
" <td>1.00</td>\n", | |
" <td>1180</td>\n", | |
" <td>5650</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0</td>\n", | |
" <td>...</td>\n", | |
" <td>7</td>\n", | |
" <td>1180</td>\n", | |
" <td>0</td>\n", | |
" <td>1955</td>\n", | |
" <td>0</td>\n", | |
" <td>98178</td>\n", | |
" <td>47.5112</td>\n", | |
" <td>-122.257</td>\n", | |
" <td>1340</td>\n", | |
" <td>5650</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>1</td>\n", | |
" <td>6414100192</td>\n", | |
" <td>20141209T000000</td>\n", | |
" <td>538000.0</td>\n", | |
" <td>3.0</td>\n", | |
" <td>2.25</td>\n", | |
" <td>2570</td>\n", | |
" <td>7242</td>\n", | |
" <td>2.0</td>\n", | |
" <td>0</td>\n", | |
" <td>...</td>\n", | |
" <td>7</td>\n", | |
" <td>2170</td>\n", | |
" <td>400</td>\n", | |
" <td>1951</td>\n", | |
" <td>1991</td>\n", | |
" <td>98125</td>\n", | |
" <td>47.7210</td>\n", | |
" <td>-122.319</td>\n", | |
" <td>1690</td>\n", | |
" <td>7639</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>2</td>\n", | |
" <td>5631500400</td>\n", | |
" <td>20150225T000000</td>\n", | |
" <td>180000.0</td>\n", | |
" <td>2.0</td>\n", | |
" <td>1.00</td>\n", | |
" <td>770</td>\n", | |
" <td>10000</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0</td>\n", | |
" <td>...</td>\n", | |
" <td>6</td>\n", | |
" <td>770</td>\n", | |
" <td>0</td>\n", | |
" <td>1933</td>\n", | |
" <td>0</td>\n", | |
" <td>98028</td>\n", | |
" <td>47.7379</td>\n", | |
" <td>-122.233</td>\n", | |
" <td>2720</td>\n", | |
" <td>8062</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>3</td>\n", | |
" <td>2487200875</td>\n", | |
" <td>20141209T000000</td>\n", | |
" <td>604000.0</td>\n", | |
" <td>4.0</td>\n", | |
" <td>3.00</td>\n", | |
" <td>1960</td>\n", | |
" <td>5000</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0</td>\n", | |
" <td>...</td>\n", | |
" <td>7</td>\n", | |
" <td>1050</td>\n", | |
" <td>910</td>\n", | |
" <td>1965</td>\n", | |
" <td>0</td>\n", | |
" <td>98136</td>\n", | |
" <td>47.5208</td>\n", | |
" <td>-122.393</td>\n", | |
" <td>1360</td>\n", | |
" <td>5000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>4</td>\n", | |
" <td>1954400510</td>\n", | |
" <td>20150218T000000</td>\n", | |
" <td>510000.0</td>\n", | |
" <td>3.0</td>\n", | |
" <td>2.00</td>\n", | |
" <td>1680</td>\n", | |
" <td>8080</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0</td>\n", | |
" <td>...</td>\n", | |
" <td>8</td>\n", | |
" <td>1680</td>\n", | |
" <td>0</td>\n", | |
" <td>1987</td>\n", | |
" <td>0</td>\n", | |
" <td>98074</td>\n", | |
" <td>47.6168</td>\n", | |
" <td>-122.045</td>\n", | |
" <td>1800</td>\n", | |
" <td>7503</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>5 rows × 22 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" Unnamed: 0 id date price bedrooms bathrooms \\\n", | |
"0 0 7129300520 20141013T000000 221900.0 3.0 1.00 \n", | |
"1 1 6414100192 20141209T000000 538000.0 3.0 2.25 \n", | |
"2 2 5631500400 20150225T000000 180000.0 2.0 1.00 \n", | |
"3 3 2487200875 20141209T000000 604000.0 4.0 3.00 \n", | |
"4 4 1954400510 20150218T000000 510000.0 3.0 2.00 \n", | |
"\n", | |
" sqft_living sqft_lot floors waterfront ... grade sqft_above \\\n", | |
"0 1180 5650 1.0 0 ... 7 1180 \n", | |
"1 2570 7242 2.0 0 ... 7 2170 \n", | |
"2 770 10000 1.0 0 ... 6 770 \n", | |
"3 1960 5000 1.0 0 ... 7 1050 \n", | |
"4 1680 8080 1.0 0 ... 8 1680 \n", | |
"\n", | |
" sqft_basement yr_built yr_renovated zipcode lat long \\\n", | |
"0 0 1955 0 98178 47.5112 -122.257 \n", | |
"1 400 1951 1991 98125 47.7210 -122.319 \n", | |
"2 0 1933 0 98028 47.7379 -122.233 \n", | |
"3 910 1965 0 98136 47.5208 -122.393 \n", | |
"4 0 1987 0 98074 47.6168 -122.045 \n", | |
"\n", | |
" sqft_living15 sqft_lot15 \n", | |
"0 1340 5650 \n", | |
"1 1690 7639 \n", | |
"2 2720 8062 \n", | |
"3 1360 5000 \n", | |
"4 1800 7503 \n", | |
"\n", | |
"[5 rows x 22 columns]" | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df.head()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"#### Question 1 \n", | |
"Display the data types of each column using the attribute dtype, then take a screenshot and submit it, include your code in the image. " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Unnamed: 0 int64\n", | |
"id int64\n", | |
"date object\n", | |
"price float64\n", | |
"bedrooms float64\n", | |
"bathrooms float64\n", | |
"sqft_living int64\n", | |
"sqft_lot int64\n", | |
"floors float64\n", | |
"waterfront int64\n", | |
"view int64\n", | |
"condition int64\n", | |
"grade int64\n", | |
"sqft_above int64\n", | |
"sqft_basement int64\n", | |
"yr_built int64\n", | |
"yr_renovated int64\n", | |
"zipcode int64\n", | |
"lat float64\n", | |
"long float64\n", | |
"sqft_living15 int64\n", | |
"sqft_lot15 int64\n", | |
"dtype: object" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df.dtypes" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We use the method describe to obtain a statistical summary of the dataframe." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>Unnamed: 0</th>\n", | |
" <th>id</th>\n", | |
" <th>price</th>\n", | |
" <th>bedrooms</th>\n", | |
" <th>bathrooms</th>\n", | |
" <th>sqft_living</th>\n", | |
" <th>sqft_lot</th>\n", | |
" <th>floors</th>\n", | |
" <th>waterfront</th>\n", | |
" <th>view</th>\n", | |
" <th>...</th>\n", | |
" <th>grade</th>\n", | |
" <th>sqft_above</th>\n", | |
" <th>sqft_basement</th>\n", | |
" <th>yr_built</th>\n", | |
" <th>yr_renovated</th>\n", | |
" <th>zipcode</th>\n", | |
" <th>lat</th>\n", | |
" <th>long</th>\n", | |
" <th>sqft_living15</th>\n", | |
" <th>sqft_lot15</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>count</th>\n", | |
" <td>21613.00000</td>\n", | |
" <td>2.161300e+04</td>\n", | |
" <td>2.161300e+04</td>\n", | |
" <td>21600.000000</td>\n", | |
" <td>21603.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>2.161300e+04</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>...</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>mean</th>\n", | |
" <td>10806.00000</td>\n", | |
" <td>4.580302e+09</td>\n", | |
" <td>5.400881e+05</td>\n", | |
" <td>3.372870</td>\n", | |
" <td>2.115736</td>\n", | |
" <td>2079.899736</td>\n", | |
" <td>1.510697e+04</td>\n", | |
" <td>1.494309</td>\n", | |
" <td>0.007542</td>\n", | |
" <td>0.234303</td>\n", | |
" <td>...</td>\n", | |
" <td>7.656873</td>\n", | |
" <td>1788.390691</td>\n", | |
" <td>291.509045</td>\n", | |
" <td>1971.005136</td>\n", | |
" <td>84.402258</td>\n", | |
" <td>98077.939805</td>\n", | |
" <td>47.560053</td>\n", | |
" <td>-122.213896</td>\n", | |
" <td>1986.552492</td>\n", | |
" <td>12768.455652</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>std</th>\n", | |
" <td>6239.28002</td>\n", | |
" <td>2.876566e+09</td>\n", | |
" <td>3.671272e+05</td>\n", | |
" <td>0.926657</td>\n", | |
" <td>0.768996</td>\n", | |
" <td>918.440897</td>\n", | |
" <td>4.142051e+04</td>\n", | |
" <td>0.539989</td>\n", | |
" <td>0.086517</td>\n", | |
" <td>0.766318</td>\n", | |
" <td>...</td>\n", | |
" <td>1.175459</td>\n", | |
" <td>828.090978</td>\n", | |
" <td>442.575043</td>\n", | |
" <td>29.373411</td>\n", | |
" <td>401.679240</td>\n", | |
" <td>53.505026</td>\n", | |
" <td>0.138564</td>\n", | |
" <td>0.140828</td>\n", | |
" <td>685.391304</td>\n", | |
" <td>27304.179631</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>min</th>\n", | |
" <td>0.00000</td>\n", | |
" <td>1.000102e+06</td>\n", | |
" <td>7.500000e+04</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.500000</td>\n", | |
" <td>290.000000</td>\n", | |
" <td>5.200000e+02</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>...</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>290.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>1900.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>98001.000000</td>\n", | |
" <td>47.155900</td>\n", | |
" <td>-122.519000</td>\n", | |
" <td>399.000000</td>\n", | |
" <td>651.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25%</th>\n", | |
" <td>5403.00000</td>\n", | |
" <td>2.123049e+09</td>\n", | |
" <td>3.219500e+05</td>\n", | |
" <td>3.000000</td>\n", | |
" <td>1.750000</td>\n", | |
" <td>1427.000000</td>\n", | |
" <td>5.040000e+03</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>...</td>\n", | |
" <td>7.000000</td>\n", | |
" <td>1190.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>1951.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>98033.000000</td>\n", | |
" <td>47.471000</td>\n", | |
" <td>-122.328000</td>\n", | |
" <td>1490.000000</td>\n", | |
" <td>5100.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>50%</th>\n", | |
" <td>10806.00000</td>\n", | |
" <td>3.904930e+09</td>\n", | |
" <td>4.500000e+05</td>\n", | |
" <td>3.000000</td>\n", | |
" <td>2.250000</td>\n", | |
" <td>1910.000000</td>\n", | |
" <td>7.618000e+03</td>\n", | |
" <td>1.500000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>...</td>\n", | |
" <td>7.000000</td>\n", | |
" <td>1560.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>1975.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>98065.000000</td>\n", | |
" <td>47.571800</td>\n", | |
" <td>-122.230000</td>\n", | |
" <td>1840.000000</td>\n", | |
" <td>7620.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>75%</th>\n", | |
" <td>16209.00000</td>\n", | |
" <td>7.308900e+09</td>\n", | |
" <td>6.450000e+05</td>\n", | |
" <td>4.000000</td>\n", | |
" <td>2.500000</td>\n", | |
" <td>2550.000000</td>\n", | |
" <td>1.068800e+04</td>\n", | |
" <td>2.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>...</td>\n", | |
" <td>8.000000</td>\n", | |
" <td>2210.000000</td>\n", | |
" <td>560.000000</td>\n", | |
" <td>1997.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>98118.000000</td>\n", | |
" <td>47.678000</td>\n", | |
" <td>-122.125000</td>\n", | |
" <td>2360.000000</td>\n", | |
" <td>10083.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>max</th>\n", | |
" <td>21612.00000</td>\n", | |
" <td>9.900000e+09</td>\n", | |
" <td>7.700000e+06</td>\n", | |
" <td>33.000000</td>\n", | |
" <td>8.000000</td>\n", | |
" <td>13540.000000</td>\n", | |
" <td>1.651359e+06</td>\n", | |
" <td>3.500000</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>4.000000</td>\n", | |
" <td>...</td>\n", | |
" <td>13.000000</td>\n", | |
" <td>9410.000000</td>\n", | |
" <td>4820.000000</td>\n", | |
" <td>2015.000000</td>\n", | |
" <td>2015.000000</td>\n", | |
" <td>98199.000000</td>\n", | |
" <td>47.777600</td>\n", | |
" <td>-121.315000</td>\n", | |
" <td>6210.000000</td>\n", | |
" <td>871200.000000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>8 rows × 21 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" Unnamed: 0 id price bedrooms bathrooms \\\n", | |
"count 21613.00000 2.161300e+04 2.161300e+04 21600.000000 21603.000000 \n", | |
"mean 10806.00000 4.580302e+09 5.400881e+05 3.372870 2.115736 \n", | |
"std 6239.28002 2.876566e+09 3.671272e+05 0.926657 0.768996 \n", | |
"min 0.00000 1.000102e+06 7.500000e+04 1.000000 0.500000 \n", | |
"25% 5403.00000 2.123049e+09 3.219500e+05 3.000000 1.750000 \n", | |
"50% 10806.00000 3.904930e+09 4.500000e+05 3.000000 2.250000 \n", | |
"75% 16209.00000 7.308900e+09 6.450000e+05 4.000000 2.500000 \n", | |
"max 21612.00000 9.900000e+09 7.700000e+06 33.000000 8.000000 \n", | |
"\n", | |
" sqft_living sqft_lot floors waterfront view \\\n", | |
"count 21613.000000 2.161300e+04 21613.000000 21613.000000 21613.000000 \n", | |
"mean 2079.899736 1.510697e+04 1.494309 0.007542 0.234303 \n", | |
"std 918.440897 4.142051e+04 0.539989 0.086517 0.766318 \n", | |
"min 290.000000 5.200000e+02 1.000000 0.000000 0.000000 \n", | |
"25% 1427.000000 5.040000e+03 1.000000 0.000000 0.000000 \n", | |
"50% 1910.000000 7.618000e+03 1.500000 0.000000 0.000000 \n", | |
"75% 2550.000000 1.068800e+04 2.000000 0.000000 0.000000 \n", | |
"max 13540.000000 1.651359e+06 3.500000 1.000000 4.000000 \n", | |
"\n", | |
" ... grade sqft_above sqft_basement yr_built \\\n", | |
"count ... 21613.000000 21613.000000 21613.000000 21613.000000 \n", | |
"mean ... 7.656873 1788.390691 291.509045 1971.005136 \n", | |
"std ... 1.175459 828.090978 442.575043 29.373411 \n", | |
"min ... 1.000000 290.000000 0.000000 1900.000000 \n", | |
"25% ... 7.000000 1190.000000 0.000000 1951.000000 \n", | |
"50% ... 7.000000 1560.000000 0.000000 1975.000000 \n", | |
"75% ... 8.000000 2210.000000 560.000000 1997.000000 \n", | |
"max ... 13.000000 9410.000000 4820.000000 2015.000000 \n", | |
"\n", | |
" yr_renovated zipcode lat long sqft_living15 \\\n", | |
"count 21613.000000 21613.000000 21613.000000 21613.000000 21613.000000 \n", | |
"mean 84.402258 98077.939805 47.560053 -122.213896 1986.552492 \n", | |
"std 401.679240 53.505026 0.138564 0.140828 685.391304 \n", | |
"min 0.000000 98001.000000 47.155900 -122.519000 399.000000 \n", | |
"25% 0.000000 98033.000000 47.471000 -122.328000 1490.000000 \n", | |
"50% 0.000000 98065.000000 47.571800 -122.230000 1840.000000 \n", | |
"75% 0.000000 98118.000000 47.678000 -122.125000 2360.000000 \n", | |
"max 2015.000000 98199.000000 47.777600 -121.315000 6210.000000 \n", | |
"\n", | |
" sqft_lot15 \n", | |
"count 21613.000000 \n", | |
"mean 12768.455652 \n", | |
"std 27304.179631 \n", | |
"min 651.000000 \n", | |
"25% 5100.000000 \n", | |
"50% 7620.000000 \n", | |
"75% 10083.000000 \n", | |
"max 871200.000000 \n", | |
"\n", | |
"[8 rows x 21 columns]" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df.describe()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# 2.0 Data Wrangling" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"#### Question 2 \n", | |
"Drop the columns <code>\"id\"</code> and <code>\"Unnamed: 0\"</code> from axis 1 using the method <code>drop()</code>, then use the method <code>describe()</code> to obtain a statistical summary of the data. Take a screenshot and submit it, make sure the inplace parameter is set to <code>True</code>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>price</th>\n", | |
" <th>bedrooms</th>\n", | |
" <th>bathrooms</th>\n", | |
" <th>sqft_living</th>\n", | |
" <th>sqft_lot</th>\n", | |
" <th>floors</th>\n", | |
" <th>waterfront</th>\n", | |
" <th>view</th>\n", | |
" <th>condition</th>\n", | |
" <th>grade</th>\n", | |
" <th>sqft_above</th>\n", | |
" <th>sqft_basement</th>\n", | |
" <th>yr_built</th>\n", | |
" <th>yr_renovated</th>\n", | |
" <th>zipcode</th>\n", | |
" <th>lat</th>\n", | |
" <th>long</th>\n", | |
" <th>sqft_living15</th>\n", | |
" <th>sqft_lot15</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>count</th>\n", | |
" <td>2.161300e+04</td>\n", | |
" <td>21600.000000</td>\n", | |
" <td>21603.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>2.161300e+04</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" <td>21613.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>mean</th>\n", | |
" <td>5.400881e+05</td>\n", | |
" <td>3.372870</td>\n", | |
" <td>2.115736</td>\n", | |
" <td>2079.899736</td>\n", | |
" <td>1.510697e+04</td>\n", | |
" <td>1.494309</td>\n", | |
" <td>0.007542</td>\n", | |
" <td>0.234303</td>\n", | |
" <td>3.409430</td>\n", | |
" <td>7.656873</td>\n", | |
" <td>1788.390691</td>\n", | |
" <td>291.509045</td>\n", | |
" <td>1971.005136</td>\n", | |
" <td>84.402258</td>\n", | |
" <td>98077.939805</td>\n", | |
" <td>47.560053</td>\n", | |
" <td>-122.213896</td>\n", | |
" <td>1986.552492</td>\n", | |
" <td>12768.455652</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>std</th>\n", | |
" <td>3.671272e+05</td>\n", | |
" <td>0.926657</td>\n", | |
" <td>0.768996</td>\n", | |
" <td>918.440897</td>\n", | |
" <td>4.142051e+04</td>\n", | |
" <td>0.539989</td>\n", | |
" <td>0.086517</td>\n", | |
" <td>0.766318</td>\n", | |
" <td>0.650743</td>\n", | |
" <td>1.175459</td>\n", | |
" <td>828.090978</td>\n", | |
" <td>442.575043</td>\n", | |
" <td>29.373411</td>\n", | |
" <td>401.679240</td>\n", | |
" <td>53.505026</td>\n", | |
" <td>0.138564</td>\n", | |
" <td>0.140828</td>\n", | |
" <td>685.391304</td>\n", | |
" <td>27304.179631</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>min</th>\n", | |
" <td>7.500000e+04</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.500000</td>\n", | |
" <td>290.000000</td>\n", | |
" <td>5.200000e+02</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>290.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>1900.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>98001.000000</td>\n", | |
" <td>47.155900</td>\n", | |
" <td>-122.519000</td>\n", | |
" <td>399.000000</td>\n", | |
" <td>651.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25%</th>\n", | |
" <td>3.219500e+05</td>\n", | |
" <td>3.000000</td>\n", | |
" <td>1.750000</td>\n", | |
" <td>1427.000000</td>\n", | |
" <td>5.040000e+03</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>3.000000</td>\n", | |
" <td>7.000000</td>\n", | |
" <td>1190.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>1951.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>98033.000000</td>\n", | |
" <td>47.471000</td>\n", | |
" <td>-122.328000</td>\n", | |
" <td>1490.000000</td>\n", | |
" <td>5100.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>50%</th>\n", | |
" <td>4.500000e+05</td>\n", | |
" <td>3.000000</td>\n", | |
" <td>2.250000</td>\n", | |
" <td>1910.000000</td>\n", | |
" <td>7.618000e+03</td>\n", | |
" <td>1.500000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>3.000000</td>\n", | |
" <td>7.000000</td>\n", | |
" <td>1560.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>1975.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>98065.000000</td>\n", | |
" <td>47.571800</td>\n", | |
" <td>-122.230000</td>\n", | |
" <td>1840.000000</td>\n", | |
" <td>7620.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>75%</th>\n", | |
" <td>6.450000e+05</td>\n", | |
" <td>4.000000</td>\n", | |
" <td>2.500000</td>\n", | |
" <td>2550.000000</td>\n", | |
" <td>1.068800e+04</td>\n", | |
" <td>2.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>4.000000</td>\n", | |
" <td>8.000000</td>\n", | |
" <td>2210.000000</td>\n", | |
" <td>560.000000</td>\n", | |
" <td>1997.000000</td>\n", | |
" <td>0.000000</td>\n", | |
" <td>98118.000000</td>\n", | |
" <td>47.678000</td>\n", | |
" <td>-122.125000</td>\n", | |
" <td>2360.000000</td>\n", | |
" <td>10083.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>max</th>\n", | |
" <td>7.700000e+06</td>\n", | |
" <td>33.000000</td>\n", | |
" <td>8.000000</td>\n", | |
" <td>13540.000000</td>\n", | |
" <td>1.651359e+06</td>\n", | |
" <td>3.500000</td>\n", | |
" <td>1.000000</td>\n", | |
" <td>4.000000</td>\n", | |
" <td>5.000000</td>\n", | |
" <td>13.000000</td>\n", | |
" <td>9410.000000</td>\n", | |
" <td>4820.000000</td>\n", | |
" <td>2015.000000</td>\n", | |
" <td>2015.000000</td>\n", | |
" <td>98199.000000</td>\n", | |
" <td>47.777600</td>\n", | |
" <td>-121.315000</td>\n", | |
" <td>6210.000000</td>\n", | |
" <td>871200.000000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" price bedrooms bathrooms sqft_living sqft_lot \\\n", | |
"count 2.161300e+04 21600.000000 21603.000000 21613.000000 2.161300e+04 \n", | |
"mean 5.400881e+05 3.372870 2.115736 2079.899736 1.510697e+04 \n", | |
"std 3.671272e+05 0.926657 0.768996 918.440897 4.142051e+04 \n", | |
"min 7.500000e+04 1.000000 0.500000 290.000000 5.200000e+02 \n", | |
"25% 3.219500e+05 3.000000 1.750000 1427.000000 5.040000e+03 \n", | |
"50% 4.500000e+05 3.000000 2.250000 1910.000000 7.618000e+03 \n", | |
"75% 6.450000e+05 4.000000 2.500000 2550.000000 1.068800e+04 \n", | |
"max 7.700000e+06 33.000000 8.000000 13540.000000 1.651359e+06 \n", | |
"\n", | |
" floors waterfront view condition grade \\\n", | |
"count 21613.000000 21613.000000 21613.000000 21613.000000 21613.000000 \n", | |
"mean 1.494309 0.007542 0.234303 3.409430 7.656873 \n", | |
"std 0.539989 0.086517 0.766318 0.650743 1.175459 \n", | |
"min 1.000000 0.000000 0.000000 1.000000 1.000000 \n", | |
"25% 1.000000 0.000000 0.000000 3.000000 7.000000 \n", | |
"50% 1.500000 0.000000 0.000000 3.000000 7.000000 \n", | |
"75% 2.000000 0.000000 0.000000 4.000000 8.000000 \n", | |
"max 3.500000 1.000000 4.000000 5.000000 13.000000 \n", | |
"\n", | |
" sqft_above sqft_basement yr_built yr_renovated zipcode \\\n", | |
"count 21613.000000 21613.000000 21613.000000 21613.000000 21613.000000 \n", | |
"mean 1788.390691 291.509045 1971.005136 84.402258 98077.939805 \n", | |
"std 828.090978 442.575043 29.373411 401.679240 53.505026 \n", | |
"min 290.000000 0.000000 1900.000000 0.000000 98001.000000 \n", | |
"25% 1190.000000 0.000000 1951.000000 0.000000 98033.000000 \n", | |
"50% 1560.000000 0.000000 1975.000000 0.000000 98065.000000 \n", | |
"75% 2210.000000 560.000000 1997.000000 0.000000 98118.000000 \n", | |
"max 9410.000000 4820.000000 2015.000000 2015.000000 98199.000000 \n", | |
"\n", | |
" lat long sqft_living15 sqft_lot15 \n", | |
"count 21613.000000 21613.000000 21613.000000 21613.000000 \n", | |
"mean 47.560053 -122.213896 1986.552492 12768.455652 \n", | |
"std 0.138564 0.140828 685.391304 27304.179631 \n", | |
"min 47.155900 -122.519000 399.000000 651.000000 \n", | |
"25% 47.471000 -122.328000 1490.000000 5100.000000 \n", | |
"50% 47.571800 -122.230000 1840.000000 7620.000000 \n", | |
"75% 47.678000 -122.125000 2360.000000 10083.000000 \n", | |
"max 47.777600 -121.315000 6210.000000 871200.000000 " | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df.drop(columns= [\"id\",\"Unnamed: 0\"],inplace=True)\n", | |
"df.describe()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"we can see we have missing values for the columns <code> bedrooms</code> and <code> bathrooms </code>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"number of NaN values for the column bedrooms : 13\n", | |
"number of NaN values for the column bathrooms : 10\n" | |
] | |
} | |
], | |
"source": [ | |
"print(\"number of NaN values for the column bedrooms :\", df['bedrooms'].isnull().sum())\n", | |
"print(\"number of NaN values for the column bathrooms :\", df['bathrooms'].isnull().sum())\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"We can replace the missing values of the column <code>'bedrooms'</code> with the mean of the column <code>'bedrooms' </code> using the method replace. Don't forget to set the <code>inplace</code> parameter top <code>True</code>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"mean=df['bedrooms'].mean()\n", | |
"df['bedrooms'].replace(np.nan,mean, inplace=True)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"We also replace the missing values of the column <code>'bathrooms'</code> with the mean of the column <code>'bedrooms' </codse> using the method replace.Don't forget to set the <code> inplace </code> parameter top <code> Ture </code>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"mean=df['bathrooms'].mean()\n", | |
"df['bathrooms'].replace(np.nan,mean, inplace=True)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"number of NaN values for the column bedrooms : 0\n", | |
"number of NaN values for the column bathrooms : 0\n" | |
] | |
} | |
], | |
"source": [ | |
"print(\"number of NaN values for the column bedrooms :\", df['bedrooms'].isnull().sum())\n", | |
"print(\"number of NaN values for the column bathrooms :\", df['bathrooms'].isnull().sum())" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# 3.0 Exploratory data analysis" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"#### Question 3\n", | |
"Use the method value_counts to count the number of houses with unique floor values, use the method .to_frame() to convert it to a dataframe.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>floors</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>1.0</th>\n", | |
" <td>10680</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2.0</th>\n", | |
" <td>8241</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1.5</th>\n", | |
" <td>1910</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3.0</th>\n", | |
" <td>613</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2.5</th>\n", | |
" <td>161</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3.5</th>\n", | |
" <td>8</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" floors\n", | |
"1.0 10680\n", | |
"2.0 8241\n", | |
"1.5 1910\n", | |
"3.0 613\n", | |
"2.5 161\n", | |
"3.5 8" | |
] | |
}, | |
"execution_count": 15, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"a=df['floors'].value_counts()\n", | |
"b=a.to_frame()\n", | |
"b" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Question 4\n", | |
"Use the function <code>boxplot</code> in the seaborn library to determine whether houses with a waterfront view or without a waterfront view have more price outliers ." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.axes._subplots.AxesSubplot at 0x7fe51d394cc0>" | |
] | |
}, | |
"execution_count": 18, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"sns.boxplot(x='waterfront',y='price',data=df)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Question 5\n", | |
"Use the function <code> regplot</code> in the seaborn library to determine if the feature <code>sqft_above</code> is negatively or positively correlated with price." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.axes._subplots.AxesSubplot at 0x7fe51cfad0b8>" | |
] | |
}, | |
"execution_count": 19, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"#help(sns.regplot)\n", | |
"sns.regplot(x='sqft_above',y='price',data=df)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"We can use the Pandas method <code>corr()</code> to find the feature other than price that is most correlated with price." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"zipcode -0.053203\n", | |
"long 0.021626\n", | |
"condition 0.036362\n", | |
"yr_built 0.054012\n", | |
"sqft_lot15 0.082447\n", | |
"sqft_lot 0.089661\n", | |
"yr_renovated 0.126434\n", | |
"floors 0.256794\n", | |
"waterfront 0.266369\n", | |
"lat 0.307003\n", | |
"bedrooms 0.308797\n", | |
"sqft_basement 0.323816\n", | |
"view 0.397293\n", | |
"bathrooms 0.525738\n", | |
"sqft_living15 0.585379\n", | |
"sqft_above 0.605567\n", | |
"grade 0.667434\n", | |
"sqft_living 0.702035\n", | |
"price 1.000000\n", | |
"Name: price, dtype: float64" | |
] | |
}, | |
"execution_count": 20, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df.corr()['price'].sort_values()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Module 4: Model Development" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Import libraries " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"from sklearn.linear_model import LinearRegression\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"We can Fit a linear regression model using the longitude feature <code> 'long'</code> and caculate the R^2." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 22, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.00046769430149007363" | |
] | |
}, | |
"execution_count": 22, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"X = df[['long']]\n", | |
"Y = df['price']\n", | |
"lm = LinearRegression()\n", | |
"lm\n", | |
"lm.fit(X,Y)\n", | |
"lm.score(X, Y)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Question 6\n", | |
"Fit a linear regression model to predict the <code>'price'</code> using the feature 'sqft_living' then calculate the R^2. Take a screenshot of your code and the value of the R^2." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 23, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.49285321790379316" | |
] | |
}, | |
"execution_count": 23, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"X = df[['sqft_living']]\n", | |
"Y = df['price']\n", | |
"lm = LinearRegression()\n", | |
"lm.fit(X,Y)\n", | |
"lm.score(X,Y)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Question 7\n", | |
"Fit a linear regression model to predict the 'price' using the list of features:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 24, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"features =[\"floors\", \"waterfront\",\"lat\" ,\"bedrooms\" ,\"sqft_basement\" ,\"view\" ,\"bathrooms\",\"sqft_living15\",\"sqft_above\",\"grade\",\"sqft_living\"]\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"the calculate the R^2. Take a screenshot of your code" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 25, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.6576527411217378" | |
] | |
}, | |
"execution_count": 25, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"X = df[features]\n", | |
"lm = LinearRegression()\n", | |
"lm.fit(X,Y)\n", | |
"lm.score(X,Y)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"#### this will help with Question 8\n", | |
"\n", | |
"Create a list of tuples, the first element in the tuple contains the name of the estimator:\n", | |
"\n", | |
"<code>'scale'</code>\n", | |
"\n", | |
"<code>'polynomial'</code>\n", | |
"\n", | |
"<code>'model'</code>\n", | |
"\n", | |
"The second element in the tuple contains the model constructor \n", | |
"\n", | |
"<code>StandardScaler()</code>\n", | |
"\n", | |
"<code>PolynomialFeatures(include_bias=False)</code>\n", | |
"\n", | |
"<code>LinearRegression()</code>\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 26, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"Input=[('scale',StandardScaler()),('polynomial', PolynomialFeatures(include_bias=False)),('model',LinearRegression())]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Question 8\n", | |
"Use the list to create a pipeline object, predict the 'price', fit the object using the features in the list <code> features </code>, then fit the model and calculate the R^2" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 27, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Pipeline(memory=None,\n", | |
" steps=[('scale', StandardScaler(copy=True, with_mean=True, with_std=True)), ('polynomial', PolynomialFeatures(degree=2, include_bias=False, interaction_only=False)), ('model', LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,\n", | |
" normalize=False))])" | |
] | |
}, | |
"execution_count": 27, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"pipe=Pipeline(Input)\n", | |
"pipe" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 28, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"/home/jupyterlab/conda/envs/python/lib/python3.6/site-packages/sklearn/preprocessing/data.py:625: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n", | |
" return self.partial_fit(X, y)\n", | |
"/home/jupyterlab/conda/envs/python/lib/python3.6/site-packages/sklearn/base.py:465: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n", | |
" return self.fit(X, y, **fit_params).transform(X)\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"Pipeline(memory=None,\n", | |
" steps=[('scale', StandardScaler(copy=True, with_mean=True, with_std=True)), ('polynomial', PolynomialFeatures(degree=2, include_bias=False, interaction_only=False)), ('model', LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,\n", | |
" normalize=False))])" | |
] | |
}, | |
"execution_count": 28, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"pipe.fit(X,Y)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 29, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"/home/jupyterlab/conda/envs/python/lib/python3.6/site-packages/sklearn/pipeline.py:511: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n", | |
" Xt = transform.transform(Xt)\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"0.7513407800458329" | |
] | |
}, | |
"execution_count": 29, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"pipe.score(X,Y)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Module 5: MODEL EVALUATION AND REFINEMENT" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"import the necessary modules " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 30, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"done\n" | |
] | |
} | |
], | |
"source": [ | |
"from sklearn.model_selection import cross_val_score\n", | |
"from sklearn.model_selection import train_test_split\n", | |
"print(\"done\")" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"we will split the data into training and testing set" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 31, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"number of test samples : 3242\n", | |
"number of training samples: 18371\n" | |
] | |
} | |
], | |
"source": [ | |
"features =[\"floors\", \"waterfront\",\"lat\" ,\"bedrooms\" ,\"sqft_basement\" ,\"view\" ,\"bathrooms\",\"sqft_living15\",\"sqft_above\",\"grade\",\"sqft_living\"] \n", | |
"X = df[features ]\n", | |
"Y = df['price']\n", | |
"\n", | |
"x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.15, random_state=1)\n", | |
"\n", | |
"\n", | |
"print(\"number of test samples :\", x_test.shape[0])\n", | |
"print(\"number of training samples:\",x_train.shape[0])" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Question 9\n", | |
"Create and fit a Ridge regression object using the training data, setting the regularization parameter to 0.1 and calculate the R^2 using the test data. \n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 32, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from sklearn.linear_model import Ridge" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 34, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.6478759163939115" | |
] | |
}, | |
"execution_count": 34, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"RM = Ridge(alpha=0.1)\n", | |
"RM.fit(x_train,y_train)\n", | |
"RM.score(x_test,y_test)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Question 10\n", | |
"Perform a second order polynomial transform on both the training data and testing data. Create and fit a Ridge regression object using the training data, setting the regularisation parameter to 0.1. Calculate the R^2 utilising the test data provided. Take a screenshot of your code and the R^2." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 35, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.700274427924385" | |
] | |
}, | |
"execution_count": 35, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"\n", | |
"pf = PolynomialFeatures(degree=2)\n", | |
"x_train_pf = pf.fit_transform(x_train) #x_train_pf.shape\n", | |
"x_test_pf = pf.fit_transform(x_test)\n", | |
"RM = Ridge(alpha=0.1)\n", | |
"RM.fit(x_train_pf,y_train)\n", | |
"RM.score(x_test_pf,y_test)\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<p>Once you complete your notebook you will have to share it. Select the icon on the top right a marked in red in the image below, a dialogue box should open, select the option all content excluding sensitive code cells.</p>\n", | |
" <p><img width=\"600\" src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DA0101EN/coursera/project/save_notebook.png\" alt=\"share notebook\" style=\"display: block; margin-left: auto; margin-right: auto;\"/></p>\n", | |
" <p></p>\n", | |
" <p>You can then share the notebook via a URL by scrolling down as shown in the following image:</p>\n", | |
" <p style=\"text-align: center;\"><img width=\"600\" src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DA0101EN/coursera/project/url_notebook.png\" alt=\"HTML\" style=\"display: block; margin-left: auto; margin-right: auto;\" /></p>\n", | |
" <p> </p>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h2>About the Authors:</h2> \n", | |
"\n", | |
"<a href=\"https://www.linkedin.com/in/joseph-s-50398b136/\">Joseph Santarcangelo</a> has a PhD in Electrical Engineering, his research focused on using machine learning, signal processing, and computer vision to determine how videos impact human cognition. Joseph has been working for IBM since he completed his PhD." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Other contributors: <a href=\"https://www.linkedin.com/in/michelleccarey/\">Michelle Carey</a>, <a href=\"www.linkedin.com/in/jiahui-mavis-zhou-a4537814a\">Mavis Zhou</a> " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python", | |
"language": "python", | |
"name": "conda-env-python-py" | |
}, | |
"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.7" | |
}, | |
"widgets": { | |
"state": {}, | |
"version": "1.1.2" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment