Skip to content

Instantly share code, notes, and snippets.

@ankitbora31
Last active April 28, 2022 06:53
Show Gist options
  • Save ankitbora31/ed789ad93d30344c5da18f7a996d55d0 to your computer and use it in GitHub Desktop.
Save ankitbora31/ed789ad93d30344c5da18f7a996d55d0 to your computer and use it in GitHub Desktop.
House Sales in King Country (Data analysis with python)
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<center>\n",
" <img src=\"https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-DA0101EN-SkillsNetwork/labs/FinalModule_Coursera/images/IDSNlogo.png\" width=\"300\" alt=\"cognitiveclass.ai logo\" />\n",
"</center>\n",
"\n",
"<h1 align=center><font size = 5>Data Analysis with Python</font></h1>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# House Sales in King County, USA\n"
]
},
{
"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.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"| Variable | Description |\n",
"| ------------- | ----------------------------------------------------------------------------------------------------------- |\n",
"| id | A notation for a house |\n",
"| date | Date house was sold |\n",
"| price | Price is prediction target |\n",
"| bedrooms | Number of bedrooms |\n",
"| bathrooms | Number of bathrooms |\n",
"| sqft_living | Square footage of the home |\n",
"| sqft_lot | Square footage of the lot |\n",
"| floors | Total floors (levels) in house |\n",
"| waterfront | House which has a view to a waterfront |\n",
"| view | Has been viewed |\n",
"| condition | How good the condition is overall |\n",
"| grade | overall grade given to the housing unit, based on King County grading system |\n",
"| sqft_above | Square footage of house apart from basement |\n",
"| sqft_basement | Square footage of the basement |\n",
"| yr_built | Built Year |\n",
"| yr_renovated | Year when house was renovated |\n",
"| zipcode | Zip code |\n",
"| lat | Latitude coordinate |\n",
"| long | Longitude coordinate |\n",
"| sqft_living15 | Living room area in 2015(implies-- some renovations) This might or might not have affected the lotsize area |\n",
"| sqft_lot15 | LotSize area in 2015(implies-- some renovations) |\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You will require the following libraries:\n"
]
},
{
"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",
"from sklearn.linear_model import LinearRegression\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Module 1: Importing Data Sets\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Load the csv:\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"file_name='https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-DA0101EN-SkillsNetwork/labs/FinalModule_Coursera/data/kc_house_data_NaN.csv'\n",
"df=pd.read_csv(file_name)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We use the method <code>head</code> to display the first 5 columns of the dataframe.\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"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",
"\n",
"Display the data types of each column using the function dtypes, then take a screenshot and submit it, include your code in the image.\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"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": 7,
"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.\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"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": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Module 2: Data Wrangling\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Question 2\n",
"\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 <code>inplace</code> parameter is set to <code>True</code>\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"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": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.drop(['id','Unnamed: 0'],axis=1,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>\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"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": [
"We can replace the missing values of the column <code>'bedrooms'</code> with the mean of the column <code>'bedrooms' </code> using the method <code>replace()</code>. Don't forget to set the <code>inplace</code> parameter to <code>True</code>\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"mean=df['bedrooms'].mean()\n",
"df['bedrooms'].replace(np.nan,mean, inplace=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We also replace the missing values of the column <code>'bathrooms'</code> with the mean of the column <code>'bathrooms' </code> using the method <code>replace()</code>. Don't forget to set the <code> inplace </code> parameter top <code> True </code>\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"mean=df['bathrooms'].mean()\n",
"df['bathrooms'].replace(np.nan,mean, inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"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": [
"# Module 3: Exploratory Data Analysis\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Question 3\n",
"\n",
"Use the method <code>value_counts</code> to count the number of houses with unique floor values, use the method <code>.to_frame()</code> to convert it to a dataframe.\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"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": [
"df['floors'].value_counts().to_frame()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Question 4\n",
"\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.\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x19813a1f7c8>"
]
},
"execution_count": 16,
"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",
"\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.\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x19813d0e6c8>"
]
},
"execution_count": 17,
"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.regplot(x='sqft_above',y='price',data=df)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can use the Pandas method <code>corr()</code> to find the feature other than price that is most correlated with price.\n"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"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": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.corr()['price'].sort_values()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Module 4: Model Development\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can Fit a linear regression model using the longitude feature <code>'long'</code> and caculate the R^2.\n"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.00046769430149007363"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X = df[['long']]\n",
"Y = df['price']\n",
"lm = LinearRegression()\n",
"lm.fit(X,Y)\n",
"lm.score(X, Y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Question 6\n",
"\n",
"Fit a linear regression model to predict the <code>'price'</code> using the feature <code>'sqft_living'</code> then calculate the R^2. Take a screenshot of your code and the value of the R^2.\n"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.4928532179037931"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm = LinearRegression()\n",
"x = df[['sqft_living']]\n",
"y = df['price']\n",
"\n",
"lm.fit(x,y)\n",
"lm.score(x,y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Question 7\n",
"\n",
"Fit a linear regression model to predict the <code>'price'</code> using the list of features:\n"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"features =[\"floors\", \"waterfront\",\"lat\" ,\"bedrooms\" ,\"sqft_basement\" ,\"view\" ,\"bathrooms\",\"sqft_living15\",\"sqft_above\",\"grade\",\"sqft_living\"] "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Then calculate the R^2. Take a screenshot of your code.\n"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.6576543851004834"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lm = LinearRegression()\n",
"x = df[features]\n",
"y = df['price']\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": 34,
"metadata": {},
"outputs": [],
"source": [
"Input=[('scale',StandardScaler()),('polynomial', PolynomialFeatures(include_bias=False)),('model',LinearRegression())]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Question 8\n",
"\n",
"Use the list to create a pipeline object to predict the 'price', fit the object using the features in the list <code>features</code>, and calculate the R^2.\n"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.7465018419908188"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pipe = Pipeline(Input)\n",
"x = df[features]\n",
"y = df['price']\n",
"pipe.fit(x,y)\n",
"pipe.score(x,y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Module 5: Model Evaluation and Refinement\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Import the necessary modules:\n"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"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 sets:\n"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"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",
"\n",
"Create and fit a Ridge regression object using the training data, set the regularization parameter to 0.1, and calculate the R^2 using the test data.\n"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.linear_model import Ridge"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.6478759163939112"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ridgeModel = Ridge(alpha=0.1)\n",
"ridgeModel.fit(x_train,y_train)\n",
"ridgeModel.score(x_test,y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Question 10\n",
"\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, set the regularisation parameter to 0.1, and calculate the R^2 utilising the test data provided. Take a screenshot of your code and the R^2.\n"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.7002744255607272"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pr = PolynomialFeatures(degree=2)\n",
"x_train_pr = pr.fit_transform(x_train)\n",
"x_test_pr = pr.fit_transform(x_test)\n",
"\n",
"ridgeModel = Ridge(alpha=0.1)\n",
"ridgeModel.fit(x_train_pr, y_train)\n",
"ridgeModel.score(x_test_pr, y_test)"
]
},
{
"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, and select the option all&nbsp;content excluding sensitive code cells.</p>\n",
" <p><img width=\"600\" src=\"https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-DA0101EN-SkillsNetwork/labs/FinalModule_Coursera/images/share_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&nbsp; via a&nbsp; URL by scrolling down as shown in the following image:</p>\n",
" <p style=\"text-align: center;\"><img width=\"600\" src=\"https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-DA0101EN-SkillsNetwork/labs/FinalModule_Coursera/images/url_notebook.png\" alt=\"HTML\" style=\"display: block; margin-left: auto; margin-right: auto;\" /></p>\n",
" <p>&nbsp;</p>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h2>About the Authors:</h2> \n",
"\n",
"<a href=\"https://www.linkedin.com/in/joseph-s-50398b136/?utm_medium=Exinfluencer&utm_source=Exinfluencer&utm_content=000026UJ&utm_term=10006555&utm_id=NA-SkillsNetwork-Channel-SkillsNetworkCoursesIBMDeveloperSkillsNetworkDA0101ENSkillsNetwork20235326-2022-01-01\">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.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Other contributors: <a href=\"https://www.linkedin.com/in/michelleccarey/?utm_medium=Exinfluencer&utm_source=Exinfluencer&utm_content=000026UJ&utm_term=10006555&utm_id=NA-SkillsNetwork-Channel-SkillsNetworkCoursesIBMDeveloperSkillsNetworkDA0101ENSkillsNetwork20235326-2022-01-01\">Michelle Carey</a>, <a href=\"https://www.linkedin.com/in/jiahui-mavis-zhou-a4537814a?utm_medium=Exinfluencer&utm_source=Exinfluencer&utm_content=000026UJ&utm_term=10006555&utm_id=NA-SkillsNetwork-Channel-SkillsNetworkCoursesIBMDeveloperSkillsNetworkDA0101ENSkillsNetwork20235326-2022-01-01\">Mavis Zhou</a>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Change Log\n",
"\n",
"| Date (YYYY-MM-DD) | Version | Changed By | Change Description |\n",
"| ----------------- | ------- | --------------- | -------------------------------------------- |\n",
"| 2020-12-01 | 2.2 | Aije Egwaikhide | Coverted Data describtion from text to table |\n",
"| 2020-10-06 | 2.1 | Lakshmi Holla | Changed markdown instruction of Question1 |\n",
"| 2020-08-27 | 2.0 | Malika Singla | Added lab to GitLab |\n",
"\n",
"<hr>\n",
"\n",
"## <h3 align=\"center\"> © IBM Corporation 2020. All rights reserved. <h3/>\n",
"\n",
"<p>\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
},
"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