{
"cells": [
{
"cell_type": "code",
"execution_count": 89,
"id": "2668805c",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"import matplotlib\n",
"import warnings\n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "2566dffa",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" area_type | \n",
" availability | \n",
" location | \n",
" size | \n",
" society | \n",
" total_sqft | \n",
" bath | \n",
" balcony | \n",
" price | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Super built-up Area | \n",
" 19-Dec | \n",
" Electronic City Phase II | \n",
" 2 BHK | \n",
" Coomee | \n",
" 1056 | \n",
" 2.0 | \n",
" 1.0 | \n",
" 39.07 | \n",
"
\n",
" \n",
" 1 | \n",
" Plot Area | \n",
" Ready To Move | \n",
" Chikka Tirupathi | \n",
" 4 Bedroom | \n",
" Theanmp | \n",
" 2600 | \n",
" 5.0 | \n",
" 3.0 | \n",
" 120.00 | \n",
"
\n",
" \n",
" 2 | \n",
" Built-up Area | \n",
" Ready To Move | \n",
" Uttarahalli | \n",
" 3 BHK | \n",
" NaN | \n",
" 1440 | \n",
" 2.0 | \n",
" 3.0 | \n",
" 62.00 | \n",
"
\n",
" \n",
" 3 | \n",
" Super built-up Area | \n",
" Ready To Move | \n",
" Lingadheeranahalli | \n",
" 3 BHK | \n",
" Soiewre | \n",
" 1521 | \n",
" 3.0 | \n",
" 1.0 | \n",
" 95.00 | \n",
"
\n",
" \n",
" 4 | \n",
" Super built-up Area | \n",
" Ready To Move | \n",
" Kothanur | \n",
" 2 BHK | \n",
" NaN | \n",
" 1200 | \n",
" 2.0 | \n",
" 1.0 | \n",
" 51.00 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" area_type availability location size \\\n",
"0 Super built-up Area 19-Dec Electronic City Phase II 2 BHK \n",
"1 Plot Area Ready To Move Chikka Tirupathi 4 Bedroom \n",
"2 Built-up Area Ready To Move Uttarahalli 3 BHK \n",
"3 Super built-up Area Ready To Move Lingadheeranahalli 3 BHK \n",
"4 Super built-up Area Ready To Move Kothanur 2 BHK \n",
"\n",
" society total_sqft bath balcony price \n",
"0 Coomee 1056 2.0 1.0 39.07 \n",
"1 Theanmp 2600 5.0 3.0 120.00 \n",
"2 NaN 1440 2.0 3.0 62.00 \n",
"3 Soiewre 1521 3.0 1.0 95.00 \n",
"4 NaN 1200 2.0 1.0 51.00 "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1=pd.read_csv('bengaluru_house_prices.csv')\n",
"df1.head()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "141f3c7b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(13320, 9)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1.shape"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "a666c8e7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['area_type', 'availability', 'location', 'size', 'society',\n",
" 'total_sqft', 'bath', 'balcony', 'price'],\n",
" dtype='object')"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1.columns"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "c4b78e77",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['Super built-up Area', 'Plot Area', 'Built-up Area',\n",
" 'Carpet Area'], dtype=object)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1['area_type'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "d2b1286a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Super built-up Area 8790\n",
"Built-up Area 2418\n",
"Plot Area 2025\n",
"Carpet Area 87\n",
"Name: area_type, dtype: int64"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1['area_type'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "4776cabc",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" location | \n",
" size | \n",
" total_sqft | \n",
" bath | \n",
" price | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Electronic City Phase II | \n",
" 2 BHK | \n",
" 1056 | \n",
" 2.0 | \n",
" 39.07 | \n",
"
\n",
" \n",
" 1 | \n",
" Chikka Tirupathi | \n",
" 4 Bedroom | \n",
" 2600 | \n",
" 5.0 | \n",
" 120.00 | \n",
"
\n",
" \n",
" 2 | \n",
" Uttarahalli | \n",
" 3 BHK | \n",
" 1440 | \n",
" 2.0 | \n",
" 62.00 | \n",
"
\n",
" \n",
" 3 | \n",
" Lingadheeranahalli | \n",
" 3 BHK | \n",
" 1521 | \n",
" 3.0 | \n",
" 95.00 | \n",
"
\n",
" \n",
" 4 | \n",
" Kothanur | \n",
" 2 BHK | \n",
" 1200 | \n",
" 2.0 | \n",
" 51.00 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" location size total_sqft bath price\n",
"0 Electronic City Phase II 2 BHK 1056 2.0 39.07\n",
"1 Chikka Tirupathi 4 Bedroom 2600 5.0 120.00\n",
"2 Uttarahalli 3 BHK 1440 2.0 62.00\n",
"3 Lingadheeranahalli 3 BHK 1521 3.0 95.00\n",
"4 Kothanur 2 BHK 1200 2.0 51.00"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2=df1.drop(['area_type','availability','society','balcony'],axis='columns')\n",
"df2.head()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "b971be8c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(13320, 5)"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2.shape"
]
},
{
"cell_type": "markdown",
"id": "da19f381",
"metadata": {},
"source": [
"### Data Cleaning: Handling NA values"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "84ffb66b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"location 1\n",
"size 16\n",
"total_sqft 0\n",
"bath 73\n",
"price 0\n",
"dtype: int64"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "c7cc2a04",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"location 0\n",
"size 0\n",
"total_sqft 0\n",
"bath 0\n",
"price 0\n",
"dtype: int64"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df3=df2.dropna()\n",
"df3.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "1a0f5f5d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(13246, 5)"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df3.shape"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "618deabb",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Dinesh_vivobook\\AppData\\Local\\Temp\\ipykernel_6088\\1261436634.py:1: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" df3['bhk']=df3['size'].apply(lambda x: int(x.split(' ')[0]))\n"
]
},
{
"data": {
"text/plain": [
"array([ 2, 4, 3, 6, 1, 8, 7, 5, 11, 9, 27, 10, 19, 16, 43, 14, 12,\n",
" 13, 18], dtype=int64)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df3['bhk']=df3['size'].apply(lambda x: int(x.split(' ')[0]))\n",
"df3.bhk.unique()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "c027ea7e",
"metadata": {},
"outputs": [],
"source": [
"def is_float(x):\n",
" try:\n",
" float(x)\n",
" except:\n",
" return False\n",
" return True"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "506c5d8e",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" location | \n",
" size | \n",
" total_sqft | \n",
" bath | \n",
" price | \n",
" bhk | \n",
"
\n",
" \n",
" \n",
" \n",
" 30 | \n",
" Yelahanka | \n",
" 4 BHK | \n",
" 2100 - 2850 | \n",
" 4.0 | \n",
" 186.000 | \n",
" 4 | \n",
"
\n",
" \n",
" 122 | \n",
" Hebbal | \n",
" 4 BHK | \n",
" 3067 - 8156 | \n",
" 4.0 | \n",
" 477.000 | \n",
" 4 | \n",
"
\n",
" \n",
" 137 | \n",
" 8th Phase JP Nagar | \n",
" 2 BHK | \n",
" 1042 - 1105 | \n",
" 2.0 | \n",
" 54.005 | \n",
" 2 | \n",
"
\n",
" \n",
" 165 | \n",
" Sarjapur | \n",
" 2 BHK | \n",
" 1145 - 1340 | \n",
" 2.0 | \n",
" 43.490 | \n",
" 2 | \n",
"
\n",
" \n",
" 188 | \n",
" KR Puram | \n",
" 2 BHK | \n",
" 1015 - 1540 | \n",
" 2.0 | \n",
" 56.800 | \n",
" 2 | \n",
"
\n",
" \n",
" 410 | \n",
" Kengeri | \n",
" 1 BHK | \n",
" 34.46Sq. Meter | \n",
" 1.0 | \n",
" 18.500 | \n",
" 1 | \n",
"
\n",
" \n",
" 549 | \n",
" Hennur Road | \n",
" 2 BHK | \n",
" 1195 - 1440 | \n",
" 2.0 | \n",
" 63.770 | \n",
" 2 | \n",
"
\n",
" \n",
" 648 | \n",
" Arekere | \n",
" 9 Bedroom | \n",
" 4125Perch | \n",
" 9.0 | \n",
" 265.000 | \n",
" 9 | \n",
"
\n",
" \n",
" 661 | \n",
" Yelahanka | \n",
" 2 BHK | \n",
" 1120 - 1145 | \n",
" 2.0 | \n",
" 48.130 | \n",
" 2 | \n",
"
\n",
" \n",
" 672 | \n",
" Bettahalsoor | \n",
" 4 Bedroom | \n",
" 3090 - 5002 | \n",
" 4.0 | \n",
" 445.000 | \n",
" 4 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" location size total_sqft bath price bhk\n",
"30 Yelahanka 4 BHK 2100 - 2850 4.0 186.000 4\n",
"122 Hebbal 4 BHK 3067 - 8156 4.0 477.000 4\n",
"137 8th Phase JP Nagar 2 BHK 1042 - 1105 2.0 54.005 2\n",
"165 Sarjapur 2 BHK 1145 - 1340 2.0 43.490 2\n",
"188 KR Puram 2 BHK 1015 - 1540 2.0 56.800 2\n",
"410 Kengeri 1 BHK 34.46Sq. Meter 1.0 18.500 1\n",
"549 Hennur Road 2 BHK 1195 - 1440 2.0 63.770 2\n",
"648 Arekere 9 Bedroom 4125Perch 9.0 265.000 9\n",
"661 Yelahanka 2 BHK 1120 - 1145 2.0 48.130 2\n",
"672 Bettahalsoor 4 Bedroom 3090 - 5002 4.0 445.000 4"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df3[~df3['total_sqft'].apply(is_float)].head(10)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "53cb2ebd",
"metadata": {},
"outputs": [],
"source": [
"def convert_sqft_to_num(x):\n",
" tokens=x.split('-')\n",
" if(len(tokens)==2):\n",
" return (float(tokens[0])+float(tokens[1]))/2\n",
" try:\n",
" return float(x)\n",
" except:\n",
" return None"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "990186c4",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" location | \n",
" size | \n",
" total_sqft | \n",
" bath | \n",
" price | \n",
" bhk | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Electronic City Phase II | \n",
" 2 BHK | \n",
" 1056.0 | \n",
" 2.0 | \n",
" 39.07 | \n",
" 2 | \n",
"
\n",
" \n",
" 1 | \n",
" Chikka Tirupathi | \n",
" 4 Bedroom | \n",
" 2600.0 | \n",
" 5.0 | \n",
" 120.00 | \n",
" 4 | \n",
"
\n",
" \n",
" 2 | \n",
" Uttarahalli | \n",
" 3 BHK | \n",
" 1440.0 | \n",
" 2.0 | \n",
" 62.00 | \n",
" 3 | \n",
"
\n",
" \n",
" 3 | \n",
" Lingadheeranahalli | \n",
" 3 BHK | \n",
" 1521.0 | \n",
" 3.0 | \n",
" 95.00 | \n",
" 3 | \n",
"
\n",
" \n",
" 4 | \n",
" Kothanur | \n",
" 2 BHK | \n",
" 1200.0 | \n",
" 2.0 | \n",
" 51.00 | \n",
" 2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" location size total_sqft bath price bhk\n",
"0 Electronic City Phase II 2 BHK 1056.0 2.0 39.07 2\n",
"1 Chikka Tirupathi 4 Bedroom 2600.0 5.0 120.00 4\n",
"2 Uttarahalli 3 BHK 1440.0 2.0 62.00 3\n",
"3 Lingadheeranahalli 3 BHK 1521.0 3.0 95.00 3\n",
"4 Kothanur 2 BHK 1200.0 2.0 51.00 2"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df4=df3.copy()\n",
"df4.total_sqft=df4.total_sqft.apply(convert_sqft_to_num)\n",
"df4=df4[df4.total_sqft.notnull()]\n",
"df4.head(5)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "7f1b0177",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" location | \n",
" size | \n",
" total_sqft | \n",
" bath | \n",
" price | \n",
" bhk | \n",
" price_per_sqft | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Electronic City Phase II | \n",
" 2 BHK | \n",
" 1056.0 | \n",
" 2.0 | \n",
" 39.07 | \n",
" 2 | \n",
" 3699.810606 | \n",
"
\n",
" \n",
" 1 | \n",
" Chikka Tirupathi | \n",
" 4 Bedroom | \n",
" 2600.0 | \n",
" 5.0 | \n",
" 120.00 | \n",
" 4 | \n",
" 4615.384615 | \n",
"
\n",
" \n",
" 2 | \n",
" Uttarahalli | \n",
" 3 BHK | \n",
" 1440.0 | \n",
" 2.0 | \n",
" 62.00 | \n",
" 3 | \n",
" 4305.555556 | \n",
"
\n",
" \n",
" 3 | \n",
" Lingadheeranahalli | \n",
" 3 BHK | \n",
" 1521.0 | \n",
" 3.0 | \n",
" 95.00 | \n",
" 3 | \n",
" 6245.890861 | \n",
"
\n",
" \n",
" 4 | \n",
" Kothanur | \n",
" 2 BHK | \n",
" 1200.0 | \n",
" 2.0 | \n",
" 51.00 | \n",
" 2 | \n",
" 4250.000000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" location size total_sqft bath price bhk \\\n",
"0 Electronic City Phase II 2 BHK 1056.0 2.0 39.07 2 \n",
"1 Chikka Tirupathi 4 Bedroom 2600.0 5.0 120.00 4 \n",
"2 Uttarahalli 3 BHK 1440.0 2.0 62.00 3 \n",
"3 Lingadheeranahalli 3 BHK 1521.0 3.0 95.00 3 \n",
"4 Kothanur 2 BHK 1200.0 2.0 51.00 2 \n",
"\n",
" price_per_sqft \n",
"0 3699.810606 \n",
"1 4615.384615 \n",
"2 4305.555556 \n",
"3 6245.890861 \n",
"4 4250.000000 "
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df5=df4.copy()\n",
"df5['price_per_sqft']=df5['price']*100000/df5['total_sqft']\n",
"df5.head()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "ad0a2319",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 1.320000e+04\n",
"mean 7.920759e+03\n",
"std 1.067272e+05\n",
"min 2.678298e+02\n",
"25% 4.267701e+03\n",
"50% 5.438331e+03\n",
"75% 7.317073e+03\n",
"max 1.200000e+07\n",
"Name: price_per_sqft, dtype: float64"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df5_stats=df5['price_per_sqft'].describe()\n",
"df5_stats"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "fa41ad05",
"metadata": {},
"outputs": [],
"source": [
"df5.to_csv(\"bhp.csv\",index=False)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "17d613ae",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(13200, 7)"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df5.shape"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "9cc20326",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Whitefield 533\n",
"Sarjapur Road 392\n",
"Electronic City 304\n",
"Kanakpura Road 264\n",
"Thanisandra 235\n",
" ... \n",
"Rajanna Layout 1\n",
"Subramanyanagar 1\n",
"Lakshmipura Vidyaanyapura 1\n",
"Malur Hosur Road 1\n",
"Abshot Layout 1\n",
"Name: location, Length: 1287, dtype: int64"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df5.location = df5.location.apply(lambda x: x.strip())\n",
"location_stats = df5['location'].value_counts(ascending=False)\n",
"location_stats"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "b0806611",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"13200"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"location_stats.values.sum()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "d9984a8b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"240"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(location_stats[location_stats>10])"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "59cac967",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1287"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(location_stats)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "2fe2b271",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1047"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(location_stats[location_stats<=10])"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "f3cddd30",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"BTM 1st Stage 10\n",
"Gunjur Palya 10\n",
"Nagappa Reddy Layout 10\n",
"Sector 1 HSR Layout 10\n",
"Thyagaraja Nagar 10\n",
" ..\n",
"Rajanna Layout 1\n",
"Subramanyanagar 1\n",
"Lakshmipura Vidyaanyapura 1\n",
"Malur Hosur Road 1\n",
"Abshot Layout 1\n",
"Name: location, Length: 1047, dtype: int64"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"location_stats_less_than_10 = location_stats[location_stats<=10]\n",
"location_stats_less_than_10"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "6be6b2e6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1287"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(df5.location.unique())"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "5a9ea722",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"241"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df5.location = df5.location.apply(lambda x: 'other' if x in location_stats_less_than_10 else x)\n",
"len(df5.location.unique())"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "bccc5a57",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" location | \n",
" size | \n",
" total_sqft | \n",
" bath | \n",
" price | \n",
" bhk | \n",
" price_per_sqft | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Electronic City Phase II | \n",
" 2 BHK | \n",
" 1056.0 | \n",
" 2.0 | \n",
" 39.07 | \n",
" 2 | \n",
" 3699.810606 | \n",
"
\n",
" \n",
" 1 | \n",
" Chikka Tirupathi | \n",
" 4 Bedroom | \n",
" 2600.0 | \n",
" 5.0 | \n",
" 120.00 | \n",
" 4 | \n",
" 4615.384615 | \n",
"
\n",
" \n",
" 2 | \n",
" Uttarahalli | \n",
" 3 BHK | \n",
" 1440.0 | \n",
" 2.0 | \n",
" 62.00 | \n",
" 3 | \n",
" 4305.555556 | \n",
"
\n",
" \n",
" 3 | \n",
" Lingadheeranahalli | \n",
" 3 BHK | \n",
" 1521.0 | \n",
" 3.0 | \n",
" 95.00 | \n",
" 3 | \n",
" 6245.890861 | \n",
"
\n",
" \n",
" 4 | \n",
" Kothanur | \n",
" 2 BHK | \n",
" 1200.0 | \n",
" 2.0 | \n",
" 51.00 | \n",
" 2 | \n",
" 4250.000000 | \n",
"
\n",
" \n",
" 5 | \n",
" Whitefield | \n",
" 2 BHK | \n",
" 1170.0 | \n",
" 2.0 | \n",
" 38.00 | \n",
" 2 | \n",
" 3247.863248 | \n",
"
\n",
" \n",
" 6 | \n",
" Old Airport Road | \n",
" 4 BHK | \n",
" 2732.0 | \n",
" 4.0 | \n",
" 204.00 | \n",
" 4 | \n",
" 7467.057101 | \n",
"
\n",
" \n",
" 7 | \n",
" Rajaji Nagar | \n",
" 4 BHK | \n",
" 3300.0 | \n",
" 4.0 | \n",
" 600.00 | \n",
" 4 | \n",
" 18181.818182 | \n",
"
\n",
" \n",
" 8 | \n",
" Marathahalli | \n",
" 3 BHK | \n",
" 1310.0 | \n",
" 3.0 | \n",
" 63.25 | \n",
" 3 | \n",
" 4828.244275 | \n",
"
\n",
" \n",
" 9 | \n",
" other | \n",
" 6 Bedroom | \n",
" 1020.0 | \n",
" 6.0 | \n",
" 370.00 | \n",
" 6 | \n",
" 36274.509804 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" location size total_sqft bath price bhk \\\n",
"0 Electronic City Phase II 2 BHK 1056.0 2.0 39.07 2 \n",
"1 Chikka Tirupathi 4 Bedroom 2600.0 5.0 120.00 4 \n",
"2 Uttarahalli 3 BHK 1440.0 2.0 62.00 3 \n",
"3 Lingadheeranahalli 3 BHK 1521.0 3.0 95.00 3 \n",
"4 Kothanur 2 BHK 1200.0 2.0 51.00 2 \n",
"5 Whitefield 2 BHK 1170.0 2.0 38.00 2 \n",
"6 Old Airport Road 4 BHK 2732.0 4.0 204.00 4 \n",
"7 Rajaji Nagar 4 BHK 3300.0 4.0 600.00 4 \n",
"8 Marathahalli 3 BHK 1310.0 3.0 63.25 3 \n",
"9 other 6 Bedroom 1020.0 6.0 370.00 6 \n",
"\n",
" price_per_sqft \n",
"0 3699.810606 \n",
"1 4615.384615 \n",
"2 4305.555556 \n",
"3 6245.890861 \n",
"4 4250.000000 \n",
"5 3247.863248 \n",
"6 7467.057101 \n",
"7 18181.818182 \n",
"8 4828.244275 \n",
"9 36274.509804 "
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df5.head(10)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "8bc27536",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" location | \n",
" size | \n",
" total_sqft | \n",
" bath | \n",
" price | \n",
" bhk | \n",
" price_per_sqft | \n",
"
\n",
" \n",
" \n",
" \n",
" 9 | \n",
" other | \n",
" 6 Bedroom | \n",
" 1020.0 | \n",
" 6.0 | \n",
" 370.0 | \n",
" 6 | \n",
" 36274.509804 | \n",
"
\n",
" \n",
" 45 | \n",
" HSR Layout | \n",
" 8 Bedroom | \n",
" 600.0 | \n",
" 9.0 | \n",
" 200.0 | \n",
" 8 | \n",
" 33333.333333 | \n",
"
\n",
" \n",
" 58 | \n",
" Murugeshpalya | \n",
" 6 Bedroom | \n",
" 1407.0 | \n",
" 4.0 | \n",
" 150.0 | \n",
" 6 | \n",
" 10660.980810 | \n",
"
\n",
" \n",
" 68 | \n",
" Devarachikkanahalli | \n",
" 8 Bedroom | \n",
" 1350.0 | \n",
" 7.0 | \n",
" 85.0 | \n",
" 8 | \n",
" 6296.296296 | \n",
"
\n",
" \n",
" 70 | \n",
" other | \n",
" 3 Bedroom | \n",
" 500.0 | \n",
" 3.0 | \n",
" 100.0 | \n",
" 3 | \n",
" 20000.000000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" location size total_sqft bath price bhk \\\n",
"9 other 6 Bedroom 1020.0 6.0 370.0 6 \n",
"45 HSR Layout 8 Bedroom 600.0 9.0 200.0 8 \n",
"58 Murugeshpalya 6 Bedroom 1407.0 4.0 150.0 6 \n",
"68 Devarachikkanahalli 8 Bedroom 1350.0 7.0 85.0 8 \n",
"70 other 3 Bedroom 500.0 3.0 100.0 3 \n",
"\n",
" price_per_sqft \n",
"9 36274.509804 \n",
"45 33333.333333 \n",
"58 10660.980810 \n",
"68 6296.296296 \n",
"70 20000.000000 "
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df5[df5.total_sqft/df5.bhk<300].head()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "091e3fda",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(13200, 7)"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df5.shape"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "458efc85",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(12456, 7)"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df6 = df5[~(df5.total_sqft/df5.bhk<300)]\n",
"df6.shape"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "d3da79d6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 12456.000000\n",
"mean 6308.502826\n",
"std 4168.127339\n",
"min 267.829813\n",
"25% 4210.526316\n",
"50% 5294.117647\n",
"75% 6916.666667\n",
"max 176470.588235\n",
"Name: price_per_sqft, dtype: float64"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df6.price_per_sqft.describe()"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "fb2efbc6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(10242, 7)"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def remove_pps_outliers(df):\n",
" df_out = pd.DataFrame()\n",
" for key, subdf in df.groupby('location'):\n",
" m = np.mean(subdf.price_per_sqft)\n",
" st = np.std(subdf.price_per_sqft)\n",
" reduced_df = subdf[(subdf.price_per_sqft>(m-st)) & (subdf.price_per_sqft<=(m+st))]\n",
" df_out = pd.concat([df_out,reduced_df],ignore_index=True)\n",
" return df_out\n",
"df7 = remove_pps_outliers(df6)\n",
"df7.shape"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "c5bba9cf",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABNYAAANVCAYAAAC09nNHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB4KklEQVR4nOzdeXTddZ0//udNk5RwQ8LaTToVBUexIAjzFWip7MuIFOoMKuOCy+8L04JA6ajFBXChgNiqR1tcGHD94jhQkFEQFEEKMoOAIsigOGxKF5WakEto2uT+/sg0NHRLbrPn8TjnnnyW9+eT16d8yMl55r0UyuVyOQAAAABAr1QNdgEAAAAAMBwJ1gAAAACgAoI1AAAAAKiAYA0AAAAAKiBYAwAAAIAKCNYAAAAAoAKCNQAAAACogGANAAAAACogWAMAAACACgjWAAD6wNVXX51CodD1qa6uzsSJE/O2t70tv/vd7yq+78tf/vKcdtppfXLtE088kUKhkKuvvnqL161vVygUcs0112x0/sILL0yhUMif//zniuoCABgpqge7AACAkeSqq67Kq1/96rzwwgu566678ulPfzo//elP89///d/Zaaeden2/pUuXpqGhoaJaXnrtxIkT8/Of/zyvfOUre3yPj3zkI3nLW96SmpqaimoAABjJ9FgDAOhDU6dOzUEHHZTDDjssH/nIR/LhD384q1atyvXXX1/R/fbff/9eBWFbunbs2LE56KCDsttuu/Xo+uOPPz7/8z//kyuuuKKi7z+Ynn/++cEuAQAYBQRrAAD96MADD0ySrFy5suvYCy+8kPPOOy/77bdfGhsbs/POO+fggw/ODTfcsNH1Lx3OuS3X9nQo6HpHHHFEjj322Hzyk5/Mc889t8W2t956a2bOnJndd9892223Xfbcc8+cfvrpmxwuesMNN2TffffN2LFj84pXvCKf//znu4aXbuhLX/pSZsyYkXHjxqVYLGafffbJZZddlrVr13Zrd9hhh2Xq1Kn52c9+lkMOOSTbb7993vve9/boGQEAtoWhoAAA/ejxxx9PkrzqVa/qOrZmzZo8++yzmTdvXl72spelra0tP/7xjzNr1qxcddVVede73rXZ+23LtZW49NJLs//+++czn/lMPvGJT2y23e9///scfPDBef/735/GxsY88cQTWbhwYaZPn55f//rXXUNJb7755syaNSszZszId7/73axbty6XX355t+Bxw3ueeuqp2WOPPVJbW5tf/epX+fSnP53//u//zr/+6792a7t8+fK84x3vyAc/+MFcfPHFqary92MAoP8J1gAA+lB7e3vWrVvXNcfapz71qcyYMSMnnnhiV5vGxsZcddVV3a458sgjs3r16nzuc5/bYji2LddW4nWve11OPfXULFy4MLNnz86ECRM22e6MM87o2i6XyznkkENy2GGHZcqUKbnpppu6nv/jH/94Xvayl+VHP/pRamtrkyTHHXdcXv7yl290z4ULF3Ztd3R05NBDD80uu+yS97znPfnsZz/bbc66Z599Nt/73vdyxBFH9MVjAwD0iD/lAQD0oYMOOig1NTXZYYcdctxxx2WnnXbKDTfckOrq7n/P/N73vpdp06alvr4+1dXVqampyZVXXplHHnlkq99jW66txKc+9amsXbs2F1100WbbrFq1KmeccUYmT57cVdOUKVOSpKuuUqmUX/ziFznppJO6QrUkqa+vz5vf/OaN7vnAAw/kxBNPzC677JIxY8akpqYm73rXu9Le3p7f/va33drutNNOQjUAYMAJ1gAA+tA3vvGN3Hvvvbntttty+umn55FHHsnb3/72bm2uu+66nHLKKXnZy16Wb33rW/n5z3+ee++9N+9973vzwgsvbPH+23JtpV7+8pdn9uzZ+drXvpbf/e53G53v6OjIMccck+uuuy4f/OAH85Of/CT/9V//lXvuuSdJ0tramiRZvXp1yuVyxo8fv9E9XnrsqaeeyqGHHpo//vGP+fznP58777wz9957b770pS91u+d6EydO7JNnBQDoDUNBAQD60Gte85quBQsOP/zwtLe352tf+1r+/d//Pf/wD/+QJPnWt76VPfbYI9/97ne7Tdi/Zs2ard5/W67dFh/96Efzr//6rzn//PPz2te+ttu5hx56KL/61a9y9dVX593vfnfX8ccee6xbu5122imFQmGT86mtWLGi2/7111+fUqmU6667rqvnW5L88pe/3GR9L134AABgIOixBgDQjy677LLstNNO+fjHP56Ojo4knSFQbW1ttzBoxYoVm1zZ86W25dptscsuu+RDH/pQ/v3f/z3/9V//tVFNSTJ27Nhux7/85S932y8WiznwwANz/fXXp62tret4S0tL/uM//mOr9yyXy/nqV7+67Q8DANBHBGsAAP1op512yvz58/PII4/kO9/5TpLkhBNOyKOPPprZs2fntttuy9e//vVMnz69R8MZt+XabXXOOedk0qRJuemmm7odf/WrX51XvvKV+fCHP5z/9//+X370ox/lzDPPzPe///2N7vGJT3wif/zjH3Psscfm+uuvz7XXXpujjjoq9fX13cLCo48+OrW1tXn729+em266KUuXLs2xxx6b1atX9/tzAgD0lGANAKCfnXXWWfmbv/mbfOITn0h7e3ve85735JJLLslNN92Uv//7v8+ll16aD3/4wzn11FM3ef2GgdO2XLuttt9++1x44YUbHa+pqcmNN96YV73qVTn99NPz9re/PatWrcqPf/zjjdoed9xxufbaa/OXv/wlb33rWzN37tycfPLJmTlzZnbccceudq9+9atz7bXXZvXq1Zk1a1bOOuus7LfffvnCF77QZ88DALCtCuVyuTzYRQAAsGk777xz3vve9+byyy8f0GsH0tq1a7PffvvlZS97WW655ZbBLgcAoMcsXgAAMAQ9+OCD+eEPf5jVq1fn4IMPHrBrB8L73ve+HH300Zk4cWJWrFiRK664Io888kg+//nPD3ZpAAC9IlgDABiCzj777Pz3f/935s2bl1mzZg3YtQPhueeey7x58/KnP/0pNTU1ef3rX58f/vCHOeqoowa7NACAXjEUFAAAAAAqYPECAAAAAKiAYA0AAAAAKiBYAwAAAIAKWLwgSUdHR5555pnssMMOKRQKg10OAAAAAIOkXC7nueeey6RJk1JVteU+aYK1JM8880wmT5482GUAAAAAMEQ8/fTT2X333bfYRrCWZIcddkjS+Q/W0NAwyNUAAAAAMFiam5szefLkrrxoSwRrSdfwz4aGBsEaAAAAAD2aLsziBQAAAABQAcEaAAAAAFRAsAYAAAAAFTDHWg+Vy+WsW7cu7e3tg13KiDVmzJhUV1f3aAwzAAAAwGATrPVAW1tbli9fnueff36wSxnxtt9++0ycODG1tbWDXQoAAADAFgnWtqKjoyOPP/54xowZk0mTJqW2tlaPqn5QLpfT1taWP/3pT3n88cez1157parKSGUAAABg6BKsbUVbW1s6OjoyefLkbL/99oNdzohWV1eXmpqaPPnkk2lra8t222032CUBAAAAbJYuQT2k99TA8O8MAAAADBdSDAAAAACogGANAAAAACogWAMAAACACgjWBlBra7JyZefX/rZgwYL83d/9XXbYYYeMGzcuJ510Uh599NEtXnP11VenUCh0ferr63PAAQfkuuuu69busMMOyznnnLPJ63fcccfN7ifJI488kt133z2zZs3KmjVrKn08AAAAgEEnWBsAy5Yls2Yl9fXJhAmdX2fNSu66q/++5x133JE5c+bknnvuya233pp169blmGOOSalU2uJ1DQ0NWb58eZYvX54HHnggxx57bE455ZSthnI9ce+99+bQQw/Nsccem+9973sZO3bsNt8TAAAAYLAI1vrZkiXJjBnJjTcmHR2dxzo6OvcPPTS54or++b4333xzTjvttLz2ta/N6173ulx11VV56qmnct99923xukKhkAkTJmTChAnZa6+98qlPfSpVVVV58MEHt6me2267LUcccUTe85735Morr8yYMWO26X4AAAAAg02w1o+WLUvmzEnK5WTduu7n1q3rPD57dv/2XFuvqakpSbLzzjv3+Jr29vZ8/etfT5K8/vWvr/h7L126NG9605ty/vnn5zOf+UzF9wEAAAAYSqoHu4CRbOHCZMyYjUO1DY0ZkyxalEyb1n91lMvlzJ07N9OnT8/UqVO32LapqSn19fVJktbW1tTU1OQrX/lKXvnKV3Zrt3jx4nzta1/rdmzdunXZbrvtuh1raWnJP/7jP+b888/P/Pnz++BpAAAAAIYGwVo/aW1NbrjhxeGfm7NuXbJ0aWf7urr+qeXMM8/Mgw8+mGXLlm217Q477JD7778/SfL888/nxz/+cU4//fTssssuefOb39zV7p/+6Z/ykY98pNu11113XS6++OJux+rq6jJ9+vR89atfzdvf/va85jWv6YMnAgAAABh8grV+0ty89VBtvY6Ozvb9EaydddZZ+f73v5+f/exn2X333bfavqqqKnvuuWfX/r777ptbbrkll156abdgrbGxsVu7JBk3btxG9xszZkyuv/76vOUtb8nhhx+e2267LXvvvfc2PBEAAADA0GCOtX7S0JBU9fBft6qqs31fKpfLOfPMM3Pdddfltttuyx577FHxvcaMGZPW1taKrx87dmyuu+66/J//839y+OGH56GHHqr4XgAAAABDhWCtn9TVJTNnJtVb6RNYXZ2cfHLf91abM2dOvvWtb+U73/lOdthhh6xYsSIrVqzYakBWLpe72j7++OP5yle+kh/96EeZOXPmNtVTW1uba6+9NoccckiOOOKI/PrXv96m+wEAAAAMNsFaP5o7N2lv33Kb9vbk3HP7/nsvWbIkTU1NOeywwzJx4sSuz3e/+90tXtfc3NzV9jWveU0++9nP5hOf+MRG86lVoqamJv/2b/+WGTNm5IgjjsiDDz64zfcEAAAAGCyFcrlcHuwiBltzc3MaGxvT1NSUhpeMyXzhhRfy+OOPZ4899thoxcueuOKKZPbsjVcHra7uDNUWL07OOGNbn2Dk2NZ/bwAAAIBtsaWc6KX0WOtnZ5yR3Hln57DQ9XOuVVV17t95p1ANAAAAYLiyKugAmDat89Pa2rn6Z0ND/6wACgAAAMDAEawNoLo6gRoAAADASGEoKAAAAABUQLAGAAAAABUQrAEAAACMEqW2UgoXFVK4qJBSW2mwyxn2BGsAAAAAUAHBGgAAAABUwKqgAAAAACPYhkM+S2s3vZ0kxdrigNU0UgjWAAAAAEaw+gX1mzw+/vLx3fbLF5QHopwRxVDQEWrJkiXZd99909DQkIaGhhx88MG56aabtnjN1VdfnUKh0PWpr6/PAQcckOuuu65bu8MOOyznnHPOJq/fcccdN7ufJI888kh23333zJo1K2vWrKn08QAAAAAGnR5rA6TUVupKiFvmt/R798rdd989l1xySfbcc88kyde//vXMnDkzDzzwQF772tdu9rqGhoY8+uijSZLnnnsuV111VU455ZQ8/PDD+du//dttqunee+/N8ccfn5kzZ+YrX/lKxowZs033AwAAALauZX5L13Zpbamrp9rKeStTrDH8c1vosTZCvfnNb87f//3f51WvelVe9apX5dOf/nTq6+tzzz33bPG6QqGQCRMmZMKECdlrr73yqU99KlVVVXnwwQe3qZ7bbrstRxxxRN7znvfkyiuvFKoBAADAACnWFl/8bBCkFWuK3c7Re4K1UaC9vT3XXHNNSqVSDj744F5d9/Wvfz1J8vrXv77i77906dK86U1vyvnnn5/PfOYzFd8HAAAAYCgxFLQfDfaqG7/+9a9z8MEH54UXXkh9fX2WLl2avffee4vXNDU1pb6+c8hqa2trampq8pWvfCWvfOUru7VbvHhxvva1r3U7tm7dumy33XbdjrW0tOQf//Efc/7552f+/Pl98FQAAAAAQ4NgrR8N9qobf/u3f5tf/vKX+etf/5prr7027373u3PHHXdsMVzbYYcdcv/99ydJnn/++fz4xz/O6aefnl122SVvfvObu9r90z/9Uz7ykY90u/a6667LxRdf3O1YXV1dpk+fnq9+9at5+9vfnte85jV9+IQAAABAbxRri1b/7EOCtRGstra2a/GCAw88MPfee28+//nP58tf/vJmr6mqquq6Jkn23Xff3HLLLbn00ku7BWuNjY3d2iXJuHHjNrrfmDFjcv311+ctb3lLDj/88Nx2221b7TUHAAAAMBwI1vrRUFt1o1wuZ82aNb2+bsyYMWltba34+44dOzbXXXdd/uEf/iGHH354fvKTn2Tq1KkV3w8AAABgKBCs9aPNzZ22ftWN/nT++efn+OOPz+TJk/Pcc8/lmmuuye23356bb755i9eVy+WsWLEiSecca7feemt+9KMf5eMf//g21VNbW5trr702p5xySo444oj85Cc/yT777LNN9wQAAAAYTIK1EWrlypV55zvfmeXLl6exsTH77rtvbr755hx99NFbvK65uTkTJ05M0tnTbMqUKfnEJz6RD33oQ9tcU01NTf7t3/4tb3/727vCtX333Xeb7wsAAAAwGArlcnnUz1jX3NycxsbGNDU1paGhodu5F154IY8//nj22GOPjVa87I1SW6lrMYOW+S393mNtuOqrf28AAACASmwpJ3opPdYGiFU3AAAAAEaWqsEuAAAAAACGI8EaAAAAAFRAsAYAAAAAFRCs9ZA1HgaGf2cAAABguBCsbUVNTU2S5Pnnnx/kSkaH9f/O6//dAQAAAIYqq4JuxZgxY7Ljjjtm1apVSZLtt98+hUJhkKsaecrlcp5//vmsWrUqO+64Y8aMGTPYJQEAAABskWCtByZMmJAkXeEa/WfHHXfs+vcGAABg6Cu1lVK/oD5J0jK/JcXa4iBXBANHsNYDhUIhEydOzLhx47J27drBLmfEqqmp0VMNAAAAGDYEa70wZswYwQ8AAAAASQRrAAAAQC+V2kovbq/d9HYSw0IZ8QRrAAAAQK+sn1PtpcZfPr7bfvmC8kCUA4OmarALAAAAAIDhSI81AAAAoFda5rd0bZfWlrp6qq2ctzLFGsM/GT0EawAAAECvbG7utGJN0bxqjCqGggIAAABABQRrAAAAAFABQ0EBAACAihVri1b/ZNTSYw0AAAAAKiBYAwAAACpWaiulcFEhhYsK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LF++vOvzwx/+sNs9zjnnnCxdujTXXHNNli1blpaWlpxwwglpb28f6McBAAAAYBSpHsxv/uY3v7nb/qc//eksWbIk99xzT1772tcmScaOHZsJEyZs8vqmpqZceeWV+eY3v5mjjjoqSfKtb30rkydPzo9//OMce+yx/fsAAAAAANtgwyGfpbWb3k6SYm1xwGqi5wY1WNtQe3t7vve976VUKuXggw/uOn777bdn3Lhx2XHHHfPGN74xn/70pzNu3LgkyX333Ze1a9fmmGOO6Wo/adKkTJ06NXffffdmg7U1a9ZkzZo1XfvNzc399FQAAAAAm1e/oH6Tx8dfPr7bfvmC8kCUQy8N+uIFv/71r1NfX5+xY8fmjDPOyNKlS7P33nsnSY4//vh8+9vfzm233ZbPfvazuffee3PEEUd0hWIrVqxIbW1tdtppp273HD9+fFasWLHZ77lgwYI0NjZ2fSZPntx/DwgAAADAiDToPdb+9m//Nr/85S/z17/+Nddee23e/e5354477sjee++dt771rV3tpk6dmgMPPDBTpkzJD37wg8yaNWuz9yyXyykUCps9P3/+/MydO7drv7m5WbgGAAAADLiW+S1d26W1pa6eaivnrUyxxvDPoW7Qg7Xa2trsueeeSZIDDzww9957bz7/+c/ny1/+8kZtJ06cmClTpuR3v/tdkmTChAlpa2vL6tWru/VaW7VqVQ455JDNfs+xY8dm7NixffwkAAAAAL2zubnTijVF86oNA4M+FPSlyuVyt/nPNvSXv/wlTz/9dCZOnJgkOeCAA1JTU5Nbb721q83y5cvz0EMPbTFYAwAAAIBtNag91s4///wcf/zxmTx5cp577rlcc801uf3223PzzTenpaUlF154Yd7ylrdk4sSJeeKJJ3L++edn1113zcknn5wkaWxszPve976cd9552WWXXbLzzjtn3rx52WeffbpWCQUAAACA/jCowdrKlSvzzne+M8uXL09jY2P23Xff3HzzzTn66KPT2tqaX//61/nGN76Rv/71r5k4cWIOP/zwfPe7380OO+zQdY9Fixaluro6p5xySlpbW3PkkUfm6quvzpgxYwbxyQAAAAB6p1hbtPrnMFMol8uj/r9Yc3NzGhsb09TUlIaGhsEuBwAAAIBB0pucaMjNsQYAAAAAw4FgDQAAAAAqIFgDAAAAgAoI1gAAAACgAoI1AAAAAKiAYA0AAAAAKiBYAwAAAIAKCNYAAAAAoAKCNQAAAACogGANAAAAACogWAMAAACACgjWAAAAYJQqtZVSuKiQwkWFlNpKg13OqOe/x/AjWAMAAACACgjWAAAAAKAC1YNdAAAAADBwNhxiWFq76e0kKdYWB6ym0cx/j+GtUC6Xy4NdxGBrbm5OY2Njmpqa0tDQMNjlAAAAQL8pXFToUbvyBaM+LhgQ/nsMPb3JiQwFBQAAAIAKGAoKAAAAo0jL/Jau7dLaUsZfPj5JsnLeyhRrDDccaP57DG+CNQAAABhFNjdXV7GmaB6vQeC/x/BmKCgAAAAAVECwBgAAAAAVMBQUAAAARqlibdFqk0OI/x7Djx5rAAAAAFABwRoAAAAAVECwBgAAAAAVEKwBAAAAvVJqK6VwUSGFiwoptZUGuxwYNII1AAAAAKiAYA0AAAAAKlA92AUAAAAAQ9+GQz5Laze9nSTF2uKA1QSDTbAGAAAAbFX9gvpNHh9/+fhu++ULygNRDgwJhoICAAAAQAX0WAMAAAC2qmV+S9d2aW2pq6faynkrU6wx/JPRSbAGAAAAbNXm5k4r1hTNq8aoZSgoAAAAAFRAsAYAAAAAFTAUFAAAAOiVYm1xWK/+WWorda1y2jK/xVBWKqbHGgAAAABUQLAGAAAAABUwFBQAAAAY8UptpRe31256O9n86qewKYI1AAAAYMRbP6faS42/fHy3/eE8dxwDz1BQAAAAAKiAHmsAAADAiNcyv6Vru7S21NVTbeW8lSnWGP5JZQRrAAAAwIi3ubnTijVF86pRMUNBAQAAAKACgjUAAAAAqIChoAAAAMCoUqwtWv2TPqHHGgAAAABUQLAGAAAAABUQrAEAAABABQRrAAAAAFABwRoAAAAAVECwBgAAAAAVEKwBAAAAQAUEawAAAABQAcEaAAAAAFRAsAYAAAAAFRCsAQAAAEAFBGsAAAAAUAHBGgAAAIxSpbZSChcVUriokFJbabDLgWFHsAYAAAAAFRCsAQAAAEAFqge7AAAAAGDgbDjks7R209tJUqwtDlhNMFwJ1gAAAGAUqV9Qv8nj4y8f322/fEF5IMqBYc1QUAAAAACogB5rAAAAMIq0zG/p2i6tLXX1VFs5b2WKNYZ/Qm8I1gAAAGAU2dzcacWaonnVoJcMBQUAAACACgjWAAAAAKAChoICAADAKFWsLVr9E7aBHmsAAAAAUAHBGgAAAABUQLAGAAAAABUQrAEAAABABQRrAAAAAFABwRoAAAAAVECwBgAAAAAVEKwBAAAAQAWqe9O4qakpS5cuzZ133pknnngizz//fHbbbbfsv//+OfbYY3PIIYf0V50AAAAAMKT0qMfa8uXL8//9f/9fJk6cmE984hMplUrZb7/9cuSRR2b33XfPT3/60xx99NHZe++9893vfre/awYAAACAQdejHmuve93r8q53vSv/9V//lalTp26yTWtra66//vosXLgwTz/9dObNm9enhQIAAADAUFIol8vlrTX605/+lN12263HN+1t+8HW3NycxsbGNDU1paGhYbDLAQAAAGCQ9CYn6tFQ0N6GZMMpVAMAAACASvR6VdCvf/3r+cEPftC1/8EPfjA77rhjDjnkkDz55JN9WhwAAAAADFW9DtYuvvji1NXVJUl+/vOf54tf/GIuu+yy7Lrrrjn33HP7vEAAAAAAGIp6tHjBhp5++unsueeeSZLrr78+//AP/5D/+3//b6ZNm5bDDjusr+sDAAAAgCGp1z3W6uvr85e//CVJcsstt+Soo45Kkmy33XZpbW3t2+oAAAAAYIjqdY+1o48+Ou9///uz//7757e//W3e9KY3JUkefvjhvPzlL+/r+gAAAABgSOp1j7UvfelLOfjgg/OnP/0p1157bXbZZZckyX333Ze3v/3tfV4gAAAAAAxFhXK5XB7sIgZbc3NzGhsb09TUlIaGhsEuBwAAAIBB0pucqNc91pLkzjvvzDve8Y4ccsgh+eMf/5gk+eY3v5lly5ZVcjsAAAAAGHZ6Haxde+21OfbYY1NXV5f7778/a9asSZI899xzufjii/u8QAAAAAAYinodrH3qU5/KFVdcka9+9aupqanpOn7IIYfk/vvv79PiAAAAAGCo6nWw9uijj2bGjBkbHW9oaMhf//rXvqgJAAAAAIa8XgdrEydOzGOPPbbR8WXLluUVr3hFnxQFAAAAAENdr4O1008/PWeffXb+8z//M4VCIc8880y+/e1vZ968eZk9e3Z/1AgAAAAAQ051by/44Ac/mKamphx++OF54YUXMmPGjIwdOzbz5s3LmWee2R81AgAAAMCQUyiXy+VKLnz++efzm9/8Jh0dHdl7771TX1/f17UNmObm5jQ2NqapqSkNDQ2DXQ4AAAAAg6Q3OVGvh4Ku98wzz+Qvf/lL9tlnn9TX16fCfA4AAAAAhqVeB2t/+ctfcuSRR+ZVr3pV/v7v/z7Lly9Pkrz//e/Peeed1+cFAgAAAMBQ1Otg7dxzz01NTU2eeuqpbL/99l3H3/rWt+bmm2/u0+IAAAAAYKjq9eIFt9xyS370ox9l991373Z8r732ypNPPtlnhQEAAADAUNbrHmulUqlbT7X1/vznP2fs2LF9UhQAAAAADHW9DtZmzJiRb3zjG137hUIhHR0d+cxnPpPDDz+8T4sDAAAAgKGq10NBP/OZz+Swww7LL37xi7S1teWDH/xgHn744Tz77LO56667+qNGAAAAABhyet1jbe+9986DDz6Y//N//k+OPvrolEqlzJo1Kw888EBe+cpX9keNAAAAADDkFMrlcnmwixhszc3NaWxsTFNTUxoaGga7HAAAAAAGSW9yol73WEuS1atX5/LLL8/73ve+vP/9789nP/vZPPvss72+z5IlS7LvvvumoaEhDQ0NOfjgg3PTTTd1nS+Xy7nwwgszadKk1NXV5bDDDsvDDz/c7R5r1qzJWWedlV133TXFYjEnnnhi/vCHP1TyWAAAAADQY70O1u64447sscce+cIXvpDVq1fn2WefzRe+8IXsscceueOOO3p1r9133z2XXHJJfvGLX+QXv/hFjjjiiMycObMrPLvsssuycOHCfPGLX8y9996bCRMm5Oijj85zzz3XdY9zzjknS5cuzTXXXJNly5alpaUlJ5xwQtrb23v7aAAAAADQY70eCjp16tQccsghWbJkScaMGZMkaW9vz+zZs3PXXXfloYce2qaCdt5553zmM5/Je9/73kyaNCnnnHNOPvShDyXp7J02fvz4XHrppTn99NPT1NSU3XbbLd/85jfz1re+NUnyzDPPZPLkyfnhD3+YY489tkff01BQAAAAAJJ+Hgr6+9//Puedd15XqJYkY8aMydy5c/P73/++99X+r/b29lxzzTUplUo5+OCD8/jjj2fFihU55phjutqMHTs2b3zjG3P33XcnSe67776sXbu2W5tJkyZl6tSpXW02Zc2aNWlubu72AQAAAIDe6HWw9vrXvz6PPPLIRscfeeSR7Lfffr0u4Ne//nXq6+szduzYnHHGGVm6dGn23nvvrFixIkkyfvz4bu3Hjx/fdW7FihWpra3NTjvttNk2m7JgwYI0NjZ2fSZPntzrugEAAAAY3ap7e8EHPvCBnH322Xnsscdy0EEHJUnuueeefOlLX8oll1ySBx98sKvtvvvuu9X7/e3f/m1++ctf5q9//WuuvfbavPvd7+42V1uhUOjWvlwub3TspbbWZv78+Zk7d27XfnNzs3ANAAAAgF7pdbD29re/PUnywQ9+cJPnCoVCV7DVkwUEamtrs+eeeyZJDjzwwNx77735/Oc/3zWv2ooVKzJx4sSu9qtWrerqxTZhwoS0tbVl9erV3XqtrVq1Kocccshmv+fYsWMzduzYHjwtAAAAAGxar4O1xx9/vD/q6FIul7NmzZrssccemTBhQm699dbsv//+SZK2trbccccdufTSS5MkBxxwQGpqanLrrbfmlFNOSZIsX748Dz30UC677LJ+rRMAAACA0a3XwdqUKVP67Juff/75Of744zN58uQ899xzueaaa3L77bfn5ptvTqFQyDnnnJOLL744e+21V/baa69cfPHF2X777XPqqacmSRobG/O+970v5513XnbZZZfsvPPOmTdvXvbZZ58cddRRfVYnAAAAALxUr4O1b3zjG1s8/653vavH91q5cmXe+c53Zvny5WlsbMy+++6bm2++OUcffXSSzuGmra2tmT17dlavXp03vOENueWWW7LDDjt03WPRokWprq7OKaecktbW1hx55JG5+uqru61aCgAAAAB9rVAul8u9ueClK3CuXbs2zz//fGpra7P99tvn2Wef7dMCB0Jzc3MaGxvT1NSUhoaGwS4HAAAAgEHSm5yoqrc3X716dbdPS0tLHn300UyfPj3/7//9v4qLBgAAAIDhpNfB2qbstddeueSSS3L22Wf3xe0AAAAAYMjrk2AtScaMGZNnnnmmr24HAAAAAENarxcv+P73v99tv1wuZ/ny5fniF7+YadOm9VlhAAAAADCU9TpYO+mkk7rtFwqF7LbbbjniiCPy2c9+tq/qAgAAAIAhrdfBWkdHR3/UAQAAAADDSp/NsXbddddl33337avbAQAAAMCQ1qtg7atf/Wr+8R//MaeeemruueeeJMltt92W/fffP+94xzty8MEH90uRAAAAADDU9DhYu/zyyzNnzpw8/vjjueGGG3LkkUfm4osvzimnnJKTTjopTz31VL785S/3Z60AAAAAMGT0eI61K6+8MldccUXe+9735vbbb88R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T/X03Rqqv88L1thIqVTK6173unzxi1/c6Nzzzz+f+++/Px/72Mdy//3357rrrstvf/vbnHjiid3anXPOOVm6dGmuueaaLFu2LC0tLTnhhBPS3t7e1ebUU0/NL3/5y9x88825+eab88tf/jLvfOc7+/35GDxberc2dP311+c///M/M2nSpI3OebfYlK29W7///e8zffr0vPrVr87tt9+eX/3qV/nYxz6W7bbbrquNd4tN2dq7de655+bmm2/Ot771rTzyyCM599xzc9ZZZ+WGG27oauPdYlPuuOOOzJkzJ/fcc09uvfXWrFu3Lsccc0xKpVJXm8suuywLFy7MF7/4xdx7772ZMGFCjj766Dz33HNdbbxfvNTW3i2/z1OpnvzcWs/v8/RGT96tIf37fBm2IEl56dKlW2zzX//1X+Uk5SeffLJcLpfLf/3rX8s1NTXla665pqvNH//4x3JVVVX55ptvLpfL5fJvfvObcpLyPffc09Xm5z//eTlJ+b//+7/7/kEYcjb3bv3hD38ov+xlLys/9NBD5SlTppQXLVrUdc67RU9s6t1661vfWn7HO96x2Wu8W/TEpt6t1772teVPfOIT3Y69/vWvL3/0ox8tl8veLXpu1apV5STlO+64o1wul8sdHR3lCRMmlC+55JKuNi+88EK5sbGxfMUVV5TLZe8XPfPSd2tT/D5PJTb3bvl9nm21qXdrKP8+r8ca26ypqSmFQiE77rhjkuS+++7L2rVrc8wxx3S1mTRpUqZOnZq77747SfLzn/88jY2NecMb3tDV5qCDDkpjY2NXG0afjo6OvPOd78y//Mu/5LWvfe1G571bVKKjoyM/+MEP8qpXvSrHHntsxo0blze84Q3dhvR5t6jU9OnT8/3vfz9//OMfUy6X89Of/jS//e1vc+yxxybxbtFzTU1NSZKdd945SfL4449nxYoV3d6dsWPH5o1vfGPXe+H9oide+m5tro3f5+mtTb1bfp+nL7z03Rrqv88L1tgmL7zwQj784Q/n1FNPTUNDQ5JkxYoVqa2tzU477dSt7fjx47NixYquNuPGjdvofuPGjetqw+hz6aWXprq6Oh/4wAc2ed67RSVWrVqVlpaWXHLJJTnuuONyyy235OSTT86sWbNyxx13JPFuUbkvfOEL2XvvvbP77runtrY2xx13XBYvXpzp06cn8W7RM+VyOXPnzs306dMzderUJOn6bz9+/PhubV/67ni/2JJNvVsv5fd5KrG5d8vv82yrTb1bQ/33+eqKr2TUW7t2bd72trelo6Mjixcv3mr7crmcQqHQtb/h9ubaMHrcd999+fznP5/777+/1++Ad4st6ejoSJLMnDkz5557bpJkv/32y913350rrrgib3zjGzd7rXeLrfnCF76Qe+65J9///vczZcqU/OxnP8vs2bMzceLEHHXUUZu9zrvFhs4888w8+OCDWbZs2UbnXvoO9OS98H6x3v/f3v3HVFX/fwB/XgHl5oWrAnp1IKAkcUmdgCU4QK2EXSUQKiw0yILIqdiMLGaWZuWmoM7GpHa9ptmCGro0NgaIgKmYCOYPRFPQahcxQkJR+XHf3z8+eeaFy6+jX3XwfGxn87zP+7zP+33Oa/je654f3cUWwPk8yWcptjifpwfBUmw97vN53rFGsrS2tuKVV15BdXU18vLypF+3AECj0aClpQUNDQ1m+9TV1Um/umo0Gly9erVTu9euXev0yywNDCUlJairq8PYsWNhbW0Na2trXL58GStWrICbmxsAxhbJ4+joCGtra2i1WrNyLy8v6StCjC2S49atW0hJSUFaWhrCwsIwadIkLFmyBNHR0di4cSMAxhb1bOnSpfjpp59QWFgIZ2dnqVyj0QBAp1/QO8YO44u60lVs3cX5PMnVVWxxPk/3q6vYetzn80ysUZ/d/U/4woULyM/Ph4ODg9l2X19f2NjYIC8vTyozGo04ffo0AgICAAD+/v5obGzEsWPHpDqlpaVobGyU6tDAsnDhQvz222+oqKiQljFjxiA5ORm5ubkAGFskz+DBgzF16tROn+w+f/48XF1dATC2SJ7W1la0trZi0CDz6ZSVlZX0yypji7oihMCSJUuQnZ2NAwcOwN3d3Wy7u7s7NBqNWey0tLSgqKhIigvGF1nSU2wBnM+TPD3FFufzJFdPsfXYz+dlf/aA+q2mpiZRXl4uysvLBQCRlpYmysvLxeXLl0Vra6t48cUXhbOzs6ioqBBGo1Fa7ty5I7WRmJgonJ2dRX5+vjhx4oSYNWuWmDx5smhra5PqhIaGikmTJokjR46II0eOiIkTJ4q5c+c+iiHTQ9JdbFnS8StCQjC2yLKeYis7O1vY2NiIr776Sly4cEFs3bpVWFlZiZKSEqkNxhZZ0lNsBQcHC29vb1FYWCguXbokDAaDsLW1Fenp6VIbjC2y5J133hFqtVocPHjQbD7V3Nws1Vm/fr1Qq9UiOztbnDp1Srz66qti9OjR4t9//5XqML6oo55ii/N5kqs3f7c64nyeeqM3sfU4z+eZWKNOCgsLBYBOS2xsrKiurra4DYAoLCyU2rh165ZYsmSJGDFihFAqlWLu3LniypUrZsepr68XMTExws7OTtjZ2YmYmBjR0NDwcAdLD1V3sWWJpf+IGVtkSW9iS6/XCw8PD2FraysmT54s9u7da9YGY4ss6Sm2jEajiIuLE2PGjBG2trbC09NTpKamCpPJJLXB2CJLuppPGQwGqY7JZBIff/yx0Gg0YsiQISIoKEicOnXKrB3GF3XUU2xxPk9y9ebvVkecz1Nv9Da2Htf5vOK/QRAREREREREREVEf8B1rREREREREREREMjCxRkREREREREREJAMTa0RERERERERERDIwsUZERERERERERCQDE2tEREREREREREQyMLFGREREREREREQkAxNrREREREREREREMjCxRkREREREREREJAMTa0REREQPkJubGzZv3vyou0FEREREDwETa0RERNQvKRSKbpe4uLge99+7d+8D79fNmzexcuVKjBs3Dra2tnBycsKMGTOwf//+B36sh6WmpsbiOV6wYMEDO0Zfr0dCQgKsrKzw/fffP7A+EBEREXVk/ag7QERERPT/wWg0Sv/OzMzE6tWrUVVVJZUplcpH0S0kJibi2LFj+PLLL6HValFfX4/Dhw+jvr7+kfTnXi0tLRg8eLDs/fPz8+Ht7S2tP6pz3NzcjMzMTCQnJ0Ov12P+/Pnd1r/fcRMREdHAxTvWiIiIqF/SaDTSolaroVAozMq+++47jB8/HoMHD4anpyd27dol7evm5gYAmDdvHhQKhbR+8eJFhIeHY9SoUVCpVJg6dSry8/P71K99+/YhJSUFOp0Obm5u8PX1xdKlSxEbGyvVqaurQ1hYGJRKJdzd3bF7926zR0zv3iFWUVEh7XP9+nUoFAocPHgQANDe3o4333wT7u7uUCqV8PT0xJYtW8z6EhcXh4iICHzxxRcYM2YMJkyYAAD466+/EB0djeHDh8PBwQHh4eGoqanpcWwODg6dzjsANDY2IiEhASNHjoS9vT1mzZqFkydPdjovvr6+sLW1xbhx47BmzRq0tbUB6Pp6dOWH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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"matplotlib.rcParams[\"figure.figsize\"] = (20,10)\n",
"def plot_scatter_chart(df,location):\n",
" bhk2 = df[(df.location==location) & (df.bhk==2)]\n",
" bhk3 = df[(df.location==location) & (df.bhk==3)]\n",
" matplotlib.rcParams['figure.figsize'] = (15,10)\n",
" plt.scatter(bhk2.total_sqft,bhk2.price,color='blue',label='2 BHK', s=50)\n",
" plt.scatter(bhk3.total_sqft,bhk3.price,marker='+', color='green',label='3 BHK', s=50)\n",
" plt.xlabel(\"Total Square Feet Area\")\n",
" plt.ylabel(\"Price (Lakh Indian Rupees)\")\n",
" plt.title(location)\n",
" plt.legend()\n",
" \n",
"plot_scatter_chart(df7,\"Rajaji Nagar\")"
]
},
{
"cell_type": "code",
"execution_count": 56,
"id": "013b9b86",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(7317, 7)"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def remove_bhk_outliers(df):\n",
" exclude_indices = np.array([])\n",
" for location, location_df in df.groupby('location'):\n",
" bhk_stats = {}\n",
" for bhk, bhk_df in location_df.groupby('bhk'):\n",
" bhk_stats[bhk] = {\n",
" 'mean': np.mean(bhk_df.price_per_sqft),\n",
" 'std': np.std(bhk_df.price_per_sqft),\n",
" 'count': bhk_df.shape[0]\n",
" }\n",
" for bhk, bhk_df in location_df.groupby('bhk'):\n",
" stats = bhk_stats.get(bhk-1)\n",
" if stats and stats['count']>5:\n",
" exclude_indices = np.append(exclude_indices, bhk_df[bhk_df.price_per_sqft<(stats['mean'])].index.values)\n",
" return df.drop(exclude_indices,axis='index')\n",
"df8 = remove_bhk_outliers(df7)\n",
"# df8 = df7.copy()\n",
"df8.shape"
]
},
{
"cell_type": "code",
"execution_count": 57,
"id": "534f884f",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABNYAAANVCAYAAAC09nNHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB0xUlEQVR4nOzdeXxddZ0//tfNVkvahM1utlNRYRRbBMERaKnsy4gU6gwo44LLfOm0oFA6anFBXNjEVv1pi9uA6+A4tCCjIiCLFGVklUVG0WFTuqjUhITQtMn9/ZEhELolp9nzfD4e93HvOedzTt6nPdTrK5+lVC6XywEAAAAAeqRioAsAAAAAgKFIsAYAAAAABQjWAAAAAKAAwRoAAAAAFCBYAwAAAIACBGsAAAAAUIBgDQAAAAAKEKwBAAAAQAGCNQAAAAAoQLAGANALLrvsspRKpc5XVVVVJk6cmLe85S156KGHCl/3pS99aU455ZReOfeRRx5JqVTKZZddttXznm1XKpVy+eWXb3L84x//eEqlUv785z8XqgsAYLioGugCAACGk0svvTSvfOUr88wzz+TWW2/Npz/96dx44435n//5n+y00049vt6KFStSV1dXqJYXnjtx4sT84he/yMtf/vJuX+PDH/5w3vzmN6e6urpQDQAAw5keawAAvWjatGnZf//9c/DBB+fDH/5wPvShD2Xt2rW58sorC11vn3326VEQtrVzR40alf333z8vfvGLu3X+Mccck//93//NJZdcUujnD6Snn356oEsAAEYAwRoAQB/ab7/9kiRr1qzp3PfMM8/krLPOyt577536+vrsvPPOOeCAA3LVVVdtcv4Lh3Nuz7ndHQr6rEMPPTRHHXVUPvnJT+app57aatvrrrsus2fPzuTJk/OiF70or3jFK3LqqadudrjoVVddlb322iujRo3Ky172snz+85/vHF76fF/60pcya9asjBs3LrW1tZk+fXouuuiibNiwoUu7gw8+ONOmTcvPfvazHHjggdlhhx3y7ne/u1v3CACwPQwFBQDoQw8//HCSZI899ujct379+jz55JNZuHBhXvKSl6S1tTXXX3995syZk0svvTTveMc7tni97Tm3iAsvvDD77LNPPvOZz+QTn/jEFtv9/ve/zwEHHJD3vve9qa+vzyOPPJLFixdn5syZue+++zqHkl5zzTWZM2dOZs2ale9973vZuHFjLr744i7B4/OvefLJJ2e33XZLTU1NfvWrX+XTn/50/ud//if/9m//1qXtqlWr8ra3vS0f+MAHct5556Wiwu+PAYC+J1gDAOhFbW1t2bhxY+cca5/61Kcya9asHHfccZ1t6uvrc+mll3Y557DDDsu6devyuc99bqvh2PacW8RrXvOanHzyyVm8eHHmzZuXCRMmbLbd3LlzOz+Xy+UceOCBOfjggzN16tT8+Mc/7rz/j33sY3nJS16Sn/zkJ6mpqUmSHH300XnpS1+6yTUXL17c+bm9vT0HHXRQdtlll7zrXe/KZz/72S5z1j355JP5/ve/n0MPPbQ3bhsAoFv8Kg8AoBftv//+qa6uztixY3P00Udnp512ylVXXZWqqq6/z/z+97+fGTNmZMyYMamqqkp1dXW+/vWv58EHH9zmz9iec4v41Kc+lQ0bNuTcc8/dYpu1a9dm7ty5mTJlSmdNU6dOTZLOupqbm3PHHXfk+OOP7wzVkmTMmDF505vetMk177777hx33HHZZZddUllZmerq6rzjHe9IW1tbfvvb33Zpu9NOOwnVAIB+J1gDAOhF3/zmN3P77bfnhhtuyKmnnpoHH3wwb33rW7u0Wb58eU488cS85CUvybe//e384he/yO233553v/vdeeaZZ7Z6/e05t6iXvvSlmTdvXr72ta/loYce2uR4e3t7jjzyyCxfvjwf+MAH8tOf/jS//OUvc9tttyVJWlpakiTr1q1LuVzO+PHjN7nGC/c99thjOeigg/LHP/4xn//853PLLbfk9ttvz5e+9KUu13zWxIkTe+VeAQB6wlBQAIBe9KpXvapzwYJDDjkkbW1t+drXvpb//M//zD/8wz8kSb797W9nt912y/e+970uE/avX79+m9ffnnO3x0c+8pH827/9W84+++y8+tWv7nLs/vvvz69+9atcdtlleec739m5/3e/+12XdjvttFNKpdJm51NbvXp1l+0rr7wyzc3NWb58eWfPtyS55557NlvfCxc+AADoD3qsAQD0oYsuuig77bRTPvaxj6W9vT1JRwhUU1PTJQxavXr1Zlf2fKHtOXd77LLLLvngBz+Y//zP/8wvf/nLTWpKklGjRnXZ/+Uvf7nLdm1tbfbbb79ceeWVaW1t7dzf1NSU//qv/9rmNcvlcr761a9u/80AAPQSwRoAQB/aaaedsmjRojz44IP57ne/myQ59thj85vf/Cbz5s3LDTfckG984xuZOXNmt4Yzbs+52+uMM87IpEmT8uMf/7jL/le+8pV5+ctfng996EP593//9/zkJz/Jaaedlh/84AebXOMTn/hE/vjHP+aoo47KlVdemSuuuCKHH354xowZ0yUsPOKII1JTU5O3vvWt+fGPf5wVK1bkqKOOyrp16/r8PgEAukuwBgDQx04//fT8zd/8TT7xiU+kra0t73rXu3LBBRfkxz/+cf7+7/8+F154YT70oQ/l5JNP3uz5zw+ctufc7bXDDjvk4x//+Cb7q6urc/XVV2ePPfbIqaeemre+9a1Zu3Ztrr/++k3aHn300bniiivyl7/8JSeddFIWLFiQE044IbNnz86OO+7Y2e6Vr3xlrrjiiqxbty5z5szJ6aefnr333jtf+MIXeu1+AAC2V6lcLpcHuggAADZv5513zrvf/e5cfPHF/Xpuf9qwYUP23nvvvOQlL8m111470OUAAHSbxQsAAAahe++9Nz/60Y+ybt26HHDAAf12bn94z3vekyOOOCITJ07M6tWrc8kll+TBBx/M5z//+YEuDQCgRwRrAACD0Pvf//78z//8TxYuXJg5c+b027n94amnnsrChQvzpz/9KdXV1Xnta1+bH/3oRzn88MMHujQAgB4xFBQAAAAACrB4AQAAAAAUIFgDAAAAgAIEawAAAABQgMULkrS3t+eJJ57I2LFjUyqVBrocAAAAAAZIuVzOU089lUmTJqWiYut90gRrSZ544olMmTJloMsAAAAAYJB4/PHHM3ny5K22EawlGTt2bJKOP7C6uroBrgYAAACAgdLY2JgpU6Z05kVbI1hLOod/1tXVCdYAAAAA6NZ0YRYvAAAAAIACBGsAAAAAUIBgDQAAAAAKMMdaN5XL5WzcuDFtbW0DXcqwVVlZmaqqqm6NYQYAAAAYaIK1bmhtbc2qVavy9NNPD3Qpw94OO+yQiRMnpqamZqBLAQAAANgqwdo2tLe35+GHH05lZWUmTZqUmpoaPar6QLlcTmtra/70pz/l4Ycfzu67756KCiOVAQAAgMFLsLYNra2taW9vz5QpU7LDDjsMdDnD2ujRo1NdXZ1HH300ra2tedGLXjTQJQEAAABskS5B3aT3VP/w5wwAAAAMFVIMAAAAAChAsAYAAAAABQjWAAAAAKAAwVo/amlJ1qzpeO9r559/fl73utdl7NixGTduXI4//vj85je/2eo5l112WUqlUudrzJgx2XfffbN8+fIu7Q4++OCcccYZmz1/xx133OJ2kjz44IOZPHly5syZk/Xr1xe9PQAAAIABJ1jrBytXJnPmJGPGJBMmdLzPmZPcemvf/cybb7458+fPz2233ZbrrrsuGzduzJFHHpnm5uatnldXV5dVq1Zl1apVufvuu3PUUUflxBNP3GYo1x233357DjrooBx11FH5/ve/n1GjRm33NQEAAAAGimCtjy1blsyalVx9ddLe3rGvvb1j+6CDkksu6Zufe8011+SUU07Jq1/96rzmNa/JpZdemsceeyx33nnnVs8rlUqZMGFCJkyYkN133z2f+tSnUlFRkXvvvXe76rnhhhty6KGH5l3vele+/vWvp7KycruuBwAAADDQBGt9aOXKZP78pFxONm7semzjxo798+b1bc+1ZzU0NCRJdt55526f09bWlm984xtJkte+9rWFf/aKFSvyxje+MWeffXY+85nPFL4OAAAAwGBSNdAFDGeLFyeVlZuGas9XWZksWZLMmNF3dZTL5SxYsCAzZ87MtGnTttq2oaEhY8aMSZK0tLSkuro6X/nKV/Lyl7+8S7ulS5fma1/7Wpd9GzduzIte9KIu+5qamvKP//iPOfvss7No0aJeuBsAAACAwUGw1kdaWpKrrnpu+OeWbNyYrFjR0X706L6p5bTTTsu9996blStXbrPt2LFjc9dddyVJnn766Vx//fU59dRTs8suu+RNb3pTZ7t/+qd/yoc//OEu5y5fvjznnXdel32jR4/OzJkz89WvfjVvfetb86pXvaoX7ggAAABg4AnW+khj47ZDtWe1t3e074tg7fTTT88PfvCD/OxnP8vkyZO32b6ioiKveMUrOrf32muvXHvttbnwwgu7BGv19fVd2iXJuHHjNrleZWVlrrzyyrz5zW/OIYcckhtuuCF77rnndtwRAAAAwOBgjrU+UleXVHTzT7eioqN9byqXyznttNOyfPny3HDDDdltt90KX6uysjItLS2Fzx81alSWL1+ev/u7v8shhxyS+++/v/C1AAAAAAYLwVofGT06mT07qdpGn8CqquSEE3q/t9r8+fPz7W9/O9/97nczduzYrF69OqtXr95mQFYulzvbPvzww/nKV76Sn/zkJ5k9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Vq3qfP3oRz/qco0zzjgjK1asyOWXX56VK1emqakpxx57bNra2vr7dgAAAAAYQaoG8oe/6U1v6rL96U9/OsuWLcttt92WV7/61UmSUaNGZcKECZs9v6GhIV//+tfzrW99K4cffniS5Nvf/namTJmS66+/PkcddVTf3gAAAADAdnj+kM/mDZv/nCS1NbX9VhPdN6DB2vO1tbXl+9//fpqbm3PAAQd07r/pppsybty47LjjjnnDG96QT3/60xk3blyS5M4778yGDRty5JFHdrafNGlSpk2blp///OdbDNbWr1+f9evXd243Njb20V0BAAAAbNmY88dsdv/4i8d32S6fU+6PcuihAV+84L777suYMWMyatSozJ07NytWrMiee+6ZJDnmmGPyne98JzfccEM++9nP5vbbb8+hhx7aGYqtXr06NTU12Wmnnbpcc/z48Vm9evUWf+b555+f+vr6zteUKVP67gYBAAAAGJYGvMfa3/7t3+aee+7JX//611xxxRV55zvfmZtvvjl77rlnTjrppM5206ZNy3777ZepU6fmhz/8YebMmbPFa5bL5ZRKpS0eX7RoURYsWNC53djYKFwDAAAA+l3ToqbOz80bmjt7qq1ZuCa11YZ/DnYDHqzV1NTkFa94RZJkv/32y+23357Pf/7z+fKXv7xJ24kTJ2bq1Kl56KGHkiQTJkxIa2tr1q1b16XX2tq1a3PggQdu8WeOGjUqo0aN6uU7AQAAAOiZLc2dVltda161IWDAh4K+ULlc7jL/2fP95S9/yeOPP56JEycmSfbdd99UV1fnuuuu62yzatWq3H///VsN1gAAAABgew1oj7Wzzz47xxxzTKZMmZKnnnoql19+eW666aZcc801aWpqysc//vG8+c1vzsSJE/PII4/k7LPPzq677poTTjghSVJfX5/3vOc9Oeuss7LLLrtk5513zsKFCzN9+vTOVUIBAAAAoC8MaLC2Zs2avP3tb8+qVatSX1+fvfbaK9dcc02OOOKItLS05L777ss3v/nN/PWvf83EiRNzyCGH5Hvf+17Gjh3beY0lS5akqqoqJ554YlpaWnLYYYflsssuS2Vl5QDeGQAAAEDP1NbUWv1ziCmVy+UR/zfW2NiY+vr6NDQ0pK6ubqDLAQAAAGCA9CQnGnRzrAEAAADAUCBYAwAAAIACBGsAAAAAUIBgDQAAAAAK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mThxYmf7tWvXdvZimzBhQlpbW7Nu3bouvdbWrl2bAw88cIs/c9SoURk1alQ37hYAAAAANq/HwdrDDz/cF3V0KpfLWb9+fXbbbbdMmDAh1113XfbZZ58kSWtra26++eZceOGFSZJ999031dXVue6663LiiScmSVatWpX7778/F110UZ/WCQAAAMDI1uNgberUqb32w88+++wcc8wxmTJlSp566qlcfvnluemmm3LNNdekVCrljDPOyHnnnZfdd989u+++e84777zssMMOOfnkk5Mk9fX1ec973pOzzjoru+yyS3beeecsXLgw06dPz+GHH95rdQIAAADAC/U4WPvmN7+51ePveMc7un2tNWvW5O1vf3tWrVqV+vr67LXXXrnmmmtyxBFHJOkYbtrS0pJ58+Zl3bp1ef3rX59rr702Y8eO7bzGkiVLUlVVlRNPPDEtLS057LDDctlll3VZtRQAAAAAelupXC6Xe3LCC1fg3LBhQ55++unU1NRkhx12yJNPPtmrBfaHxsbG1NfXp6GhIXV1dQNdDgAAAAADpCc5UUVPL75u3bour6ampvzmN7/JzJkz8+///u+FiwYAAACAoaTHwdrm7L777rngggvy/ve/vzcuBwAAAACDXq8Ea0lSWVmZJ554orcuBwAAAACDWo8XL/jBD37QZbtcLmfVqlX54he/mBkzZvRaYQAAAAAwmPU4WDv++OO7bJdKpbz4xS/OoYcems9+9rO9VRcAAAAADGo9Dtba29v7og4AAAAAGFJ6bY615cuXZ6+99uqtywEAAADAoNajYO2rX/1q/vEf/zEnn3xybrvttiTJDTfckH322Sdve9vbcsABB/RJkQAAAAAw2HQ7WLv44oszf/78PPzww7nqqqty2GGH5bzzzsuJJ56Y448/Po899li+/OUv92WtAAAAADBodHuOta9//eu55JJL8u53vzs33XRTDj300Nxwww353e9+lx133LEPSwQAAACAwafbPdYeffTRHH744UmSgw8+ONXV1fn0pz8tVAMAAABgROp2sPbMM8/kRS96Ued2TU1NXvziF/dJUQAAAAAw2HV7KGiSfO1rX8uYMWOSJBs3bsxll12WXXfdtUub973vfb1XHQAAAAAMUqVyuVzuTsOXvvSlKZVKW79YqZT//d//7ZXC+lNjY2Pq6+vT0NCQurq6gS4HAAAAgAHS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cTn++OPzm9/8pkubU045JaVSqctr//3379Jm/fr1Of3007PrrrumtrY2xx13XP7whz/0560AwFaNOX9M52v8xeM794+/eHyXYwAAwNAxoMHazTffnPnz5+e2227Lddddl40bN+bII49Mc3PX394fffTRWbVqVefrRz/6UZfjZ5xxRlasWJHLL788K1euTFNTU4499ti0tbX15+0AAAAAMIIM6FDQa665psv2pZdemnHjxuXOO+/MrFmzOvePGjUqEyZM2Ow1Ghoa8vWvfz3f+ta3cvjhhydJvv3tb2fKlCm5/vrrc9RRR/XdDQBANzUtaur83LyhubPX2pqFa1JbbZjgcGC4LwDAyFM4WPvd736X3//+95k1a1ZGjx6dcrmcUqm0XcU0NDQkSXbeeecu+2+66aaMGzcuO+64Y97whjfk05/+dMaNG5ckufPOO7Nhw4YceeSRne0nTZqUadOm5ec///lmg7X169dn/fr1nduNjY3bVTcAbMuWwpTa6lpByzCxpaG8zx/6myTlc3q0IDsAAINYj4eC/uUvf8nhhx+ePfbYI3//93+fVatWJUne+9735qyzzipcSLlczoIFCzJz5sxMmzatc/8xxxyT73znO7nhhhvy2c9+NrfffnsOPfTQzmBs9erVqampyU477dTleuPHj8/q1as3+7POP//81NfXd76mTJlSuG4AAAAARqYe91g788wzU1VVlcceeyyvetWrOvefdNJJOfPMM/PZz362UCGnnXZa7r333qxcubLL/pNOOqnz87Rp07Lffvtl6tSp+eEPf5g5c+Zs8Xpb60G3aNGiLFiwoHO7sbFRuAYAbBfDfQEARp4eB2vXXnttfvKTn2Ty5Mld9u++++559NFHCxVx+umn5wc/+EF+9rOfbXLdF5o4cWKmTp2ahx56KEkyYcKEtLa2Zt26dV16ra1duzYHHnjgZq8xatSojBo1qlCtALC9amtqDQcchgz3BQAYeXo8FLS5uTk77LDDJvv//Oc/9zisKpfLOe2007J8+fLccMMN2W233bZ5zl/+8pc8/vjjmThxYpJk3333TXV1da677rrONqtWrcr999+/xWANAAAAALZXj4O1WbNm5Zvf/GbndqlUSnt7ez7zmc/kkEMO6dG15s+fn29/+9v57ne/m7Fjx2b16tVZvXp1WlpakiRNTU1ZuHBhfvGLX+SR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vjnz58/Pbbfdluuuuy4bN27MkUcemebm5s42F110URYvXpwvfvGLuf322zNhwoQcccQReeqppzrbnHHGGVmxYkUuv/zyrFy5Mk1NTTn22GPT1tY2ELc1oqxcmcyfn5TLycaNXY9t3Nixf948PdcAAACA4adULpfLA13Es/70pz9l3LhxufnmmzNr1qyUy+VMmjQpZ5xxRj74wQ8m6eidNn78+Fx44YU59dRT09DQkBe/+MX51re+lZNOOilJ8sQTT2TKlCn50Y9+lKOOOmqbP7exsTH19fVpaGhIXV1dn97jcDNnTkfPtBeGas9XVZXMnp3853/2X10AAAAARfQkJxpUc6w1NDQkSXbeeeckycMPP5zVq1fnyCOP7GwzatSovOENb8jPf/7zJMmdd96ZDRs2dGkzadKkTJs2rbPNC61fvz6NjY1dXvRcS0ty1VVbD9WSjuMrVljQAAAAABheBk2wVi6Xs2DBgsycOTPTpk1LkqxevTpJMn78+C5tx48f33ls9erVqampyU477bTFNi90/vnnp76+vvM1ZcqU3r6dEaGx8bk51balvb2jPQAAAMBwMWiCtdNOOy333ntv/v3f/32TY6VSqct2uVzeZN8Lba3NokWL0tDQ0Pl6/PHHixc+gtXVJRXdfIIqKjraAwAAAAwXgyJYO/300/ODH/wgN954YyZPnty5f8KECUmySc+ztWvXdvZimzBhQlpbW7Nu3bottnmhUaNGpa6ursuLnhs9umPutKqqrberqkpOOKGjPQAAAMBwMaDBWrlczmmnnZbly5fnhhtuyG677dbl+G677ZYJEybkuuuu69zX2tqam2++OQceeGCSZN999011dXWXNqtWrcr999/f2Ya+s2BBsq3FV9vakjPP7J96AAAAAPrLNvoa9a358+fnu9/9bq666qqMHTu2s2dafX19Ro8enVKplDPOOCPnnXdedt999+y+++4577zzssMOO+Tkk0/ubPue97wnZ511VnbZZZfsvPPOWbhwYaZPn57DDz98IG9vRJg5M1m6NJk3L6ms7LqQQVVVR6i2dGkyY8bA1QgAAADQFwY0WFu2bFmS5OCDD+6y/9JLL80pp5ySJPnABz6QlpaWzJs3L+vWrcvrX//6XHvttRk7dmxn+yVLlqSqqionnnhiWlpacthhh+Wyyy5LZWVlf93KiDZ3bjJ9erJk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rOl4BwAAABjOBGv0ipUrkzlzkjFjkgkTOt7nzEluvXWgKwMAAADoGwMarP3sZz/Lm970pkyaNCmlUilXXnlll+OnnHJKSqVSl9f+++/fpc369etz+umnZ9ddd01tbW2OO+64/OEPf+jHu2DZsmTWrOTqq5P29o597e0d2wcdlFxyycDWBwAAANAXBjRYa25uzmte85p88Ytf3GKbo48+OqtWrep8/ehHP+py/IwzzsiKFSty+eWXZ+XKlWlqasqxxx6btra2vi6fdPRUmz8/KZeTjRu7Htu4sWP/vHl6rgEAAADDT9VA/vBjjjkmxxxzzFbbjBo1KhMmTNjssYaGhnz961/Pt771rRx++OFJkm9/+9uZMmVKrr/++hx11FG9XjNdLV6cVFZuGqo9X2VlsmRJMmNG/9UFAAAA0NcG/RxrN910U8aNG5c99tgj//zP/5y1a9d2HrvzzjuzYcOGHHnkkZ37Jk2alGnTpuXnP//5Fq+5fv36NDY2dnnRcy0tyVVXbT1USzqOr1hhQQMAAABgeBnUwdoxxxyT73znO7nhhhvy2c9+NrfffnsOPfTQrF+/PkmyevXq1NTUZKeddupy3vjx47N69eotXvf8889PfX1952vKlCl9eh/DVWPjc3OqbUt7e0d7AAAAgOFiQIeCbstJJ53U+XnatGnZb7/9MnXq1Pzwhz/MnDlztnheuVxOqVTa4vFFixZlwYIFnduNjY3CtQLq6pKKiu6FaxUVHe0BAAAAhotB3WPthSZOnJipU6fmoYceSpJMmDAhra2tWbduXZd2a9euzfjx47d4nVGjRqWurq7Li54bPTqZPTup2kY8W1WVnHBCR3sAAACA4WJIBWt/+ctf8vjjj2fixIlJkn333TfV1dW57rrrOtusWrUq999/fw488MCBKnNEWbAg2dYCrG1tyZln9k89AAAAAP1lQIeCNjU15Xe/+13n9sMPP5x77rknO++8c3beeed8/OMfz5vf/OZMnDgxjzzySM4+++zsuuuuOeGEE5Ik9fX1ec973pOzzjoru+yyS3beeecsXLgw06dP71wllL41c2aydGkyb96mq4NWVXWEakuXWhEUAAAAGH4GNFi74447csghh3RuPzvv2Tvf+c4sW7Ys9913X775zW/mr3/9ayZOnJhDDjkk3/ve9zJ27NjOc5YsWZKqqqqceOKJaWlp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zc15zWteky9+8YubHHv66adz11135aMf/WjuuuuuLF++PL/97W9z3HHHdWl3xhlnZMWKFbn88suzcuXKNDU15dhjj01bW1tnm5NPPjn33HNPrrnmmlxzzTW555578va3v73P74+Bs7Vn6/muvPLK/Pd//3cmTZq0yTHPFpuzrWfr97//fWbOnJlXvvKVuemmm/KrX/0qH/3oR/OiF72os41ni83Z1rN15pln5pprrsm3v/3tPPjggznzzDNz+umn56qrrups49lic26++ebMnz8/t912W6677rps3LgxRx55ZJqbmzvbXHTRRVm8eHG++MUv5vbbb8+ECRNyxBFH5Kmnnups4/nihbb1bPk+T1Hd+XfrWb7P0xPdebYG9ff5MmxFkvKKFSu22uaXv/xlOUn50UcfLZfL5fJf//rXcnV1dfnyyy/vbPPHP/6xXFFRUb7mmmvK5XK5/Otf/7qcpHzbbbd1tvnFL35RTlL+n//5n96/EQadLT1bf/jDH8oveclLyvfff3956tSp5SVLlnQe82zRHZt7tk466aTy2972ti2e49miOzb3bL361a8uf+ITn+iy77WvfW35Ix/5SLlc9mzRfWvXri0nKd98883lcrlcbm9vL0+YMKF8wQUXdLZ55plnyvX19eVLLrmkXC57vuieFz5bm+P7PEVs6dnyfZ7ttblnazB/n9djje3W0NCQUqmUHXfcMUly5513ZsOGDTnyyCM720yaNCnTpk3Lz3/+8yTJL37xi9TX1+f1r399Z5v9998/9fX1nW0Yedrb2/P2t789//qv/5pXv/rVmxz3bFFEe3t7fvjDH2aPPfbIUUcdlXHjxuX1r399lyF9ni2KmjlzZn7wgx/kj3/8Y8rlcm688cb89re/zVFHHZXEs0X3NTQ0JEl23nnnJMnDDz+c1atXd3l2Ro0alTe84Q2dz4Xni+544bO1pTa+z9NTm3u2fJ+nN7zw2Rrs3+cFa2yXZ555Jh/60Idy8sknp66uLkmyevXq1NTUZKeddurSdvz48Vm9enVnm3Hjxm1yvXHjxnW2YeS58MILU1VVlfe9732bPe7Zooi1a9emqakpF1xwQY4++uhce+21OeGEEzJnzpzcfPPNSTxbFPeFL3whe+65ZyZPnpyampocffTRWbp0aWbOnJnEs0X3lMvlLFiwIDNnzsy0adOSpPPvfvz48V3avvDZ8XyxNZt7tl7I93mK2NKz5fs822tzz9Zg/z5fVfhMRrwNGzbkLW95S9rb27N06dJtti+XyymVSp3bz/+8pTaMHHfeeWc+//nP56677urxM+DZYmva29uTJLNnz86ZZ56ZJNl7773z85//PJdcckne8IY3bPFczxbb8oUvfCG33XZbfvCDH2Tq1Kn52c9+lnnz5mXixIk5/PDDt3ieZ4vnO+2003Lvvfdm5cqVmxx74TPQnefC88WztvZsJb7PU9zmni3f5+kNm3u2Bvv3eT3WKGTDhg058cQT8/DDD+e6667r/O1WkkyYMCGtra1Zt25dl3PWrl3b+VvXCRMmZM2aNZtc909/+tMmv5llZLjllluydu3a/M3f/E2qqqpSVVWVRx99NGeddVZe+tKXJvFsUcyuu+6aqqqq7Lnnnl32v+pVr+pcRcizRREtLS05++yzs3jx4rzpTW/KXnvtldNOOy0nnXRSLr744iSeLbbt9NNPzw9+8IPceOONmTx5cuf+CRMmJMkmv0F/4bPj+WJLtvRsPcv3eYra0rPl+zzba0vP1mD/Pi9Yo8ee/R/hhx56KNdff3122WWXLsf33XffVFdX57rrruvct2rVqtx///058MADkyQHHHBAGhoa8stf/rKzzX//93+noaGhsw0jy9vf/vbce++9ueeeezpfkyZNyr/+67/mJz/5SRLPFsXU1NTkda973SZLdv/2t7/N1KlTk3i2KGbDhg3ZsGFDKiq6fp2qrKzs/M2qZ4stKZfLOe2007J8+fLccMMN2W233boc32233TJhwoQuz05ra2tuvvnmzufC88XmbOvZSnyfp5htPVu+z1PUtp6tQf99vvCyBwxbTz31VPnuu+8u33333eUk5cWLF5fvvvvu8qOPPlresGFD+bjjjitPnjy5fM8995RXrVrV+Vq/fn3nNebOnVuePHly+frrry/fdddd5UMPPbT8mte8prxx48bONkcffXR5r732Kv/iF78o/+IXvyhPnz69fOyxxw7ELdNPtvZsbc4LVxEqlz1bbN62nq3ly5eXq6ury1/5ylfKDz30UPn/+//+v3JlZWX5/2/v/mOqLP8/jr9OinLywFERBSeJShJYcwKWP4Y/+iHumAOhpoUFWZq5/NHKLGaWZuVm+GM1J2vHY5otrKmbxsaUUDGnJf6YKWIpzGqYRlgq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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_scatter_chart(df8,\"Rajaji Nagar\")"
]
},
{
"cell_type": "code",
"execution_count": 58,
"id": "ee8e044e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Count')"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABmIAAANBCAYAAADzwKFIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABP00lEQVR4nO39fZTVdb3//z9GgckQdiAOw+SIdDKOBlppIa7KK+TiiFj2+WjRmaMrQyvF+Kirso4n6pSaLS8qTuaxUjMLayXWOnqmMJUkwAuKFCOzExQmAx6DGSAaEPbvj77uXyOiovNiuLjd1tprsff7ud/79Z6113ttva/33nXVarUaAAAAAAAAut1ePb0AAAAAAACA3ZUQAwAAAAAAUIgQAwAAAAAAUIgQAwAAAAAAUIgQAwAAAAAAUIgQAwAAAAAAUIgQAwAAAAAAUIgQAwAAAAAAUEivnl7ArmLLli158skn069fv9TV1fX0cgAAAAAAgB5UrVazdu3aNDU1Za+9tn3dixDzEj355JNpbm7u6WUAAAAAAAA7keXLl+eAAw7Y5nYh5iXq169fkr/9Qfv379/DqwEAAAAAAHpSR0dHmpuba/1gW4SYl+jZryPr37+/EAMAAAAAACTJi/6cyba/tAwAAAAAAIBXRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAoRIgBAAAAAAAopFdPLwDYsx30iTt6egl0k2WXn9TTSwAAAACAnY4rYgAAAAAAAAoRYgAAAAAAAAoRYgAAAAAAAAoRYgAAAAAAAAoRYgAAAAAAAAoRYgAAAAAAAAoRYgAAAAAAAAoRYgAAAAAAAAoRYgAAAAAAAAoRYgAAAAAAAAoRYgAAAAAAAAoRYgAAAAAAAArp0RBz7bXX5rDDDkv//v3Tv3//jB49Ov/93/9d237mmWemrq6uy+2oo47qso/Ozs5MnTo1gwYNSt++fTNp0qQ88cQTXWZWr16dlpaWVCqVVCqVtLS0ZM2aNTviEAEAAAAAgD1Yj4aYAw44IJdffnkeeuihPPTQQzn++ONzyimn5NFHH63NjB8/PitWrKjd7rzzzi77mDZtWmbNmpWZM2dm7ty5WbduXSZOnJjNmzfXZiZPnpxFixaltbU1ra2tWbRoUVpaWnbYcQIAAAAAAHumXj354ieffHKX+5///Odz7bXXZsGCBXnjG9+YJKmvr09jY+PzPr+9vT3f+MY3cvPNN2fMmDFJkm9/+9tpbm7OXXfdlXHjxmXJkiVpbW3NggULMmrUqCTJ9ddfn9GjR+exxx7L8OHDCx4hAAAAAACwJ9tpfiNm8+bNmTlzZtavX5/Ro0fXHr/33nvT0NCQN7zhDZkyZUpWrVpV27Zw4cJs2rQpY8eOrT3W1NSUESNGZN68eUmS+fPnp1Kp1CJMkhx11FGpVCq1mefT2dmZjo6OLjcAAAAAAIDt0eMh5pFHHsm+++6b+vr6fOhDH8qsWbNy6KGHJkkmTJiQW265JXfffXeuvPLKPPjggzn++OPT2dmZJGlra0ufPn0yYMCALvscPHhw2traajMNDQ1bvW5DQ0Nt5vlcdtlltd+UqVQqaW5u7q5DBgAAAAAA9hA9+tVkSTJ8+PAsWrQoa9asyQ9+8IOcccYZmTNnTg499NCcfvrptbkRI0bkyCOPzNChQ3PHHXfk1FNP3eY+q9Vq6urqavf//t/bmnmuiy++OBdccEHtfkdHhxgDAAAAAABslx4PMX369MnrX//6JMmRRx6ZBx98MF/60pdy3XXXbTU7ZMiQDB06NI8//niSpLGxMRs3bszq1au7XBWzatWqHH300bWZlStXbrWvp556KoMHD97muurr61NfX/+Kjg0AAAAAANiz9fhXkz1XtVqtffXYcz399NNZvnx5hgwZkiQ54ogj0rt378yePbs2s2LFiixevLgWYkaPHp329vY88MADtZn7778/7e3ttRkAAAAAAIASevSKmE9+8pOZMGFCmpubs3bt2sycOTP33ntvWltbs27dukyfPj3vec97MmTIkCxbtiyf/OQnM2jQoLz73e9OklQqlZx11lm58MILs99++2XgwIG56KKLMnLkyIwZMyZJcsghh2T8+PGZMmVK7Sqbs88+OxMnTszw4cN77NgBAAAAAIDdX4+GmJUrV6alpSUrVqxIpVLJYYcdltbW1px44onZsGFDHnnkkXzrW9/KmjVrMmTIkBx33HG59dZb069fv9o+rr766vTq1SunnXZaNmzYkBNOOCE33nhj9t5779rMLbfckvPPPz9jx45NkkyaNCkzZszY4ccLAAAAAADsWeqq1Wq1pxexK+jo6EilUkl7e3v69+/f08uB3cZBn7ijp5dAN1l2+Uk9vQQAAAAA2GFeajfY6X4jBgAAAAAAYHchxAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQi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ABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABTSoyHmsssuy1vf+tb069cvDQ0Nede73pXHHnusy0y1Ws306dPT1NSUffbZJ8cee2weffTRLjOdnZ2ZOnVqBg0alL59+2bSpEl54oknusysXr06LS0tqVQqqVQqaWlpyZo1a0ofIgAAAAAAsAfr0RAzZ86cnHvuuVmwYEFmz56dZ555JmPHjs369etrM1dccUWuuuqqzJgxIw8++GAaGxtz4oknZu3atbWZadOmZdasWZk5c2bmzp2bdevWZeLEidm8eXNtZvLkyVm0aFFaW1vT2tqaRYsWpaWlZYceLwAAAAAAsGepq1ar1Z5exLOeeuqpNDQ0ZM6cOXnnO9+ZarWapqamTJs2LR//+MeT/O3ql8GDB+cLX/hCzjnnnLS3t2f//ffPzTffnNNPPz1J8uSTT6a5uTl33nlnxo0blyVLluTQQw/NggULMmrUqCTJggULMnr06PzmN7/J8OHDX3RtHR0dqVQqaW9vT//+/cv9EWAPc9An7ujpJdBNll1+0g5/Te+f3UdPvH8AAAAAXomX2g12qt+IaW9vT5IMHDgwSbJ06dK0tbVl7NixtZn6+vocc8wxmTdvXpJk4cKF2bRp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9za39+rVK0899dQrXhQAAAAAAMDuYLtCzGtf+9o88sgj29z+8MMPZ8iQIa94UQAAAAAAALuD7Qox//RP/5R/+7d/y1//+tettm3YsCGf/vSnM3HixG5bHAAAAAAAwK6s1/YM/+u//mtuu+22vOENb8h5552X4cOHp66uLkuWLMl//Md/ZPPmzfnUpz5Vaq0AAAAAAAC7lO0KMYMHD868efPy4Q9/OBdffHGq1WqSpK6uLuPGjctXv/rVDB48uMhCAQAAAAAAdjXbFWKSZOjQobnzzjuzevXq/O53v0u1Ws3BBx+cAQMGlFgfAAAAAADALmu7Q8yzBgwYkLe+9a3duRYAAAAAAIDdyl49vQAAAAAAAIDdlRADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQSI+GmJ/97Gc5+eST09TUlLq6utx+++1dtp955pmpq6vrcjvqqKO6zHR2dmbq1KkZNGhQ+vbtm0mTJuWJJ57oMrN69eq0tLSkUqmkUqmkpaUla9asKXx0AAAAAADAnq5HQ8z69etz+OGHZ8aMGducGT9+fFasWFG73XnnnV22T5s2LbNmzcrMmTMzd+7crFu3LhMnTszmzZtrM5MnT86iRYvS2tqa1tbWLFq0KC0tLcWOCwAAAAAAIEl69eSLT5gwIRMmTHjBmfr6+jQ2Nj7vtvb29nzjG9/IzTffnDFjxiRJvv3tb6e5uTl33XVXxo0blyVLlqS1tTULFizIqFGjkiTXX399Ro8encceeyzDhw/v3oMCAAAAAAD4/+z0vxFz7733pqGhIW94wxsyZcqUrFq1qrZt4cKF2bRpU8aOHVt7rKmpKSNGjMi8efOSJPPnz0+lUqlFmCQ56qijUqlUajPPp7OzMx0dHV1uAAAAAAAA22OnDjETJkzILbfckrvvvjtXXnllHnzwwRx//PHp7OxMkrS1taVPnz4ZMGBAl+cNHjw4bW1ttZmGhoat9t3Q0FCbeT6XXXZZ7TdlKpVKmpubu/HIAAAAAACAPUGPfjXZizn99NNr/x4xYkSOPPLIDB06NHfccUdOPfXUbT6vWq2mrq6udv/v/72tmee6+OKLc8EFF9Tud3R0iDEAAAAAAMB22amviHmuIUOGZOjQoXn88ceTJI2Njdm4cWNWr17dZW7VqlUZPHhwbWblypVb7eupp56qzTyf+vr69O/fv8sNAAAAAABge+xSIebpp5/O8uXLM2TIkCTJEUcckd69e2f27Nm1mRUrVmTx4sU5+uijkySjR49Oe3t7HnjggdrM/fffn/b29toMAAAAAABACT361WTr1q3L7373u9r9pUuXZtGiRRk4cGAGDhyY6dOn5z3veU+GDBmSZcuW5ZOf/GQGDRqUd7/73UmSSqWSs846KxdeeGH222+/DBw4MBdddFFGjhyZMWPGJEkOOeSQjB8/PlOmTMl1112XJDn77LMzceLEDB8+fMcfNAAAAAAAsMfo0RDz0EMP5bjjjqvdf/Y3Wc4444xce+21eeSRR/Ktb30ra9asyZAhQ3Lcccfl1ltvTb9+/WrPufrqq9OrV6+cdtpp2bBhQ0444YTceOON2XvvvWszt9xyS84///yMHTs2STJp0qTMmDFjBx0lAAAAAACwp6qrVqvVnl7ErqCjoyOVSiXt7e1+Lwa60UGfuKOnl0A3WXb5STv8Nb1/dh898f4BAAAAeCVeajfYpX4jBgAAAAAAYFcixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABQixAAAAAAAABTSoyHmZz/7WU4++eQ0NTWlrq4ut99+e5ft1Wo106dPT1NTU/bZZ58ce+yxefTRR7vMdHZ2ZurUqRk0aFD69u2bSZMm5Yknnugys3r16rS0tKRSqaRSqaSlpSVr1qwpfHQAAAAAAMCerkdDzPr163P44YdnxowZz7v9iiuuyFVXXZUZM2bkwQcfTGNjY0488cSsXbu2NjNt2rTMmjUrM2fOzNy5c7Nu3bpMnDgxmzdvrs1Mnjw5ixYtSmtra1pbW7No0aK0tLQUPz4AAAAAAGDP1qsnX3zChAmZMGHC826rVqu55ppr8qlPfSqnnnpqkuSmm27K4MGD853vfCfnnHNO2tvb841vfCM333xzxowZkyT59re/nebm5tx1110ZN25clixZktbW1ixYsCCjRo1Kklx//fUZPXp0HnvssQwfPnzHHCwAAAAAALDH2Wl/I2bp0qVpa2vL2LFja4/V19fnmGOOybx585IkCxcuzKZNm7rMNDU1ZcSIEbWZ+fPnp1Kp1CJMkhx11FGpVCq1mefT2dmZjo6OLjcAAAAAAIDtsdOGmLa2tiTJ4MGDuzw+ePDg2ra2trb06dMnAwYMeMGZhoaGrfbf0NBQm3k+l112We03ZSqVSpqbm1/R8QAAAAAAAHuenTbEPKuurq7L/Wq1utVjz/Xcmeebf7H9XHzxxWlvb6/dli9fvp0rBwAAAAAA9nQ7bYhpbGxMkq2uWlm1alXtKpnGxsZs3Lgxq1evfsGZlStXbrX/p556aqurbf5efX19+vfv3+UGAAAAAACwPXbaEDNs2LA0NjZm9uzZtcc2btyYOXPm5Oijj06SHHHEEendu3eXmRUrVmTx4sW1mdGjR6e9vT0PPPBAbeb+++9Pe3t7bQYAAAAAAKCEXj354uvWrcvvfve72v2lS5dm0aJFGThwYA488MBMmzYtl156aQ4++OAcfPDBufTSS/PqV786kydPTpJUKpWcddZZufDCC7Pffvtl4MCBueiiizJy5MiMGTMmSXLIIYdk/PjxmTJlSq677rokydlnn52JEydm+PDhO/6gAQAAAACAPUaPhpiHHnooxx13XO3+BRdckCQ544wzcuONN+ZjH/tYNmzYkI985CNZvXp1Ro0alZ/85Cfp169f7TlXX311evXqldNOOy0bNmzICSeckBtvvDF77713beaWW27J+eefn7FjxyZJJk2alBkzZuygowQAAAAAAPZUddVqtdrTi9gVdHR0pFKppL293e/FQDc66BN39PQS6CbLLj9ph7+m98/uoyfePwAAAACvxEvtBjvtb8QAAAAAAADs6oQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQnr19ALY9R30iTt6egl0k2WXn9TTSwAAAAAA2K24IgYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKCQnTrETJ8+PXV1dV1ujY2Nte3VajXTp09PU1NT9tlnnxx77LF59NFHu+yjs7MzU6dOzaBBg9K3b99MmjQpTzzxxI4+FAAAAAAAYA+0U4eYJHnjG9+YFStW1G6PPPJIbdsVV1yRq666KjNmzMiDDz6YxsbGnHjiiVm7dm1tZtq0aZk1a1ZmzpyZuXPnZt26dZk4cWI2b97cE4cDAAAAAADsQXr19AJeTK9evbpcBfOsarWaa665Jp/61Kdy6qmnJkluuummDB48ON/5zndyzjnnpL29Pd/4xjdy8803Z8yYMUmSb3/722lubs5dd92VcePG7dBjAQAAAAAA9iw7/RUxjz/+eJqamjJs2LC8973vze9///skydKlS9PW1paxY8fWZuvr63PMMcdk3rx5SZKFCxdm06ZNXWaampoyYsSI2sy2dHZ2pqOjo8sNAAAAAABge+zUIWbUqFH51re+lR//+Me5/vrr09bWlqOPPjpPP/102trakiSDBw/u8pzBgwfXtrW1taVPnz4ZMGDANme25bLLLkulUqndmpubu/HIAAAAAACAPcFOHWImTJiQ97znPRk5cmTGjBmTO+64I8nfvoLsWXV1dV2eU61Wt3rsuV7KzMUXX5z29vbabfny5S/zKAAAAAAAgD3VTh1inqtv374ZOXJkHn/88drvxjz3ypZVq1bVrpJpbGzMxo0bs3r16m3ObEt9fX369+/f5QYAAAAAALA9dqkQ09nZmSVLlmTIkCEZNmxYGhsbM3v27Nr2jRs3Zs6cOTn66KOTJEcccUR69+7dZWbFihVZvHhxbQYAAAAAAKCUXj29gBdy0UUX5eSTT86BBx6YVatW5XOf+1w6OjpyxhlnpK6uLtOmTcull16agw8+OAcffHAuvfTSvPrVr87kyZOTJJVKJWeddVYuvPDC7Lfffhk4cGAuuuii2ledAQAAAAAAlLRTh5gnnngi73vf+/K///u/2X///XPUUUdlwYIFGTp0aJLkYx/7WDZs2JCPfOQjWb16dUaNGpWf/OQn6devX20fV199dXr16pXTTjstGzZsyAknnJAbb7wxe++9d08dFgAAAAAAsIfYqUPMzJkzX3B7XV1dpk+fnunTp29z5lWvelW+8pWv5Ctf+Uo3rw4AAAAAAOCF7VK/EQMAAAAAALArEWIAAAAAAAAK2am/mgwAoJSDPnFHTy+BbrLs8pN6egkAAACwTa6IAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAA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YMGCzJ49O88880zGjh2b9evX12Z8XgN2JS/lvJbswp/XqgB0u09/+tPVww8//Hm3bdmypdrY2Fi9/PLLa4/99a9/rVYqlerXvva1arVara5Zs6bau3fv6syZM2szf/rTn6p77bVXtbW1tVqtVqu//vWvq0mqCxYsqM3Mnz+/mqT6m9/8psBRAXuqJNVZs2bV7u/I89idd95Z3Wuvvap/+tOfajPf/e53q/X19dX29vYixwvs/p57XqtWq9Uzzjijesopp2zzOc5rwM5s1apV1STVOXPmVKtVn9eAXd9zz2vV6q79ec0VMQCFPP7442lqasqwYcPy3ve+N7///e+TJEuXLk1bW1vGjh1bm62vr88xxxyTefPmJUkWLlyYTZs2dZlpamrKiBEjajPz589PpVLJqFGjajNHHXVUKpVKbQaghB15Hps/f35GjBiRpqam2sy4cePS2dmZhQsXFj1OYM9z7733pqGhIW94wxsyZcqUrFq1qrbNeQ3YmbW3tydJBg4cmMTnNWDX99zz2rN21c9rQgxAAaNGjcq3vvWt/PjHP87111+ftra2HH300Xn66afT1taWJBk8eHCX5wwePLi2ra2tLX369MmAAQNecKahoWGr125oaKjNAJSwI89jbW1tW73OgAED0qdPH+c6oFtNmDAht9xyS+6+++5ceeWVefDBB3P88cens7MzifMasPOqVqu54IIL8va3vz0jRoxI4vMasGt7vvNasmt/Xuv1sp4FwAuaMGFC7d8jR47M6NGj8w//8A+56aabaj8iVldX1+U51Wp1q8ee67kzzzf/UvYD0B121HnMuQ7YEU4//fTav0eMGJEjjzwyQ4cOzR133JFTTz11m89zXgN62nnnnZeHH344c+fO3Wqbz2vArmhb57Vd+fOaK2IAdoC+fftm5MiRefzxx9PY2JgkWxX0VatW1Wp7Y2NjNm7cmNWrV7/gzMqVK7d6raeeemqrag/QnXbkeayxsXGr11m9enU2bdrkXAcUNWTIkAwdOjSPP/54Euc1YOc0derU/OhHP8o999yTAw44oPa4z2vArmpb57Xnsyt9XhNiAHaAzs7OLFmyJEOGDMmwYcPS2NiY2bNn17Zv3Lgxc+bMydFHH50kOeKII9K7d+8uMytWrMjixYtrM6NHj057e3seeOCB2sz999+f9vb22gxACTvyPDZ69OgsXrw4K1asqM385Cc/SX19fY444oiixwns2Z5++uksX748Q4YMSeK8BuxcqtVqzjvvvNx22225++67M2zYsC7bfV4DdjUvdl57PrvU57UqAN3uwgsvrN57773V3//+99UFCxZUJ06cWO3Xr1912bJl1Wq1Wr388surlUqletttt1UfeeSR6vve977qkCFDqh0dHbV9fOhDH6oecMAB1bvuuqv6i1/8onr88cdXDz/88OozzzxTmxk/fnz1sMMOq86fP786f/786siRI6sTJ07c4ccL7H7Wrl1b/eUvf1n95S9/WU1Sveqqq6q//OUvq3/4wx+q1eqOO48988wz1REjRlRPOOGE6i9+8YvqXXfdVT3ggAOq55133o77YwC7hRc6r61du7Z64YUXVufNm1ddunRp9Z577qmOHj26+trXvtZ5DdgpffjDH65WKpXqvffeW12xYkXt9pe//KU24/MasCt5sfParv55TYgBKOD000+vDhkypNq7d+9qU1NT9dRTT60++uijte1btmypfvrTn642NjZW6+vrq+985zurjzzySJd9bNiwoXreeedVBw4cWN1nn32qEydOrP7xj3/sMvP0009X3//+91f79etX7devX/X9739/dfXq1TviEIHd3D333FNNstXtjDPOqFarO/Y89oc//KF60kknVffZZ5/qwIEDq+edd171r3/9a8nDB3ZDL3Re+8tf/lIdO3Zsdf/996/27t27euCBB1bPOOOMrc5ZzmvAzuL5zmdJqjfccENtxuc1YFfyYue1Xf3zWt3/d5AAAAAAAAB0M78RAwAAAAAAUIgQAwAAAAAAUIgQAwAAAAAAUIgQAwAAAAAAUIgQAwAAAAAAUIgQAwAAAAAAUIgQAwAAAAAAUIgQAwAAdItjjz0206ZN6+llAAAA7FSEGAAAoIszzzwzdXV1qaurS+/evfO6170uF110UdavX/+Cz7vtttvy7//+78XWde+999bWVVdXl/333z8TJkzIr371q25/rVWrVuWcc87JgQcemPr6+jQ2NmbcuHGZP39+t7/WjvLcv9+zt3/913/tlv0vW7YsdXV1WbRoUbfsDwAAdhe9enoBAADAzmf8+PG54YYbsmnTptx333354Ac/mPXr1+faa6/danbTpk3p3bt3Bg4cuEPW9thjj6V///754x//mPPPPz/jx4/Pb37zm1Qqle3e18aNG9OnT5+tHn/Pe96TTZs25aabbsrrXve6rFy5Mj/96U/z5z//uTsO4RXZ1ppfqmf/fs/ad999u2NZAADANrgiBgAA2MqzV4E0Nzdn8uTJef/735/bb789STJ9+vS86U1vyje/+c287nWvS319farV6lZfTdbZ2ZmPfexjaW5uTn19fQ4++OB84xvfqG3/9a9/nX/6p3/Kvvvum8GDB6elpSX/+7//+6Jra2hoSGNjY972trflyiuvTFtbWxYsWJAkmTdvXt75zndmn332SXNzc84///wuV/IcdNBB+dznPpczzzwzlUolU6ZM2Wr/a9asydy5c/OFL3whxx13XIYOHZq3ve1tufjii3PSSSfV5h5//PG8853vzKte9aoceuihmT17durq6mp/p2evQFmzZk3tOYsWLUpdXV2WLVuWJHn66afzvve9LwcccEBe/epXZ+TIkfnud7/bZT3HHntszjvvvFxwwQUZNGhQTjzxxG75+z17ezbE/OlPf8rpp5+eAQMGZL/99sspp5xSW+ezbrjhhhxyyCF51atelX/8x3/MV7/61dq2YcOGJUne/OY3p66uLscee+yLrgUAAPYEQgwAAPCi9tlnn2zatKl2/3e/+12+973v5Qc/+ME2v4rqX/7lXzJz5sx8+ctfzpIlS/K1r32t9j/9V6xYkWOOOSZvetOb8tBDD6W1tTUrV67Maaedtt3rSv52Vc4jjzyScePG5dRTT83DDz+cW2+9NXPnzs15553X5Tlf/OIXM2LEiCxcuDCXXHLJVvvcd999s+++++b2229PZ2fn877uli1bcuqpp2bvvffOggUL8rWvfS0f//jHt2vtSfLXv/41RxxxRP7rv/4rixcvztlnn52Wlpbcf//9XeZuuumm9OrVKz//+c9z3XXXddvf71l/+ctfctxxx2XffffNz372s8ydOzf77rtvxo8fn40bNyZJrr/++nzqU5/K5z//+SxZsiSXXnppLrnkktx0001JkgceeCBJctddd2XFihW57bbbXtZaAABgd+OryQAAgBf0wAMP5Dvf+U5OOOGE2mMbN27MzTffnP333/95n/Pb3/423/ve9zJ79uyMGTMmSfK6172utv3aa6/NW97yllx66aW1x775zW+mubk5v/3tb/OGN7zhRdf19NNP5zOf+Uz69euXt73tbbnooosyefLk2lU5Bx98cL785S/nmGOOybXXXptXvepVSZLjjz8+F1100Tb326tXr9x4442ZMmVKvva1r+Utb3lLjjnmmLz3ve/NYYcdluRvsWHJkiVZtmxZDjjggCTJpZdemgkTJrzouv/ea1/72i5rmTp1alpbW/P9738/o0aNqj3++te/PldccUXt/r/927+97L/fs+t91h/+8If88Ic/zF577ZWvf/3rqaurS/K3q19e85rX5N57783YsWPz7//+77nyyitz6qmnJvnbFTC//vWvc9111+WMM86ovRf222+/NDY2btffAQAAdmdCDAAAsJX/+q//yr777ptnnnkmmzZtyimnnJKvfOUrte1Dhw7dZoRJ/vYVXHvvvXeOOeaY592+cOHC3HPPPc/7+yT/8z//85JCwvr163PwwQfn+9//fhoaGrJw4cL87ne/yy233FKbrVar2bJlS5YuXZpDDjkkSXLkkUe+8MHnb78Rc9JJJ+W+++7L/Pnz09ramiuuuCJf//rXc+aZZ2bJkiU58MADu0SN0aNHv+h+n2vz5s25/PLLc+utt+ZPf/pTOjs709nZmb59+3aZe+6aX8nf77777ku/fv1q9wcMGFD72/3948nfrtj5n//5nzz11FNZvnx5zjrrrC5f5/bMM8+8rN/mAQCAPYkQAwAAbOW4447Ltddem969e6epqSm9e/fusv25oeC5nv3KsG3ZsmVLTj755HzhC1/YatuQIUNe8Ln33Xdf+vfvn/3337/Lj85v2bIl55xzTs4///ytnnPggQe+5LU/61WvelVOPPHEnHjiifm3f/u3fPCDH8ynP/3pnHnmmalWq1vNP3slybP22utv3wT997N///VuSXLllVfm6quvzjXXXJORI0emb9++mTZtWu3rwLa15lfy9xs2bFhe85rXbLW/I444okvEetb++++fv/71r0n+9vVkf3+lTpLsvffeL/h6AACwpxNiAACArfTt2zevf/3rX/bzR44cmS1btmTOnDm1ryb7e295y1vygx/8IAcddFB69dq+/yx5vpDw7D4fffTRV7TuF3LooYfm9ttvr/37j3/8Y5588sk0NTUlSebPn99l/tkrhlasWJEBAwYkyVa/p3PffffllFNOyT//8z8n+VsQefzxx2tX72zLK/n7bWt/t956axoaGrrErWdVKpW89rWvze9///u8//3vf9599OnTJ8nfrvIBAAD+//bq6QUAAAC7n4MOOihnnHFGPvCBD+T222/P0qVLc++99+Z73/tekuTcc8/Nn//857zvfe/LAw88kN///vf5yU9+kg984AMv+3/kf/zjH8/8+fNz7rnnZtGiRXn88cfzox/9KFOnTt2u/Tz99NM5/vjj8+1vfzsPP/xwli5dmu9///u54oorcsoppyRJxowZk+HDh+df/uVf8qtf/Sr33XdfPvWpT3XZz+tf//o0Nzdn+vTp+e1vf5s77rgjV1555VYzs2fPzrx587JkyZKcc845aWtre9E1dvff7/3vf38GDRqUU045Jffdd1+WLl2aOXPm5KMf/WieeOKJJMn06dNz2WWX5Utf+lJ++9vf5pFHHskNN9yQq666KknS0NCQffbZJ62trVm5cmXa29u3ex0AALA7EmIAAIAirr322vyf//N/8pGPfCT/+I//mClTpmT9+vVJkqampvz85z/P5s2bM27cuIwYMSIf/ehHU6lUal/ptb0OO+ywzJkzJ48//nje8Y535M1vfnMuueSSF/2qrufad999M2rUqFx99dV55zvfmREjRuSSSy7JlClTMmPGjCR/+9qxWbNmpbOzM29729vywQ9+MJ///Oe77Kd379757ne/m9/85jc5/PDD84UvfCGf+9znusxccsklectb3pJx48bl2GOPTWNjY971rne96Bq7++/36le/Oj/72c9y4IEH5tRTT80hhxySD3zgA9mwYUPtCpkPfvCD+frXv54bb7wxI0eOzDHHHJMbb7wxw4YNS5L06tUrX/7yl3PdddelqampFq0AAGBPV1d9vi83BgAAYLvV1dVl1qxZLymmAAAAewZXxAAAAAAAABQixAAAAAAAABTSq6cXAAAAsLvwzc8AAMBzuSIGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgkP8fIW2B0LkHgAcAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib\n",
"matplotlib.rcParams[\"figure.figsize\"] = (20,10)\n",
"plt.hist(df8.price_per_sqft,rwidth=0.8)\n",
"plt.xlabel(\"Price Per Square Feet\")\n",
"plt.ylabel(\"Count\")"
]
},
{
"cell_type": "code",
"execution_count": 59,
"id": "a26184e1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 4., 3., 2., 5., 8., 1., 6., 7., 9., 12., 16., 13.])"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df8.bath.unique()"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "38bc530e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Count')"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABmIAAANBCAYAAADzwKFIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABGOklEQVR4nO3de7TVdb3v/9eSm4iwFIy1WlsU3BGCeNvqRtAEtwiWhJ7OSYs2abq95HUlXne5RdtxsS1q4n1ndrxk45wTZjeSTEnDK0bekMwwMUWscAFGgDB/fzScv5Z4A/kwhfV4jDHHaH6/nznn+wvfsUbLJ9/5ratUKpUAAAAAAACwwW1R6wEAAAAAAAA2V0IMAAAAAABAIUIMAAAAAABAIUIMAAAAAABAIUIMAAAAAABAIUIMAAAAAABAIUIMAAAAAABAIUIMAAAAAABAIe1rPcCmYs2aNXnxxRfTtWvX1NXV1XocAAAAAACghiqVSpYuXZqmpqZsscXbX/cixLxHL774Ynr16lXrMQAAAAAAgA+QBQsWZPvtt3/b/ULMe9S1a9ckf/sD7datW42nAQAAAAAAamnJkiXp1atXtR+8HSHmPXrj68i6desmxAAAAAAAAEnyrrczefsvLQMAAAAAAOB9EWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKaV/rAdj09T73R7UegQ3kuUmH1noEAAAAAIDNiitiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAACvnAhJiJEyemrq4uzc3N1W2VSiXjx49PU1NTOnfunGHDhuXJJ59s9boVK1bk1FNPzXbbbZcuXbpk9OjReeGFF1qtWbx4ccaOHZv6+vrU19dn7NixefXVVzfCUQEAAAAAAG3ZByLEPPzww7nuuuuy2267tdp+8cUXZ8qUKZk6dWoefvjhNDY25uCDD87SpUura5qbmzNt2rTcdtttue+++7Js2bKMGjUqq1evrq4ZM2ZM5syZk+nTp2f69OmZM2dOxo4du9GODwAAAAAAaJtqHmKWLVuWz33uc7n++uuz7bbbVrdXKpVcdtll+fKXv5xPfepTGThwYL797W/nL3/5S2699dYkSUtLS775zW/mkksuyfDhw7Pnnnvm5ptvzuOPP56f/exnSZK5c+dm+vTp+e///u8MHjw4gwcPzvXXX58f/vCHmTdvXk2OGQAAAAAAaBtqHmJOPvnkHHrooRk+fHir7fPnz8/ChQszYsSI6rZOnTpl6NChmTVrVpJk9uzZWbVqVas1TU1NGThwYHXN/fffn/r6+gwaNKi6Zt999019fX11zVtZsWJFlixZ0uoBAAAAAACwLtrX8sNvu+22zJ49O4888sha+xYuXJgkaWhoaLW9oaEhv//976trOnbs2OpKmjfWvPH6hQsXpmfPnmu9f8+ePatr3srEiRNz4YUXrtsBAQAAAAAA/J2aXRGzYMGCnH766bnllluy5ZZbvu26urq6Vs8rlcpa297szWveav27vc95552XlpaW6mPBggXv+JkAAAAAAABvVrMQM3v27CxatCh77bVX2rdvn/bt22fmzJn5xje+kfbt21evhHnzVSuLFi2q7mtsbMzKlSuzePHid1zz8ssvr/X5r7zyylpX2/y9Tp06pVu3bq0eAAAAAAAA66JmIeaggw7K448/njlz5lQfe++9dz73uc9lzpw52WmnndLY2JgZM2ZUX7Ny5crMnDkzQ4YMSZLstdde6dChQ6s1L730Up544onqmsGDB6elpSUPPfRQdc2DDz6YlpaW6hoAAAAAAIASanaPmK5du2bgwIGttnXp0iU9evSobm9ubs6ECRPSt2/f9O3bNxMmTMhWW22VMWPGJEnq6+tz7LHHZty4cenRo0e6d++eM888M7vuumuGDx+eJOnfv38OOeSQHHfccbn22muTJMcff3xGjRqVfv36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AAAAAGCTtUFDzP33358tt9xyQ74lAAAAAADAJmu9vprsU5/6VKvnlUolL730Uh555JGcf/75G2QwAAAAAACATd16hZj6+vpWz7fYYov069cvF110UUaMGLFBBgMAAAAAANjUrVeI+da3vrWh5wAAAAAAANjsrFeIecPs2bMzd+7c1NXVZcCAAdlzzz031FwAAAAAAACbvPUKMYsWLcpnPvOZ3HPPPdlmm21SqVTS0tKSAw88MLfddls+9KEPbeg5AQAAAAAANjlbrM+LTj311CxZsiRPPvlk/vznP2fx4sV54oknsmTJkpx22mkbekYAAAAAAIBN0npdETN9+vT87Gc/S//+/avbBgwYkCuvvDIjRozYYMMBAAAAAABsytbripg1a9akQ4cOa23v0KFD1qxZ876HAgAAAAAA2BysV4j5l3/5l5x++ul58cUXq9v+8Ic/5Etf+lIOOuigDTYcAAAAAADApmy9QszUqVOzdOnS9O7dO//4j/+Yj3zkI+nTp0+WLl2aK664YkPPCAAAAAAAsElar3vE9OrVK48++mhmzJiRp59+OpVKJQMGDMjw4cM39HwAAAAAAACbrHW6IubnP/95BgwYkCVLliRJDj744Jx66qk57bTTss8++2SXXXbJvffeW2RQAAAAAACATc06hZjLLrssxx13XLp167bWvvr6+pxwwgmZMmXKBhsOAAAAAABgU7ZOIebXv/51DjnkkLfdP2LEiMyePft9DwUAAAAAALA5WKcQ8/LLL6dDhw5vu799+/Z55ZVX3vdQAAAAAAAAm4N1CjH/8A//kMcff/xt9z/22GP58Ic//L6HAgAAAAAA2BysU4j5xCc+kf/4j//IX//617X2LV++PBdccEFGjRq1wYYDAAAAAADYlLVfl8Vf+cpX8r3vfS8f/ehHc8opp6Rfv36pq6vL3Llzc+WVV2b16tX58pe/XGpWAAAAAACATco6hZiGhobMmjUrX/ziF3PeeeelUqkkSerq6jJy5MhcddVVaWhoKDIoAAAAAADApmadQkyS7Ljjjvnxj3+cxYsX57e//W0qlUr69u2bbbfdtsR8AAAAAAAAm6x1DjFv2HbbbbPPPvtsyFkAAAAAAAA2K1vUegAAAAAAAIDNlRADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQSE1DzMSJE7PPPvuka9eu6dmzZw4//PDMmzev1ZpKpZLx48enqakpnTt3zrBhw/Lkk0+2WrNixYqceuqp2W677dKlS5eMHj06L7zwQqs1ixcvztixY1NfX5/6+vqMHTs2r776aulDBAAAAAAA2rCahpiZM2fm5JNPzgMPPJAZM2bk9ddfz4gRI/Laa69V11x88cWZMmVKpk6dmocffjiNjY05+OCDs3Tp0uqa5ubmTJs2Lbfddlvuu+++LFu2LKNGjcrq1aura8aMGZM5c+Zk+vTpmT59eubMmZOxY8du1OMFAAAAAADalrpKpVKp9RBveOWVV9KzZ8/MnDkzBxxwQCqVSpqamtLc3Jxzzjknyd+ufmloaMjkyZNzwgknpKWlJR/60Idy00035cgjj0ySvPjii+nVq1d+/OMfZ+TIkZk7d24GDBiQBx54IIMGDUqSPPDAAxk8eHCefvrp9OvX711nW7JkSerr69PS0pJu3bqV+0PYBPU+90e1HoEN5LlJh9Z6BAAAAACATcJ77QYfqHvEtLS0JEm6d++eJJk/f34WLlyYESNGVNd06tQpQ4cOzaxZs5Iks2fPzqpVq1qtaWpqysCBA6tr7r///tTX11cjTJLsu+++qa+vr655sxUrVmTJkiWtHgAAAAAAAOviAxNiKpVKzjjjjOy///4ZOHBgkmThwoVJkoaGhlZrGxoaqvsWLlyYjh07Ztttt33HNT179lzrM3v27Fld82YTJ06s3k+mvr4+vXr1en8HCAAAAAAAtDkfmBBzyimn5LHHHst3vvOdtfbV1dW1el6pVNba9mZvXvNW69/pfc4777y0tLRUHwsWLHgvhwEAAAAAAFD1gQgxp556au64447cfffd2X777avbGxsbk2Stq1YWLVpUvUqmsbExK1euzOLFi99xzcsvv7zW577yyitrXW3zhk6dOqVbt26tHgAAAAAAAOuipiGmUqnklFNOyfe+9738/Oc/T58+fVrt79OnTxobGzNjxozqtpUrV2bmzJkZMmRIkmSvvfZKhw4dWq156aWX8sQTT1TXDB48OC0tLXnooYeqax588MG0tLRU1wAAAAAAAGxo7Wv54SeffHJuvfXWfP/730/Xrl2rV77U19enc+fOqaurS3NzcyZMmJC+ffumb9++mTBhQrbaaquMGTOmuvbYY4/NuHHj0qNHj3Tv3j1nnnlmdt111wwfPjxJ0r9//xxyyCE57rjjcu211yZJjj/++IwaNSr9+vWrzcEDAAAAAACbvZqGmKuvvjpJMmzYsFbbv/Wtb+Xoo49Okpx99tlZvnx5TjrppCxevDiDBg3KnXfema5du1bXX3rppWnfvn2OOOKILF++PAcddFBuvPHGtGvXrrrmlltuyWmnnZYRI0YkSUaPHp2pU6eWPUAAAAAAAKBNq6tUKpVaD7EpWLJkSerr69PS0uJ+MW/S+9wf1XoENpDnJh1a6xEAAAAAADYJ77Ub1PQeMQAAAAAAAJszIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKAQIQYAAAAAAKCQ9rUeAGjbep/7o1qPwAby3KRDaz0CAAAAAHzguCIGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgECEGAAAAAACgkJqGmF/84hf55Cc/maamptTV1eX2229vtb9SqWT8+PFpampK586dM2zYsDz55JOt1qxYsSKnnnpqtttuu3Tp0iWjR4/OCy+80GrN4sWLM3bs2NTX16e+vj5jx47Nq6++WvjoAAAAAACAtq6mIea1117L7rvvnqlTp77l/osvvjhTpkzJ1KlT8/DDD6exsTEHH3xwli5dWl3T3NycadOm5bbbbst9992XZcuWZdSoUVm9enV1zZgxYzJnzpxMnz4906dPz5w5czJ27NjixwcAAAAAALRt7Wv54R//+Mfz8Y9//C33VSqVXHbZZfnyl7+cT33qU0mSb3/722loaMitt96aE044IS0tLfnmN7+Zm266KcOHD0+S3HzzzenVq1d+9rOfZeTIkZk7d26mT5+eBx54IIMGDUqSXH/99Rk8eHDmzZuXfv36bZyDBQAAAAAA2pwP7D1i5s+fn4ULF2bEiBHVbZ06dcrQoUMza9asJMns2bOzatWqVmuampoycODA6pr7778/9fX11QiTJPvuu2/q6+urawAAAAAAAEqo6RUx72ThwoVJkoaGhlbbGxoa8vvf/766pmPHjtl2223XWvPG6xcuXJiePXuu9f49e/asrnkrK1asyIoVK6rPlyxZsn4HAgAAAAAAtFkf2Cti3lBXV9fqeaVSWWvbm715zVutf7f3mThxYurr66uPXr16rePkAAAAAABAW/eBDTGNjY1JstZVK4sWLapeJdPY2JiVK1dm8eLF77jm5ZdfXuv9X3nllbWutvl75513XlpaWqqPBQsWvK/jAQAAAAAA2p4PbIjp06dPGhsbM2PGjOq2lStXZubMmRkyZEiSZK+99kqHDh1arXnppZfyxBNPVNcMHjw4LS0teeihh6prHnzwwbS0tFTXvJVOnTqlW7durR4AAAAAAADroqb3iFm2bFl++9vfVp/Pnz8/c+bMSffu3bPDDjukubk5EyZMSN++fdO3b99MmDAhW221VcaMGZMkqa+vz7HHHptx48alR48e6d69e84888zsuuuuGT58eJKkf//+OeSQQ3Lcccfl2muvTZIcf/zxGTVqVPr167fxDxoAAAAAAGgzahpiHnnkkRx44IHV52eccUaS5KijjsqNN96Ys88+O8uXL89JJ52UxYsXZ9CgQbnzzjvTtWvX6msuvfTStG/fPkcccUSWL1+egw46KDfeeGPatWtXXXPLLbfktNNOy4gRI5Iko0ePztSpUzfSUQIAAAAAAG1VXaVSqdR6iE3BkiVLUl9fn5aWFl9T9ia9z/1RrUdgA3lu0qEb/TOdP5uPWpw/AAAAAFAr77UbfGDvEQMAAAAAALCpE2IAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKEWIAAAAAAAAKaV/rAQBgffU+90e1HoEN5LlJh9Z6BAAAAIAiXBEDAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQiBADAAAAAABQSPtaDwAAUAu9z/1RrUdgA3lu0qG1HgEAAADelitiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAAChFiAAAAAAAACmlf6wEAAGBT0vvcH9V6BDaQ5yYdWusRAACANqBNXRFz1VVXpU+fPtlyyy2z11575d577631SAAAAAAAwGaszYSY7373u2lubs6Xv/zl/OpXv8rHPvaxfPzjH8/zzz9f69EAAAAAAIDNVJsJMVOmTMmxxx6bf/u3f0v//v1z2WWXpVevXrn66qtrPRoAAAAAALCZahP3iFm5cmVmz56dc889t9X2ESNGZNasWW/5mhUrVmTFihXV5y0tLUmSJUuWlBt0E7VmxV9qPQIbSC3Ob+fP5sP5w/vh/OH92Njnj3Nn81GLnz0DL/jpRv9MynjiwpG1HgHWiZ8/mw8/fwA+ON74naJSqbzjujYRYv74xz9m9erVaWhoaLW9oaEhCxcufMvXTJw4MRdeeOFa23v16lVkRvggqL+s1hOwKXP+8H44f3g/nD+sL+cO74fzB6gVP38APniWLl2a+vr6t93fJkLMG+rq6lo9r1Qqa217w3nnnZczzjij+nzNmjX585//nB49erzta2B9LVmyJL169cqCBQvSrVu3Wo8DG41zn7bM+U9b5vynLXP+01Y592nLnP+0ZZv7+V+pVLJ06dI0NTW947o2EWK22267tGvXbq2rXxYtWrTWVTJv6NSpUzp16tRq2zbbbFNqREiSdOvWbbP8gQTvxrlPW+b8py1z/tOWOf9pq5z7tGXOf9qyzfn8f6crYd6wxUaYo+Y6duyYvfbaKzNmzGi1fcaMGRkyZEiNpgIAAAAAADZ3beKKmCQ544wzMnbs2Oy9994ZPHhwrrvuujz//PM58cQTaz0aAAAAAACwmWozIebII4/Mn/70p1x00UV56aWXMnDgwPz4xz/OjjvuWOvRIJ06dcoFF1yw1tfhwebOuU9b5vynLXP+05Y5/2mrnPu0Zc5/2jLn/9/UVSqVSq2HAAAAAAAA2By1iXvEAAAAAAAA1IIQAwAAAAAAUIgQAwAAAAAAUIgQAwAAAAAAUIgQAzUyceLE7LPPPunatWt69uyZww8/PPPmzav1WFATEydOTF1dXZqbm2s9CmwUf/jDH/Kv//qv6dGjR7baaqvssccemT17dq3HgqJef/31fOUrX0mfPn3SuXPn7LTTTrnooouyZs2aWo8GG9wvfvGLfPKTn0xTU1Pq6upy++23t9pfqVQyfvz4NDU1pXPnzhk2bFiefPLJ2gwLG9g7nf+rVq3KOeeck1133TVdunRJU1NTPv/5z+fFF1+s3cCwAb3bz/+/d8IJJ6Suri6XXXbZRpsPSnkv5/7cuXMzevTo1NfXp2vXrtl3333z/PPPb/xha0SIgRqZOXNmTj755DzwwAOZMWNGXn/99YwYMSKvvfZarUeDjerhhx/Oddddl912263Wo8BGsXjx4uy3337p0KFDfvKTn+Spp57KJZdckm222abWo0FRkydPzjXXXJOpU6dm7ty5ufjii/P1r389V1xxRa1Hgw3utddey+67756pU6e+5f6LL744U6ZMydSpU/Pwww+nsbExBx98cJYuXbqRJ4UN753O/7/85S959NFHc/755+fRRx/N9773vfzmN7/J6NGjazApbHjv9vP/DbfffnsefPDBNDU1baTJoKx3O/efffbZ7L///tl5551zzz335Ne//nXOP//8bLnllht50tqpq1QqlVoPASSvvPJKevbsmZkzZ+aAAw6o9TiwUSxbtiz/9E//lKuuuir/+Z//mT322MO/BmKzd+655+aXv/xl7r333lqPAhvVqFGj0tDQkG9+85vVbf/zf/7PbLXVVrnppptqOBmUVVdXl2nTpuXwww9P8rerYZqamtLc3JxzzjknSbJixYo0NDRk8uTJOeGEE2o4LWxYbz7/38rDDz+cf/7nf87vf//77LDDDhtvOCjs7c7/P/zhDxk0aFB++tOf5tBDD01zc7Nvh2Cz8lbn/mc+85l06NChTf//flfEwAdES0tLkqR79+41ngQ2npNPPjmHHnpohg8fXutRYKO54447svfee+fTn/50evbsmT333DPXX399rceC4vbff//cdddd+c1vfpMk+fWvf5377rsvn/jEJ2o8GWxc8+fPz8KFCzNixIjqtk6dOmXo0KGZNWtWDSeD2mhpaUldXZ2rg2kT1qxZk7Fjx+ass87KLrvsUutxYKNYs2ZNfvSjH+WjH/1oRo4cmZ49e2bQoEHv+NV9myMhBj4AKpVKzjjjjOy///4ZOHBgrceBjeK2227L7NmzM3HixFqPAhvV7373u1x99dXp27dvfvrTn+bEE0/Maaedlv/9v/93rUeDos4555x89rOfzc4775wOHTpkzz33THNzcz772c/WejTYqBYuXJgkaWhoaLW9oaGhug/air/+9a8599xzM2bMmHTr1q3W40BxkydPTvv27XPaaafVehTYaBYtWpRly5Zl0qRJOeSQQ3LnnXfmf/yP/5FPfepTmTlzZq3H22ja13oAIDnllFPy2GOP5b777qv1KLBRLFiwIKeffnruvPPONvV9oJD87V8D7b333pkwYUKSZM8998yTTz6Zq6++Op///OdrPB2U893vfjc333xzbr311uyyyy6ZM2dOmpub09TUlKOOOqrW48FGV1dX1+p5pVJZaxtszlatWpXPfOYzWbNmTa666qpajwPFzZ49O5dffnkeffRRP+9pU9asWZMkOeyww/KlL30pSbLHHntk1qxZueaaazJ06NBajrfRuCIGauzUU0/NHXfckbvvvjvbb799rceBjWL27NlZtGhR9tprr7Rv3z7t27fPzJkz841vfCPt27fP6tWraz0iFPPhD384AwYMaLWtf//+ef7552s0EWwcZ511Vs4999x85jOfya677pqxY8fmS1/6kisjaXMaGxuTZK2rXxYtWrTWVTKwuVq1alWOOOKIzJ8/PzNmzHA1DG3Cvffem0WLFmWHHXao/h78+9//PuPGjUvv3r1rPR4Us91226V9+/Zt/vdgV8RAjVQqlZx66qmZNm1a7rnnnvTp06fWI8FGc9BBB+Xxxx9vte0LX/hCdt5555xzzjlp165djSaD8vbbb7/Mmzev1bbf/OY32XHHHWs0EWwcf/nLX7LFFq3/HVi7du2q/0IO2oo+ffqksbExM2bMyJ577pkkWblyZWbOnJnJkyfXeDoo740I88wzz+Tuu+9Ojx49aj0SbBRjx45d6/6oI0eOzNixY/OFL3yhRlNBeR07dsw+++zT5n8PFmKgRk4++eTceuut+f73v5+uXbtW/0VcfX19OnfuXOPpoKyuXbuudT+kLl26pEePHu6TxGbvS1/6UoYMGZIJEybkiCOOyEMPPZTrrrsu1113Xa1Hg6I++clP5mtf+1p22GGH7LLLLvnVr36VKVOm5Jhjjqn1aLDBLVu2LL/97W+rz+fPn585c+ake/fu2WGHHdLc3JwJEyakb9++6du3byZMmJCtttoqY8aMqeHUsGG80/nf1NSU//W//lceffTR/PCHP8zq1aurvwt37949HTt2rNXYsEG828//N4fHDh06pLGxMf369dvYo8IG9W7n/llnnZUjjzwyBxxwQA488MBMnz49P/jBD3LPPffUbuiNrK5SqVRqPQS0RW/3faDf+ta3cvTRR2/cYeADYNiwYdljjz1y2WWX1XoUKO6HP/xhzjvvvDzzzDPp06dPzjjjjBx33HG1HguKWrp0ac4///xMmzYtixYtSlNTUz772c/mP/7jP/yHNzY799xzTw488MC1th911FG58cYbU6lUcuGFF+baa6/N4sWLM2jQoFx55ZX+QQqbhXc6/8ePH/+23wZx9913Z9iwYYWng7Le7ef/m/Xu3TvNzc1pbm4uPxwU9F7O/RtuuCETJ07MCy+8kH79+uXCCy/MYYcdtpEnrR0hBgAAAAAAoJAt3n0JAAAAAAAA60OIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAAAAAKESIAQAAau65555LXV1d5syZU+tRqp5++unsu+++2XLLLbPHHnu85Zphw4alubm5yOeXfG8AAGDjEWIAAIAcffTRqaury6RJk1ptv/3221NXV1ejqWrrggsuSJcuXTJv3rzcddddxT7nnnvuSV1dXV599dVinwEAANSOEAMAACRJttxyy0yePDmLFy+u9SgbzMqVK9f7tc8++2z233//7LjjjunRo8cGnKqcVatW1XoEAADgTYQYAAAgSTJ8+PA0NjZm4sSJb7tm/Pjxa31N12WXXZbevXtXnx999NE5/PDDM2HChDQ0NGSbbbbJhRdemNdffz1nnXVWunfvnu233z433HDDWu//9NNPZ8iQIdlyyy2zyy675J577mm1/6mnnsonPvGJbL311mloaMjYsWPzxz/+sbp/2LBhOeWUU3LGGWdku+22y8EHH/yWx7FmzZpcdNFF2X777dOpU6fssccemT59enV/XV1dZs+enYsuuih1dXUZP3782/6ZvP766znllFOyzTbbpEePHvnKV76SSqVS3X/zzTdn7733TteuXdPY2JgxY8Zk0aJFSf72lWwHHnhgkmTbbbdNXV1djj766FZznn322enevXsaGxvXmqOuri7XXHNNDjvssHTp0iX/+Z//mSS5+uqr84//+I/p2LFj+vXrl5tuuqnV655//vkcdthh2XrrrdOtW7ccccQRefnll6v73/h7vuGGG7LDDjtk6623zhe/+MWsXr06F198cRobG9OzZ8987Wtfa/W+48ePzw477JBOnTqlqakpp5122tv+uQEAQFshxAAAAEmSdu3aZcKECbniiivywgsvvK/3+vnPf54XX3wxv/jFLzJlypSMHz8+o0aNyrbbbpsHH3wwJ554Yk488cQsWLCg1evOOuusjBs3Lr/61a8yZMiQjB49On/605+SJC+99FKGDh2aPfbYI4888kimT5+el19+OUcccUSr9/j2t7+d9u3b55e//GWuvfbat5zv8ssvzyWXXJL/+q//ymOPPZaRI0dm9OjReeaZZ6qftcsuu2TcuHF56aWXcuaZZ77tsb7xeQ8++GC+8Y1v5NJLL81///d/V/evXLkyX/3qV/PrX/86t99+e+bPn1+NLb169cr/+3//L0kyb968vPTSS7n88stbvXeXLl3y4IMP5uKLL85FF12UGTNmtPr8Cy64IIcddlgef/zxHHPMMZk2bVpOP/30jBs3Lk888UROOOGEfOELX8jdd9+dJKlUKjn88MPz5z//OTNnzsyMGTPy7LPP5sgjj2z1vs8++2x+8pOfZPr06fnOd76TG264IYceemheeOGFzJw5M5MnT85XvvKVPPDAA0mS//t//28uvfTSXHvttXnmmWdy++23Z9ddd33bPzcAAGgzKgAAQJt31FFHVQ477LBKpVKp7LvvvpVjjjmmUqlUKtOmTav8/a8NF1xwQWX33Xdv9dpLL720suOOO7Z6rx133LGyevXq6rZ+/fpVPvaxj1Wfv/7665UuXbpUvvOd71QqlUpl/vz5lSSVSZMmVdesWrWqsv3221cmT55cqVQqlfPPP78yYsSIVp+9YMGCSpLKvHnzKpVKpTJ06NDKHnvs8a7H29TUVPna177Wats+++xTOemkk6rPd99998oFF1zwju8zdOjQSv/+/Str1qypbjvnnHMq/fv3f9vXPPTQQ5UklaVLl1YqlUrl7rvvriSpLF68eK333n///dea8Zxzzqk+T1Jpbm5utWbIkCGV4447rtW2T3/605VPfOITlUqlUrnzzjsr7dq1qzz//PPV/U8++WQlSeWhhx6qVCp/+3veaqutKkuWLKmuGTlyZKV3795r/b1OnDixUqlUKpdccknlox/9aGXlypVve+wAANAWuSIGAABoZfLkyfn2t7+dp556ar3fY5dddskWW/z/v240NDS0ujqiXbt26dGjR/Urut4wePDg6v9u37599t5778ydOzdJMnv27Nx9993Zeuutq4+dd945yd+u3njD3nvv/Y6zLVmyJC+++GL222+/Vtv322+/6meti3333Td1dXWtjuGZZ57J6tWrkyS/+tWvcthhh2XHHXdM165dM2zYsCR/+3qwd7Pbbru1ev7hD394rT+zNx/v3Llz3/HY5s6dm169eqVXr17V/QMGDMg222zT6vh79+6drl27Vp83NDRkwIABa/29vjHPpz/96Sxfvjw77bRTjjvuuEybNi2vv/76ux4jAABs7oQYAACglQMOOCAjR47Mv//7v6+1b4sttmh1/5PkrW8Q36FDh1bP6+rq3nLbmjVr3nWeNyLHmjVr8slPfjJz5sxp9XjmmWdywAEHVNd36dLlXd/z79/3DZVKZa1t79drr72WESNGZOutt87NN9+chx9+ONOmTUvyt68sezfv5c/srY73nY7t7Y7zzdvX9e+wV69emTdvXq688sp07tw5J510Ug444IC3PD8AAKAtEWIAAIC1TJw4MT/4wQ8ya9asVts/9KEPZeHCha1izJw5czbY575xv5Ekef311zN79uzqVS//9E//lCeffDK9e/fORz7ykVaP9xpfkqRbt25pamrKfffd12r7rFmz0r9///c18xvP+/btm3bt2uXpp5/OH//4x0yaNCkf+9jHsvPOO691RUvHjh2TpHoFzfvVv3//dzy2AQMG5Pnnn291f56nnnoqLS0t63X8f69z584ZPXp0vvGNb+See+7J/fffn8cff/x9vScAAGzqhBgAAGAtu+22Wz73uc/liiuuaLV92LBheeWVV3LxxRfn2WefzZVXXpmf/OQnG+xzr7zyykybNi1PP/10Tj755CxevDjHHHNMkuTkk0/On//853z2s5/NQw89lN/97ne58847c8wxx6xzxDjrrLMyefLkfPe73828efNy7rnnZs6cOTn99NPXeeYFCxbkjDPOyLx58/Kd73wnV1xxRfV9dthhh3Ts2DFXXHFFfve73+WOO+7IV7/61Vav33HHHVNXV5cf/vCHeeWVV7Js2bJ1nuHNx3bjjTfmmmuuyTPPPJMpU6bke9/7Xs4888wkyfDhw6t/v48++mgeeuihfP7zn8/QoUPf9Wvd3smNN96Yb37zm3niiSfyu9/9LjfddFM6d+6cHXfc8X0dDwAAbOqEGAAA4C199atfXetryPr375+rrroqV155ZXbfffc89NBD1f/AvyFMmjQpkydPzu67755777033//+97PddtslSZqamvLLX/4yq1evzsiRIzNw4MCcfvrpqa+vb3XfkvfitNNOy7hx4zJu3LjsuuuumT59eu6444707dt3nWf+/Oc/n+XLl+ef//mfc/LJJ+fUU0/N8ccfn+RvVxDdeOON+T//5/9kwIABmTRpUv7rv/6r1ev/4R/+IRdeeGHOPffcNDQ05JRTTlnnGf7e4Ycfnssvvzxf//rXs8suu+Taa6/Nt771req9aerq6nL77bdn2223zQEHHJDhw4dnp512yne/+9339bnbbLNNrr/++uy3337Zbbfdctddd+UHP/hBevTo8b7eFwAANnV1lTf/ZgUAAAAAAMAG4YoYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQoQYAAAAAACAQv4/FhGqDfSkAcwAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(df8.bath,rwidth=0.8)\n",
"plt.xlabel(\"Number of bathrooms\")\n",
"plt.ylabel(\"Count\")"
]
},
{
"cell_type": "code",
"execution_count": 61,
"id": "65fd495f",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" location | \n",
" size | \n",
" total_sqft | \n",
" bath | \n",
" price | \n",
" bhk | \n",
" price_per_sqft | \n",
"
\n",
" \n",
" \n",
" \n",
" 5277 | \n",
" Neeladri Nagar | \n",
" 10 BHK | \n",
" 4000.0 | \n",
" 12.0 | \n",
" 160.0 | \n",
" 10 | \n",
" 4000.000000 | \n",
"
\n",
" \n",
" 8483 | \n",
" other | \n",
" 10 BHK | \n",
" 12000.0 | \n",
" 12.0 | \n",
" 525.0 | \n",
" 10 | \n",
" 4375.000000 | \n",
"
\n",
" \n",
" 8572 | \n",
" other | \n",
" 16 BHK | \n",
" 10000.0 | \n",
" 16.0 | \n",
" 550.0 | \n",
" 16 | \n",
" 5500.000000 | \n",
"
\n",
" \n",
" 9306 | \n",
" other | \n",
" 11 BHK | \n",
" 6000.0 | \n",
" 12.0 | \n",
" 150.0 | \n",
" 11 | \n",
" 2500.000000 | \n",
"
\n",
" \n",
" 9637 | \n",
" other | \n",
" 13 BHK | \n",
" 5425.0 | \n",
" 13.0 | \n",
" 275.0 | \n",
" 13 | \n",
" 5069.124424 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" location size total_sqft bath price bhk price_per_sqft\n",
"5277 Neeladri Nagar 10 BHK 4000.0 12.0 160.0 10 4000.000000\n",
"8483 other 10 BHK 12000.0 12.0 525.0 10 4375.000000\n",
"8572 other 16 BHK 10000.0 16.0 550.0 16 5500.000000\n",
"9306 other 11 BHK 6000.0 12.0 150.0 11 2500.000000\n",
"9637 other 13 BHK 5425.0 13.0 275.0 13 5069.124424"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df8[df8.bath>10]"
]
},
{
"cell_type": "code",
"execution_count": 62,
"id": "07bd7517",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" location | \n",
" size | \n",
" total_sqft | \n",
" bath | \n",
" price | \n",
" bhk | \n",
" price_per_sqft | \n",
"
\n",
" \n",
" \n",
" \n",
" 1626 | \n",
" Chikkabanavar | \n",
" 4 Bedroom | \n",
" 2460.0 | \n",
" 7.0 | \n",
" 80.0 | \n",
" 4 | \n",
" 3252.032520 | \n",
"
\n",
" \n",
" 5238 | \n",
" Nagasandra | \n",
" 4 Bedroom | \n",
" 7000.0 | \n",
" 8.0 | \n",
" 450.0 | \n",
" 4 | \n",
" 6428.571429 | \n",
"
\n",
" \n",
" 6711 | \n",
" Thanisandra | \n",
" 3 BHK | \n",
" 1806.0 | \n",
" 6.0 | \n",
" 116.0 | \n",
" 3 | \n",
" 6423.034330 | \n",
"
\n",
" \n",
" 8408 | \n",
" other | \n",
" 6 BHK | \n",
" 11338.0 | \n",
" 9.0 | \n",
" 1000.0 | \n",
" 6 | \n",
" 8819.897689 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" location size total_sqft bath price bhk price_per_sqft\n",
"1626 Chikkabanavar 4 Bedroom 2460.0 7.0 80.0 4 3252.032520\n",
"5238 Nagasandra 4 Bedroom 7000.0 8.0 450.0 4 6428.571429\n",
"6711 Thanisandra 3 BHK 1806.0 6.0 116.0 3 6423.034330\n",
"8408 other 6 BHK 11338.0 9.0 1000.0 6 8819.897689"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df8[df8.bath>df8.bhk+2]"
]
},
{
"cell_type": "code",
"execution_count": 63,
"id": "0b16203c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(7239, 7)"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df9 = df8[df8.bath\n",
"\n",
"\n",
" \n",
" \n",
" | \n",
" location | \n",
" size | \n",
" total_sqft | \n",
" bath | \n",
" price | \n",
" bhk | \n",
" price_per_sqft | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1st Block Jayanagar | \n",
" 4 BHK | \n",
" 2850.0 | \n",
" 4.0 | \n",
" 428.0 | \n",
" 4 | \n",
" 15017.543860 | \n",
"
\n",
" \n",
" 1 | \n",
" 1st Block Jayanagar | \n",
" 3 BHK | \n",
" 1630.0 | \n",
" 3.0 | \n",
" 194.0 | \n",
" 3 | \n",
" 11901.840491 | \n",
"
\n",
" \n",
"
\n",
""
],
"text/plain": [
" location size total_sqft bath price bhk price_per_sqft\n",
"0 1st Block Jayanagar 4 BHK 2850.0 4.0 428.0 4 15017.543860\n",
"1 1st Block Jayanagar 3 BHK 1630.0 3.0 194.0 3 11901.840491"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df9.head(2)"
]
},
{
"cell_type": "code",
"execution_count": 65,
"id": "d61cfae3",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" location | \n",
" total_sqft | \n",
" bath | \n",
" price | \n",
" bhk | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1st Block Jayanagar | \n",
" 2850.0 | \n",
" 4.0 | \n",
" 428.0 | \n",
" 4 | \n",
"
\n",
" \n",
" 1 | \n",
" 1st Block Jayanagar | \n",
" 1630.0 | \n",
" 3.0 | \n",
" 194.0 | \n",
" 3 | \n",
"
\n",
" \n",
" 2 | \n",
" 1st Block Jayanagar | \n",
" 1875.0 | \n",
" 2.0 | \n",
" 235.0 | \n",
" 3 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" location total_sqft bath price bhk\n",
"0 1st Block Jayanagar 2850.0 4.0 428.0 4\n",
"1 1st Block Jayanagar 1630.0 3.0 194.0 3\n",
"2 1st Block Jayanagar 1875.0 2.0 235.0 3"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df10 = df9.drop(['size','price_per_sqft'],axis='columns')\n",
"df10.head(3)"
]
},
{
"cell_type": "code",
"execution_count": 66,
"id": "7da53193",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 1st Block Jayanagar | \n",
" 1st Phase JP Nagar | \n",
" 2nd Phase Judicial Layout | \n",
" 2nd Stage Nagarbhavi | \n",
" 5th Block Hbr Layout | \n",
" 5th Phase JP Nagar | \n",
" 6th Phase JP Nagar | \n",
" 7th Phase JP Nagar | \n",
" 8th Phase JP Nagar | \n",
" 9th Phase JP Nagar | \n",
" ... | \n",
" Vishveshwarya Layout | \n",
" Vishwapriya Layout | \n",
" Vittasandra | \n",
" Whitefield | \n",
" Yelachenahalli | \n",
" Yelahanka | \n",
" Yelahanka New Town | \n",
" Yelenahalli | \n",
" Yeshwanthpur | \n",
" other | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
3 rows × 241 columns
\n",
"
"
],
"text/plain": [
" 1st Block Jayanagar 1st Phase JP Nagar 2nd Phase Judicial Layout \\\n",
"0 1 0 0 \n",
"1 1 0 0 \n",
"2 1 0 0 \n",
"\n",
" 2nd Stage Nagarbhavi 5th Block Hbr Layout 5th Phase JP Nagar \\\n",
"0 0 0 0 \n",
"1 0 0 0 \n",
"2 0 0 0 \n",
"\n",
" 6th Phase JP Nagar 7th Phase JP Nagar 8th Phase JP Nagar \\\n",
"0 0 0 0 \n",
"1 0 0 0 \n",
"2 0 0 0 \n",
"\n",
" 9th Phase JP Nagar ... Vishveshwarya Layout Vishwapriya Layout \\\n",
"0 0 ... 0 0 \n",
"1 0 ... 0 0 \n",
"2 0 ... 0 0 \n",
"\n",
" Vittasandra Whitefield Yelachenahalli Yelahanka Yelahanka New Town \\\n",
"0 0 0 0 0 0 \n",
"1 0 0 0 0 0 \n",
"2 0 0 0 0 0 \n",
"\n",
" Yelenahalli Yeshwanthpur other \n",
"0 0 0 0 \n",
"1 0 0 0 \n",
"2 0 0 0 \n",
"\n",
"[3 rows x 241 columns]"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dummies = pd.get_dummies(df10.location)\n",
"dummies.head(3)"
]
},
{
"cell_type": "code",
"execution_count": 67,
"id": "f6b6d2bf",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" location | \n",
" total_sqft | \n",
" bath | \n",
" price | \n",
" bhk | \n",
" 1st Block Jayanagar | \n",
" 1st Phase JP Nagar | \n",
" 2nd Phase Judicial Layout | \n",
" 2nd Stage Nagarbhavi | \n",
" 5th Block Hbr Layout | \n",
" ... | \n",
" Vijayanagar | \n",
" Vishveshwarya Layout | \n",
" Vishwapriya Layout | \n",
" Vittasandra | \n",
" Whitefield | \n",
" Yelachenahalli | \n",
" Yelahanka | \n",
" Yelahanka New Town | \n",
" Yelenahalli | \n",
" Yeshwanthpur | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1st Block Jayanagar | \n",
" 2850.0 | \n",
" 4.0 | \n",
" 428.0 | \n",
" 4 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" 1st Block Jayanagar | \n",
" 1630.0 | \n",
" 3.0 | \n",
" 194.0 | \n",
" 3 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" 1st Block Jayanagar | \n",
" 1875.0 | \n",
" 2.0 | \n",
" 235.0 | \n",
" 3 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 3 | \n",
" 1st Block Jayanagar | \n",
" 1200.0 | \n",
" 2.0 | \n",
" 130.0 | \n",
" 3 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" 1st Block Jayanagar | \n",
" 1235.0 | \n",
" 2.0 | \n",
" 148.0 | \n",
" 2 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
5 rows × 245 columns
\n",
"
"
],
"text/plain": [
" location total_sqft bath price bhk 1st Block Jayanagar \\\n",
"0 1st Block Jayanagar 2850.0 4.0 428.0 4 1 \n",
"1 1st Block Jayanagar 1630.0 3.0 194.0 3 1 \n",
"2 1st Block Jayanagar 1875.0 2.0 235.0 3 1 \n",
"3 1st Block Jayanagar 1200.0 2.0 130.0 3 1 \n",
"4 1st Block Jayanagar 1235.0 2.0 148.0 2 1 \n",
"\n",
" 1st Phase JP Nagar 2nd Phase Judicial Layout 2nd Stage Nagarbhavi \\\n",
"0 0 0 0 \n",
"1 0 0 0 \n",
"2 0 0 0 \n",
"3 0 0 0 \n",
"4 0 0 0 \n",
"\n",
" 5th Block Hbr Layout ... Vijayanagar Vishveshwarya Layout \\\n",
"0 0 ... 0 0 \n",
"1 0 ... 0 0 \n",
"2 0 ... 0 0 \n",
"3 0 ... 0 0 \n",
"4 0 ... 0 0 \n",
"\n",
" Vishwapriya Layout Vittasandra Whitefield Yelachenahalli Yelahanka \\\n",
"0 0 0 0 0 0 \n",
"1 0 0 0 0 0 \n",
"2 0 0 0 0 0 \n",
"3 0 0 0 0 0 \n",
"4 0 0 0 0 0 \n",
"\n",
" Yelahanka New Town Yelenahalli Yeshwanthpur \n",
"0 0 0 0 \n",
"1 0 0 0 \n",
"2 0 0 0 \n",
"3 0 0 0 \n",
"4 0 0 0 \n",
"\n",
"[5 rows x 245 columns]"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df11 = pd.concat([df10,dummies.drop('other',axis='columns')],axis='columns')\n",
"df11.head()"
]
},
{
"cell_type": "code",
"execution_count": 68,
"id": "b57187c1",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" total_sqft | \n",
" bath | \n",
" price | \n",
" bhk | \n",
" 1st Block Jayanagar | \n",
" 1st Phase JP Nagar | \n",
" 2nd Phase Judicial Layout | \n",
" 2nd Stage Nagarbhavi | \n",
" 5th Block Hbr Layout | \n",
" 5th Phase JP Nagar | \n",
" ... | \n",
" Vijayanagar | \n",
" Vishveshwarya Layout | \n",
" Vishwapriya Layout | \n",
" Vittasandra | \n",
" Whitefield | \n",
" Yelachenahalli | \n",
" Yelahanka | \n",
" Yelahanka New Town | \n",
" Yelenahalli | \n",
" Yeshwanthpur | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2850.0 | \n",
" 4.0 | \n",
" 428.0 | \n",
" 4 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" 1630.0 | \n",
" 3.0 | \n",
" 194.0 | \n",
" 3 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
2 rows × 244 columns
\n",
"
"
],
"text/plain": [
" total_sqft bath price bhk 1st Block Jayanagar 1st Phase JP Nagar \\\n",
"0 2850.0 4.0 428.0 4 1 0 \n",
"1 1630.0 3.0 194.0 3 1 0 \n",
"\n",
" 2nd Phase Judicial Layout 2nd Stage Nagarbhavi 5th Block Hbr Layout \\\n",
"0 0 0 0 \n",
"1 0 0 0 \n",
"\n",
" 5th Phase JP Nagar ... Vijayanagar Vishveshwarya Layout \\\n",
"0 0 ... 0 0 \n",
"1 0 ... 0 0 \n",
"\n",
" Vishwapriya Layout Vittasandra Whitefield Yelachenahalli Yelahanka \\\n",
"0 0 0 0 0 0 \n",
"1 0 0 0 0 0 \n",
"\n",
" Yelahanka New Town Yelenahalli Yeshwanthpur \n",
"0 0 0 0 \n",
"1 0 0 0 \n",
"\n",
"[2 rows x 244 columns]"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df12 = df11.drop('location',axis='columns')\n",
"df12.head(2)"
]
},
{
"cell_type": "code",
"execution_count": 69,
"id": "954b49f6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(7239, 244)"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df12.shape"
]
},
{
"cell_type": "code",
"execution_count": 70,
"id": "e4835adf",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" total_sqft | \n",
" bath | \n",
" bhk | \n",
" 1st Block Jayanagar | \n",
" 1st Phase JP Nagar | \n",
" 2nd Phase Judicial Layout | \n",
" 2nd Stage Nagarbhavi | \n",
" 5th Block Hbr Layout | \n",
" 5th Phase JP Nagar | \n",
" 6th Phase JP Nagar | \n",
" ... | \n",
" Vijayanagar | \n",
" Vishveshwarya Layout | \n",
" Vishwapriya Layout | \n",
" Vittasandra | \n",
" Whitefield | \n",
" Yelachenahalli | \n",
" Yelahanka | \n",
" Yelahanka New Town | \n",
" Yelenahalli | \n",
" Yeshwanthpur | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2850.0 | \n",
" 4.0 | \n",
" 4 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" 1630.0 | \n",
" 3.0 | \n",
" 3 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" 1875.0 | \n",
" 2.0 | \n",
" 3 | \n",
" 1 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" ... | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
3 rows × 243 columns
\n",
"
"
],
"text/plain": [
" total_sqft bath bhk 1st Block Jayanagar 1st Phase JP Nagar \\\n",
"0 2850.0 4.0 4 1 0 \n",
"1 1630.0 3.0 3 1 0 \n",
"2 1875.0 2.0 3 1 0 \n",
"\n",
" 2nd Phase Judicial Layout 2nd Stage Nagarbhavi 5th Block Hbr Layout \\\n",
"0 0 0 0 \n",
"1 0 0 0 \n",
"2 0 0 0 \n",
"\n",
" 5th Phase JP Nagar 6th Phase JP Nagar ... Vijayanagar \\\n",
"0 0 0 ... 0 \n",
"1 0 0 ... 0 \n",
"2 0 0 ... 0 \n",
"\n",
" Vishveshwarya Layout Vishwapriya Layout Vittasandra Whitefield \\\n",
"0 0 0 0 0 \n",
"1 0 0 0 0 \n",
"2 0 0 0 0 \n",
"\n",
" Yelachenahalli Yelahanka Yelahanka New Town Yelenahalli Yeshwanthpur \n",
"0 0 0 0 0 0 \n",
"1 0 0 0 0 0 \n",
"2 0 0 0 0 0 \n",
"\n",
"[3 rows x 243 columns]"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X = df12.drop(['price'],axis='columns')\n",
"X.head(3)"
]
},
{
"cell_type": "code",
"execution_count": 71,
"id": "f803bc44",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(7239, 243)"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.shape"
]
},
{
"cell_type": "code",
"execution_count": 72,
"id": "3f722430",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 428.0\n",
"1 194.0\n",
"2 235.0\n",
"Name: price, dtype: float64"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y = df12.price\n",
"y.head(3)"
]
},
{
"cell_type": "code",
"execution_count": 73,
"id": "3d6fddb3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7239"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(y)"
]
},
{
"cell_type": "code",
"execution_count": 82,
"id": "26df7c7c",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"X_train,X_test,y_train,y_test=train_test_split(X,y,train_size=0.8,random_state=13)"
]
},
{
"cell_type": "code",
"execution_count": 83,
"id": "ca73765a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8588660477968386"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.linear_model import LinearRegression\n",
"lr_clf = LinearRegression()\n",
"lr_clf.fit(X_train,y_train)\n",
"lr_clf.score(X_test,y_test)"
]
},
{
"cell_type": "code",
"execution_count": 86,
"id": "ee5f5b93",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0.82702546, 0.86027005, 0.85322178, 0.8436466 , 0.85481502])"
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.model_selection import ShuffleSplit\n",
"from sklearn.model_selection import cross_val_score\n",
"cv=ShuffleSplit(n_splits=5,test_size=0.2,random_state=0)\n",
"cross_val_score(LinearRegression(),X,y,cv=cv)"
]
},
{
"cell_type": "code",
"execution_count": 90,
"id": "41bd8610",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" model | \n",
" best_score | \n",
" best_params | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" linear_regression | \n",
" 0.847796 | \n",
" {'normalize': False} | \n",
"
\n",
" \n",
" 1 | \n",
" lasso | \n",
" 0.726861 | \n",
" {'alpha': 2, 'selection': 'random'} | \n",
"
\n",
" \n",
" 2 | \n",
" decision_tree | \n",
" 0.718810 | \n",
" {'criterion': 'mse', 'splitter': 'random'} | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" model best_score best_params\n",
"0 linear_regression 0.847796 {'normalize': False}\n",
"1 lasso 0.726861 {'alpha': 2, 'selection': 'random'}\n",
"2 decision_tree 0.718810 {'criterion': 'mse', 'splitter': 'random'}"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.model_selection import GridSearchCV\n",
"from sklearn.linear_model import Lasso\n",
"from sklearn.tree import DecisionTreeRegressor\n",
"def find_best_model_using_gridsearchcv(X,y):\n",
" algos = {\n",
" 'linear_regression' : {\n",
" 'model': LinearRegression(),\n",
" 'params': {\n",
" 'normalize': [True, False]\n",
" }\n",
" },\n",
" 'lasso': {\n",
" 'model': Lasso(),\n",
" 'params': {\n",
" 'alpha': [1,2],\n",
" 'selection': ['random', 'cyclic']\n",
" }\n",
" },\n",
" 'decision_tree': {\n",
" 'model': DecisionTreeRegressor(),\n",
" 'params': {\n",
" 'criterion' : ['mse','friedman_mse'],\n",
" 'splitter': ['best','random']\n",
" }\n",
" }\n",
" }\n",
" scores = []\n",
" cv = ShuffleSplit(n_splits=5, test_size=0.2, random_state=0)\n",
" for algo_name, config in algos.items():\n",
" gs = GridSearchCV(config['model'], config['params'], cv=cv, return_train_score=False)\n",
" gs.fit(X,y)\n",
" scores.append({\n",
" 'model': algo_name,\n",
" 'best_score': gs.best_score_,\n",
" 'best_params': gs.best_params_\n",
" })\n",
"\n",
" return pd.DataFrame(scores,columns=['model','best_score','best_params'])\n",
"\n",
"find_best_model_using_gridsearchcv(X,y)\n"
]
},
{
"cell_type": "code",
"execution_count": 91,
"id": "1e2267ce",
"metadata": {},
"outputs": [],
"source": [
"def predict_price(location,sqft,bath,bhk): \n",
" loc_index = np.where(X.columns==location)[0][0]\n",
"\n",
" x = np.zeros(len(X.columns))\n",
" x[0] = sqft\n",
" x[1] = bath\n",
" x[2] = bhk\n",
" if loc_index >= 0:\n",
" x[loc_index] = 1\n",
"\n",
" return lr_clf.predict([x])[0]"
]
},
{
"cell_type": "code",
"execution_count": 92,
"id": "92132555",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"90.56832868368073"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"predict_price('1st Phase JP Nagar',1000, 2, 2)"
]
},
{
"cell_type": "code",
"execution_count": 93,
"id": "93e6427d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"93.52384203792523"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"predict_price('1st Phase JP Nagar',1000, 3, 3)"
]
},
{
"cell_type": "code",
"execution_count": 94,
"id": "d2c3bee7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"184.177406050691"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"predict_price('Indira Nagar',1000, 3, 3)"
]
},
{
"cell_type": "code",
"execution_count": 95,
"id": "afae9289",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"181.2218926964465"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"predict_price('Indira Nagar',1000, 2, 2)"
]
},
{
"cell_type": "code",
"execution_count": 97,
"id": "c3eee16b",
"metadata": {},
"outputs": [],
"source": [
"import pickle\n",
"with open('banglore_home_prices_model.pickle','wb') as f:\n",
" pickle.dump(lr_clf,f)"
]
},
{
"cell_type": "code",
"execution_count": 99,
"id": "f5757ab7",
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"columns={\n",
" 'data_columns':[col.lower() for col in X.columns]\n",
"}\n",
"with open('columns.json','w') as f:\n",
" f.write(json.dumps(columns))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}