diff --git a/student.ipynb b/student.ipynb index d3bb34af..f8cc5c88 100644 --- a/student.ipynb +++ b/student.ipynb @@ -6,27 +6,5209 @@ "source": [ "## Final Project Submission\n", "\n", - "Please fill out:\n", - "* Student name: \n", - "* Student pace: self paced / part time / full time\n", - "* Scheduled project review date/time: \n", - "* Instructor name: \n", - "* Blog post URL:\n" + "* Student names:\n", + "\n", + "Jeremiah Waiguru\n", + "\n", + "Olive Muloma\n", + "\n", + "Troye Gilbert\n", + "\n", + "Josephine Maro\n", + "\n", + "\n", + "* Student pace: FULL TIME HYBRID\n", + "* Scheduled project review date/time: N/A\n", + "* Instructor name: MARYANN MWIKALI\n", + "* Blog post URL: N/A\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Data\n", + "We have been provided with a dataset with house sale prices in King County, Washington State, USA from 2014 to 2015 to use for this project.\n", + "\n", + "A dataset has been provided and can be found in the kc_house_data.csv file in this repository.\n", + "\n", + "The column names and descriptions as provided can be found in the column_names.md file in this repository.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# import the necessary libraries\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib as plt\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import statsmodels.formula.api as sfm\n", + "import statsmodels.api as sm\n", + "import scipy.stats as stats\n", + "%matplotlib inline\n", + "\n", + "import warnings\n", + "warnings.filterwarnings('ignore')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### loading dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
datepricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongradesqft_abovesqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15
id
712930052010/13/2014221900.031.00118056501.0NaNNONEAverage7 Average11800.019550.09817847.5112-122.25713405650
641410019212/9/2014538000.032.25257072422.0NONONEAverage7 Average2170400.019511991.09812547.7210-122.31916907639
56315004002/25/2015180000.021.00770100001.0NONONEAverage6 Low Average7700.01933NaN9802847.7379-122.23327208062
248720087512/9/2014604000.043.00196050001.0NONONEVery Good7 Average1050910.019650.09813647.5208-122.39313605000
19544005102/18/2015510000.032.00168080801.0NONONEAverage8 Good16800.019870.09807447.6168-122.04518007503
\n", + "
" + ], + "text/plain": [ + " date price bedrooms bathrooms sqft_living sqft_lot \\\n", + "id \n", + "7129300520 10/13/2014 221900.0 3 1.00 1180 5650 \n", + "6414100192 12/9/2014 538000.0 3 2.25 2570 7242 \n", + "5631500400 2/25/2015 180000.0 2 1.00 770 10000 \n", + "2487200875 12/9/2014 604000.0 4 3.00 1960 5000 \n", + "1954400510 2/18/2015 510000.0 3 2.00 1680 8080 \n", + "\n", + " floors waterfront view condition grade sqft_above \\\n", + "id \n", + "7129300520 1.0 NaN NONE Average 7 Average 1180 \n", + "6414100192 2.0 NO NONE Average 7 Average 2170 \n", + "5631500400 1.0 NO NONE Average 6 Low Average 770 \n", + "2487200875 1.0 NO NONE Very Good 7 Average 1050 \n", + "1954400510 1.0 NO NONE Average 8 Good 1680 \n", + "\n", + " sqft_basement yr_built yr_renovated zipcode lat long \\\n", + "id \n", + "7129300520 0.0 1955 0.0 98178 47.5112 -122.257 \n", + "6414100192 400.0 1951 1991.0 98125 47.7210 -122.319 \n", + "5631500400 0.0 1933 NaN 98028 47.7379 -122.233 \n", + "2487200875 910.0 1965 0.0 98136 47.5208 -122.393 \n", + "1954400510 0.0 1987 0.0 98074 47.6168 -122.045 \n", + "\n", + " sqft_living15 sqft_lot15 \n", + "id \n", + "7129300520 1340 5650 \n", + "6414100192 1690 7639 \n", + "5631500400 2720 8062 \n", + "2487200875 1360 5000 \n", + "1954400510 1800 7503 " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# loading the data and previewing the dataframe\n", + "df = pd.read_csv('data/kc_house_data.csv', index_col=0)\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data Preparation\n", + "In this section, we shall be preparing the data for further processing and modelling\n", + "\n", + "### Investigate data types" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(21597, 20)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# shape of our data\n", + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pricebedroomsbathroomssqft_livingsqft_lotfloorssqft_aboveyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15
count2.159700e+0421597.00000021597.00000021597.0000002.159700e+0421597.00000021597.00000021597.00000017755.00000021597.00000021597.00000021597.00000021597.00000021597.000000
mean5.402966e+053.3732002.1158262080.3218501.509941e+041.4940961788.5968421970.99967683.63677898077.95184547.560093-122.2139821986.62031812758.283512
std3.673681e+050.9262990.768984918.1061254.141264e+040.539683827.75976129.375234399.94641453.5130720.1385520.140724685.23047227274.441950
min7.800000e+041.0000000.500000370.0000005.200000e+021.000000370.0000001900.0000000.00000098001.00000047.155900-122.519000399.000000651.000000
25%3.220000e+053.0000001.7500001430.0000005.040000e+031.0000001190.0000001951.0000000.00000098033.00000047.471100-122.3280001490.0000005100.000000
50%4.500000e+053.0000002.2500001910.0000007.618000e+031.5000001560.0000001975.0000000.00000098065.00000047.571800-122.2310001840.0000007620.000000
75%6.450000e+054.0000002.5000002550.0000001.068500e+042.0000002210.0000001997.0000000.00000098118.00000047.678000-122.1250002360.00000010083.000000
max7.700000e+0633.0000008.00000013540.0000001.651359e+063.5000009410.0000002015.0000002015.00000098199.00000047.777600-121.3150006210.000000871200.000000
\n", + "
" + ], + "text/plain": [ + " price bedrooms bathrooms sqft_living sqft_lot \\\n", + "count 2.159700e+04 21597.000000 21597.000000 21597.000000 2.159700e+04 \n", + "mean 5.402966e+05 3.373200 2.115826 2080.321850 1.509941e+04 \n", + "std 3.673681e+05 0.926299 0.768984 918.106125 4.141264e+04 \n", + "min 7.800000e+04 1.000000 0.500000 370.000000 5.200000e+02 \n", + "25% 3.220000e+05 3.000000 1.750000 1430.000000 5.040000e+03 \n", + "50% 4.500000e+05 3.000000 2.250000 1910.000000 7.618000e+03 \n", + "75% 6.450000e+05 4.000000 2.500000 2550.000000 1.068500e+04 \n", + "max 7.700000e+06 33.000000 8.000000 13540.000000 1.651359e+06 \n", + "\n", + " floors sqft_above yr_built yr_renovated zipcode \\\n", + "count 21597.000000 21597.000000 21597.000000 17755.000000 21597.000000 \n", + "mean 1.494096 1788.596842 1970.999676 83.636778 98077.951845 \n", + "std 0.539683 827.759761 29.375234 399.946414 53.513072 \n", + "min 1.000000 370.000000 1900.000000 0.000000 98001.000000 \n", + "25% 1.000000 1190.000000 1951.000000 0.000000 98033.000000 \n", + "50% 1.500000 1560.000000 1975.000000 0.000000 98065.000000 \n", + "75% 2.000000 2210.000000 1997.000000 0.000000 98118.000000 \n", + "max 3.500000 9410.000000 2015.000000 2015.000000 98199.000000 \n", + "\n", + " lat long sqft_living15 sqft_lot15 \n", + "count 21597.000000 21597.000000 21597.000000 21597.000000 \n", + "mean 47.560093 -122.213982 1986.620318 12758.283512 \n", + "std 0.138552 0.140724 685.230472 27274.441950 \n", + "min 47.155900 -122.519000 399.000000 651.000000 \n", + "25% 47.471100 -122.328000 1490.000000 5100.000000 \n", + "50% 47.571800 -122.231000 1840.000000 7620.000000 \n", + "75% 47.678000 -122.125000 2360.000000 10083.000000 \n", + "max 47.777600 -121.315000 6210.000000 871200.000000 " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Describing the data\n", + "df.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 21597 entries, 7129300520 to 1523300157\n", + "Data columns (total 20 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 date 21597 non-null object \n", + " 1 price 21597 non-null float64\n", + " 2 bedrooms 21597 non-null int64 \n", + " 3 bathrooms 21597 non-null float64\n", + " 4 sqft_living 21597 non-null int64 \n", + " 5 sqft_lot 21597 non-null int64 \n", + " 6 floors 21597 non-null float64\n", + " 7 waterfront 19221 non-null object \n", + " 8 view 21534 non-null object \n", + " 9 condition 21597 non-null object \n", + " 10 grade 21597 non-null object \n", + " 11 sqft_above 21597 non-null int64 \n", + " 12 sqft_basement 21597 non-null object \n", + " 13 yr_built 21597 non-null int64 \n", + " 14 yr_renovated 17755 non-null float64\n", + " 15 zipcode 21597 non-null int64 \n", + " 16 lat 21597 non-null float64\n", + " 17 long 21597 non-null float64\n", + " 18 sqft_living15 21597 non-null int64 \n", + " 19 sqft_lot15 21597 non-null int64 \n", + "dtypes: float64(6), int64(8), object(6)\n", + "memory usage: 3.5+ MB\n" + ] + } + ], + "source": [ + "# summary of the data\n", + "df.info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The dataset contains 21,597 entries and 20 columns\n", + "\n", + "Some columns like 'waterfront', 'view', 'yr_renovated' have missing values\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### loading the column.md dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "with open('data/column_names.md', 'r') as file:\n", + " md_lines = file.readlines()\n", + "\n", + "df1 = pd.DataFrame({'Text': md_lines})\n", + "\n", + "pd.set_option('display.max_colwidth',None)\n", + "\n", + "# df1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### cleaning the column_md dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "df1[['Column name', 'Descriptions']] = df1['Text'].str.split('-', n=1,expand=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### drop the original 'text' column" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "df1.drop(columns=['Text'], inplace=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### remove rows where 'descriptions' columns contains 'None'" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Column nameDescriptions
1* `id`Unique identifier for a house\\n
2* `date`Date house was sold\\n
3* `price`Sale price (prediction target)\\n
4* `bedrooms`Number of bedrooms\\n
5* `bathrooms`Number of bathrooms\\n
6* `sqft_living`Square footage of living space in the home\\n
7* `sqft_lot`Square footage of the lot\\n
8* `floors`Number of floors (levels) in house\\n
9* `waterfront`Whether the house is on a waterfront\\n
11* `view`Quality of view from house\\n
13* `condition`How good the overall condition of the house is. Related to maintenance of house.\\n
15* `grade`Overall grade of the house. Related to the construction and design of the house.\\n
17* `sqft_above`Square footage of house apart from basement\\n
18* `sqft_basement`Square footage of the basement\\n
19* `yr_built`Year when house was built\\n
20* `yr_renovated`Year when house was renovated\\n
21* `zipcode`ZIP Code used by the United States Postal Service\\n
22* `lat`Latitude coordinate\\n
23* `long`Longitude coordinate\\n
24* `sqft_living15`The square footage of interior housing living space for the nearest 15 neighbors\\n
25* `sqft_lot15`The square footage of the land lots of the nearest 15 neighbors\\n
\n", + "
" + ], + "text/plain": [ + " Column name \\\n", + "1 * `id` \n", + "2 * `date` \n", + "3 * `price` \n", + "4 * `bedrooms` \n", + "5 * `bathrooms` \n", + "6 * `sqft_living` \n", + "7 * `sqft_lot` \n", + "8 * `floors` \n", + "9 * `waterfront` \n", + "11 * `view` \n", + "13 * `condition` \n", + "15 * `grade` \n", + "17 * `sqft_above` \n", + "18 * `sqft_basement` \n", + "19 * `yr_built` \n", + "20 * `yr_renovated` \n", + "21 * `zipcode` \n", + "22 * `lat` \n", + "23 * `long` \n", + "24 * `sqft_living15` \n", + "25 * `sqft_lot15` \n", + "\n", + " Descriptions \n", + "1 Unique identifier for a house\\n \n", + "2 Date house was sold\\n \n", + "3 Sale price (prediction target)\\n \n", + "4 Number of bedrooms\\n \n", + "5 Number of bathrooms\\n \n", + "6 Square footage of living space in the home\\n \n", + "7 Square footage of the lot\\n \n", + "8 Number of floors (levels) in house\\n \n", + "9 Whether the house is on a waterfront\\n \n", + "11 Quality of view from house\\n \n", + "13 How good the overall condition of the house is. Related to maintenance of house.\\n \n", + "15 Overall grade of the house. Related to the construction and design of the house.\\n \n", + "17 Square footage of house apart from basement\\n \n", + "18 Square footage of the basement\\n \n", + "19 Year when house was built\\n \n", + "20 Year when house was renovated\\n \n", + "21 ZIP Code used by the United States Postal Service\\n \n", + "22 Latitude coordinate\\n \n", + "23 Longitude coordinate\\n \n", + "24 The square footage of interior housing living space for the nearest 15 neighbors\\n \n", + "25 The square footage of the land lots of the nearest 15 neighbors\\n " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1 = df1[df1['Descriptions'].notna()]\n", + "df1" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['date', 'price', 'bedrooms', 'bathrooms', 'sqft_living', 'sqft_lot',\n", + " 'floors', 'waterfront', 'view', 'condition', 'grade', 'sqft_above',\n", + " 'sqft_basement', 'yr_built', 'yr_renovated', 'zipcode', 'lat', 'long',\n", + " 'sqft_living15', 'sqft_lot15'],\n", + " dtype='object')" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# checking column names\n", + "df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "date 0\n", + "price 0\n", + "bedrooms 0\n", + "bathrooms 0\n", + "sqft_living 0\n", + "sqft_lot 0\n", + "floors 0\n", + "waterfront 2376\n", + "view 63\n", + "condition 0\n", + "grade 0\n", + "sqft_above 0\n", + "sqft_basement 0\n", + "yr_built 0\n", + "yr_renovated 3842\n", + "zipcode 0\n", + "lat 0\n", + "long 0\n", + "sqft_living15 0\n", + "sqft_lot15 0\n", + "dtype: int64" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# function to check null values\n", + "def check_null(df):\n", + " return df.isna().sum()\n", + "\n", + "# checking for null values in the data\n", + "check_null(df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are missing values in three columns.\n", + "\n", + "Depending on the ratio of missing values, we will decide on what approach to take in dealing with them" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dealing with missing values\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "There is 11.00152798999861 percent of values missing in waterfront.\n", + "There is 0.29170718155299347 percent of values missing in view.\n", + "There is 17.78950780200954 percent of values missing in yr_renovated.\n" + ] + } + ], + "source": [ + "# function to calculate percentage of null values\n", + "def miss_percent(df,col):\n", + " miss = ((df[col].isna().sum()) / len(df[col])) * 100\n", + " return print(f'There is {miss} percent of values missing in {col}.')\n", + "\n", + "# checking percentage of missing values \n", + "miss_percent(df,'waterfront')\n", + "miss_percent(df, 'view')\n", + "miss_percent(df, 'yr_renovated')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The threshold on how to deal with missing values commonly used is 50% and also depends on the specific column. The percentages of missing values are very low for the specific columns so we can replace.\n", + "\n", + "Checking the year renovated column we may assume the missing value is because the house was never renovated, maybe the house did not have a view or a waterfront also for the other two columns hence we can Fill them with zeros.\n", + "\n", + "Since the missing values in the 3 columns are categorical and are a small percentage of the columns, replacing them with mode won`t skew the data nor give false conclusions" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "There is 11.00% of values missing in waterfront.\n", + "There is 0.29% of values missing in view.\n", + "There is 17.79% of values missing in yr_renovated.\n" + ] + } + ], + "source": [ + "def miss_percent(df, col, fill_value=None):\n", + " miss = ((df[col].isna().sum()) / len(df[col])) * 100\n", + " if fill_value is not None:\n", + " df[col].fillna(fill_value, inplace=True)\n", + " return miss\n", + "\n", + "# checking percentage of missing values and filling missing values with the mode\n", + "fill_values = {'waterfront': df['waterfront'].mode()[0], \n", + " 'view': df['view'].mode()[0], \n", + " 'yr_renovated': df['yr_renovated'].mode()[0]}\n", + "\n", + "for col in fill_values:\n", + " missing_percent = miss_percent(df, col, fill_value=fill_values[col])\n", + " print(f'There is {missing_percent:.2f}% of values missing in {col}.')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### check duplicates" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "duplicates = df.duplicated().sum()\n", + "duplicates" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### EDA 1\n", + "\n", + "Exploratory data analysis, including visualizations like scatter plots, bar plots, and heatmaps, is essential before creating regression models. These analyses help understand variable relationships, identify influential predictors, validate model assumptions, and guide feature selection. Visual exploration ensures that subsequent regression models are well-informed, optimized, and interpretable. It also aids in interpreting results and effectively communicating insights, enhancing the overall quality and utility of regression analysis. Conducting thorough exploratory analysis before modeling is crucial for building reliable and actionable regression models." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "***1. Heatmap***\n", + "\n", + "The heatmap of correlations between price and features (bedrooms, bathrooms, sqft_living, sqft_lot) is essential for both linear and multilinear regression. It identifies influential predictors based on their relationships with the target variable (price). This helps prioritize predictors in linear models and detect multicollinearity in multilinear models, ensuring stable and interpretable models. Overall, the heatmap guides feature selection and model interpretation in regression analysis." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiEAAAF2CAYAAAC4dEhVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAABPAElEQVR4nO3dd5wU9f3H8ddnr8ABB3fcUaUjoCKCUm1gVBRjS6JiN7YQazTG/KwxiomJiRq7BI0lmmisiRUVG4KFolJEinSkXqEJXNn9/P7Y5byDg9uF293bu/fz8ZjH7cx8Z+Yzw7L72W+ZMXdHREREJNECyQ5AREREGiYlISIiIpIUSkJEREQkKZSEiIiISFIoCREREZGkUBIiIiIiSaEkRCQBzOx8M5u4B9u/ZWY/r82YRESSTUmINBhmdpaZTTWzTWa2MvLFfliy49qemd1qZs9UXubux7n7U3E41pNm9oftlnUxMzez9FrY/4dmdvGe7kdE6iclIdIgmNk1wL3AHUAboBPwMHDybuxrhy/n2vjCFhFpaJSESL1nZi2A0cDl7v6yu3/v7mXu/pq7/zZSppGZ3WtmKyLTvWbWKLLuCDNbbmbXmdkq4IlIbcWLZvaMmW0AzjezFmb2j0gty3dm9gczS9tJTPeZ2TIz22Bm08zs8MjyEcCNwOmRGpvpkeUVNQpmFjCzm81siZmtMbN/Rs6xci3Gz81sqZkVmNlNe3j9GpnZXZH9rTazMWaWFVmXa2avm9laMyuOvO4QWfdH4HDgwci5PBhZ7mZ2mZnNN7ONZna7mXU3s08j1+N5M8usaf+VrsufzGyyma03s/+ZWcs9OV8RSRwlIdIQHAw0Bl7ZRZmbgCFAP6AvMAi4udL6tkBLoDMwKrLsZOBFIAf4F/AUUA7sDRwIHAPsrCliSuRYLYF/Ay+YWWN3H0e4tuY/7t7M3ftWs+35kelHQDegGfDgdmUOA3oBRwG3mNm+uzj3mtwJ9IzEuzewF3BLZF0AeILwdekEbNkWi7vfBHwMXBE5lysq7XME0J/wNf8/YCxwNtAR2B84s6b9V3IecCHQnvD1v38PzlVEEkhJiDQEeUCBu5fvoszZwGh3X+Pua4HbgHMrrQ8Bv3f3EnffEln2qbv/191DQHPgOODqSE3LGuBvwBnVHczdn3H3Qncvd/e7gUaEk4ZonA3c4+4L3X0TcANwxnZNQre5+xZ3nw5MJ5xY7cy1ZrZu2wTM2LbCzAz4BfBrdy9y942Ek6QzIudR6O4vufvmyLo/AsOiOIc73X2Du38NzALeiZzPeuAtwklctPt/2t1nufv3wO+AkTurgRKRukXt2NIQFAL5Zpa+i0SkPbCk0vySyLJt1rr71u22WVbpdWcgA1gZ/t4Gwkn+MqphZr8hXEvSHnDCSUx+zaey01jTCfd12WZVpdebCdeW7Mxd7l5R62NmXYBFkdlWQBNgWqXzMiAtUrYJ4WRrBJAbWZ9tZmnuHtzFMVdXer2lmvm2Mey/8jVeQvjfIX+7fYpIHaSaEGkIPgW2Aj/ZRZkVhBOJbTpFlm1T3eOmKy9bBpQA+e6eE5mau3vv7TeK9P+4DhgJ5Lp7DrCe8Jf7zo5VU6zlxOdLt4BwUtC70nm1cPdtSc1vCNfgDHb35sDQyPJoz6UmNe0fwk0423QCyiJxi0gdpyRE6r1IFf8twENm9hMza2JmGWZ2nJn9JVLsWeBmM2tlZvmR8s/sbJ/VHGMl8A5wt5k1j3Qe7W5m1TVNZBNOGtYC6WZ2C+GakG1WA13MbGf/P58Ffm1mXc2sGT/0IdlVc9NuiTQ1PQr8zcxaA5jZXmZ2bKVz2QKsi3QI/f12u1hNuN/K7qpp/wDnmNl+kVqT0cCLNdTCiEgdoSREGgR3vwe4hnBn07WEay6uAP4bKfIHYCrh/hAzgS8iy2JxHpAJzAaKCXdabVdNubcJ93uYR7j5YCtVmxReiPwtNLMvqtn+ceBpYALhZpOtwJUxxhqL64Bvgc8iI4HG80P/lXuBLMI1D58B47bb9j7g1MjIlt3pMFrT/iF8LZ4k3ATVGPjVbhxHRJLA3Pe0tlREJDnM7EPgGXd/LNmxiEjsVBMiIiIiSaEkRERERGpkZo9HbpA4ayfrzczuN7NvzWyGmR1U0z6VhIhIynL3I9QUI5IwTxIeLr8zxwE9ItMo4JGadqgkRERERGrk7hOAol0UORn4p4d9BuSYWXWd8ysoCREREZHasBdVR/otjyzbqYTcMfWNjF4aghNnK96am+wQ6r3hXeYlO4R6r+2s6kbgSm077a3hyQ6hQXjt7/tazaVqR218z55QPu+X/PBsLICx7j42hl1Ud767jEu3bRcREREiCUcsScf2llP1DsYdqHrn6R0oCREREUlxlpGwSpddeRW4wsyeAwYD6yN3k94pJSEiIiIpLpAe/yTEzJ4FjiD8QNDlhB+jkAHg7mOAN4EfE77D8mbggpr2qSREREQkxVlG/MeZuPuZNax34PJY9qkkREREJMUloiYkHjREV0RERJJCNSEiIiIpro50TI2ZkhAREZEUl6rNMUpCREREUpxqQkRERCQpUrUmRB1TRUREJClUEyIiIpLiLC01a0KUhIiIiKS4gJIQERERSQYLpGYSoj4hIiIikhSqCREREUlxlpaadQpKQkRERFKc+oSIiIhIUqRqnxAlISIiIikuVWtCUrMRSURERFKeakJERERSnG5WJiIiIklhgdRs2FASIiIikuLUMVVERESSQh1TRURERGKgmhAREZEUp+YYERERSQp1TK0nDnj0Dlr/+AhK1xQy4cATkx1OSlr09QTef/GPeChEn0NPY/Axo6qs/3b6eCa+fh9mAQJpafzolBvpsPcAAMY9fQMLZn1Ik+w8Lrj59WSEnzKmTJ3GmLGPEgyFOO6Y4Zw+8rQq66fPmMmtt/+Btm3aAHDoIQdzzllnUlpaym+uu56ysjKCwSCHH3oo551zdjJOIaVMmruEO1+dSMhD/HTgflz0o/5V1j/50Re8+eU8AMpDzqI1xXx4y4W0aNI4GeGmjIN6N+UXI9sQCBjvTlzHi28X7lBm1Olt6L9/M0pKQ9z35EoWLNsKwIlH5nLsYTmYGW9PLObV94oTHX6doZqQemL5Uy+z+OFn6Pf4nckOJSWFQkHGPz+a0658guycNjzzl1Pp3udI8tvtXVGmU6+D+fkBR2FmrP1uDq/942ouvGUcAL2H/IwDh53Dm/+8LlmnkBKCwSAPPTKGP/3hdvLz87jy19cwZMhgOnfqVKXc/r334/Zbf19lWUZGBn+5449kZWVRXl7ONb+9joED+rPvPvsk8hRSSjAU4o7/TuDvF59EmxbNOOvBFzhiv650b9Oyosz5ww7i/GEHAfDh7EU8M3G6EpAaBAwuObMtv7t3KYXFZdxzQ1c+n7GRZStLK8r0378p7Vtn8svfLaBX18ZcenZbrv3zYjq1b8Sxh+Xwmz8tpizo3ParTkyZuYmVa8qSeEYSq9Ssv4mjoolTKStan+wwUtaqxTPIbdWZnPyOpKVnsk//41kw470qZTIbN8UsnLWXlWwBfsjgO/YYSOOmLRIZckqaO28+7du3o127tmRkZHDE0KF8+tnnUW1rZmRlZQFQXl5OMFiOkZq/ohJl1rI1dMxrQYe8FmSkpzGibw8+nL1op+XHTZ/PcX17JDDC1NSjaxYr15SyuqCM8iBMmLqBwX2zq5QZ0jeb9z8LfybPXbSVplkBcpun07FtJnMXbaWkzAmFYNa8zRzcL7u6wzQIgTTb4ykpccdS2Mw6m9nRkddZZtZw/8WlWhvXrSY7t23FfLOcNmxct3qHcvO/epfHR4/g5Ud+yYhz7khkiPVCYWEhrfLzK+bz8/MoKNyxGvubOXO55IoruemW37N4yZKK5cFgkEuv+BWnn30uB/Y7kH326ZWQuFPVmvWbaJvTrGK+dYtmrF7/fbVlt5SWMWnuUo7u0z1R4aWsvJx0CorLK+YLi8vIy0nfsUzRD7UbhevKyctNZ8mKEnr3yCK7aRqNMowBfZqS3zIjYbHXNRawPZ6SIermGDP7BTAKaAl0BzoAY4CjdlJ+VKQ8VwRaMyKQs6exSkrwHZZsq/WorEe/4fToN5xl86cw8fX7GPmrJxMQW/3hXs113q42Y++9u/P0E/8gKyuLyVOmctsf/sgTj44FIC0tjUcevJ9NmzZx2x/uYPHiJXTp0jkhsaeiHa82VPO2BuCjbxbTr0s7NcVEobpLuMO1ruZCu8PyVaW89HYht1/diS0lIRYtKyEUrO5fqmFI1Y6psUR9OXAosAHA3ecDrXdW2N3HuvsAdx+gBKThyM5py8biVRXzm9atplmLnb5N6NhjIOsKlrJ5U1Eiwqs38vPzWVtQUDFfUFBIXl7LKmWaNmlS0ewyaOAAguVB1q+v2tTYrFkz+h7QhynTpsU/6BTWpkUzVq3bVDG/Zv0mWjdvWm1ZNcVEr2BdOfm5P/wWzsvNoGhdeZUyhcVlVWo48nLSK8q8O2k9V/9xETfctYSNm4OsaMD9QVK1JiSWJKTE3St6C5lZOtX/QJAGrG3nPhSvWcy6gmUEy0uZM+0Nuvc5skqZ4jVLKn7Jr176NaHyMrKa5iYj3JTVq2cPvvtuBatWraKsrIwPJ0xgyOBBVcoUFRVXXOc5c+cR8hDNmzdn3fr1bNoU/kItKSnhi6++omPHDgk/h1TSu0NrlhauZ3nRBsrKg4ybPp9h+3bZodzGLSVMW7iCI3p3TXyQKWj+4i20b51Jm7wM0tNg6IDmTJ6+sUqZz6dv4sgh4X5ivbo2ZvOWEMUbwklIi+w0AFrlpnPIgdl8NEX9+VJNLKNjPjKzG4EsMxsOXAa8Fp+wkqff03eTN2wQmfm5HLnoI+aPfoBlT7yY7LBSRiAtnaNG3sJLD11MKBSkz8GnkN++B199/CwA/Q4/k3lfvc3sz/9HIC2d9MzGnHDh3yqabF5//BqWzZ/Mlk3FjLlpKIcefyV9DjltV4dskNLS0rj80ku48Xe/JxQKcczwo+nSuTOvv/kWACf8+Dg+njSJ1998k7S0NBplNuKG//s/zIyioiLuuudeQqEQIQ8x9LDDGDJoUA1HbNjS0wLccPLhXPqPVwmFnJ8M3Je92+bx/GezABg5ZH8A3v96IQf36EiTzIbbNyEWoRCMeW4Vt13VkUDAGD9pHUtXljJiaA4A4yasY+qsTQzo05Sxf+geHqL71MqK7W/4ZQeym6YRDDqPPLuK7zeHknQmyZeqQ3SturblaguaBYCLgGMIN+W9DTzmUezgjYxeqjGJsxVvzU12CPXe8C7zkh1Cvdd21rhkh9AgnPbW8GSH0CC89vd9E5YZzDtzxB5/z/Z8dlzCM5lYakKygMfd/VEAM0uLLNscj8BEREQkOg2hY+p7hJOObbKA8bUbjoiIiMSqIdwnpLG7V3QPj7xuUvshiYiISEMQS3PM92Z2kLt/AWBm/YEt8QlLREREopWqHVNjSUKuBl4wsxWR+XbA6bUekYiIiMQkVfuERJ2EuPsUM9sH6EV4dMwcd2+4d4YRERGpI+ptTYiZHenu75vZz7Zb1cPMcPeX4xSbiIiI1GPR1IQMA94HTqxmnQNKQkRERJKo3taEuPvvIzcqe8vdn09ATCIiIhKDVO0TElXU7h4CrohzLCIiIrIbUvUBdrGMjnnXzK4F/gN8v22hu+vxpyIiIkmUqjUhsSQhFxLuA3LZdsu71V44IiIi0lDEkoTsRzgBOYxwMvIxMCYeQYmIiEgMrJ52TK3kKWADcH9k/szIspG1HZSIiIhEr96Ojqmkl7v3rTT/gZlNr+2AREREJDYNoU/Il2Y2xN0/AzCzwcCk+IQlIiIi0WoINSGDgfPMbGlkvhPwjZnNBNzdD6j16ERERKTeiiUJGRG3KERERGS31fvmGHdfEs9AREREZPc0hOYYERERqYNSNQlJzfobERERSXmqCREREUl19b1PiIiIiNRN1gDumCoiIiJ1UL0fHSMiIiJ1kzqmioiIiMRANSEiIiKpTs0xO7firbmJOEyD1v64XskOod4Lzn0r2SHUe98dcAI5m1clO4x6r3jFmmSH0EDsm7AjJaI5xsxGAPcBacBj7v7n7da3AJ4h/FiXdOAud39iV/tUTYiI1BlKQER2j1l8a0LMLA14CBgOLAemmNmr7j67UrHLgdnufqKZtQLmmtm/3L10Z/tVEiIiIpLq4l8TMgj41t0XApjZc8DJQOUkxIFsC48XbgYUAeW72mlqNiKJiIhIrTKzUWY2tdI0qtLqvYBlleaXR5ZV9iDhNqgVwEzgKncP7eqYqgkRERFJcbVxnxB3HwuM3dkhqttku/ljga+AI4HuwLtm9rG7b9jZMVUTIiIikuIsYHs81WA50LHSfAfCNR6VXQC87GHfAouAfXa1UyUhIiIiqc4Cez7t2hSgh5l1NbNM4Azg1e3KLAWOAjCzNkAvYOGudqrmGBEREdkldy83syuAtwkP0X3c3b82s0si68cAtwNPmtlMws0317l7wa72qyREREQkxSXiPiHu/ibw5nbLxlR6vQI4JpZ9KgkRERFJdbpjqoiIiCRD+NYcqUdJiIiISKpL0ZqQ1IxaREREUp5qQkRERFJcIjqmxoOSEBERkVQX5wfYxYuSEBERkVSnmhARERFJBkvRmpDUjFpERERSnmpCREREUp2aY0RERCQZLEXvE6IkREREJNWl6B1TUzN1EhERkZSnmhAREZFUp+YYERERSYoUbY5REiIiIpLi1DFVREREkkM3KxMRERGJnmpCREREUp1uViYiIiLJkKrPjmlwSciiryfw/ot/xEMh+hx6GoOPGVVl/bfTxzPx9fswCxBIS+NHp9xIh70HADDu6RtYMOtDmmTnccHNrycj/HrhgEfvoPWPj6B0TSETDjwx2eGkrKlTp/L3MWMIhUIcO2IEI0eOrLJ+xowZjL7tNtq2bQvAIYccwllnnw3A3+65h8mTJ5OTk8MjY8YkPPZU8dmXM7n38X8TDIU48aihnPez46us/2LWHK67837at84HYNjg/lw48mQAnnvtbV4bPwHM6N6pAzddcRGNMjMSfg510eCDcrnqF3sTCBivv7uSZ15ctkOZq0Z15+D+eWwtCXLHfXOZt2ATmRnGg3/uR2ZGgLQ044NJa3n830sAuOyCbhw6KI+yshArVm3ljvvmsOn7YKJPLXlUE1L3hUJBxj8/mtOufILsnDY885dT6d7nSPLb7V1RplOvg/n5AUdhZqz9bg6v/eNqLrxlHAC9h/yMA4edw5v/vC5Zp1AvLH/qZRY//Az9Hr8z2aGkrGAwyMMPPcQf77iD/Px8rr7qKoYMHkynzp2rlOu9//7cdtttO2x/9PDhnHjSSdx9112JCjnlBIMh7nr0ae675Vpa57XkoutGc/jAfnTtuFeVcn337cldN15dZdnawmJeeHM8/773jzRqlMnNdz3M+Imfc/yRhyXwDOqmQACuuaQHv/7dDNYUlvDYPQcx8fNCFi/bXFFmSP+WdGzfhDN+OZnevbK59tIejLr2S0rLnKtums6WrSHS0oxH7uzH59OK+HruRqZ8Vczfn1pIMASX/rwr557aiUeeWpTEM5VopGb9zW5atXgGua06k5PfkbT0TPbpfzwLZrxXpUxm46ZYZLx1WckW4IfssmOPgTRu2iKRIddLRROnUla0PtlhpLR58+bRvn172rVrR0ZGBkOHDePTzz6Levs+ffqQnZ0dxwhT3+xvF9KhbWv2atuajIx0jj5sEB9P+TLq7YPBICWlpZQHg2wtLSW/ZU78gk0h+/ZozvKVW1ixeivl5c74CWs4bHBelTKHD8lj3PurAPh67kaaNU0nLzcTgC1bQwCkpxtp6YZ7eJspXxYTDK/i67kbaJXfKDEnVFdYYM+nJGhQNSEb160mO7dtxXyznDasXDxjh3Lzv3qXj1+9m80bi/jZpX9PZIgiUSksKCC/VauK+fz8fObOnbtDuTnffMPll11Gy7w8Lr74YjpvV1MiO7e2qJg2+S0r5lu1bMns+Qt2KDdr7recd80t5LfM4YrzTqdbp71olZfLmSeN4KeXXEujzAwG9d2fwf32T2T4dVarvEzWFJRUzK8tLGG/ns2rlMnPa1SlzJrCEvLzMiksLiUQgH/8rT97tcvilTe+Y/a8jTsc4/jh7Xjv4zXxO4m6KEVvVhZ16mNmfzGz5maWYWbvmVmBmZ0Tz+Bqn++wxKr5h+vRbzgX3jKOk0c9xMTX70tEYCIx2fGdXLnOLmzv7t158qmneOjhhznpxBO5ffToRIRWf1Rzkbf/vOjVrTMvj7mLf94zmlOPO4rr77wfgA2bvufjKV/y4sN/4dVH/8aWrSWM++iTRERd51X3XenbXetqv04jZUIhuOCqafzsgk/Zt2dzunZqUqXYeSM7EQw673zYwJKQQGDPp2SEHUPZY9x9A3ACsBzoCfx2Z4XNbJSZTTWzqRPeGLuHYdaO7Jy2bCxeVTG/ad1qmrVovdPyHXsMZF3BUjZvKkpEeCJRy8/Pp2Dt2or5goICWuZVrdJu0rQpWVlZAAwcNIjy8nLWr1czWLRa5eWyuuCH//tri4p2aFJp2iSLJlmNATikf1/Kg0HWbdjI1Bmzad+6FbktmpOens4RQ/ozc+63iQy/zlpTUErrSk0lrfIaUVBUUqXM2sKSKmVa5zWioKi0SplN3wf5cuY6hvT/obZqxJFtOGRgHrfd/U2coq/DUrQ5JpajbuvW/WPgWXff5Tezu4919wHuPmDo8aN2VTRh2nbuQ/GaxawrWEawvJQ5096ge58jq5QpXrMEj6Tlq5d+Tai8jKymuckIV2SnevbsyYoVK1i1ahVlZWVM+OgjhgwZUqVMUVFRxXt57ty5uDvNmzevbndSjX337srylWtYsXotZWXljJ84mcMGHFilTGHx+oprPHv+QtydFtnNaJPfkq/nLWBrSQnuztSZs+nSoX0yTqPOmTN/Ax3bZ9GuTWPS042jh7Zm0uTCKmUmfl7IiCPDTee9e2WzaXM5hcWl5DTPoFnTNAAyMwMM6JfLkuXhDq2DD8rl7FM6cv3tsygpCSX2pGS3xdIn5DUzmwNsAS4zs1bA1viEFR+BtHSOGnkLLz10MaFQkD4Hn0J++x589fGzAPQ7/EzmffU2sz//H4G0dNIzG3PChX+rqIJ9/fFrWDZ/Mls2FTPmpqEcevyV9DnktGSeUkrq9/Td5A0bRGZ+Lkcu+oj5ox9g2RMvJjuslJKWlsall17KzTffTCgY5JhjjqFz58688cYbABx//PFMmjiRN954g7S0NDIzM7nu+usr3st3/vnPzJgxgw0bNnDuOedwzrnncuyxxybzlOqc9LQ0rrn4bH59+90EQyFOOPJwunXai1fe/gCAnx77Iz74dAqvvP0BaWlpNMrMYPSvL8HM6N2zOz86eADnX3sraWlp9OzaiZOHD0vyGdUNwRDcM+Zb7rmtD4GA8cb4VSxaupmTR7QD4H/jVvLp1CIOHtCS/4wdVDFEFyCvZSY3Xd2LQMAIBIz3J67lkynh38O//mUPMjKMv91+ABDunHrXw/OTc5LJkKJDdM23b4zbVWGzXGCDuwfNrAnQ3N1X1bTdo+OrbcKWWtT+uF7JDqHe22fuW8kOod7L2Vzjx4nUgpNvKEt2CA3CxNeGJSwz2Pq/B/f4e7bxyVckPJOJuibEzNKAw4EuZlZ5u3tqPSoRERGJXoqOjompOYZw88tMQA1uIiIidUWSRrfsqViSkA7ufkDcIhEREZEGJZbU6S0zOyZukYiIiMjuMdvzKQliqQn5DHjFwo/qKyN8Pxl3d435ExERSaYG8BTdu4GDgZkey5AaERERia8U7RMSS9TzgVlKQERERKQ2xFITshL40MzeAirusevuGqIrIiKSTA1giO6iyJQZmURERKQuqO99Qtz9NgAzyw7P+qa4RSUiIiLRq+81IWa2P/A00DIyXwCc5+5fxyk2ERERiUYD6Jg6FrjG3Tu7e2fgN8Cj8QlLRERE6rtY+oQ0dfcPts24+4dm1jQOMYmIiEgMvL43xwALzex3hJtkAM4h3FFVREREkilFO6bGEvWFQCvgZeCVyOsL4hGUiIiIxMACez4lQSyjY4qBX5lZcyCk0TEiIiJ1Q6o2x0Sd+phZHzP7EpgJfG1m0yIjZkRERERiFkufkL8THh3zAYCZHUF4xMwhtR+WiIiIRC1F+4RodIyIiEiqS9HmGI2OERERSXUN4GZllUfHvAzko9ExIiIispuiqgkxszTgBXc/Os7xiIiISIxSdXRMVEmIuwfNbLOZtXD39fEOSkRERGLQADqmbgVmmtm7wPfbFrr7r2o9KhEREYmaN4Ak5I3IJCIiInVJfW6OAXD3p+IZiIiIiDQsNSYhZjYT8J2td/cDajUiERERiUl9bo45IfL38sjfbfcJORvYXOsRiYiISGzqa3OMuy8BMLND3f3QSquuN7NJwOia9jG8y7zdj1CiEpz7VrJDqPfm9Dou2SHUe0c8fFqyQ2gQctqelewQpLalaE1ILFE3NbPDts2Y2SGAbtsuIiKSZG62x1NNzGyEmc01s2/N7PqdlDnCzL4ys6/N7KOa9hnL6JiLgMfNrAXhPiLrCd9FVUREROqxyE1LHwKGA8uBKWb2qrvPrlQmB3gYGOHuS82sdU37jWV0zDSgr5k1B0w3LRMREakj4t8cMwj41t0XApjZc8DJwOxKZc4CXnb3pQDuvqamnUYdtZm1MbN/AP9x9/Vmtp+ZXRTLGYiIiEjtc2yPpxrsBSyrNL88sqyynkCumX1oZtPM7LyadhpL6vQk8DbQPjI/D7g6hu1FREQkDtwCezyZ2Sgzm1ppGlXpENVlKdvfviMd6A8cDxwL/M7Meu4q7lj6hOS7+/NmdgOAu5ebWTCG7UVERKSOcvexwNidrF4OdKw03wFYUU2ZAnf/HvjezCYAfQlXWlQrlpqQ780sj0jmY2ZDCHdOFRERkWSywJ5PuzYF6GFmXc0sEzgDeHW7Mv8DDjezdDNrAgwGvtnVTmOpCbkmcsBukfuDtAJOjWF7ERERiYNohtju0f7DrR9XEO6WkQY87u5fm9klkfVj3P0bMxsHzABCwGPuPmtX+40lCZkNvEL4Lqkbgf+yiyoWERERSYxE3Lbd3d8E3txu2Zjt5v8K/DXafcaShPwT2ADcEZk/k/At3HWLQxERkWSqr7dtr6SXu/etNP+BmU2v7YBERESkYYglCfnSzIa4+2cAZjYYmBSfsERERCRa9fYpumY2k/CImAzgPDNbGpnvTNU7pYmIiEgSRHGzsTopmpqQE+IehYiIiOy2elsT4u5LEhGIiIiI7KYU7ZiamqmTiIiIpLxYOqaKiIhIHeQpWqegJERERCTFxfuOqfGiJERERCTFpWrH1NSMWkRERFKeakJERERSXH2+T4iIiIjUYanaHKMkREREJMWpY6qIiIgkRao2x6Rm/Y2IiIikPNWEiIiIpDj1CREREZGkSNXmmAaXhEyZOo0xYx8lGApx3DHDOX3kaVXWT58xk1tv/wNt27QB4NBDDuacs86ktLSU31x3PWVlZQSDQQ4/9FDOO+fsZJxCnTd16lT+PmYMoVCIY0eMYOTIkVXWz5gxg9G33Ubbtm0BOOSQQzjr7PC1/Ns99zB58mRycnJ4ZMyYhMdeXxzw6B20/vERlK4pZMKBJyY7nJQ1adEq7nr/S4Lu/LRPNy4YvE+V9U9Nnstb34Sf8RkMOYuKNvDeZSfTIiuTjVtLGf32VBYUbgDg9yMG0rd9XsLPoS46qHdTRp3RlkDAeOfjYl4cV7hDmVFntGFAn2xKSkPc+8QKFizdCsDJR7fkmMNzwGHxdyXc+8QKysqdrh0bcfk57cjMCBAMOo/8ayXzFm9N8Jklj2pCUkAwGOShR8bwpz/cTn5+Hlf++hqGDBlM506dqpTbv/d+3H7r76ssy8jI4C93/JGsrCzKy8u55rfXMXBAf/bdp+qHUkMXDAZ5+KGH+OMdd5Cfn8/VV13FkMGD6dS5c5Vyvfffn9tuu22H7Y8ePpwTTzqJu++6K1Eh10vLn3qZxQ8/Q7/H70x2KCkrGHLuHP8FD582lDbZTTjnmfEM696ebvnNK8r8fFAvfj6oFwAfLVjBv6bOo0VWJgB/ff8rDunalr+efAhlwRBby8qTch51TcDg0rPacfPfllBYXMbfburG59M3smxlaUWZAfs3o33rRoy66Vt6dcvisrPb8Zs/LSIvJ50Tj2rJZbcsoLTMue6XezF0UHPe+2Q9F5zShmdfK2DarE0M2L8ZF5zahhvuajgPgU/VmpDUTJ1209x582nfvh3t2rUlIyODI4YO5dPPPo9qWzMjKysLgPLycoLBcixF/9Hjad68ebRv35527dqRkZHB0GHD+PSzz6Levk+fPmRnZ8cxwoahaOJUyorWJzuMlDZrVREdcpvRIacZGWkBjt2nIx8u+G6n5d/+Zikj9g3/oNlUUsYXy9fykz5dAchIC5DdODMhcdd1PbtmsXJtKasLyigPwoQp6xnSr+r/+cH9snn/s3UAzF24haZNAuS2CP9mTgsYmRlGIACNMgMUrfshuWvSOPyV1qRJgMJ1SvpSQYOqCSksLKRVfn7FfH5+HnPmztuh3Ddz5nLJFVeS17Ilv7joQrpEfsUHg0GuuOrXrFi5khOPP5599umVsNhTRWFBAfmtWlXM5+fnM3fu3B3KzfnmGy6/7DJa5uVx8cUX03m7mhKRZFu7cQtts5tUzLdu1oRZK3dsNgDYUlbOJ4tXcd1RBwHw3frvyW3SiFvHTWHe2vXs2yaX3/6oH1mZDeojt1p5OemsLSqrmC8oLqdX16yqZXLTKahUprC4nLycdL5dspVX3inkiTt7UloW4svZ3/Pl7O8BGPvcKkZf3ZkLT2tDwODaPy9OyPnUFanaHBN11GZ2lZk1t7B/mNkXZnZMPIOrbe6+w7LtazP23rs7Tz/xD8Y8+AAnn3git/3hjxXr0tLSeOTB+/nXU08wd948Fi9uOFV90drxCrNDfdHe3bvz5FNP8dDDD3PSiSdy++jRiQhNJCZezbvZdnJDqAkLVtK3fX5FU0wwFGLO6nWc2q87z543nKyMNJ6YPCeu8aaMai7h9le6uqvsDk2bBBjcL5uLbpjPeb+dR6NM44jBLQD48RG5PPb8Ki64bj6PPr+aq37ertZDr8sc2+MpGWJJnS509w3AMUAr4ALgzzsrbGajzGyqmU3993P/2cMwa0d+fj5rCwoq5gsKCsnLa1mlTNMmTSqaXQYNHECwPMj69VWrtZs1a0bfA/owZdq0+AedYvLz8ylYu7ZivqCggJZ5VTvjNWnatOIaDxw0iPLy8h2usUiytc5uwqqNmyvm12zaTKtmjast+86cH5pitm3bOjuLPu3C7/2jenZgzuri+AacIgqLy2nVMqNiPj83naJ1ZVXKFBSXk1+pTF5uOkXry+m3b1NWF5SyYVOQYBA+/XIj+3YPf5YcdXAOn3yxEYCJUzfQc7valfrOzfZ4SoZYkpBtEf4YeMLdp1N9wgqAu4919wHuPuCsM07fkxhrTa+ePfjuuxWsWrWKsrIyPpwwgSGDB1UpU1RUXFFjMmfuPEIeonnz5qxbv55NmzYBUFJSwhdffUXHjh0Sfg51Xc+ePVmx4odrPOGjjxgyZEiVMkVFRRXXeO7cubg7zZs3r253IknTu20uy4o38d267ykLhnh7zjKGdW+/Q7mNJWVMW76WIyqty2/amDbZTVhcFP5SnLxkDV3z9B4HmLd4C+1bZ9ImP4P0NBg6sAWfT99Upczn0zdy5JAcAHp1y2LzlhDF68tZW1ROr25ZNMoMf/X03acpy1aVAFC0vpw+PZtULF+xphSp+2JpoJxmZu8AXYEbzCwbCMUnrPhIS0vj8ksv4cbf/Z5QKMQxw4+mS+fOvP7mWwCc8OPj+HjSJF5/803S0tJolNmIG/7v/zAzioqKuOueewmFQoQ8xNDDDmPIoEE1HLHhSUtL49JLL+Xmm28mFAxyzDHH0LlzZ9544w0Ajj/+eCZNnMgbb7xBWloamZmZXHf99RXV3Hf++c/MmDGDDRs2cO4553DOuedy7LHHJvOUUlK/p+8mb9ggMvNzOXLRR8wf/QDLnngx2WGllPRAgOuOOpDLX5pAKOSc1Kcr3fNb8OJXCwA4tV93AD6Y/x1DOrfdob/HdUcdyE1vfE5ZMESHnKbcOmJgws+hLgqFYMy/VzH66k4EzHh30jqWrijhuGG5ALz1UTFTZ25iQJ9mPPrHvcNDdJ9cAcC8RVuYNG0j997cjVDIWbB0K+MmrAPggX+uYNQZbUkLGKVlzgP/XJmsU0wK99QcKGHV9ZOotqBZAOgHLHT3dWaWB+zl7jNq2nbxt/OiO4jstmBAHd7ibU6v45IdQr13xMOn1VxI9tjpk89KdggNwuuP7pewzGD+giV7/D3bo3vnhGcyUX9zuXvIzMqBoWZWebsakxARERGJn1S9T0jUSYiZPQ4cAHzND80wDrwch7hEREQkSvU+CQGGuPt+cYtEREREGpRYRsd8amZKQkREROqYVL1PSCw1IU8RTkRWASWEh+e6ux8Ql8hEREQkKg2hOeZx4FxgJik2NFdERKQ+S9UhurEkIUvd/dW4RSIiIiINSixJyBwz+zfwGuHmGADcXaNjREREkqghNMdkEU4+Kj+0TkN0RUREkqzeJyHufkE8AxEREZHdk6pJSNRDdM2sg5m9YmZrzGy1mb1kZnqCm4iISJK52x5PyRDLfUKeAF4F2gN7Ee4b8kQ8ghIREZH6L5YkpJW7P+Hu5ZHpSaBVnOISERGRKIWwPZ6SIZYkpMDMzjGztMh0DlAYr8BEREQkOql6x9RYkpALgZHAqsh0amSZiIiIJFGq9gmJZXTMUuCkOMYiIiIiu0GjY0RERERioNExIiIiKS5Vm2M0OkZERCTFNYSOqRodIyIiUgc1hJqQyqNjVqLRMSIiIrIHohodY2ZpwB3urtExIiIidUwo2QHspqiSEHcPmlkrM8t099J4ByUiIiLRS1Zzyp6K+j4hwGJgkpm9Cny/baG731PbQYmIiEj0UvU+IbEkISsiUwDIjk84IiIiEqt6XxPi7rfFMxARERFpWKJOQsysJ3At0KXydu5+ZO2HJSIiItFqCM0xLwBjgMeAYHzCERERkViFPNkR7J5YkpByd39kdw7Sdta43dlMYvD93gOSHUK9d8TDpyU7hHrvw8teSHYIDULHO65NdghSy+ptTYiZtYy8fM3MLgNeAUq2rXf3ojjFJiIiIlGozx1TpwEOFWnWbyutc6BbbQclIiIi9V+Nt213967u3g3YN/K6YgL2i3+IIiIisivuez7VxMxGmNlcM/vWzK7fRbmBZhY0s1Nr2mcsz475JMplIiIikkAhbI+nXYk8vuUh4DjCFRBnmtkOFRGRcncCb0cTdzR9QtoCewFZZnYgPzTLNAeaRHMQERERiZ8E9AkZBHzr7gsBzOw54GRg9nblrgReAgZGs9No+oQcC5wPdAAq36J9I3BjNAcRERGRlLYXsKzS/HJgcOUCZrYX8FPgSGorCXH3p4CnzOwUd38p6nBFREQkIaLp01ETMxsFjKq0aKy7j922urrDbjd/L3Bd5KG3UR0zltu2v2RmxwO9gcaVlo+Odh8iIiJS+2rjPiGRhGPsTlYvBzpWmu9A+HlylQ0AnoskIPnAj82s3N3/u7NjxnLb9jGE+4D8iPBdU08FJke7vYiIiMRHAu6YOgXoYWZdge+AM4CzKheIjJoFwMyeBF7fVQICsY2OOcTdzwOKIw+zO5iqWZGIiIgkgbvt8bTr/Xs5cAXhUS/fAM+7+9dmdomZXbK7ccdy2/Ytkb+bzaw9UAh03UV5ERERqSfc/U3gze2WjdlJ2fOj2WcsScjrZpYD/IXwXVQh3CwjIiIiSVQbHVOTIZYk5C7gUuBw4FPgY2C3HmgnIiIitaemm43VVbEkIU8RvjfI/ZH5M4F/AiNrOygRERGJXkOoCenl7n0rzX9gZtNrOyARERGJTao+RTeW0TFfmtmQbTNmNhiYVPshiYiISEMQzbNjZhK+K1oGcJ6ZLY3Md2bHe8aLiIhIgiXgPiFxEU1zzAlxj0JERER2W73tE+LuSxIRiIiIiOye2rhtezLE0idEREREpNbEMjpGRERE6qD63CdERERE6rB62ydERERE6jYlISIiIpIUoQZwszIRERGRWqOaEBERkRSn5hgRERFJCiUhIiIikhQaopuCJs1dwp2vTiTkIX46cD8u+lH/Kuuf/OgL3vxyHgDlIWfRmmI+vOVCWjRpnIxwU8ZnX87k3sf/TTAU4sSjhnLez46vsv6LWXO47s77ad86H4Bhg/tz4ciTAXjutbd5bfwEMKN7pw7cdMVFNMrMSPg5pIJJi1Zx1/tfEnTnp326ccHgfaqsf2ryXN76JnzD42DIWVS0gfcuO5kWWZls3FrK6LensqBwAwC/HzGQvu3zEn4Oqe6AR++g9Y+PoHRNIRMOPDHZ4aSk/bqkM/KoLMxg0oxS3plcUmV9m5YBzjuuCR1bp/HqxK2MnxJe3yY3wEUnNa0ol98iwOuTtvL+tKrbNxSp+hTdBpuEBEMh7vjvBP5+8Um0adGMsx58gSP260r3Ni0rypw/7CDOH3YQAB/OXsQzE6crAalBMBjirkef5r5brqV1Xksuum40hw/sR9eOe1Up13ffntx149VVlq0tLOaFN8fz73v/SKNGmdx818OMn/g5xx95WALPIDUEQ86d47/g4dOG0ia7Cec8M55h3dvTLb95RZmfD+rFzwf1AuCjBSv419R5tMjKBOCv73/FIV3b8teTD6EsGGJrWXlSziPVLX/qZRY//Az9Hr8z2aGkJDM4Y3gW9z//PcUbQ1x/bjYzFpSxqjBUUWbzVuf597bQd++qP0ZWF4e446mNFfv506XN+Wp+aULjlz3XYEfHzFq2ho55LeiQ14KM9DRG9O3Bh7MX7bT8uOnzOa5vjwRGmJpmf7uQDm1bs1fb1mRkpHP0YYP4eMqXUW8fDAYpKS2lPBhka2kp+S1z4hdsCpu1qogOuc3okNOMjLQAx+7TkQ8XfLfT8m9/s5QR+3YCYFNJGV8sX8tP+nQFICMtQHbjzITEXd8UTZxKWdH6ZIeRsrq0S2NtcYiC9SGCIZg6p3SHZGPjZmfJqiDB0E52AuzTOZ2CdSGKNqRom0QtcN/zKRmirgkxs59Vs3g9MNPd19ReSImxZv0m2uY0q5hv3aIZM5eurrbsltIyJs1dyg0nD01UeClrbVExbfJ/qE1q1bIls+cv2KHcrLnfct41t5DfMocrzjudbp32olVeLmeeNIKfXnItjTIzGNR3fwb32z+R4aeMtRu30Da7ScV862ZNmLWysNqyW8rK+WTxKq47Klyr993678lt0ohbx01h3tr17Nsml9/+qB9ZmQ22YlSSJKdZgOKNP2QXxRtDdG0X+/twwD4ZTPmmYdeCpGqfkFhqQi4CHgPOjkyPAtcAk8zs3O0Lm9koM5tqZlP/8c4ntRJsbaru38t20qT20TeL6delnZpiolHNhbXtLmyvbp15ecxd/POe0Zx63FFcf+f9AGzY9D0fT/mSFx/+C68++je2bC1h3Ed1771TF3g1F3r767zNhAUr6ds+v6IpJhgKMWf1Ok7t151nzxtOVkYaT0yeE9d4RapT3Ts21u/StAAc0D2DL+aW1UZIKStVa0JiSUJCwL7ufoq7nwLsB5QAg4Hrti/s7mPdfYC7D7jomENqJ9pa1KZFM1at21Qxv2b9Jlo3b1ptWTXFRK9VXi6rC4oq5tcWFe3QpNK0SRZNssIJ3SH9+1IeDLJuw0amzphN+9atyG3RnPT0dI4Y0p+Zc79NZPgpo3V2E1Zt3Fwxv2bTZlo1qz5JfmfOD00x27ZtnZ1Fn3bhjqhH9ezAnNXF8Q1YpBrFm0LkZv/wNZSbHWD9pl20u1Sjd7d0lq4JsnFzilYFNHCxJCFd3L1ye8UaoKe7FwEpl4L27tCapYXrWV60gbLyIOOmz2fYvl12KLdxSwnTFq7giN5dEx9kCtp3764sX7mGFavXUlZWzviJkzlswIFVyhQWr8cjaffs+Qtxd1pkN6NNfku+nreArSUluDtTZ86mS4f2yTiNOq9321yWFW/iu3XfUxYM8facZQzrvuO12lhSxrTlazmi0rr8po1pk92ExUXhTn2Tl6yha17zHbYVibclK4O0zg2Q1yJAWgAG7JPJjG9j+zoZuE8mU79Jua+gWpeqNSGxNL59bGavAy9E5k8BJphZU2BdbQcWb+lpAW44+XAu/cerhELOTwbuy95t83j+s1kAjBwS7ovw/tcLObhHR5pomGhU0tPSuObis/n17XcTDIU44cjD6dZpL155+wMAfnrsj/jg0ym88vYHpKWl0Sgzg9G/vgQzo3fP7vzo4AGcf+2tpKWl0bNrJ04ePizJZ1Q3pQcCXHfUgVz+0gRCIeekPl3pnt+CF78K9785tV93AD6Y/x1DOrfdob/HdUcdyE1vfE5ZMESHnKbcOmJgws+hPuj39N3kDRtEZn4uRy76iPmjH2DZEy8mO6yUEXJ4bvwWrjy1KYEAfDKzlJWFIQ7vG246/Hh6Kc2bGtefm03jTMMdjuzfiNGPb2BrKWSkwz5d0vnXO5trOFL9l6p9QsyjTH8s3OB8CnAo4aa8icBLHsUOtv73/hS9PKnj+70HJDuEeq/xp28mO4R678PLXqi5kOyx1+/4PNkhNAiP/DYnYTfveHR8zN1pdvCLo6vtphNXUdeERJKNFyOTiIiI1BGh2LrS1BlR9wkxs5+Z2XwzW29mG8xso5ltiGdwIiIiUn/F0ifkL8CJ7v5NvIIRERGR2DWEB9itVgIiIiJS9zSEJGSqmf0H+C/h+4MA4O4v13ZQIiIiEr1UHR0TSxLSHNgMHFNpmQNKQkRERJIo2pGuu5b4J/HGMjrmgngGIiIiIg1LjUmImf2fu//FzB6gmtv6u/uv4hKZiIiIRKU+9wnZ1hl1ajwDERERkd2TqvcJqTEJcffXIi9nuPuXcY5HREREYpSqNSGxPMDuHjObY2a3m1nvuEUkIiIiDULUSYi7/wg4AlgLjDWzmWZ2c7wCExERkeiEfM+nZIilJgR3X+Xu9wOXAF8Bt8QjKBEREYme+55PyRD1EF0z2xc4HTgVKASeA34Tp7hEREQkSl4rVRl1+D4hwBPAs8Ax7r4iTvGIiIhIjOr9HVPdfUg8AxEREZGGJZqblT3v7iPNbCZVb1ZmgLv7AXGLTkRERGqUqkN0o6kJuSry94R4BiIiIiK7J5Si7THR3KxsZeTvkviHIyIiIrGqtzUhZraRap4Zww/NMc1rPSoRERGJWr1NQtw9O5odmVmuuxfveUgiIiLSEMQyRLcm7wEH1eL+REREJAqhFK0Kqc0kJPF3ORERERG8vj5FNwapmYaJiIikOE/RmpCYnh0jIiIiUlvUHCMiIpLiQinaHBN1TYiZPV3DsqNqJSIRERGJibvv8ZQMsdSE9K48Y2ZpQP9t8+5etLMNT3treOyRSUyKV6xJdgj1Xk7bs5IdQr3X8Y5rkx1Cg3DCjYOTHULD8Nu5CTtUit4wNaqbld0A3AhkmdmGbYuBUmBsHGMTERGRKHiKZiHR1IR86+7Z2x5kF/eIREREpEGIpk/IDZG/e8czEBEREdk97ns+JUM0NSGFZvYB0NXMXt1+pbufVPthiYiISLTq7VN0geMJ3479aeDu+IYjIiIisUrVm5VF8wC7UuAzMzvE3dcmICYRERGpY8xsBHAfkAY85u5/3m792cB1kdlNwKXuPn1X+4xliO7jZrbTVEvNMiIiIskR72fHRG7L8RAwHFgOTDGzV919dqVii4Bh7l5sZscRHkG7y/HgsSQhC4G2wDOR+TOBxcDbMexDREREalkCnqI7iPBo2YUAZvYccDJQkYS4+yeVyn8GdKhpp7EkIQe6+9BK86+Z2QR3vzGGfYiIiEgtq40+IWY2ChhVadFYd992P7C9gGWV1i1n17UcFwFv1XTMWJKQVmbWrVIW1A1oFcP2IiIiEge1MTomknDs7Cak1T0frtqDmtmPCCchh9V0zFiSkKuBD81sYeTAXamaMYmIiEj9tBzoWGm+A7Bi+0JmdgDwGHCcuxfWtNNYkpDmwP6Ek4+TgEOAghi2FxERkThIwAjdKUAPM+sKfAecAVR5oJaZdQJeBs5193nR7DTqp+gCv3P3DUA24d6xY4BHYtheRERE4sBDvsfTLvfvXg5cQXgwyjfA8+7+tZldYmaXRIrdAuQBD5vZV2Y2taa4Y6kJCUb+Hg+Mcff/mdmtMWwvIiIicZCA0TG4+5vAm9stG1Pp9cXAxbHsM5Yk5Dsz+ztwNHCnmTUitpoUERERiYNUfYpuLEnESMLVMCPcfR3QEvhtPIISERGR+i/qmhB330y4w8m2+ZXAyngEJSIiItFL1ZqQWJpjREREpA5K0RxESYiIiEiqS9WaEHUsFRERkaRQTYiIiEiKq41nxySDkhAREZEUVxvPjkkGJSEiIiIpTjUhIiIikhTqmCoiIiISA9WEiIiIpLhUrQlREiIiIpLiEvEAu3hQEiIiIpLiVBOSIg7q3ZRfjGxDIGC8O3EdL75duEOZUae3of/+zSgpDXHfkytZsGwrACcemcuxh+VgZrw9sZhX3ytOdPh11uCDcrnqF3sTCBivv7uSZ15ctkOZq0Z15+D+eWwtCXLHfXOZt2ATmRnGg3/uR2ZGgLQ044NJa3n830sAuOyCbhw6KI+yshArVm3ljvvmsOn7YKJPrU45qHdTRp3RlkDAeOfjYl4cV83794w2DOiTTUlpiHufWMGCpeH378lHt+SYw3PAYfF3Jdz7xArKyp2uHRtx+TntyMwIEAw6j/xrJfMWb03wmdVN+3VJZ+RRWZjBpBmlvDO5pMr6Ni0DnHdcEzq2TuPViVsZPyW8vk1ugItOalpRLr9FgNcnbeX9aVW3l5od8OgdtP7xEZSuKWTCgScmO5w6K1VHxzSojqkBg0vObMutDyzj8lsXMHRgczq2y6xSpv/+TWnfOpNf/m4BDz2zkkvPbgtAp/aNOPawHH7zp8VceftCBvbJpl3rjGScRp0TCMA1l/Tg2ltncs7lUzh6aGu6dGxSpcyQ/i3p2L4JZ/xyMn99aB7XXtoDgNIy56qbpnP+r6Zx/q+mMeSglvTulQ3AlK+KOe/yKZz/q2ks+24z557aKeHnVpcEDC49qx2/v28pl93yLcMGtdjh/Ttg/2a0b92IUTd9y4NPr+Sys9sBkJeTzolHteTXf1jE5bcuJBCAoYOaA3DBKW149rUCfjV6If/631ouOLVNws+tLjKDM4Zn8eCL3zP68Y0M3DeTtnlVPzI3b3Wef29LRfKxzeriEHc8tZE7ntrIn/65kdJy56v5pYkMv95Y/tTLTD7h4mSHIXESdRJiZldFs6wu69E1i5VrSlldUEZ5ECZM3cDgvtlVygzpm837n60HYO6irTTNCpDbPJ2ObTOZu2grJWVOKASz5m3m4H7Z1R2mwdm3R3OWr9zCitVbKS93xk9Yw2GD86qUOXxIHuPeXwXA13M30qxpOnm54S/QLVtDAKSnG2npxraEfsqXxQTDq/h67gZa5TdKzAnVUT27ZrFybaX375T1DNnuPTi4Xzbvf7YOgLkLt9C0SYDcFuEKz7SAkZlhBALQKDNA0bryiu2aNA5/FDRpEqCw0vKGrEu7NNYWhyhYHyIYgqlzSum7d9UfHhs3O0tWBSvep9XZp3M6BetCFG1IzV+qyVY0cSplReuTHUadFwr5Hk/JEEtNyM+rWXZ+LcWREHk56RQU//ABW1hcRl5O+o5lisp+KLOunLzcdJasKKF3jyyym6bRKMMY0Kcp+S1VEwLQKi+TNQU//BJcW1hCq7yqCUN+XqMqZdYUlpCfF05CAgF44r7+vPb0IUz9spjZ8zbucIzjh7fjs2lFcTqD1JCXk87aSu/NguJy8nKqvgfzcrd7/xaXk5eTTuG6cl55p5An7uzJ03f1ZPOWEF/O/h6Asc+t4oJT2/DEnT246NQ2PPXymsScUB2X0yxA8cYfsovijSFymsVeeTxgnwymfKNaEIkvD/keT8lQ4/8oMzvTzF4DuprZq5WmD4AdG6R/2G6UmU01s6lLvnm+NmPebVbNsh0uu+1Yyh2WryrlpbcLuf3qTtx6VScWLSshFNQvG6j2krF982R1137bxQ+F4IKrpvGzCz5l357N6dqpalPOeSM7EQw673zYwL8cq7vONRfBHZo2CTC4XzYX3TCf8347j0aZxhGDWwDw4yNyeez5VVxw3XwefX41V/28Xa2Hnoqi+ryoQVoADuiewRdzy2ouLLIH3H2Pp2SIpmPqJ8BKIB+4u9LyjcCMnW3k7mOBsQAn/vKbOvFtXbCunPzcH045LzejSpU0hGtH8ltmwIIt4TI56RVl3p20nncnhasFz/1JKwqLVW0NsKaglNaVmkpa5TWioKhqG/nawpIqZVrnNaKgqOqvw03fB/ly5jqG9G/JoqWbARhxZBsOGZjHVTdPj+MZpIbC4nJaVap9y89Np2hd1S+3guLySA1d5P2bm07R+nL67duU1QWlbNgU7tj76Zcb2bd7Fh9+vp6jDs5h7HOrAZg4dQO/Ok9JCEDxphC52T/8TsvNDrB+0y7aXarRu1s6S9cE2bi5TnwEitQ5NdaEuPsSd//Q3Q8G5gDZkWm5u6fUt/D8xVto3zqTNnkZpKfB0AHNmTy9atX/59M3ceSQ8C/EXl0bs3lLiOIN4dNskZ0GQKvcdA45MJuPpqidEmDO/A10bJ9FuzaNSU83jh7amkmTq1aSTfy8kBFHhjv59u6VzabN5RQWl5LTPINmTcPXNTMzwIB+uSxZHk5ABh+Uy9mndOT622dRUhLbh399NG/b+zc/8v4d2ILPp2+qUubz6Rs5ckgOAL26ZYXfv+vLWVtUTq9uWTTKDP++77tPU5atCieKRevL6dOzScXyFWvUdACwZGWQ1rkB8loESAvAgH0ymfFtbDUaA/fJZOo3qgWR+PNQaI+nZIh6iK6ZnQbcBXxIuKbyATP7rbu/GKfYal0oBGOeW8VtV3UkEDDGT1rH0pWljBiaA8C4CeuYOmsTA/o0ZewfuoeH6D61smL7G37ZgeymaeFhjM+u4vvN+mIECIbgnjHfcs9tfQgEjDfGr2LR0s2cPCL8i/p/41by6dQiDh7Qkv+MHVQxRBcgr2UmN13di0DACASM9yeu5ZMp4b4fv/5lDzIyjL/dfgAQ7px618Pzk3OSdUAoBGP+vYrRV3ciYMa7k9axdEUJxw3LBeCtj4qZOnMTA/o049E/7h0eovvkCgDmLdrCpGkbuffmboRCzoKlWxk3YR0AD/xzBaPOaEtawCgtcx7458qdhdCghByeG7+FK09tSiAAn8wsZWVhiMP7hvsyfTy9lOZNjevPzaZxZrhD9ZH9GzH68Q1sLYWMdNinSzr/emdzks8ktfV7+m7yhg0iMz+XIxd9xPzRD7DsiZT52kmYVH2KrkXbDmRm04Hh7r4mMt8KGO/ufWvatq40x9RnxSsaeH+JBMhp2yrZIdR7HXu2T3YIDcIJNw5OdggNwvFlc6vtDhcPI3+zeI+/Z5+/u0vC4t0mlpuVBbYlIBGFNLD7jIiIiNRFDeGOqePM7G3g2cj86cCbtR+SiIiINARRJyHu/lszOwU4lHCfkLHu/krcIhMREZGoNISaENz9JeClOMUiIiIiuyHkqTlQosYkxMw2Uv09egxwd29e61GJiIhI1OptTYi7R/WAFDPLdXc9VlZERCTBUjUJqc3RLe/V4r5ERESknoupT0gNEj6+WEREREjas1/2VG0mIal5BURERFJcKEm3Xd9TtZmEiIiISBKoT4iaY0RERCQGUSchZvZ0DcuOqpWIREREJCbuoT2ekiGW5pjelWfMLA3ov23e3YtqKygRERGJXqo2x0Rzs7IbgBuBLDPbsG0xUAqMjWNsIiIiEoV6m4QA37p7tpk97+4j4x6RiIiIxCRVb9seTZ+QGyJ/945nICIiItKwRFMTUmhmHwBdzezV7Ve6+0m1H5aIiIhEqz43xxwPHAQ8Ddwd33BEREQkVl5fb1bm7qXAZ2Z2iLuvTUBMIiIiEoP6XBOyzeNmttOzVLOMiIhIciTrPh97KpYkZCHQFngmMn8msBh4u5ZjEhERkQYgliTkQHcfWmn+NTOb4O431nZQIiIiEr1QA2iOaWVm3dx9IYCZdQNaxScsERERiVa97ZhaydXAh2a2EHCgKzAqHkGJiIhI9BpCx9TmwP6Ek4+TgEOAgngEJSIiIvVf1E/RBX7n7huAbGA4MAZ4JC5RiYiISNRS9Sm6sSQhwcjf44Ex7v4/ILP2QxIREZFYeMj3eEqGWJpjvjOzvwNHA3eaWSNiS2JEREQkDlK1Y6q5R5f9mFkTYAQw093nm1k7oI+7vxPPAJPFzEa5+9hkx1Gf6RrHn65xYug6x5+ucf0UdRLS0JjZVHcfkOw46jNd4/jTNU4MXef40zWun9ScIiIiIkmhJERERESSQknIzqntMf50jeNP1zgxdJ3jT9e4HlKfEBEREUkK1YSIiIhIUigJ2Y6ZjTazo5MdR11gZl3MbFait20IYr0+Zna+mbWvNL/YzPLjE52ISGIoCanEzNLc/RZ3H5/sWOorM4vlBnnyg/OB9jUVqkzXOnZm1sjMxpvZV2Z2upndGMU2myJ/25vZizWUPcnMrq+teOubPbn+u1jfxczOqr0opTY1mCQk8kacY2ZPmdkMM3vRzJpEflHeYmYTgdPM7EkzOzWyzUAz+8TMppvZZDPLNrM0M/urmU2J7OeXST61eEuv5pr1N7OPzGyamb0duXEdkeXTzexT4PJtO4j8in/BzF4D3jGzlmb238g+PzOzAyLldrb81kgM70T+vX5mZn8xs5lmNs7MMiLl/mxmsyPb35X4SxWz6q7tLZH31iwzG2thpwIDgH9FPpyzIttfaWZfRK7DPlBxrcaa2TvAP82ss5m9FznGe2bWKVJuZ8ufNLNHzOwDM1toZsPM7HEz+8bMnoyUSYuUmxU59q8TfuXi50Agw937uft/gBq/BLdx9xXufmoNZV519z/vaZD12G5f/13oAigJqavcvUFMhN+IDhwamX8cuBZYDPxfpXJPAqcSfi7OQmBgZHlzwre5HwXcHFnWCJgKdE32+SXwmv0W+ARoFVl2OvB45PUMYFjk9V+BWZHX5wPLgZaR+QeA30deHwl8VcPyW4GJQAbQF9gMHBdZ9wrwE6AlMJcfOlvnJPv67eb7sWWlMk8DJ0ZefwgMqLRuMXBl5PVlwGOVrtU0ICsy/xrw88jrC4H/1rD8SeA5wICTgQ1AH8I/WKYB/YD+wLuVYqnr17op8AYwHZgVec+OAOZE3lf3A68DrYFvgfXAV8ALhJ+Z9RXwr13sf1Olf9Nt7/nPgd6VynwYuW7nAw9Wutb3E/7/tBA4NbI8ADwMfB2J681t61JxSuD1NyKfO8BM4PTI8s8q7fPXyb4emqpODaYmJGKZu0+KvH4GOCzy+j/VlO0FrHT3KQDuvsHdy4FjgPPM7CvCHzR5QI+4Rp1c21+zY4H9gXcj1+BmoIOZtSD8ZfRRpOzT2+3nXXcvirw+bNt6d38fyItsv7PlAG+5exnhD5c0YFxk+UzCH/4bgK3AY2b2M8KJSl1X3fvxR2b2uZnNJJyI9d7F9i9H/k4jfA22edXdt0ReHwz8O/L6aX54z+9sOcBrHv70ngmsdveZHn7E5teR4ywEupnZA2Y2gvC1r8tGACvcva+770/4vfMocCJwONAWwN3XABcDH3v4l/hpwJbI67NjPOZzwEiASE1he3efVk25doSv/QnAthqSnxG+zn0i8Rwc47HrmkRd/58RTpL7En7G2V8j1/76Svv8Wy2fm+yhhpaEbD8eedv899WUtWrKb1t+ZeQN3c/du3o9fX5OxPbXYCPwdaXz7+Pux7Dz67VN5WtsOznOzpYDlABEvgzLIl+SACEgPZIgDgJeIlwzMo66r7r348OEf/X2IfxB3XgX25dE/gap+jDK6t7POztmdcu37TdU6fW2+XR3Lyb8Qf8h4Wa3x3ZxvLpgJnC0md1pZocDXYFF7j4/8j56Jg7HfB44LfJ6JOFf9dX5r7uH3H020Cay7DDghcjyVcAHcYgvkRJ1/Q8DnnX3oLuvBj4CBtbSviVOGloS0snMtv2qOJNwVeDOzAHam9lAgEh/kHTgbeDSSv0QeppZ03gGnWTbX7PPgFbblplZhpn1dvd1wHoz2/aLele/XCZsW29mRwAF7r5hF8trZGbNgBbu/iZwNeFfRHXdzt6PBZHzqdy/YCOQvRvH+AQ4I/L67ErH2NnyGll4VE7A3V8CfgcctBtxJYy7zyPcFDIT+BNwErtOmGvjmN8BhZF+TacTrhmpTuUkz7b7Wy8k8PrXq+vWUDS0JOQb4OdmNoNwH4JHdlbQ3UsJf3g8YGbTgXcJ/yp9DJgNfGHhIZZ/p+qv0Ppm+2v2AOEvxzsj1+Ur4JBI2QuAhyIdU7dUs69tbgUGRPb5Z+DnNSyPRjbwemTbj4BU6CxZ3fvxUcIf1v8FplQq+yQwZruOqdH4FXBB5BjnAlfVsDwaewEfRprjngRuiGHbhLPw0ObN7v4McBfh92tXM+seKXLmLjYv2/aDYzc8B/wf4eR4ZgzbTQROMbOAmbUBjtjN49cJCbz+E4DTIx2nWwFDgcnsfgIvCdBg7phqZl2A1yNtkiLSQJjZsYQ7LIaAMuBSIB+4Fygg/KW/v7ufEKmBu9bdT4hseyfhX+5f7Kxfgpltcvdm23/GRBKI74Db3f22yLLzCXcwviIy2uh1d39xu/1s65g6FJhHuAP8Pe7+bm1el0RJ4PU34C/AcYRrWv7g7v+JJDHjIsd8Uv1C6hYlISLSoG3/xVcXmFkzd99kZnmEf80fGukfUu/UxesviVOfmxGqcPfFhEd1iIjUda+bWQ7hWwXcXl8TEJEGUxMiIrK7IjUS71Wz6ih3L0x0PA2Nrn/9pSREREREkqKhjY4RERGROkJJiIiIiCSFkhARERFJCiUhIiIikhRKQkRERCQp/h/O9zp36yIABAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10, 6))\n", + "sns.heatmap(df[['price', 'bedrooms', 'bathrooms', 'sqft_living', 'sqft_lot']].corr(), annot=True, cmap='coolwarm')\n", + "plt.title('Correlation Heatmap')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "***2. Bar Graph***\n", + "\n", + "The bar plot of price by condition is essential for developing regression models. It identifies influential condition categories for predictor selection and aids in understanding price variations. This visualization guides preprocessing of categorical variables and validates predictor-target relationships. Overall, it informs feature selection, interpretation, and validation in regression modeling." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10, 6))\n", + "sns.barplot(x='condition', y='price', data=df, color='blue')\n", + "plt.title('Price Distribution by Condition')\n", + "plt.xlabel('Condition')\n", + "plt.ylabel('Price')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "***3. Scatter plot***\n", + "\n", + "The scatter plots of price against square footage of living space (`sqft_living`) and lot size (`sqft_lot`) provide insights for linear and multilinear regression models. They show how price relates to these predictors, helping assess linearity and identify outliers. Clear trends in these plots guide decisions on model complexity and feature engineering, essential for accurate regression analysis." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAscAAAGECAYAAADa0o1xAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAACxu0lEQVR4nOzdeXxU5fU/8M8zW2bJHrKZkISQhEBC2AKiBapEKdq4sWltsSp++dkWg+LWWtG6l0qxIFalWrfWCopLpZSioEXrGpSdQEJIQkJIQtbZt/v8/pi5NzOZOyFAJhnIeb9evoRkMvcm5D5z5tzznMM45yCEEEIIIYQAisE+AUIIIYQQQsIFBceEEEIIIYR4UXBMCCGEEEKIFwXHhBBCCCGEeFFwTAghhBBCiBcFx4QQQgghhHhRcEzOGGPMxBjLHuzz6G+MsccZYycZYyfO8nkyvD8jZR8e+wJjbPnZHI8QQs4WreuEUHBMfDDGahhjVu/i2MQYe4UxFhns8ZzzSM559UCeY18wxmIZY39ljJ1gjBkZY4cZY/f38WuHA7gbwBjOeQpj7GbG2Oen+JpPGWO39fw457zO+zNyn+q4nPPbOeeP9eUcCSGkr2hd7991/RRfk8UY44wx1el8HQk/FByTnq7inEcCmAhgMoAHez7gHLjwnwEQCWA0gBgAVwM40sevzQTQyjlvDtG5EULIQKN1ndZ1chooOCayOOcNAP4NoBAAvO+Gf8UYqwRQ6fOxHO+fdYyxPzLGahljnYyxzxljOu/npjLGvmCMdTDGdjPGLpE7JmPs14yxd3p8bDVjbI33zzczxqq9WYOjjLGfBjn9yQDe5Jy3c84FznkF5/wdn+e8nDFW4T3PtYyx/zLGbmOMXQbgIwAXeLMs6wG8AOAi7987Tudn6JtFYIzdwBgr7/H5uxhj//T++VXG2OPeP1/CGKtnjN3NGGtmjDUyxm7x+boExtiHjLEuxti33tuFvWZBCCGE1vV+WdcVjLEHvT+TZsbY64yxGO+nd3j/3+F97otO57lJ+KDgmMjy3oa6EsD3Ph++FsCFAMbIfMlKAJMAXAwgHsB9AATGWBqAfwF43PvxewBsZIwlyjzHPwBcyRiL9p6DEsACAG8yxgwA1gC4gnMe5T3OriCn/xWAJxhjtzDGcnt8X8MAbIQnczIMnszDDwCAc/4xgCsAHPfeWrwewO0AvvT+PTbI8frinwBG9TifGwG8GeTxKfBkR9IALALwHGMszvu55wCYvY/5ufc/QgjpFa3r/bKu3+z971IA2fBks9d6PzfD+/9Y73N/eZrPTcJE2AXHzFNT1MwY29fHxy9gjB1gjO1njAULNEjfve99J/05gP8CeNLnc09xzts451bfL2CMKQDcCmAp57yBc+7mnH/BObcD+BmAzZzzzd53+x8BKIdngfbDOa8F8B08izUAzARg4Zx/5f27AKCQMabjnDdyzvcH+R7uAPB3AEsAHGCMVTHGrvB+7koABzjn73DOnQD+BCDkGzQ45xYAHwD4CQB4F/d8eIJmOU4Aj3LOnZzzzQBM8ATXSgBzATzMObdwzg8AeC3U509IMLRmnxNoXe8/PwWwinNezTk3AfgNgBtY+JelkNMQdsExgFcBzO7LA70Bxm8A/IBzXgDgztCd1pBxLec8lnOeyTn/ZY8F81iQrxkGQAv5+q9MAPO9t946vAv0NACpQZ7rTXgDSPhkVjnnZgDiO/5Gxti/GGP5ck/AObdyzp/knE8CkABgA4C3GWPxAC7w/T4457yX76u/9fze3vcGzXJaOecun79b4MlQJAJQwf+cB+r8CZHzKmjNDne0rvefCwDU+vy9Fp41OTlExyODIOyCY875DgBtvh9jjI1kjG1hjO1kjH3mc/H8H4DnOOft3q+lYvvQ4kE+fhKADcBImc8dA/CGd2EW/zNwzn8f5LneBnAJYywdwHXwKTvgnP+Hc345PAtwBYC/nPKEOe+CJ0tiADACQCOA4eLnGWPM9+9yT3GqY5yGrQCGMcbGw/NCcSZZsxYALgDpPh/r7fwJCSlas895tK6fnuPwvDkQZcCzJjed5fOSMBJ2wXEQ6wDc4X3HeA+AP3s/ngcgjzH2P8bYV4yxPmUvSP/inAsA/gpgFWPsAsaYkjF2EWMsAsDfAFzFGPuR9+Na5tlwlh7kuVoAfArgFQBHOecHAYAxlswYu9pbo2aHp8xAtkUaY2w5Y2wyY0zDGNMCWAqgA8AheOrkChhjc7y3wcrgqd0NpglAOmNMc4ofg8r7vYn/qWW+NxeAdwA8DU+d3keneM4A3NMW7l0Av2OM6b1Bx02n+zyEhBit2ec4WtcByK/r/wBwF2NsBPO0xHsSwHrv+t4CT5nIedcneqgJ++DY+8t3MTy3T3YBeBHdt25UAHIBXAJPJu4lxljswJ8lgecFcC+Ab+HJIq0AoOCcHwNwDYAH4Fk4jgG4F73/7r0J4DL4Z1YV8PSpPO59/h8C+GWQr+fwLMInvY+/HMCPOecmzvlJAPMB/B5AKzy/P//r5Vy2A9gP4ARj7GQvj3segNXnv1dO8b293aNs4nQsgWez3gkAb8CzWNvP8LkI6Ve0Zp9XaF0PXNf/Cs+6uwPAUXiy63cA0t6SJwD8z1tuMrWX5yZhjHlKc8ILYywLwCbOeSHz7HA9xDkPqGVijL0A4CvO+avev28D8GvO+bcDeb7k3MYY+xTA3zjnLw32uZwJxtgKACmcc+paQQYFrdkk3Jzr6zoZXGGfOfbWFh1ljM0HPLVEjLFx3k+/D087FbGVSx6AsJvsQ0h/YozlM8aKvNfCFHhavb032OdFCEBrNiHk3Bd2wTFj7B8AvoSnbVU9Y2wRPK1TFjHGdsNzK+Qa78P/A6CVMXYAwCcA7uWctw7GeRMygKLgqTs2w7Nj+4/wtIkjZMDRmk0IOd+EZVkFIYQQQgghgyHsMseEEEIIIYQMlpAGx4yxu5hnCtI+xtg/vO1XCCGEhCFaswkhJIRlFcwze/1zAGM451bG2AZ4xk2+Guxrhg0bxrOyskJyPoQQEko7d+48yTlPHOzzOFO0ZhNChpLe1uxQzwJXAdAxxpwA9PD0JgwqKysL5eXlIT4lQgjpf4yx2lM/KuzRmk0IGRJ6W7NDVlbBOW8AsBJAHTyjHTs551tDdTxCCCFnjtZsQgjxCFlwzBiLg6d9zwgAFwAwMMZ+JvO4xYyxcsZYeUtLS6hOhxBCSC9ozSaEEI9Qbsi7DJ4Z6i2ccyc8fVkv7vkgzvk6znkx57w4MfGcLdcjhJBzHa3ZhBCC0AbHdQCmMsb0jDEGoATAwRAejxBCyJmjNZsQQhDamuOvAbwD4DsAe73HWheq4xFCCDlztGYTQohHSLtVcM4fBvBwKI9BCCGkf9CaTQghNCGPEEIIIYQQCQXHhBBCCCGEeFFwTAghhBBCiBcFx4QQQgghhHiFenw0IYT0mSBw1LSa0dRlQ3K0FlkJBigUbLBPi4QI/XsTQsIRBceEkLAgCBxb9p/Asg27YHMK0KoVWLVgPGYXpFDAdB6if29CSLiisgpCSFioaTVLgRIA2JwClm3YhZpW8yCfGQkF+vcmhIQrCo4JIWGhqcsmBUoim1NAs9E2SGdEQon+vQkh4YqCY0JIWEiO1kKr9l+StGoFkqK0g3RGJJTo35sQEq4oOCaEhIWsBANWLRgvBUxiDWpWgmGQz4yEAv17E0LCFW3II4SEBYWCYXZBCvLLpqPZaENSFHUvOJ/RvzchJFxRcEwICRsKBUN2YiSyEyMH+1TIAKB/b0JIOKKyCkIIIYQQQrwoOCaEEEIIIcSLgmNCCCGEEEK8KDgmhBBCCCHEi4JjQgghhBBCvCg4JoQQQgghxIuCY0IIIYQQQrwoOCaEEEIIIcSLgmNCCCGEEEK8KDgmhBBCCCHEi4JjQgghhBBCvCg4JoQQQgghxIuCY0IIIYQQQrwoOCaEEEIIIcSLgmNCCCGEEEK8KDgmhBBCCCHESzXYJ0AICT1B4KhpNaOpy4bkaC2yEgxQKNhgnxYhAOj3kxASXig4JuQ8JwgcW/afwLINu2BzCtCqFVi1YDxmF6RQAEIGHf1+EkLCTcjKKhhjoxhju3z+62KM3Rmq4xFC5NW0mqXAAwBsTgHLNuxCTat5kM+MhJPBWrPp95MQEm5CljnmnB8CMB4AGGNKAA0A3gvV8Qgh8pq6bFLgIbI5BTQbbchOjByksyLhZrDWbPr9JISEm4HakFcC4AjnvHaAjkcI8UqO1kKr9r/UtWoFkqK0g3RG5BwwYGs2/X4SQsLNQAXHNwD4xwAdixDiIyvBgFULxksBiFjTmZVgGOQzI2FswNZs+v0khIQbxjkP7QEY0wA4DqCAc94k8/nFABYDQEZGxqTaWkouE9LfxG4AzUYbkqKoG0AoMMZ2cs6LB/s8ztZgrNn0+0kIGWi9rdkDkTm+AsB3cossAHDO13HOiznnxYmJiQNwOoSc/wSBo7rFhC+PnER1iwkAkJ0YianZw5CdGEmBB+nNgK7Zvm3cKDAmhISDgWjl9hNQSQUhA4ZaY5GzNGBrNv2uEkLCUUgzx4wxPYDLAbwbyuMQQrpRayxypgZ6zabfVUJIOAppcMw5t3DOEzjnnaE8DiGkW2+tsQjpzUCv2fS7SggJRwPVrYIQMkCoNRY5V9DvKiEkHFFwTMh5hlpjkXMF/a4SQsLRQGzII4QMIIWCYXZBCvLLplNrLBLW6HeVEBKOKDgm5DykUDBkJ0bS+F0S9uh3lRASbqisghBCCCGEEC8KjgkhhBBCCPGi4JgQQgghhBAvCo4JIYQQQgjxouCYEEIIIYQQLwqOCSGEEEII8aLgmBBCCCGEEC8KjgkhhBBCCPGi4JgQQgghhBAvCo4JIYQQQgjxouCYEEIIIYQQLwqOCSGEEEII8aLgmBBCCCGEEC8KjgkhhBBCCPGi4JgQQgghhBAvCo4JIYQQQgjxouCYEEIIIYQQLwqOCSGEEEII8aLgmBBCCCGEEC8KjgkhhBBCCPGi4JgQQgghhBAvCo4JIYQQQgjxouCYEEIIIYQQLwqOCSGEEEII8aLgmBBCCCGEEC8KjgkhhBBCCPEKaXDMGItljL3DGKtgjB1kjF0UyuMRQgg5c7RmE0IIoArx868GsIVzPo8xpgGgD/HxCCGEnDlaswkhQ17IgmPGWDSAGQBuBgDOuQOAI1THI4QQcuZozSaEEI9QllVkA2gB8Apj7HvG2EuMMUMIj0cIIeTM0ZpNCCEIbXCsAjARwPOc8wkAzAB+3fNBjLHFjLFyxlh5S0tLCE+HEEJIL2jNJoQQhDY4rgdQzzn/2vv3d+BZeP1wztdxzos558WJiYkhPB1CCCG9oDWbEEIQwuCYc34CwDHG2Cjvh0oAHAjV8QghhJw5WrMJIcQj1N0q7gDwd++u52oAt4T4eIQQQs4crdmEkCEvpMEx53wXgOJQHoMQQkj/oDWbEEJoQh4hhBBCCCESCo4JIYQQQgjxouCYEEIIIYQQLwqOCSGEEEII8aLgmBBCCCGEEC8KjgkhhBBCCPGi4JgQQgghhBAvCo4JIYQQQgjxCvWEPELIWRAEjppWM5q6bEiO1iIrwQCFgg32aRHSb+h3nBASbig4JiRMCQLHlv0nsGzDLticArRqBVYtGI/ZBSkUPJDzAv2OE0LCEZVVEBKmalrNUtAAADangGUbdqGm1TzIZ0ZI/6DfcUJIOKLgmJAw1dRlk4IGkc0poNloG6QzIqR/0e84ISQcUXBMSJhKjtZCq/a/RLVqBZKitIN0RoT0L/odJ4SEIwqOCQlTWQkGrFowXgoexHrMrATDIJ8ZIf2DfscJIeGINuQREqYUCobZBSnIL5uOZqMNSVG0k5+cX+h3nBASjig4JiSMKRQM2YmRyE6MHOxTISQk6HecEBJuqKyCEEIIIYQQL8ocE3KGaHgBIWeHriFCSDii4JiQM0DDCwg5O3QNEULCFZVVEALPC3V1iwlfHjmJ6hYTBIH3+ngaXkDI2aFriBASrihzTIa8M8lg9Ta8gDYWEXJqwa6hpi66hgghg4syx2TIO5MMFg0vIOTs6DUq2WtIr1EO0hkRQogHBcdkyDuTEbY0vICQs+Nwu1E2M9fvGiqbmQunWzjFVxJCSGhRWQUZ8sQssG+AfKosMA0vIOTsJBgisL68DoumZYMxgHNgfXkdZhemDPapEUKGOAqOyZAnZoF71hyfKgtMwwsIOXNZCQbcP3v0aV93hBASahQckyGPssCEDDy67ggh4YqCY0JwZllgGmBAyNnxve7oeiKEhAsKjgk5AzTAgJD+Q9cTISScULcKQs4ADTAgpP/Q9UQICScUHBNyBs6k/RshRB5dT4SQcBLSsgrGWA0AIwA3ABfnvDiUxyNkoJxJ+zdCwt1grdl0PRFCwslAZI4v5ZyPp8CYnE9oCAg5jw34mk3XEyEknNCGPELOALWhIqT/0PVECAknoQ6OOYCtjDEO4EXO+boQH4+QAUNDQMh5aNDWbLqeCCHhItTB8Q8458cZY0kAPmKMVXDOd/g+gDG2GMBiAMjIyAjx6RBCCOkFrdmEkCEvpDXHnPPj3v83A3gPwBSZx6zjnBdzzosTExNDeTqEEEJ6QWs2IYSEMDhmjBkYY1HinwHMArAvVMcjhBBy5mjNJoQQj1CWVSQDeI8xJh7nTc75lhAejxBCyJmjNZsQQhDC4JhzXg1gXKienxBCSP+hNZsQQjxoQh4hhBBCCCFeFBwTQgghhBDiRcExIYQQQgghXhQcE0IIIYQQ4kXjowk5xwkCR02rGU1dNiRH09hdEv7od5YQEs4oOCbkHCYIHFv2n8CyDbtgcwrQqhVYtWA8ZhekULBBwhL9zhJCwh2VVRByDqtpNUtBBgDYnAKWbdiFmlbzIJ8ZIfLod5YQEu4oOCbkHNbUZZOCDJHNKaDZaBukMyKkd/Q7SwgJdxQcE3IOS47WQqv2v4y1agWSorSDdEaE9I5+Zwkh4Y6CY0LOYVkJBqxaMF4KNsT6zawEwyCfGSHy6HeWEBLuaEMeIecwhYJhdkEK8sumo9loQ1IU7fwn4Y1+Zwkh4Y6CY3JO6tkKKiNOj7p2y5BsDaVQMGQnRiI7MXKwT4WQPhF/Z7MSDKhpNePro63Qa1RwuN1IMEQMqeuXEBJ+KDgm5xy5VlCPX1uIZ7dXorbVSq2hCDkHyF3HZTNzsb68DvfPHk3XLyFk0FDNMTnnyLWCevD9fSgtSpP+Tq2hCAlvctfxmu2VKC1Ko+uXEDKoKDgm55xgraAY8/87tYYiJHz1dh3T9UsIGUwUHJNzTrBWUJz7/51aQxESvnq7jun6JYQMJgqOyTlHrhXU49cWYtOeBunv1BqKkPAmdx2XzczFpj0NdP0SQgYVbcgj5xy5VlAZcXpMzIij1lCEnCN8r+OmLhv0GiWcbgGzC1Po+iWEDCoKjsk5Sa59GbUzI+TcQm0ICSHhiMoqCCGEEEII8aLgmBBCCCGEEC8KjgkhhBBCCPGimmNCvHqOpKZNQYSEDl1vhJBwRcExIZAfZUsjqAkJDbreCCHhjMoqCIH8KFsaYUtIaND1RggJZxQcE4Lgo2xphC0h/Y+uN0JIOKPgmBAEH2VLI2wJ6X90vRFCwhkFx4RAfpQtjbAlJDToeiOEhLM+b8hjjGUCyOWcf8wY0wFQcc6NoTs1QgaO3Ehq2j1PzmXhvGbT9UYICWd9Co4ZY/8HYDGAeAAjAaQDeAFASehOjZCBRaNsyfniXFiz6XojhISrvpZV/ArADwB0AQDnvBJAUl++kDGmZIx9zxjbdGanSEj/EASO6hYTvjxyEtUtJggCH+xTIiRUwnrNpmuREBLO+lpWYeecOxjz3PJijKkA9HU1WwrgIIDo0z89QvoH9VUlQ0zYrtl0LRJCwl1fM8f/ZYw9AEDHGLscwNsAPjzVFzHG0gH8GMBLZ36KhJw96qtKhpiwXbPpWiSEhLu+Bse/BtACYC+A/wdgM4AH+/B1fwJwHwAh2AMYY4sZY+WMsfKWlpY+ng4hp4f6qpIhJmzXbLoWCSHhrq/BsQ7AXznn8znn8wD81fuxoBhjpQCaOec7e3sc53wd57yYc16cmJjYx9Mh5PRQX1UyxITtmk3XIiEk3PU1ON4G/4VVB+DjU3zNDwBczRirAfAWgJmMsb+d9hkS0g+oryoZYsJ2zaZrkRAS7vq6IU/LOTeJf+Gcmxhj+t6+gHP+GwC/AQDG2CUA7uGc/+wMz5OcpwSBo6bVjKYuG5KjQ9frlPqqkiEmbNds8Vocdcd01LWZodeokBwd0d+HIYSQM9bX4NjMGJvIOf8OABhjkwBYQ3daZCgY6F3r1FeVDCFhv2YfajJSxwpCSFjqa3B8J4C3GWPHvX9PBXB9Xw/COf8UwKenc2Lk/CKXIQ62az2/bHpIAtiBylITEgbuRBiv2b7XfmqMFnMmpqO6xYTv69ohgCPBEEHXJyFk0PQpOOacf8sYywcwCgADUME5d4b0zMh5I1iGODFKE3TXen8Hx9RblQwl4b5mix0rUmO0WDg1E2u2V0rXZdnMXKwvr8P9s0fT9UkIGRS9bshjjM30/n8OgKsA5AHIBXCV92OEnFKwDLFGqRiwXevUW5UMBefKmi12rJgzMV0KjAHPdblmeyVKi9Lo+iSEDJpTZY5/CGA7PItsTxzAu/1+RuS8E6yvqcXhxqoF4wOyuaHYtd5bb1WqQSbnkXNizRY7VlSc6JK9Lhmj65MQMnh6DY455w8zxhQA/s053zBA50TOM2KWyPdFUMwQXzgiYUA6SPR2DoScL86VNVvsWJEep8O6HdUB1yXndH0SQgbPKfscc84FAEsG4FzIeUqur+nSklwcbfV0mspOjMTU7GHITowMWX0h9VYlQ8W5tGY3G21YWpLrd13edVkeNu1poOuTEDJo+tqt4iPG2D0A1gOQisA4520hOStyzuhLBwiFgmF0ShQWz8iGwAHOgde/rEW7xYHNIepM0RP1OSZDTNiu2eKaUXPSjL31nfikohmLpmWDMUDBgOLMOFw+JpmuT0LIoOlrcHwrPPVqv+zx8ez+PR0S7nyD4dQYLQ40nrpXqSBwVDab4BYAxjz/AQNfU0h9jskQEpZrtm/XmDi9BvOL07Hwoiw0G23421d1aOy04eKRCXSNEkIGVV+D4zHwLLLT4FlwPwPwQqhOioSnnu3Qykpy/OoFg/Uprmsz46TJjpc/rw5o10Q1hYSERFiu2WLXmDi9JmgLN1oTCCGD7ZQ1x16vARgNYA2AZ71/fi1UJ0XCk+8L268uzUFajA63Tc9Gakz3i5nNKaCpy+b3dU1ddjy66UBAu6bfXV1INYWEhEZYrtlNXTbE6TX4zZWjYXO5pfWD1gRCSDjpa+Z4FOd8nM/fP2GM7Q7FCZHwJb6wyWV83viqFo2dNmjVCug1Sr+vMztcsu2awDnVFBISGmG5ZqfGaHHTRZm4753dsuuH3emmNYEQMuj6mjn+njE2VfwLY+xCAP8LzSmRcJUcrcX8Yvmm/XMmpksvdE63fyCcGW+QHfaREU8ZIkJCJCzXbLcArN4WfP1IjaaSCkLI4OtrcHwhgC8YYzWMsRoAXwL4IWNsL2NsT8jOjoSVrAQD8pKiZLPAGfE6LJqWjfXldYg3RPh9fsQw+TZqI4ZRcExIiITlmt1slB/Go1QAj11TiIILYgbpzAghpFtfyypmh/QsyDlBoWAYnRotO0yjrs2Klz+vlu1NSm3UCBlwYblmBxvG84ORwzAhPRYqVV/zNYQQEjp9Co4557WhPhFybhCzwL7t21bMLUJarBZzJ6YFDXqpjRohAydc12xxGE/P9WNSRhwFxoSQsNHXzDEhAM4sC9yXQSGEkPOf7/rR1GWDXqOEwy2grt1C6wIhJGxQcDzE9TVwlXtcsCyw72OTorQ42mrCkje/73VQCCFkaFAoGDLi9DjeaUXFCSP0GhW+r21HdlIkLslNQl27hd5IE0IGFQXHQ1jPoR69Tbjry+OCPXZpSS7i9Bo0dtqCDgohhAwNgsCxeV8j7tu4x2+NaDPZAz5Ob6QJIYOBiryGMHGoR88JdzWt5jN6XM/HpsZosWhaNqxONx64crQ0LEQcG00IGXpqWs3440eHsGhaNpbMzMFt07Px1rd10GvUUmAM9L7OEEJIKFHmeAhr6pJvq9RstPlldfv6ON/HpsZogw4Labc4aEQsIUNUq9mO64szAtYGtyD0eZ0hhJBQouB4CEuN0aKsJAcC9/x948562cA1WPsluQBXfOycifLDQhbPyEZ+SvRpjYgd7A19wY4/2OdFyLlIo1TIrg2v3TJZWo827qyXJm7SG2lCyECj4HiIEgSOA41GrNtR7Vf3l5scGRC4yrVfkutn7PvYihNdslmgCcNj8cO8pD4HkadT79zz6/ojcA12/Fmjk7H1YNNpnxchQ53JJj9O/niHDW+Xe96gl83MxfryOtw/e/RpvZEmhJD+QDXHQ5RcHfHqbZUYkRAZENyJ7Zc2l03HW4svxOay6UGDQPGxJfnJsiOjM08zSD2demeRGNBeueYz/OQvX+PKNZ9hy/4TEMQU+WkIdvz9jZ2nfV6EDHWCwKFSKmTXBrXSc8dJzCSvuWECvdkkhAwKCo6HqGB1xC0m+Y1y4hCPqdnDkJ0YGED3fOzYtBjZkdGnmwXqrd45mDMJqE/3+GLnjdM5L0KGuppWM050WVE2M9dvbSibmYv6DguYd1mxOQVYnW4KjAkhg4LKKoaoU9URn22dbX+NjD6demeRXEAbp9egxWj3Dh5QweF2I8EQccpzCnb81JjTPy9ChrqmLhs0SgXWl9dhyaU5SIyMgD5ChcYOCwCAe2/u0LVECBlMlDkeosTaYN/szYq5RWg123Gk2YTth5oCyhJcLuG0yhVOJ9scTEacHo9fW+h3no9fW4iMOH3QrxEDWlFqjBY3XZSJn7/yDX7yl69x/bov8e3Rdtzy6jenLLeQ+zmtWjAeBan9kxknZChJjdHC6Xbj7lmjoFQwPPzhftzxj++x6uNKxOg1+OxwM11LhJBBxzg//TrMUCkuLubl5eWDfRpDhm8W2OnmWP7BXtS2WqXNea9/WYvGTk+ZgFatwPrFU3H9uq8CsqWbQzjQo7rFhFte/QalRWlgzJNZ2rSnAa/cPKXXCX2+m+jKSnKkjYe+571oWjZe/rz6lOcv/px6ZsCDfZwMTYyxnZzz4sE+j4F0umv2kWYTth08gZykKPzyze8CrsmV88ZheLwOY9Ni6VoihIRUb2s2lVUMYWJmFwCuXPNZwOa8RdOy8dwnVdLHequzDVVw3NRlQ22rVToPUW/H7FnSYXG4Zc+bsb6dv/hz6vmYYB8nhMhrNtqQGqvHrvoO2WuyosmIhEgNtUgkhAwqCo6HgFPVCQfbdMZ8Xo88dba6oHW2oer5eyY1x4B/4Hqk2ST7HJxTbSMhAyk5WotjbRYI3muv5zVp0CjhdHPpzTq1SCSEDAaqOT7PBWtr5nIJqG4x4csjJ6HXqJCZoPP7Oq1aAfG1SKtW4InrxmJ0cpRsnW1GnL7fWqf1FKzmt6/1iILAcbTVhKUl/rvj77osD5v2NFBtIyEDKCvBgOxEA6IjlHjk6gK/a3JpSS7S4nRYs+0QtUgkhAwqyhyf546eDGxrtmLLQTjdAu7fuEfKzjx+bSGe3V4p1RzfdVkeBM6xZGYOOAdajTbUd1plO1AEa52W3w+1yGfb9aKm1Ywlb36POL0Gi6ZlgzFAwYDizDhcPiaZbtkSMsDq221Y9XEllpbkYvGMbAjcs5fg9S89o+UXTctGeW2n9HibU0BTF42QJoQMnJAFx4wxLYAdACK8x3mHc/5wqI5H5NW2mQNKJkqL0qTAGPC8+Dz4/j68c/tF6LQ6Ud9uxUmTHf/ZdwLT85KgVACpsXq0me3ITuyeoNfUZZP+H6fXYM7EdKkUY+POer/Pn02pRV9re+VKO8SSkcZOm1/d8sUjE+jFlhAfA7Fm17Sa8czHh/DAFfkYmRSJFqMDESqG5z89Im3+Vfa4n6lVK6DXKPvzNAghpFehzBzbAczknJsYY2oAnzPG/s05/yqExyQ9GDSqgNo+pQKyfYAPN5nwwHt7pWzyw6UFeGFHlZRNXjG3CONdQsDY5FdvnoybLsrE6m2VfqOoAQxY7WCwMc9jUqP6VLMcqpppQs4hIV+zW812/OqHI+EGw6LXyrvXmqsKgK9rcbjZhPyUaOmaFQeEON3CqZ+cEEL6SchqjrmHyftXtfe/8OkbN0SkxETgmQXjUVaSgyUzc5CZoMPo1OiA8a03XZQpBcapMVosmpaNxi4r7pmVj9QYLWxOTxmG3Njk7491SIGx+LHV2yqx61hHv9UOCgKXaqSrW0wB9czBSjvcAk5Zs9yf46YJOVcNxJrNwBCt0+CRD/f7XauPfLgf9/xoFFZfPx5tJhuenjcOK+aOxZJLc7C+vA7xhoj+PA1CCOlVSGuOGWNKADsB5AB4jnP+tcxjFgNYDAAZGRmhPJ0hRxA49h83+mVTl5eOQYxOiVULxksfz0zQ4YJYnRQYL5yaiTXbK/0yN2985el5LNfOzRykVZrZ4Q742Jm0fQuWFfbNQvc2DvtUNcuhrJkm5FwS6jXbbHfC6pJfL0502qBUKvCXz4/69VtfXjqGNs0SQgZUSLtVcM7dnPPxANIBTGGMFco8Zh3nvJhzXpyYmBjK0xkyxCzrtzVtAUHfY5sOIDlKj9kFKdhcNh1vLb4Qa26YgOoWT7uzORPTpcBY/Jo12yvxwJWjkZmgw7DIiICss5Ih4GNatQL5yVFIjdH6fexM2qYFC159s9A9p+L5Hu9Uk/qCBdbNRttpnysh57JQr9l6jQo1J82y16pWo8Jv39uL0qI0AN13oEYkREpDd3q7e0QIIf1lQFq5cc47AHwKYPZAHG8o8y0R+KzqZNBsqm/AaHG4saG8HmUzc2XrkW1OAZXNRvzq0lzoNJ5Msm+ZQrxeg4ev8m/LVDYzF09vrcCSmTn49RWjsLQkB2tvnBCQAXK5BOw+1o4t+xqx+1gHXK7A2sK+BK9n0/Ktt8A6FOhFnoS7UKzZgsDRbLTjk4pmPFzqv148enUh3tt5DDangCitCqkxWvzq0hzcNj0bJ8320x5dTwghZyOU3SoSATg55x2MMR2AywCsCNXxiEfPLGtfNqMlR2vRbnHgja9q8cCVo2W/xi0AD32wD39bdCHWl9dJbdE4Bz7c04D/m5GDFxdOws7adrgFSGUYj206II1pXrVgvN9xXS4B7+9uwIPv7/NrKXftuDSoVAq/8zvV93E2Ld/EwLpn2UYobuX2pUSEkMEQ6jW7ptUMDuCS/CS8sKPKbw157tNKlBal4cujbSi8IBo3X5yFZz4+DJtTwEufVWPF3CKs+iiw/zGVPhFCQiGUmeNUAJ8wxvYA+BbAR5zzTSE8HoF/lnXjzvqALK9c0CcGh+0WB57cfDBgYEbZzFy8+109bE4BJ0123D97NF7+vBprt1dh054GzJ2YgaVvfY9va9qxZlsVnvukSmrL5DumuWcpxP7GTikwFh/74Pv7sL+xU/b8TvV9nKp8IhgxsBbLTDaXTQ9ZsNqXEhFCBklI1+ymLhvW/fcIsodFSiPh1273rBe1rVYoFUDZzFy0me1SYAxA2gwslluIqPSJEBIqIcscc873AJgQqucn8nyzrI2dNrzxVS0Wz8jGhOGxyEwwyGZTe2ZdU6K1mDIiHv893OKXBfaMkNZibFqs9FiVQoGfvfx1r5lq7r3z2XNDntzmPnFjzrjhwc/vdAeB9EVfeymfrd5KRCgDRgZTqNfs5GgtDjebEBmhlF0ncpKi8MetFbhnVr7sNSLX/5hGvxNCQoHGR59nemZZ2y0O5KdE44d5Sb1mU32zrlnDIjE2NQbpcXq8/Hm1FBg/ek0hRidH+z3W6RZ6zVSLWWfx774vZqkxOtla35SYwBe8M80Kh5uBrm8mJFxkJRiwYm4RjndYZe9O/XFrBa4vzkBjh0X2GinOjD/jMfKEEHI6GOfhs6GhuLiYl5eXD/ZpnPPEgRbBsqy9DbwQP1fTakZVkxEON4fNJYBzYNOeBrxy8xS/DGd1i0ka9AEAqTFazC9Ox4ThsVAqFFj+wV6pLVPP2tq+1hz35bzPFVRzfP5ijO3knBcP9nkMpNNdsx0ON/Yd78S+450wO9xIjIpAUlQEbC4BBo0SD7y3F8tLx8Dh4gHXyKzRyahrt4Ts7hEhZGjpbc2m4HiI8A0sXW6OB2WCVgABgZtvj2MAeGvxhZiaPczveYMFewB6DdIBT4C8v7ETJzptSInRoiA1JmhgLB4nTq/B/OJ05CVFYXRqNEYMO7deJE/15oWcmyg47p14DVec6MKnFc34+Q+yUNtqgcA97SBzkiIxYpgBRpsLqTFauAWgxUTXCCEkNCg4HqLEIKzVbMfxDhvu37hHNujVqhV47ZYpMEQosfVAE8TuSBt31qPd4sCiadl47pMqaNUKbJbZHS4X7AHo1yyvmKGO02sChpQMZOb1fMhek9Cg4Lh34jX8wJX5yB4WiRaTHTUnzdhQ7llnlpbkwqBR4qF/HpC9runaI4T0p97W7JBOyCODxzfTKrZS6znYQwx64/QatJkdON7pBkN3UCwG0Iz1XuPXczNbKEoHxI1sckNKBqqlE5VEEHLmmrpsyEuKhFqpxG2vlwe8UV+9rRLP/3QiUmO0aOy0+V3XdO0RQgYSbcg7T/m2DBNbqfkSP54ao8VNF2Xirg27cNf63XhxRzUWTs1EnF6DNdsrMb84HZfmJeJviy6ESgHsbeiUHdQR7Njisc62XZm4kS3Y9zIQLZ2oDRshZy45WovFM0bikQ/3B7xR/+mFGbA5BbSZHZgzMV36nHhd07VHCBlIFByfp3q2DJPb/c05ML84Hau3BY6LnjMxHTangMK0GBxtNeNnL3+NxW98h+vXfYn3dzf0GiAHa1fW1GU748lwYheOYKOqB6LbA42ZJuTMZSUYwCH/5jYlWovMBB10aiWYNxHse13TtUcIGUgUHJ+jTjWC2LdlmFyLtRVzi3BRdhzSYnVBs8patQIJek2fBnX4SoqSb1fmdPMzHv8q9jq+bkIanrxu7KC0dKI2bIScOYWCISNeL3sN1bVbcP/s0ahvt4DzwOuarj1CyECimuNzjCBw1LWZ8V1dBx54b2/Q+jvfkciNnTasL6/DuoXFUCuZtJkFAP5XdVK2Ib+CAU9eNxatZof8oI4uO8YKPKDeTxA4jraasLQkV8pIi8H48g/2nlWtsELBkDUsEhnxBowfHjvg3R4Gcsw0IeejGJ0Kj15TiIc+6G7fKNYc//TCDBSmxSAyQom5E9P8rmu69gghA4mC43OIbyukdTuqgwaaYns0lQL4+6ILIYAjwRAh2+84PU6Hx68diwff7w60H7umEO1mO57+zyEsKE6XDZ73H++EW+ABG2JqWs1Y8ub3iNNrsGhaNhgDFAyI0SlR22r1+37EUovT3Ug3UNPs5I4b6kl9hJyvBIFjX0MXLHYnFs/IhsABzj0TONstDoy5IBoXZsRBp1MHfC1de4SQgUTB8TlE3JRy2/TsoPV3GXF62cEaE9LjAgJj377Bi2dkIyNeD71aiRX/qZAC2Q3l9QFZYDHT025xIL9sOrISDFKLJavTLY2ufu6TKul4b9w6WTbI1muUIf2Z9Xf7p8EKzAk519W0mtFpdeCVL2pwfXGGXzvGx64pxJ8/qYT28nzoNAooGIPF4fa7ZunaI4QMFAqOzyG+m1LEQDM1Ros5E9OhVAA6tQoVTV2yNcJ5SZGI1KqlIJFz+O3+dgtAXZsF49Nj4XB11wE3dtrw+pe1WLdwEr6paZcyPeJQkKYuGypOGKXnWlqSExAEZybo0GyyBwTZd12WB6PNCUGmPKM/UPsnQsJHU5cNIxINWHJpLtZ+4mklqVQA44fH4qTJhoYOO06abDDa3Xhs0wG6Zgkhg4aC43OIuClF3GC3vrzOLwOzbkc1Hr+2EHF6jRS8Ap4AuabVgvt8hoCsnDdOCq4XTs3E+vI6lBalYVd9Bx66agye/6QKexq6AADtFgdidGq89Fm1bOb3lle/lT6+obwey0vHYN2OIygtSoNSAUzOjMf/vVEeUGrBwPFNTTu6bO7TevHzHW6iUSoCMkziY/Y2dKDiRBdum56NjTvrA3qnEkIGTnK0FodOGAHO8eg1heiyuqBSMFQ1GaFVK/GLH2YjzhCB+zaWD0ofc0IIEVFwfA7JSjBgxdwi3L9xD974qha/vXI07nlnd0CWePGMbKzZ1l3SoFUrUNVi8ntcZbMRWrUCcyamBwTZWrUCy0vHoGV7FdotDqxaMB5RESr8YV4RjjSbpIlWqxaMh8C5FPACns4YbkHA4hkjpexPWUmObKnFynlFeOWLw1J5Rl9e/MRs8IotBwPOua9jsJuNp1/nTAg5Oxlxeuw61oHl/9zvd12uL6/DDZMzoGRAs9EetGSMrllCyECh4PgcolAwXBCrlYJRs90l+0IyMjFSKm0Q6/lWfXTY73Ebyuvx5HVjUdNqRmlRWsDUucc2HcCfrh+POL0GJ012XPns536Bc/YwAyYNj8O/D5yQpu+JL3YuN8eTmw9IzydwyNYbn+iySRnuvr74iXXXi6ZlB52UByBgYIA4EfDlz6vPqv0TjbAl5MzUtVukDjuA/3W5elslnp43DtFalexaQS3bCCEDiYLjMBUsCEswREjB6JKZgfW9WrUCabFavPV/U2G0u2BzupEcpYVG5R/AtVscyIjXISU6Al8dbZMNsk02Fw40BnbGeGzTASyekQ0lY7jfW6ohfm7N9ko8s2C83/OJZSC+Wd67LsvDq1/USOecEq1FdYvplEFnq9mORdOykREn35+52WgD5/KDBpQKnFX7J6phJuTM9RzkIe6XyIjT4bbp2eBcQIR3A7HvhmJq2UYIGWgUHIchuSBs7Y0TMCIhEs1GG/6ysBgPfrAXG3d6Okm89W2dVN87Lj0W1SdNcLmBR302tTx+bSGe3V6J2lYrtGoFHr6qAHe/vRsOF8dDV42RDbLr2i0QggSaAgeOnjTLfi7eoPF7PrHP8sp541DRZISCATqfIR5rb5yAA43GUwadgsBxvMOGlz+vxm3Ts3vNMMl9riQ/CWPTYs84kA02wpbqIQk5NXHPhO9eB983zI9fOxZVTUYUpsVg/eKpsnsJCCFkIFBwHIZ6BmFxeg0qm0xY8ub3fqUNRpsTerUS/2/GSL9A2LdZPtBdi7x+8VS0mR0w2914emt3u7bnP6nC8tIxfjvEn7huLMx2J+L0EUGHhOgjVMhM0KG0KE2qOf5wdwOSoyMCGvbfMDkD63YcwfS8JAgAWs0OrP3JBMQZNOAc+PGzn50y6KxpNUuZarlstG+GSW5gwNkExkDvI2wpOCakd1kJBjx53Vis3nYYd8/Kx4kOC56eNw5HT5rhcAt4dvthPHpNIUx2F6blJg326RJChjAKjsNQzyBszsR0qQUa0F3asGhaNow2t1RmIX6u4kSXbBBndbqhVSuxs67DbyDHnoYu4Js6PHfjROyu74BbANZsO4zrizPwz13VeLi0AI9s6t5Es7QkF3q1Eu/uPIbbZ+T4fe6J68bigmgdMuINUsN+BoYn/nUAswtT/YLZzAQDxqXHYmddO26bng0AUlcJuaDT9+fS2GnDG1/VYtG0bIxNi0ZecpRfhikUAwN8M18iqockpG88ZWFq3DEzF69/UY3rJg7Hvd4NxeJ+hWNtFug1qpC1dySEkL6g4DgM9QzCGOsubUiN0eKnF2YgMTICiVERaLMEjncOtgFOp1aizezA9JwEREco0WV3A/AEpKVFqdhd3wGBe47ncHFps8wLO6qwct44cHAMi4zA3voOvLCjGnMmpkuBMeA5x9++txeJkRG4ODsBgGcClk6jxBVjUwMC/NXbDkOp6K5b7jlgpGfQ2fPn0tjpKbHYLFPWEIqBATTC9vxGmy1DT69R4a1vKlFWMgqL3/Bv2bZmeyVeXDgJ/++NnRg/PDbs78bQ7wsh5y8KjsNQzyBMyTzBbZxeg5svzsIzHx+WgrNnrh8fEAh/uLshoEzi8WsLUfbW93C4OOYXpyMjXg+nYMOG8mP4xQ+zodOosOrjfQFBKmNAbasVhgglfpjnudXZbnGi3eLwC9pFNqeA8to2AJBe/LRqBVbMLQp4bGlRmuyGvsUzspGfEh0QdA52cEojbM9ftNlyYFgcLlw3cTjKa+U3Abd4W7mFe6kS/b4Qcn6j4DgMiUHYqDum4+CJLhxvt+Cuy/JgdrikwFjMIJvtLjz/04n43Yf7pc12i2eMRIQSeOWWyTBanYjTa7CvoRMLiocjUqPCU1sq/GqXE/Qa3CnT+mzxjGy4Bc+Eu3iDBl8fbYVeo0J6nBZ/W3QhrE43XpLJULsF4ESnVRpGYnMKqG4xBQTxSoV8cD1heCx+mJcU8CLT38HpmWR+aITt+Yk2Ww4MjUqJdTuO4J5Z+bJ3t1KitchM0J1WqdJgZHDp94WQ8xsFx2FKoWBgDLjn7d1SMHxnSa70554Z5MeuKURCpBqHTpiw/ps6XDE2FQ9+8K1fJnhD+THcMDnDL2h9bNMBPHJVgWyQmhGnx1vf1uKOmbm4ft1X0nM9XFqAF3ZUeTpdlI7x2wwoNvW/ZnwaFk7NlAZviH2VxT6nWrUCkzPjZV8gM3t5ceuv4JQyP8QXbbYMPUHgsLtcuL44Ayu3VgRsqH382kIIXMA9s0YhI07f5+ccjOuYfl8IOb8pBvsESHA9N6Ad67BKU+3EwBjwLMrLP9gHu5MDAKbnJQXU967ZXonSojSs3laJORPTpWPE6TVIjfXU8vrSqhUwRKhw88XZUs9R8bke2bQfC6dmorHThre+qcMzC8ajrCQHi6ZlS9P23i6vx5rtlfjphRkAPH2VJ2bEYnPZdLy1+EJsLpuOi7ITsGrBeOnYWrUCT11XBJUS+PLISVS3mCAIPCQ/22CZn5pWc0iOR8KbWM/uizZb9q+aVjMiVCqs8baUFDfUlpXk4NVbJiMxUoPGTjtUSgXqOyx9fs7BuI7p94WQ8xsFx2EsNUaLspIcLJnp+W/HoWbc+6NRQcsRDp7oQnqcHhEqheznxRphse1aaowWN12UieUf7EPZzFy/IPWuy/Lw6KYDqGgyyj7XsEgtitKisaehC89/WoWLshOQEafDPbPysWVfo5SZFm+TrlowHhnxBmQnRmJq9jBkJ0ZCpVLgslFJeP6nE6Xg+k/bDuF/VW14avNBXLnmM2zZfyIkAXJvmR8y9Ij17L7XAG227F9NXTapphiANE5+zbYqtJkd2NvQhfs37sVd63fhu7qOPl33g3Ud0+8LIec3KqsIU4LAcaDRKE2nE+uD85INsDm4bDmCWwAsdhdGDDPIfp7z7h7FADC/uLtFnJjFUSqA4sw4HG3xZF4iNUrZ56o+acJtM0biqc0HccXYVNzyqn8JR4vJgXaLA3XtFvxx/nhweOoCe9YDHmzqwi/+/p3f8z/y4X78Yd44lP3j+5DV8VFbNuKLNluGXlKUFi5Bfu1KMETA5f2QzSnggff29qljxWBdxwP1+0IdMQgZHJQ5DlNytwsf23QARqsbR1qMePzasX5Zi7KZudi0pwFtFgcaOiwBmWDx809cNxbDDBosuzwPeUlRslmcxk4bntpSgfnF6chJjsTy0jEBz/V2eT2sDpdfgC2e55rtlZhfnI67LsvD2+X1qG4x4b+HT+KWV78JyASLGWZfNqcAq8Ml/TkUWSDK/JCexHp28c4GBSH9S6kAtGqGh68q8LvuxL8f9yml6Ot1P5jXcah/X8R66ivXfIaf/OXrkN5JI4T4o8xxmAp2u/C7Yx146bNqPHZNAf5840Ts8g7tWF9eh4VTs+B0C0iL1WPl1gosmpaNCJUCWcMMONFhkaZSXZidAKvTDY1SId8PWaOCzSlgbFoMKhqNUCkZFs/IhsA9fYvFPsQjEgxIjIqQPc/0WB1azZ7scW2bFS9/Xo2ymblYseUg8lOipIxQaowu6DmIfw5FFogyhYQMrMZOG1pNDvzj61r8Yd44WB0u6DQqvLTjCP5vhmegkaiv1/35fB1TRwxCBg9ljsNUsA0fnIsb8PbjUJMReUlR0KkVePDKMRAEAWaHGw3tFtw7Kx8vf16NVR8dxn3v7IZLAP64tQKdNjesTjemZg9DYWoMHr2mEFq1Qqpv/v2cInRZHMhM0CF7WCTGpcfiH9/UQatS4qXPqvHcJ1VotzjwxHVjMTEjDlkJBtnzrG2zwup0Y3npGLz7Xb3fpkDfjFBBajQev7YwIJP00o4jIc8CUaaQkIGTHK2FSsnQaXPi0AkjjrVbcbjJiE6bE0lRWnxd3QLg9LO/5+t1TPsiCBk8lDkOU3IDL8TBHIBnkcxM0IOB4e9f13lbu3W3RXpqzli89PNifHO0TcosX1+cgfXldZg/KQ3VLSbUtJrhdLnxt0VTUN1ixkP/7B4D/fi1hciM12N4rA5LLs3F2k8qpZrkCRlxuCgzHiqVAlkJBqyYWxQw5W59eR3unZWPY+0WNHbapHNWKuCXEVKpFLh2XBpykyJxotOGlGgtYg1qjBimP6+yQIQMdVkJBhxrM+OXl+TgYZ+15tGrC3CszYSbLh6BX1yiRGJkBArTYof8dU/7IggZPIzz0NQvMcaGA3gdQAoAAcA6zvnq3r6muLiYl5eXh+R8wkmwTRY9P54eo8PBpi40ddmx73gn3i6vlwJNrVqBf90xHQoG7D/ehXve2R2wiC7/8WgMjzegqcuGpOgIHGs1Y0RiJDosLtz9dnfQvfbGiVjy5ncBX/+vO6bDZHei7K3vUVqUBsY8ZRWb9jTglZunSLf2XC4BX1S3orzWE4hv2tOAGyZnwKBR4vn/Vvud87qFxbg4OwF17Zaz3mRCm1VIOGGM7eScFw/2eZypgVizv6ttw40vfR2w1qycNw42lxtZCXooFQwxOs2Qv56pF/uZo9cG0he9rdmhzBy7ANzNOf+OMRYFYCdj7CPO+YEQHjPsBVvwZo1OxqeVzdhT3wmBA0oG5CRFYuXWQ3C4OG75QRbaLQ4A3bcdM+P12HqwCYeb5dutRaiUfiOcy2bmYk99Z8AGuj31HUFbw8Xq1IjRqvHcJ1VIjdFizsR0XDUuDS0mu7TgqFQKTMsZhrRYHerazJg5KhEqJUN9uxULitOxobwe7RYHVswtwtSseGw92HTWCz69cBDS70K6ZrtcAk502RCn12DOxHSppeTGnfU43GzEmm1VUlmV0epAdlIkZo5KHrLX8/lcTx1K9NpA+kPIMscBB2LsAwBrOecfBXvM+Z45FgSOvQ0d2FbRDIF7XhQaO23QqhXYsHgq/nekVQpctWoFlpbkQqtS4KTZiSitEumxehgilMiIN0CpAFpNDvy3sgW5SVG4VyZzvHhGNtZsq/L72OobJmBPfaffC9PPpmbg2e1VAV+/5NIcrP2kCivmjkWXxQWtRon6dosU7MotOHIL05PXjcXEjFhkxBtQ02rGlWs+CzjW5l42mchlAc7kefry70PZBnKmzvXMcU/9vWbva+iA2eHCd7UdAescAKzYcghA99qlUytxRWEKsoad+eYzuqaHnuoWU7+/NpDz02Bljn1PIAvABABfy3xuMYDFAJCRkTEQpzMo5IJGsYa4sdOGxk57QEb3rW/r8OR1RdC3W6DXqHC8w4IRiZE41GTEii0HsXjGSKzbUY04vac126qPDvsFpE//55DfOcTpNeiyOvHy5929k38zOx/p8TosLx2Dx3zGQIsvWHF6DY532PxezJaXjoHR5sShE10Ykxrl9+Ilt8P6gff2YnPZdCgU7LTHrgbLAsTp1Wc1vrXni2ZGnD5oRlv8vugFlgwVoViz2y1OWO3ugHVu9bZKLLk0R3qczSlA4MDqbZWeTb9nGBz3NYMoCBx1bWY0ddlhdriQGW/AiGF0jZ+raLQ36Q8hD44ZY5EANgK4k3Pe1fPznPN1ANYBnixEqM9nsMgFjWu2eza5vfx5NWL1Kiyali1ldHccasbcien4+mirVGaRYNAgQqXAHf/YiUXTsqVgFgAilAqp3ZqCAUlRGqkMQ3TLxZk41m7BbdOzpWNYnG786s3vEafXYPGMbGTE6XGiy4bXv6zF3EnpmDMxsI/xY5sOSOedmWBAeqxeqiE22V29Lkynu8kkWDuj9YsvOuPNKnIvmusWFsseZ8zS6TjQaKRbdGTICNWabXO64RAE2fXB5vK/jrXeKZ8Wb7/znvqSEe5LKzRB4Nh+qAmVTSa/BABd4+cu2shI+kNIg2PGmBqeRfbvnPN3Q3mscBfs3axSATxxXSFqWy1+Gd0nritEq8nhNyFvaUku1EqG26ZnY1RyFOL0GjR22jBnYjqe2lLh9/zFmTFYe+NE7KnvgMCBr460IFYfgVUf7/N7ARBfPBo7bfi0ohmLZ4xEepwev/3xaLSZ7Gg2OXodRb1622EoFUzqVrG0JKfXhUmuC8eqBeOhYMCXR04GvNAF+7k53G48fm0hHny/+/t5/NpCZMTpT/lvIfeiWV7bJnucpi479RolQ0Yo1+ycYQbUd1iRmaDDDZMzkB6nh8XuQrvFIU3t1KoVWHZ5HtzeSXrDZa7nvmaE+5JBrGk1Y099p7TOio+ha/zcFew1hgY8kdMRsuCYMcYAvAzgIOd8VaiOc64I9m42JykKDe2WgOxsbaslYMFeva0SK+eNw9rtVVKw/PqXtVKgKkqN0WJmforUgUIss1i97bDf81Wc6JL+XpQWjZ9MyZS6XogbY1KiNEFHUQNAaVGaFBgDwIbyeiwtyQ3IwvguTGNSo/DaLVNgcbgwPE6PmjYzZq/+TPaFLtjPTaNU4Flv5l3sovHsds9t2FO9oMm9aAre0do9j2N29J4JJ+R8Eeo1WwCDQgHcfXkeGjps0j4JsZ3bmp+MR1WzCW6Bw+p0Y2lJLpQymdu+DsfoSwaxqcsGgeOsrnGqaw4vtJGR9IdQDgH5AYCFAGYyxnZ5/7syhMcLa3JjTstm5uKpzQdhdrhlgzW5Bdts7x6rvHqbZ0yz+HyiORPTsWa7f7D9wHt7UVqUJj0mNUaL3KQolJXkYMnMHPzikhw8smm/39c88uF+jEyKwoM/Hh1w3u9+Vw/AMxLW9zwbOz0lGSvnjcOSmTlYPCMbGpVnURIzPrNXf4br132FX/z9O+xv7PIrDxFf6PY2dODLIyfBObD2xgl+x1974wTYXQKuGudpL7dxZz3e/a4epUVpONxkRHWLqdcRq3IDVj7c3YAVc4sCxtBmxssPOaFbdOQ8FNI12zO8gqGqxRyQDHjon/sBMKzZVgWr04385Ci8/mUtalrNADxrR3WLCV8eOYkWox1xeo3fc4vBrK++jJZOjdEiP7l7HUyN0UqPPZ0SLRrxHF7O18EwZOCELHPMOf8cAP1Gevm+mz3cZMTehi5pM55OHTjGWcnkM5lGuxO/ujRHqk0uSI2CwBmemjMWNSfN2FBeHxCwAt0lHIDnBWHh1Ey/zM1Tc8bKfs1JkwOcA6/dMhkWhxtKhQLLP9grddkYnRodcJ7tFgcOnjDiuU+qpPPetGQazA5XQMbn/o17sGhatvRY8ePbKpql1k6rFozHlqXTcaLLhtQYLWpbrfi86iQAT1B788VZ0KoUUmnJqWoG5W673T97NGaNTsbYtBi/bAMAukVHhoRQr9l6jQr17Zagb/xrTpo9a0pKNE6a7J431YzB5RICNsuKd818e6j3DGZ7yyCKm/C+q+vAA+/tlZ5XHGB0/+zRfbrGacQzIecnmpA3gMR3swoGHGjswtxJ6dCpFUg0BHabiNdrcM+sUVi59ZD0sXt/NAoqxqTa5MwEHYbH9Zw2VYhonUo2sJ6cGY+ykhzkJkVh5dYKvwVdfGHq+TWVzUbo1EpEqJS4MHsYak6acMPkDMTrNdBHqNBitAWcu+8kP/H59zd24Vibpdeg3fe4bqH788s27MLmsumYkpWAD/ccD5jG9+Y3tbhmfFqfX6B6e9HMTowM+Bq6RUfI2RO4gMSoCBxuMsquNS5BwOPXFuL5T6twuNmEZ2+YgN/9cx/W3DAhIABdva1SalXZ2xtWuWtazPZWnOgKKF1bs70Sr9w8GZMz4/t0jVNnBELOTxQch5hcy7ADjcaAjXYGjRIr543D4WYj3ALwwo5qAMDiGdkovCAGWrUCTreAX735vbQYlxal4eF/7vdrqt/QYUFWYkJAa7ZHri7Agx/sRW2rNaCNHOCpFX706kI89M99AUFuu8WBgguiUd1iQqfVAb1aiYZOq9RFIy1GizdunQKXwKFSMNzzzm7peQHPC9+RFhNyk6ICXhQzE3S4KDvB87Pinkzw4hkjsf6bOukxno1xnufzrW8WX8wWTfN06fB1qheoYIHw2T6WECJPwRjaLXaMGGYI2JfwxHVjYbY5kR6nQ4t3E3CXzYnSojQca7fitunZUl94wHN9Txgei7cWX3jab1jFbO9t07NlA9svq1uRHK3t0/VOnREIOT9RcBxCfW0ZtnpbJZ6eNw5PbD6IhVMzpXphcbe2RqXA4jd24peX5Pgtwox5+hD3/Jq0OD3USuD5n07C98fakZMUhT9urUBtq1U6phhUiuUM7RYHzHYnXlw4Cd/WtINzYMu+Rinodrk5bnn1G9x12SgwBim4z0zQ4dezR6PT6kR2YiQ6rQ4snjHSLzAXg+yfX5yJspm50rlmJuhwx8xc3PLqt9Jjl5eOwXvfHcPswlS0mBxS+YbTzXvt+NETvUAREl5MNheitCo0ddqgZMDT88bB6nBhWGQEYvVqfHO0HSdNDtw+Ixt//eIo4g0a/Pb9wDfr4pqQmWA4ozesvuuIXGDrFtDnzC91RiDk/ETBcQidTsswjUqB+cXpcAkcT88bh+YuGy6I1eH3Ww7iJ1MysGhaNkYMMyAzQYfSIs9GtFHJUbjposzAzS0f7MMf5o3D7z7ch9KiNFjtLlw1Li0g8yIGlWL2et1nR/GzqRl46bNq2aC7bGYunvn4kFTCkBqjxY1TMnGXzwvD6uvHIyU6AivnjYPZ4UKL0S5ln402N979rh6LpmVDqQBm5CbiZy9/7XfuYg9l3x7QZTNzsfyDvVhzw0TZF7PizHg43G7pc/QCRUj4UasUMNtdePl/R1FalIauJiN0agVsTjd++Wb3foGlJbl4qHQMKpuMsneJXv68+qyubzHbu3Fnvd+bdd+a47kT0079RAgs0UqM1EKpAL4+2kqdKwg5h1FwHEJ9bRmWmaBDm9m/p/Hy0jH4/ZaDcLg4orRq/OnjSuQlReL2H+bgkQ+7a4x/P6dINtjmXMD1xRkBC79v5mVyVjye/+lENHRYoFYo0G5x4G9f1WHZ5Xkw2V0BHS/EF6dRyVH468+LYXW6cazNIvVbzkuKxEmzIyBrrFExPHJ1Ad4ur0Njpw0vf16NJ68bC6PNKXvuYmu6rAQ9Fk3Lls7Z6XYHZGlWzC3CxdkJUCgYNvdzXTC1aCKkPwng4AHr0tKSXGkNEe+kvbhwEl75otbvq21OAUVp0dhcNv2srkXfbO8bX9V6hh/F63Gi04b15XW4Y2Zun/qli8Syq6wEQ5/6LxNCwh8FxyEkV4/24e4Gv3rgzAQdHr9mLP7vjXLZDKpOrcBjmw4gTq/BbTNG4j5vhwnxcUdPmmSzqbF6De7fuDdo5mVpSS72NXRi9bZKLC8dA7cgYMmlOZ5JVZyj4ILooCUMSgXDL316KN91WR7+tec4br8kR3YK4B/mjcMft1bggSvH4GbvJKymLhs6rY6gPZS1agUi1Eq/jhfxhghMzIgPujmuP+uC+zpogBDSVwpERSgC3nSv3uZf4mVzCrA7hYAJn2JfeN/pdmfy5lXM9o66YzqqT5rgdAlQKhU4abKjtCitz/3Se6LOFQOLkhcklCg4DqGsBAPW3jgBe+o7pc1rGQl6vPa/Gjw9bxwaOiyI1qrxbZBSC51agQtidVKJQ1WzMeBxG8rrAzbfLS8dg4PHAx9rcwrIiNdh0bRsaTy0GIgvnpENrUqJD3c34FeX5koBas/AdXx6bEA/5Gc+Pow/zBvnN1TE95iHm4yI0aphsrvwW5+2SU9cVyjb6WJ9eR3KZuYCXMCSmTlQMmBsekyvHSX6G73QEdK/mo12APJt3JhPTKNVKxCrUwVs2vMMBfE8Jtib1zGpUWjs7FuwdKjJfyy82L+9sdN2Rt0mqHPFwKHkBQm1UA4BIQAcLo51O6qxdnsVXtxRDYeLo9PmxKEmIywONx7ddEAqtfClVStQlB6DxKgIzC/2DPWQe1y7xYEuqxNLLs3Bijlj8fS8cUiMioCbC7LPWddmxXOfVKHd4ulfnBqjxaJp2UiL0cHucuOBK8fguU8qwRjD0pJcvwb6j11TCI2aSRv7RDanAKvDFfT70KoU+MUlOVJgLH7Nb9/bB7e3xvqeWXn4w7xxUCg8XTjWl9ehqsUs/dzsTvmm+r7DAU41/ON09PZCRwg5fSnREUiMjJBdI3zHRz9+7Vi0W114/ctaLJqWjSUzc6Q39Ce8XWuCvXl99/uGPg3jkPv6NdsrMWdiOrRqBRIjT38zr9xwIdoYHBp1bWZUnOjCbdM9vx9xeg2WbdglDY0h5GxR5jgExNs9LUZ7wAL8yIf78ewNE3D0pAlJ0TrYnILsxpClJbm4f+NeaFQMd102KuBxcXoN5henIyNej06LEyo1w8M+tch/nD8Oj11TiOUf7PN7zte/rPUrhRA33YnPZ3G4sKB4OFq6rEjQq/HMgvE4eKILbgFY+0klbv9hDjITdH4BslatQEqMFn/+tCrg+1heOgZmmxMHvVnl1Bit1AED8GTTn/R26bjPZyiJeK7iz+3ut3chP2U6RiYF9isNRfaAWjQR0r/USoYorQJ/mFeEqmaTdDctJykSaTERGJ0SDZWCQa1icLk5NCqGyAgl0uP0sNhd+PlFmUiJ9lx/wd68irHwqe709Nb5ZmlJLo62mjBiWN9v0wsCh4IBT1431m+oCG0M7n+CwPFdXYffHh1xPw1l6Ul/oeC4n/kGbMH6aFqcbmw9cAJ3XT4KWrUCjZ02vPFVLZZcmoOsYQYcbjL6TX860WmVMhKMAatvmIBOiwMP+Qz/WF46BndelguT3Y2NO+tx99u78ZeFk3Dfj0bBZHcjN8kzQvPuWXlIjIrAQx94OlmIgbFvZ4rMBB0evqoANocbFSe68HZ5d5eLRz7cj2cWjPfrUPHwVQUQuICHSgtwpNmIp+eNQ22rGQVpMXA4XYjWqnGoyYjMBF3AZpwnrh2LWy7OhM3FsXL+OHDOEaNT4/6Ne/16JducAurazH7BcShLH6hFEyH9y+IQZD8ucA7OFEiK0uCk2QGT3Y0YrRp3XpaHE502v0mew+MNyIg3BH3zyn0SxTZnd3/0nnWpwb4+JykKT20+iHaLA5v7uI74rvlxeg0Wz8hGXnIURqdEn1aATfqmptUsvQEBurP+i2dkU/KC9BsKjvtZz4BNbgE+3mHFdROH44H39uKuy/LwzMeHAXg2uh1uMmLNtiq/59y8txEvLpyE+nartFFPnJIH+G/gE1ufvfFVLb6t9fQ4fnTT937P98AVo/DbK8bA5nLD5hQwZ2K6FLCmxmhxfXEGfvn37wLelYu7yV2CgBd/NglmhwtqpQJqJcOhEyY883F37fDj147Fc9sPo7y2E0tLcvDh7gbcP3t0QDD72/f3SpOuMhN0eKi0ABaHGwuK07HBJyjXqhUwaPx/XUNZ49fbFD1CyOlzuN1QuICGdmvAEKSUGC3+V9WKrAQDTDYnrA4Bx9otARPs7n57F0anTkdGnB4r5hb5Tcv0vdsEQOqPfuWazwLuLMm9+S2bmYunNh+U1py+riO+a35jp02a2re5bDqtFyEQbN3PS46i5AXpNxQcnwW53bK+F65cucRj1xQiWqfGk5sPoLbVile/qMGSS3MwJjUav3zzO9w2PdsvoC5Ki8b1UzKws7ZdeqEQW535Ejfb3TY9G+vL6zC/OB25SVHg4H6lDEoGuDnQZXciM0EPrVrh93y+gbL4vL4DQ7RqBdQKBSwON1749AhaTA78fu5YKTAWv+bB9/di0bRslNd2YkN5PW66KBPVLaagt0LFoPxXPl0wxBe7dosDZTNzYXW6/L72VKUPZ7ubmSbjEdJ/9GoVjHZXQF92sXWbwIEH3tuLpSW5SIiMgMDl17mmLhsqThix6qNDUs/0sRfE4ESXTepwIb5BX/6Bf4bR986Sb8cKu1NAfYdFOk7PEqre1hLaiDewgq37o1Oi6c0I6TcUHJ+h3nZLixeuWC4hZkaOnjRj1UeHoVExLC8dA7tTgMnmgtXpgt0l4LbpntZtv5mdj6e2VCBOr8EvLsnBXTIlGnKLQ12bVcocZw3To77NghGJkbjlB1l+HSGWXZ6HOL0agsCxtCQXNmf3AI3eAu+lJTkYmRSJmjYzFADumJkLq8uNLqtL+hrfQHxUchRSY7Ro7LTh33sbcf8V+UFvhcoF5au3VWLlvHEQAPxxawVWzhvnd14ZcXo8fm0hHvSZovX4tYXIiNPTbmZCwozZ4YTdyWXXF6vDDe4NhtPjdFCrFFAy+XVOr1FKUzWf+6QKqTFaoBjIiNdLXYAsDjdGJOhlNw/7Bq1yHSvWl9fh/tmjpSzkqdYS2p8wsIKVvI0YRllj0n+oW8UZOnpSvt612WjHn386AWt/MgEr5ozFb388GmNSo/Cbd/dK5RK3XjwClU0m/OE/FWizOKBWKXHXhl1Yu70Kz26vgk6jwl8WTsKqBUU41mb2K9EAujPSvp0kxDZEYqYXHFj1cSVcbi4FxuJ5rvroMLRqJdrMTrz+ZS0SDBr8+caJKCvJwajkqKBdLl7cUY0Wox2b9zTCzYEXd1RBpfBknrVqBVJjtFg4NRMvf+7pznHvO7uxcGomUmO0uCQ/CQ+8tzfgvJeWeM47WFBe0WREVbMRP70wE4lREX6fr2u34FlvVlvc0f7s9krUtVuC1iPTbmZCBodBo8aJLqvs+hJv0OCzw82e8qkIFXQqhsSoiICOOasWjIfDLSBOr8GvLs3Bssvz8FDpGHywqwH3vL0H976zG5wDRekxSIjU9No9IljHijU3TPB7E32qtUQM1nqeJ93iDw2x5G1z2XS8tfhCbC6bTkkP0u8oc3wGBIHjYKN8T9+KE0akxepwuNkIgUPqGyxOgJozMR2tFgc+2NWA64szYHW6A8c//3MfFs/Ihk6tREqMFg9cMQoCIPUzbvROcnpmwXg43QIONZmkmmDxOapaPEH1wSC9hxs7bTjWZoFGxWCyu6WhHpkJOjxydQEe9tnsJ9Yc25wCnv7PITx7wwS8uKMKt1+Siz31HYhQKfDAFfk4aXbIlmQsnpGNnKRI1LZa8cZXnvZMjAFalQLpcXq/W6E9sy8KBuQlRUGrUSAj3v/FpqnLhtpWqzQ8QNRstElZqJ7fN93qJGRwtJodWLfjKO6ZNQortx6S1pdHri7AiU4rrhibitvidHC5OBzgGJceiyitChMz4mBxuJARb8CIYQbUtZlx00WZfj2QffdFrN5WiX/dMR0Z8b1vqg1WDmF1uv0CrVOVTdD+hIFHJW8k1Cg4PgM1rWZUNhsDgrnMBB0iI1R+dbNlM3Ox4dta/PbK0ag+acb44TFoNzvwwJVjUN1iQlqMLmgd7uptnsASgLRh7ZkF4709QRlsLjdSYrS4z7spRaRVK2D3TqLTa5QoK8mRWhxt3FmPdosDWpUSn1Q0S5vk4vQaqRyi0+LAnxaMh0MQcOhEYOAtgGPupAws6TElb0xqlBT4isdq7LRhwvBYZMQbpM4cvlPvXrt1Mt64dQraLI6AYSbLLs9DWqwOBRdEIyM+8MXmVLcz6VYnIeHDoFGh3eLAy58fxT2z8pAcrYNBo4Q+QonjHRaMGGaAye7Cfe90b7L7w9wipMZqkZlgkAJOt4CAhILvvgibU0CLyYaRSZFS0NpmtkOt9OyVqGk1IysheMeLnmtEXx5HwRoh5xcKjs9AU5cNG8oDN9vJdWNYs70yIHvxm9n5sBvtWL2tMmADHtBdhysGyaLaVit+v+Ugbv9hDh7x9jTOTNDh0asL8dA/9wVkUVJjtFAwFrAzXK9W4umtFVg8YyRsTndAKzexdtftdvt1xRDPTa9WYemH/t/nm9/U4o6ZudLjfev3EgwacM6xct44VDYbsaHcE6AvLcnFnW/tRrvFgQeuyMeo1Cj8fdGFsDrdsDhcSInRYUxKNFQq+eqfU7Vbo1ZshIQPQ4QS9/5oFP699zgMGrVfi7ZHry6AQaPAnev3+a0r923cI3XhEet8m43ymVzxTbnvEA+FgiErwYCKE8aAtWDW6OQ+rRHU1pGQoYeC4zOg92ZAtuzztFhr7rIjJUaLLqszSKlFl9+C32pxSAGrXEcLMbjVqhWIjlAic1gknv3JBFjsLkTr1fj9vw/C5vS0XSstSkOHxY5Xbp6ME502ROvUeHTTfjR22lBWkhNQb7x6WyWWXJqD2lZPW7iV88dJE/j8u03sw+u3TgkYJLK8dIxsSUlpUZq0MU58jjXbK/H8TyeiqsWEB97z3zQXrVXjH1/XStnqVrMDlSeMiNJp/NozyW2i8905PiY1Cv+6YzpaTIG3M+lWJyHhQ8kYxqRGITcpD4vf2NmjlGw/Xv55cdDNwOIEtLT/mwqlggVNKIgJAKXP+2m5muEVWw4iLVaLOL0a6xdfBKfbjXhDhOwaQWUThAw9FByfAYfbjd/MzofF6cb/e2Mn8pIicf2UDDR32WQXbXeP3ve+LYp8B4AMj9fjSIunjEHMpsbo1ahuMfnV14nT7WYXpgZMo/vnrgbcMDkDabE6WJ1u2Rcbm6v7RaK+3YKMeH3QuuQEgxqrFoxHhXdK3rodR/Dr2aMDvk+lQr7Gt83swG97BM0Pvu+pqZ5VkIoXdlShttWzSWftjROlUg3xscs27ELCLVOQGBUhZWr62oWCbnUSEj5MDgdOmlxwueU7VnRanbLrZ0OHFQunZuKNr2qx7VAzdGollpbk+q2Jy0vHIFKjlMZMT8iIRdYwz3Xfs2ZYbBt5/bqv/NaQiRnxQQNeWksIGVooOO4j32ylXqOCm3Os3uaZLnf7JTlS3W7PLPBTc8biRKcNS2bmAPDU4fZsUdTYacPaT6rwwBX50CgVuLMkF/oIFVKiI/BZ1cmARvjPfHwYLy6chEONXXh63jg0d9mQGquFxeHGLdNGoLrFhAgVA2OqXqdIadUKGG1uuAX5oP5IiwlTsuLxyzfL/T73+y0HA8akjk6Jln0OjUoZtKb6kU37sWhaNt79rt6zUdFkD3hsnF6DZqMd/ztyEpMz45GRoJPdOZ62eCosDvcZ9TMmhISeWqlCY4cR44bHyq4VwyIjAjbriXfRxDKszHg9jDYX/rStUtrfwDmwdnsV5k5Kl3qx+9YD96wZlmsb2dfJmmfbO50Qcm6g4LgPeva5LM6MwaLpI2FzeqbLiWUTvn2NM+L10GkUaLe4/DIcS0tykaBX494fjcLT/znk93GtSoEuAMc6rIiMUMLpFoI2wt9b34moCBUaOywwaNVYtmG333OZHW7sPdaOx68diwff7w5iH76qAP/4utbvhSctNiKgfEL8XF5yVMDxa1ut0KsVWDwjGwL3vDg9/2lVQDanbGYuGjos0guT2ANZqQByk6IQp9cgQqWQ6p171l+nxmhx00WZfrWJT143Vur84fvz2FbRLE2mon7GhIQfo82JaJ0KXTaXbClZc5cNGiXDXxYW4+uaNnAOv83AqTE6LHt7N26bno12i8OvS41vWUXPeuCeNcPB7nLVejfqBVs3qHc6IUMHBcd94FuzVpQWjbkTM1DR2AWt2tPj17cjRGSEEiqFAne/vVt2zPPqbZV4ZsF4ZCaq/YLLf+9txBVjU7HWu9v6/tmjUNtqDtoIPzc5CtUtJlidbqz6OHB4xrLLcjF2eDxWbzssTZHKT4nGXz8/grsuz8P3xzqkjMzj1xYADH7nI34uTq+WPT5jnjZsD3kD6swEHXKTI/HH+eNgtruQkaDH/Rv3wOHiUgnKsMgI1LdbpA15yy7Pw/iMGDR3OvDIVQUw2V3SABSbU8D84vSAXekPvNc9btr3fHRqJX51aQ4YAw6d6MKY1CjptiohZPBFa9V4/tMq3D0rH+vL6/wyv+vL63D3rHw8+e8KvHrLZLz0WeBG4OqTpqD7NFbMLUJarBZzJ6YFBLg9a4Z1apXf3Tjx+b8/1gGrUwga7Abrd9yXjDMh5NxCwXEvBIGjrs2M4x1W3Dbd01KtIDUad3lLKH4zOx+psTq0mh3408ee7hFlJTlYt6NS2j0tl6E4eKIL+SlRfgHery7N8QsE4/Ua/GlbJW6fkR2QkX34qgJo1Qqp24XcMVJj9VLG1bd12tPzxqG6xQyNUoG7LsvFsMgIqJQMyz/Yh+uLM/xecJ64bixe+6IaD5cW4JFN3X2PH72mEHGRSjR0WLBq/jgoFAxmhwtL3vze7xxvvXgE/vrFUdhcgmxP0lUfHcYzC8bjHp/M8D2zRnlunyZ4bp/KfW95yd1TCMXuHzaX4NcpIzPBINv+jRAyOE6aHLj9hzloMVrxUGkBdtd3QODApj2eXvAv7TgCm1NAeU17QK/15aVjsHa7Zx0T79AtmpaNUcmRiI/UYGpWgmxXm55lEFOyEgAEdrLxLd8IFuzSmGhChg4KjoMQBI7th5pwvN2Kk2bPkAolAzi6N5PYXAL2He/0y0L0LIOQy7qOTokGfDLCqTFaZMT59zvWR3g6Yrywoxq/+GE21t44EXvqO6BRKuB0udHU2b1Qyx3D7pLfjFfZbERKtBZqJcND3hefP8wdGzCgg3MgMkKF3ORYvLCjyu/jG76txY0XZuEPPcpCxHIHm1PAIx/ux9qfTMBT1xXh1te+DehiIfYkPdijk8fKrYeweEY2RiVH43iHVfZ7Gx6rw5al03GiywadWokvjrTKZpjHD4+lFy1CwkSUVgXGgMpmE1Zv6y7heuyaQuQk6bGnwXM3zuoU8OdPq/CHeeNQ12pGUbqnN/yC4nRsKPf0Tm/stOHlz6s9feBbgAtidAHXem9lELMLUpBwyxR8VnUyoHwjWLBLY6IJGTpofHQQNa1mVDebYHa4sW6HZxzyizuqYXO6cf/sUbizJBcWhwt6TeCGM3GMqNyY58evLcSGb+tQ22rGXZflITNBh4VTM3G803+sakOHBUtLctFucaDJ6MCSN7/Dmm1VsDoFPPnvCrSY7NCqFbLHeOCKfMTrA0enZibokJMUhRNdNsRHRiBOrwEAWBwulJXkYO4kT1u1jTvr8fLn1RAEDqUC0hS6tdur8NwnVbgwO1HajAd0l3LMmZguHcvmFGB1CjjWbpEN0sWR076dPFJjtFg0LRt5SVEQOMfweB0ev3as3/dWNjMXZeu/x4FGI6ZkJWBsWiyGx8l322g22kAICQ8GjVIabuS7diz/YB9M9u4M7rvf1aO21YrjHVYoGMPiN3Zi6frdeHFHNW66yDOOXqtW4OHSAnxa0QyVQiF7rfc29lmhYBgWGYEPdzcAAOZOSseSmTnITNBJPZIBT4Bd3WLCl0c8QfTaGyf4rUfU75iQ8xNljoNo6rL5lSYAns4JTV32gBZCmQk61LZaAXgCS7EMwnfMc2WzCS5BgMXuwiWjksAUADhw76x83PPO7oBOF//4pg53XpaHxTOy/aboiaUaf/uqDnddlodnPj6MN76qxeIZ2cgeFolYvRqCIOBQkxGPXVMo1fhqVAy/vCQH9/mUMJTNzMWWfY1wCQgYFBIZocLLnx/Bkpl5fW7bxnwqGLRqBSq9I7Tlsi0KBjxUOgYv7jgCwBMY9xxEsrQkF//e24iV88bhcLMRbqE7w+Nb6zc6Vb5TRlKU9pS7y2n3OSEDo9XiAIJsMLY73Xjl5slYtmE3Gjs93XMKUqPxf2+UB7wJXzlvHAQAf9xagWvGp6Hggijo1Up8eeSk3zV8qjIIlRK487I8HD1phsA9dwbvvCwPahVQ3WJCU5cNLjfHgx/sldpNrlowXrpr1Z/9jmkdIiS8UHAcRHK0Fi1Gm984ZK1KEZD1eGzTAb/6tXaLA0nREVhyaQ4SIyPQ0GnFo5sOSLfsMhN0+M3s0eAA3JxDrVQgLykS0/OSEKFS4MWFk9BitCMpKgIdZjsAT4mFGPxFRnRv/uPgWHJpDhxuAZMz47HveCe0KgaVSgmr043aNgs+3N2AJTNzEK/X4C656X3zx2HZ27sDXoDu+9EoLJicCQ43Hr2mUNp4p1UrMD5dvhWTuJaLge3rX9YCQMDmmcevLcTE4bE41mHBDZMzpKxzz/ZKq73tmiqajFK9ocj3RW7EMPkJVhlx+l53l8vddl0xtwg/LkwNOpWPEHJmorVqMMi/WY7WqXH4RJcUGC8tyYUlWJ92pxuvf1mD0qI05CZFwunmuOOt7/0C2NkFKacsgzhpdOBEpy0gMVDXZsVtr5UH1COLb8o3l03H1Oxh/fZzoS4YhIQfCo6DyIjTY9exDr9NXo9dUxiwWMfpPaORH7m6AElREag5aUaL0Y63dx7DPbPyIXDPLbuNO+sBADdOycSdPovgssvzcMu0EfjTx4dxfXEGHvpgH0qL0lDXZsGY1GgMM2jQ0GHB0/PGob7dgmGREWgz2aFQMERp1UiKikCESgGL0423vq3DkktzsXyDf3Z43Y4j+OUlOX7nLrZVcwkct03Pxsad9VIAb3MKSIvV4S+fHcGF2YnYtKfBr+b4z59WBvQ5vvdHo5CZoMc9s/JQmBaD37y7V3o+sZY5M16HjAQ9kiIj0GS0Iz3WgKwEAwrTYtBqcvSaje7tRS7YBKtT7S6X+/z9G/cgTq/BtJxh9MJESD+KUAGNnQ78ZnY+Wi0OKVsbr9eg0+pERoIeK+cXIULl2ewbpVXKXvcdVgfmTkxHq8WBQ00mKBlw68Uj8MKOaimATVs8FQWpMb2Ofba53AHJDjEz3TOJ8PS8cTjUZMTGnfX9vgGv5zoUp9eg4oSn/jorwUBZZEIGAQXHPnxvbRk0yoC62vp2i99iLfbhvfvt7mB0eekYJESp8atLc3Gvt1xifnE67ps9CklREQHPueqjw1g8IxulRWlYX14X0DHi8WsL8XlVM+L1Grz1bR1uvigLuclRaDHa0WKy48+fVuGGyRmI0qowf9JwqVex+Pzi5rekqAi/DYA9Sxh8syNatQJqpQJTRyZCo1RINce+Zo2x+ZWLxOrVWPNxJfY0dGFpSQ7aLQ7pseLmmSWX5kClVODmV771e7EakxqF8pq2oANL3v2uPqBjR89aP7kJVqe6rRrs8+W1bUiPC9zgQwg5c04XUNdqBhjzy9YuuzwPnAPNRife+qYW5bWd0KoV+P2csXj4qgI88mF314qlJbnQKBXSXhDfj990USZWbPFsEt5W0YyGDhtmjU7G5rLpaDPboVYo0GZx4NuaNiRHR8DuFGSvf7PdFfCxQ01GvPRZNZaW5CIlun834PmuQ3JrM2WRCRl4dO/YS7y1deWaz7Bsw27UtlkDFs4N5fV47JpCaUOGXB/exzYdQKxOi4c+2Ic4vQYLp2Zi3Y5q3LV+Nxa9Vo7rizOQGtO9uNqcnkEfjAGlRWkBpQUPvr8PP5kyAhvK63DrxSNgcwn4xd+/w30b9+LZ7VW4cUom3vq2Ds1GO7ISDH6L7K8uzcFt07MxOjUKSgU8g0bUCtkShjXbPaUNYhu2+nZPScYE7zQrX1q1Ag43x8ETXUiOioDAgTXbKvF/M0ZiycwcfFLR7PdzEoNvjZIFvDlYtmEX3AIwNj0GD5WO8fuapSWezTntFgdykyPxrzum463FF2Jz2fQ+vViIt1V7nruYcQ72ebcA2sxHSD9rMTmgUDCs+uhwQIKg3WLHg+/vxa3TRiI1RgubU8Cv392LpCgNFs/IxtPzivCXm4oxfngsMocZZDO+6XF6AN3X8LINu1DXbkFWggHNRgeu/8tXuOXVcvz8lW+w9UATonUqlJXkYMnMHGlN1qo9AbSvzAQd8pKjvG0z3dKE0f7iuw4Fm95X02ru34MSQnoVsswxY+yvAEoBNHPOC0N1nP4i3tqK02tw+4xsGDSBt/TaLQ60m+1Yt3ASymvb/TbKAd2lCu0Wh2fam0ohG4SKbcyA7lpdgQff6NZitOGXl+RiV31HwCjpN7+pxd2z8uFwuZEYFYEHrhgFp8ARqVFJwzTEgDdBr8bSklwMj5fv7pAZr8Oiadl44b9VWDg1C7dePAKrtx0K6HP88FUFUILjoQ8P+GWeGzosUnaFcwGrFoxHxYkuuAVvk//LRyFOr8GcielSucTGnfVoMdkwc1QyjrWb8fzPJuH7unZolAooGfDbH4/G6JRojBjmubU4Mqnv2dyek7F6ZpyzEgxYMbcI92/c4/d9rC+vw9yJaX0+DiHni1Cu25ERKiR6u+T0XAMMEWrYnAIqTnThgStHSyUMNqeANduq8Ie5Y6FVKTApMx6fHmqW7oD5Po8g+N8FE+8SAQgonxLv2IlTNcXr/r4fjUaEmklrf2aCDrfP8N/IPDxeD8bQb33UfdepYL3xg5Vy0Ea+s0M/PxJMKMsqXgWwFsDrITxGv2k1271txAwwO9yoajb63dLLTNDh/tmjUdVsgsvN8XZ5PeZOSu+1VEGuRtnm9IwvBTyB8UOlY5ARr8efPj6EX1ySK1taUN9hRV27Vfp6UWqMFtcXZwR0oNhQfgw3TM4I6Dt8z6w8rNhyCK/dOln2OLVt3eUTYr/hC7MTA/ocv/DfKlwzPi0g6P+Dt1Zv9bZKLLk0B899egR3z8rH4SYjbpicgZQYLe6elYdjbd1T8sTblAoFQ2ZCJIbHGZAZr/erHT7TxSpYLbL4fAoFw48LUxGn16C8tk0K4u+fPZraM5Gh6lWEaN2Oj1QD4Ljpoky/EqmlJblIMKiljK9vCUO0ToXizBgkRWsRrVNCEDgyEwzITNDJlqCJG4HF8rCkKG3Q8imBd/95zfZKrF88FWPTYgEAm8umo7bVDLPdLQ0pEh/74Pv7sHhGNvJTok95B6svwZfvOtVisstOB5TrpUwb+c4O/fxIb0IWHHPOdzDGskL1/P1JEDiOd3jqYsWRz3F6Ddb8ZDwWz8iGXqNElFbtdxGJbcbEdmpyt8N61igDnoVuSlY8/nT9OFSfNOPZ7VXQqBgevqoABo0Sj11TKNUN+3Z9mDspPWCUdLDyiKfnjcPKrRWYMzFdCnZtTgGxOg0yE3SIUCKgA8XDpQX4xze10nn6lnvI1RwLPW4t2pwCak6apT873AJuvXgE6lo90/iyhhlw7zu7UdtqRWaCDstLx6Cq2QSb0w2z3QVB4FAomGzt8Nk41fOpVApMyxmG9Dgdmo022fGzhAwVoVy3LXY39h3vki2JeO2WyVL2trQoTfr40pJc/PKSXHRZ7bA53DjSYkG8QYPHrinE4jd2ygatYmAs3iXiQdpJ+pZH2JwCrE63dN1nJ0YiI06PzfsbZbPUeo3ylKOjTyf4EtepU93t8kXjrM8O/fxIbwZ9Qx5jbDGAxQCQkZEx4Md3uQTsqu/AkRYTbpuejTidWsqS2pxuRGvV6LI58Y9v6vzaur31bR2uGZ8GgfOAXsSiDeX1WF46Bo9t6i4/ePiqAlQ2GbHCO11OzP7+8u/fIS8pEnfPysPzP52IFqMdUVq11AZux6Fm/PwHWX4b04KVYVQ2G3F9cQYUPuW0WrUCde0WPHHtWFhdHM99UumfDd5RhdKiNOxp6JIeL5Z79Na2zfdjWcMM+PUVo5Aeq4deq0BTpwNrfUo7xL7KswtT/Rb/pGgtjrVbcVl+stRCbSBvd/V3QE7I+exM1+wmox1mh3x7tk6rS9qQ/MZXtVIwmhqjAwAkR+tw38Y9Uru2x6+VvyuXHqvD2hsn+JViifstemarxVaTgLimMVS3mKRAdOtBz4RUuSz18tIx3r73nrINuXXqTIMvjYph8YxsCBxQMM/fZX+eXTbZEpWhMM66P14faBw46c2gB8ec83UA1gFAcXFxP2916J3D4cb/qk/i+2MdEDjw1ZEW3DAlC09v9QSuX2XGoKwkz7MgqpQB3R0y4nWwuQT8cethPHDlaNka5S6rE4tnZCMvOQoqxhBrUOOk0YGn541DQ4cFabF6rNxagTi9BrMLU/H//vaddIwnrhsLjYrh0rxh+OlFWaho7MLIpEisuWECXIIAlUIhG7i6BWDNdk9LotQYLeYXpyMjXg9DhAoWpxuCwHHD5AyYHW4Anm4QjZ02v3KPJ6/z1PjVtVnwm9n5AfXLvjXZWrUCj1xdgNe/qMbM/BTc885uKQMvV3pxX4/blI9tOuDN0KswLcfTPzRUt7uoxoyQs3Oma3ZyVAQqm4yya1acXo17Z+WjvsOCn03NQKJBg/pOG6paPK3aEgwav3Ztx9rk78qNSonC2LRYv2u6sdOG17+slZIBWpUCerVS6qgjBrsOlxvf1bbiYGMXMhP00h6U5aVjAoJccc1yujmuXPOZ7Dp1JsFXTasZS978PuD72iwTUIvdknoG/f3dTSPc9Fc5BI0DJ70Z9OB4MAgCx9GTZhxs7AKY5xaZAsBdl4/C93UdeHreOLRb7NCpVVj8xk48PW+cbPnCSzcVwy0IuOmiTKzcWhEw7KJsZnf92+rrx6Guw4Y1G/yzD40dFtx68QgY7S7pa8WsSW2rGSvnj0NdmxVL3uwOmu+6LA9vflOLGyZn4KHSMXh0k//GOHEzikIBLJmZ45e5Fm9d3jA5Axt3eup+xY/9YOQwaJQKjEqOwtGTJnTZ3VAyIC1Oh7/eXIw99V1Ij9XB4nDCEKHE0/PGweJwIUarxlNbDvp12wi2scRqdwWt/xNbqAGBG2j643YX1ZgRMngi1AqMTIoMyOLedVkerE6XVNubmaDD7T/MCWjVpmSQSsXk7sqtmFsk1QyLE+6So7VIitKi3eLwKw3LTNDhTwvGw+J0Q6NUoL7Dgm9rbMhJioTZ7sQJ716Nxk6bt/wrcM3KTYrE8g8Cu++I69SZBF+nE1C7hcBR3Ku3VWLWmJTT/8c5h/RXOcTplLCQoWfIBcdyAdIT1xXC6eJY5DMVaXnpGKz9pBJxeg3sLvlbgS1GO0502aQF6o2vavH0vHGo7DHqWKtWINagwf3v+i+kYvbBzYEUb/uinhv7AAR0qHjm48NYcmkOGGPIT4nEX38+GV8dbYVGqQBjkOqTEyI1WLbBP0srdssQ6/lMdjdsLjeemjMWx9pMiNaq0GyyY9XH/tmIxg4rorRqGLRKGG1O/Mqb3fDc4hyLGK06ICCWe2Hwnfbn+3EFg9RCjQcZMXu2t7uoxoyQwdNhcSIlOgIdZgf+fONEmB1uqBQML39+BOOGj0ZeUiT2NHShtChN2ggNdAd9T88bh64mo3Q3LFanxl9vLsZJox2xeg2mZMQDCLzrtPbGCfjj/PG4++3uj5WV5EKlZLBa3H7DjJaW5GJkYiQ0qu67cg63ILtmJUdrUdtq9fsefdep0wm+xDtaVocbS0tysKG8eyhTsIC62SgfSLeYbKfV1SeYcL3L1l/lEKfasB2u3z8ZGKFs5fYPAJcAGMYYqwfwMOf85VAdr6/kAqTaVktAAPrYpgP4683FqG21Br2FlxgVgSMnzdLHGztteHLzwYCuFUtLcmGyBc+Yrt5WiVdunuzXg1isJZOrZbY5BSRFRSA+MgKfHj6JSI0SwwwamB1uv4zM8Hi91LHC92sjVArE6TWI1qmlx6/b4SmXyBxmwP/rsdFFfGG6953d+MO8cXjEm60RP//g+3vxzILxqG0zSz+njTvrAzLpy0vHoN1iD8j4LC3JhV6txF+/OCq1UAvF7S6qMSOkd6Fct91cQLvZBbVKiV/63Al7+KoCVDV14fopGWjZXhX8rpPDBa1KIVtKAMbwRc1JjEiIRH2b2XNXy+7CSbMdj206gN/PKcLSklwkRkagzWyHw8Wxp6EzYN1fva0SL/+8GCa7S2pFGa9XBwwjWbVgvN9gJZHvOhUs+AL8M9sZcXpsPdgUsOH79S9r0W5xBA2oQ1kWEM532frz+w623yScv38yMELZreInoXrusyHeLvMlBMlUtpmceOTD/YjTawICvWWX50GpALIS9H7v9Bs7bVhfXoeV88ahoskIBQMuiNWi2WgLuKB9m8t3Wp144rpC1LZapOEha7ZXevolB8laHDrRhbQYHf7+dS3uvyJfynyL5y/u3l6zrUoq1VAqgHHDY6BVZUoBqvj4Rz7c7zc61fdnoVIw3HlZLrggP1Xq4Iku6NRK6efU2GnD9ooTWLewGE1dNqTGaNFhdeCetz3jmRfPyMbIxEhEKBU42mrGX7846tdCLRS3u/qyqFK2gAxloVy3IzVqfFZ3Eh/savDb3PzCf6tw96x83OfdqwDIvzm+IFaHEYkGLHz5m4CAdvGMbIxJica+451wc2Dl1gqUFqVBqQB+e6WnnpgxIEqnRkqMFre9Xu4d6hG4ln19tA1psTr8+dMqaQPgA1fkY8mlOXC4BRRnxuPi7ATPQBPvOiVOQs1LigLnCNp9Ry7oWrewOCBhs3pbJV5cOAmHGrswJjVKdg0KZVlAON9l68/vO9h6H87fPxkYQ66swvd2mahnizTA2+oHnjn3i6ZlISVGh7/+vBhGuxtqJcOxVgtuedW/DMPo7Wpxx8xctJntAIC8pCi8+kU1ripKw6NXF+Chf3b3Tf7lJf7N5e+ZNQrTcz0b0tZsr0ReUiTGpERhxdwiKBUM6/57BIebTVhakosItQKrPq7EnZfl4oqxqfj6aJvsQp8Rp5fdbf3oNYWyWWWzwyX7s2jstCIz3gCXIODXs0fhNW8ttfh5twDkJkUiRq/GK7dMRqvRDqtTwOI3un9Gyy7Pw9KSXFidbkzIiMPIRD0aO+yI1CpxcfYEWJxu1LSakZVg6PV215k61aJK2QJCQqfd4kRqdAQWzxgZsA+iw+KAzenZq/Dh7gb87qoC/K7H2Og2iwNatVJ23RI44BQ4KptN+GBXQ8B697urCpCTFInqZhOSorWI02swNi0Ga38yAWZvhvlvX9Wh3eKAWwAe/ud+aViTzSngyX9XSH/33SA3uyAFY5ZOx3d1HX7lGcHWDbmgq7xWfu3eWdsOrUqJkyY7sobJB2R97WxxusL5LtupyiH6qrf1Ppy/fzIwhlRw7HIJ6LQ6ArLAGQl6PHJ1AR7+536/4DEpSoPbpo/A0962a+IiXXhBtNS9Aeguw1h2WS6WlxbA7nQjOUqL9Hg3lIzhjpI8HGu1wBChkhaywtRo3NljkVy59RBeXDgJI4YZkJcUiZ9MycSyt7uD50evLoDD5UacIUKa6uZyc6z9pCpohrnFZJeyMr7HeuiD7qyy7+PbzA78ZnY+Wi0Oz9Q+BowYZkCnxYm7gtz2Ezf0/TB3GCZlxGPL/hM43GwKuGW56qPDAS8wkzLi8K99jbjt9Z0BC1R/t1c71aJK2QJCQidaq4RaqcMv/v6d3zW2Znsl1i2cBK1agclZcchPjkJSjEZaKzmHtNYsnpGNmy7KlDY6A917FmJ0Kug1Stn17nfeu2ION0eX1Ylf/DAb1S0mv/KMe380CvF6Nf656zgWTctGRpwOS2bmYONOz13BeL0av7o0B4wBLSa7tHa4BUiBsXi8ZRt2YdQd0wNqf+WCrmDtMnOTolDVbIRWrQz4WQoCx96GDuyp74TAIZ1jsM4Wp+tMSxcG6s5bf7Tf7G29p04WZMgExy6XgA/3HEdTl+d2v1hPplEq0Gq0Iz1ej9dunQyL3Y1mox1GqxNdVjWe/s8hxOk1uOmiTKTH6WF1uKBSKgKyF3F6DQxatV9XiYevKkD2MB2+q+tEUlQEDjcZ8XZ5PQAg78p8v1uL4uL2bU07IjVKLJ4xMmAy00P/3I/Xb5mCXcfapY0gYkmIXI3vssvzkBKjRVWzUT6rHK/3a8e27PI8xGpV6LC5/HaKP3J1Af76xdGA236r5o/D/kaj1J/U4XZLC06wW5bi92tzCmjqsqG+3SoF+uLHQxmQ9raoUraAkNDRqJT4olo+S2q0ufD4tZ7BRLWtVpSV5Pi9cReJezTEsrUPdzdI0zc9+0C0qGs1yx6jptWMjAQ9dCol9h4PrDd++j+H8PxPJ+KaCek40WnFn7ZVot3iwF2X5eGjA42I1qmlNp8vfVaNVQvGY0xqFA41deG26dnSGi4+X12bOSA4lgu6PtzdEDDGfmlJLp7cfBDtFgcyEwwYkxrjt1GsZ8ZT7FLU2Gnrl/XqTEoXzrU7b72t91OyEqiTxRA3JIJjQeD4oroVf9p2GLdePAKLpo3EXd46sdtnZMPuckOtVOBYmxUPvt89Ne5P14/HkktzcEGsDjqNEr//90GpBm3Z5Xl45X810mI4vzhdtob3uRsn+mUnlpeOwQWxWjR6J/L5Lm7ry+vAOfDal7X49RX5shduk9GGGJ0GS0ty8ElFM0anRHnLHmx44ytPL0+lwlPO0W5xQMkYcpOiZN8FGzQqLLk0BzaXgInDY/Hb9/fhpxdmYK33VqJ4TN9bjL7nwhhDhEqB0qI0rC+vw48KpvgtOLKlKrz7z3qNEtsqmsMmIKVsASGh02pyBM2SJkZGBLzpD7Z+2JwCKrwjpp+8biwy43U43mlDc5cDa7Ydxq9nB/ac16oVyEuKQpROhfp2a9B9Jh1WJ/6w5ZB0R+yNr2rxzMeH8dJNxbjtdf89Hcs27MLKeePwhDeI9Q1QPetb4MurXNB5/+zRmDU6GVkJehw6YUR9h9UvM/7Ae3sxfnistB7KZTzFLkQvf17d63p1qsyu7+dHJUdhy9LpONHVt9KFc+3OW2/rfX+VbpDQCuWdCsWpH3Luq24xYU99B0qL0vDUlgpUevtW3nVZDkYmRSI5RgetWikFxoAnE9xmdmDtJ1VYtmE37lq/C9cXZyDV23Jt1UeHMb84HYDnghoep5ddbHfXdwSUXygYk3oTix9fs70Sy0sLpIEcGiWDVu3/z6NVezLWde1WcADLZuWh0+bA0pJcZCbopA13E4bHos1sx0ufVyNCpZB6MIvPJwbpj246gJVbD+Olz6oRoVag3VtKIfd96GTOhXOOVR8dxsufV+Puy0dhxDCDtOCImWzfYy4tycW739VL78IdbkF6Eez53IMRkIovXL7nTNkCQvpHtE6ND3c34K7L8vyuscevLYTF6YLbZ5yI3PpRNrN7/RCD5Afe24tvatpxxz924XCzEaVFafj9loMBX/tQ6RjYXG7c8uq3qG2zSPtMfGnVChw9acacienSmiz+udXskF0XDzcbsXBqJuL0Gunx4lqXHB0h+3MYlRyFP/90Itb/v6nYsnQ6ZhekQKVSYGxaLPQaFdZsqwqoqW42ev4uBgNy56JUoNf1SszsXrnmM/zkL1/jyjWfYcv+ExAELvv5Hz/7GQ40GjElKwHZiZGnDDp6y8SGo1Ot9+JdxqnZw/r0/ZOBdarf57N13meOBYHjyEkTRiZG4uCJLticgnfHcQwAhZQNKCvJ8buw50xMDwhg15fX4TdXjsbhJiMAoPCCGPz5pxOgUSoQoVLKvgt1+68VsDkFdFqc8lkLi0NaFF/+vBqPXuO5zShmGB67phAnTXa/jPPSklx8U90asMlleekY3DA5A2u2VWLJpblY6x0XrVQA49Jj8fynlVKGY3npGDR0WPBQ6RhE69Sy38eEjDi/EoylJblQKhVYMjMHnAMZ8TrUtJrRarZLtwjf+KoWi2dkIyNOjw6rA4LA8eR1hchMMCArwYCaVjM+3N0QUA6yYm7RoASklC0gJHQ4OH51yUgolQq/TWQRKkVAXa3Y9ecvNxWjqdOGunYL3viq1i9DC3jWzcTICBSlRSM3KQqVzUbUtlqlu2iMeWqWIyOUuM9btrBxZz3u+1Ge7DCSV7+owdxJnqRHnF6D/JQolJXkICVIllGcRireWcuI12HxjGzkJkciI95/DZMrO/jD3CKkx+qlzhajU6ODZjPFrz90okv2MSX5SQHTAX2dKrN7tpnfc+3OG63357ZQ36k474PjmlYznC6Op7dW4NezRyMzQQetSoG7Ls/Hote+lfoJF1wQg7KSHAjehTTBEOF3kRelReP6KRl+3SWeuG4s/vF1DWbmp2B9eV1AkPfYNYVY+0ml3/lkJuiQFB0hHWvjTk8N8vzidCgYw7M/mYDGDguGxxuQEqPGXxYWo93qgAIMLUYbVng3BwLdtb/BRjIvuTQHnTYn4g1q/O7qQphsLqgUDA3tFiybNQrtZidMNhfaLQ4oGJCfGg2HW5Cd9GeyO/1e0GJ0Kvzun/vR2GnztqSLxP0bv4bN6enEsW7hJHxT0w63APzxo8NS0P/KzcXSApSVYMD9s0djxZaDUuDu2yZpMPTHRg9CSCCb04VYfQSe2HwApUVpYMxTPrFy6yGsnDdO6hsstkXLiNfDZHfhrW9r8YtLcjEiwYCjrWapdAHwBF917RbcfkkOVmw5KJVUNHbapDIwrVqBF342ya8u+JX/1eCBH4/GynnjYLa70GKy49UvatBucYDz7tHM93rX1Q92NQQkK3ynkTLW3W4uPyUKBd4aYd/bvgaNMuDF/L6NexAfqcHF2cOgUDCMGBa81lcMBuRai65aML7XwBg49Z6Ks91zcS5OnKP1/twV6j1C531wLG76qm21YsO3dfjlJTl4+J/78chVBVI/4fXldYjWqrBuR7W0+a6+vXvwR2qMFrdfkhOwsP32vb1Yt3ASlns3kbzxVS2eWTAeRpsTOo0KhgjPJKbfvrdPChpvn5GDm1/51i9bYYhQ4vF/HfT72O+3HMSSS3Nx0mTH6m2eoSB3luTK/jIEG8mcGqPFssvz/KbZlc3MxfaKE5g3KcOvVdLvrirAmm2HUVaSh/XldX5Zl/Xldfj9nCJMGREPi92NaJ0KK/9TIZVxXJSdgF+/272prrbVip217Xjps2q/89KqFfj+WAesTkHapDG7IAX5KVH0zp2Q85whQo2jLZ0BbdbKZubC4nBhWKQGyy7LhUGr9rsL9tg1hXj+00r84pIcGDQqtFscALrLw9Zur8JPL8xAaVEaWkw2PHZNIZb7BLFLS3Lxm3f3+mWd9zR04d2ddZiSnYSHfdbBh68qwD++rsX84nS/0cy1rVY894mn9/DO2vaACagKBiwtycXTWypwSX4SjrVZMTolCkfbzFjiXX9XzB0ru04fb7eiptUs3boPls0UgwHf/SWMAdNzhmFyVvwp181TZXbPNvNLmVgykEJ9p+K8DY7Fd+xmuwtj06KRmaDDmLRYqV1brEGD3145GoebjbhnVj5WbvW0ZpszMR1vfVuHRT8YIbV3mzMxHRXekgxfnncpdtx5WR7aTA58sKsBbRaH38L+8FUFWFqSC8aA0anRAdPnnvn4MJaW5Pp1rnjzm1rMnzQcyz/Yh5d/XoxfXpKD0SlR4EH6MUfr5Ushatss0nHE/6/ZLp9p/t2Hnk13XVYnbv9hjt80qEeuLsAft1agvLYTWrUCf5w/HnddPgpfH22DwIFfv7sH1xdn+GV0NpTX48nrxvr1/hRfmNotDunWB71zJ2RoaDc7kJscFbCxbc32Srx2yxQYbU6kxOoD1qblH+zDomnZ6LS68OY33ZuO81Oi8cKnVWi3ODAuPRYPfrAXta1WZCbosGrBeAic43CT0W9zm1gCsWlPA66ZMBz7Gzo90/QcLrQY7Xjhv1W470f5ARNNU2O0nuDbaMfolGj8fstBKTB+/NqxaDPZsGlPI2YXpgZMR43Ta6TnkFundRpVQLZLwQAGzzAKzuG3n0MMkMWWmHMmpPUpAD1VZrc/Mr+0npOBEuo7FedlcCxX2/VwaQGMNqeUUT3WZsHKrYekW3h3luRhWGQEwATMyB2Gpi4btBolXv55MerbrTjWbpVd2OraLFizrUra9PHijiN+C/sjH+7H0pJcCAKws7ZdNsBOjIzA6m3+t+vSYj0b//Y3dMLuErD3eCfGpcdi5fwiPP2fQ9L0J0+NGgtomi8GomL9nO/xbE530A0dAEOcToW/LCxGm8WBpKgIHGk2oqHDLj3u7rd3ST2SfTttzJmYLt3KbLc4MDEjFq/dMgXfH2vHBbF61Jw0Y+6kdGzcWU/t0QgZYmJ0ajQb7bJrT6vZDrPdjWPtlqBrk0GjxP0/yoc+QoXDJ7rw2KYDUjb4wQ/2YvGMkTDanDDZ3Vix5SDumZUf0A7O5hQwOiUKM/PH4UiLBas+9s9gO1wcJpsLxzu71/vUGK00sdR3T4fZ5sS44XHQaRS4+u3d+NWlOdJjxGOt3laJpSW54BxY/sG+gHKIh68qQKfFjoILogF4Xru2H2pCZZN/D+ZVC8Zj1ujkswoGTpXZDdfMbzhPLQ3nczvfhfr39bwMjo+eDCzUfmTTfrxx6xRkJuhw/4/yseI/FVhakotoXfctvOLMGMwvzsCfP92P0qI0xGiVKEiLQYRKgUiNEr+ZnS8N/xCzAq9/2b0x5NFNB6SNGeK4ZsY8G/ce/GAvrhqXJh9g+7wgiJmUFxdOQmaCDgat2m8B/91VBX6lGuJ5TBkRh6UluTA73OAcUoa25++Jp7OGTvY8Ci+IQWOHFRu/qw/IgPi2KbI5PV0mfM9XzOaIz7VqwXhpQwrn8KvVXlqSi5To8NykQQgJDQVj6LI6ZdeeYYYIREUISPTWHff8/Lj0WDy6ab/USvOxawpxy8WZ6LS5pXXpMe/6+/Ln1SibmYsorVLa2wF49ne0WxxQKxVwuLhUPwx0r2OLZ2TDEKFCbnKU353DnkHvY5sOYNWC8bhv427cWZKH4swY5KdE4bbp2dKxxLUyPU4v1S77ttvMSYrCH7dW4InrxkoBbk2rGdXNJlidbr/nWrZhFzaXTT/rYOBUmd1wy/yGc+/kcD63oSKUv6/nXXAsCDxoCQRnHL+8JAf17RZcX5wBq9PtV1d208XZ+OPWClxfnCENtlj0mvz444kZcfjNu3sDWu4oFQjINLzkDS637GvE8tIxfmUXj15TiGc+OhxwrieNdtw/e3RAkP+7D/dj8Yxsv4+t3laJF342CQCkOl+xdnlYlMavy8TDpZ4SiZ4ZjOWlYxBnUGHt9nrcNmMkqpqNfhtYfHdki62Uen7fJflJuHhkgt+i7Rbg9zMWz3fWmJT+/YcnhIQ1i9OFaJ06oEvEssvzoFQA/z3UiOyk6IA1Uqw5Fnsg+5ZaiIkIcXLd6JQoxOk1WF9ehztm5voNM1pakotYnQpgwEmTA7dNz8aOQ82YnpcklbSNSY1GnEENi8ON4+0WLJ6RjbQYnezrSVWzCbWtVvzJu1fjXp8EgG8JmcXRXaLhu1Fwycwc1LZaYbK5UNNqRlaCAa1me0BCRHwu8W5bOAWvoRbOvZPD+dzI2TvvguO6NrO3NZBC6kTBGJAVrwUXGB7+5348PW8c7n1nN26bni09JkqrRIJBjTtm5uKk0Y4HrhyD/cc7/QLEVR8dxsp546BQMBw9aZI2hoi0agXGD49FXlJUwHQ7Mbg02px+m90sdqfs8yRHa7HrWIfsotyzjZ/NKcDscCE70YBnb5iALpsTrSY7HG4BnANPzxuHhg4LLojV449bK1DbakVDh90vg/HU5oP43dVjcMXYVL8sr2/GWNyRLW6C8T3fCRlxsrulm43yO0pbTLaA6VGEkPOXTq3CQx/sx/xJw/HIVQXQR6jQ2GGBW+BoMzsxLS8FdW0WmO1OPD1vHJQKQMkUsLlcKK/tlJ5HvCuXEa/DvT/KQ6RGJd3Ry0zQYXnpGHDOcffbu2WSCBNx+9++kx57+4wcPLKpuxztyevGQq1k0KmVyEww4P/97TssmZkjm822uzx/Ly1Kw297jI8Ws9D5KdFID3KnjvPu3soHGruQlxSF1Bgt1vUozROfK1xbooVSOE8tDedzI2fvvAuOm7rssDicePnnxXC4BLQY7VArAZfAUNlkxP0/GgWlwvNLHBmhxE0XZeKtb+WzxDq1ElanGw+VjsHzn1ZhT0MXOICmTitGpUbh4asK/DauLfWWO8wvTg9aN2eyu6U+xQCkjhKrPjrsV4f2hy0V+MUl8ouyXKlEXasFEzNi8VlVK5IiNYjUqqU+zWKQe7zDImVffDMYK+aOhUbFEKvTYPW24JOX8pOj8NyNE9FqsvntGH/4qgIkRWrw9dHWgLqrc633JSEkNDptTtw4JRPPfNy91t11WR60KgaNWoEuqxOjUiLx8792d/NZXjoGRptTSnbcdFGmXylcz01v1xdn9Dq+/ru67oRDaVGaFBiLn3/gvb3Shr3fXV2Ie2blQaVkuOuyvIDzfvWLGgCQXk96HqsoLQYxejWitaqAWmFxn8ZvZufD5hL8Mty+CQnxuXKTInsd7nG+1r2G8+tHOJ8bOXvnTXAsCBxHT5phsjvBmBJ76julW3d//fkk1LdbEWfQoN3sAANDWUkOMuL1WLGlAqVFaQE1Zas+Ouy36Wx56Rh07jiCihNGPPdJFZbMzMHGnfV46aZimOwuHGjsknZFBxt9mpMUheMdFr/bhu0WB7QqhTTGWatSIMGgwSX5SWgx2fCQd5Kd76KsUyv8SiXEhXpYZATWbq/Cry7N8QvAxSD36XnjZM+rocOK22fkYHeQTLVSATx6dQGOtVvw772NmDsxXep5bNAoERmhxNwXvpStuzoXe18SQvpfrFYtdZvw7cwj3sm7d1Y+Wo0Ov3XrsU0H8MyC8Vg5vwjH2qwBpXBiRnjJpTmwetc58XNya53vUCbGuoNa3z0iEzNiMD49Bt/XtUPgwIc7G3DrxSOwtCQXiZERaDHZwcClHu8XZSdIwa3vsZxujrJ/7EK7xYG1N07ApiXTcKjZCC4Abi6gtCgNRrsLaz+pkk1I+PZpTonWyga8wepeZ41ORl275ZwPmMP59SOcz42cvfMiOBYXiBVbDuLxa8eiscOKUcmReHHhJFjsbigUCticbjR2WAHGcFePd/CKIO/8Bd69aDZ12fDUnLH4/eYK6ZZYWmwEmox21Laa/XZF7zjUjOWlY7Bux5HurhIp0VL2OTVGi5Xe9kHNRjs4B9Z+UiVlRsre+t7vFuGq+eMgANCqPAuuXqPw23wnNq/XeadM+S76vt+PwyUE1PP51sYFC57zvEH9ii2HAAAtpmrML07HpIxYxBs0uH7dV0HrrsJ1BzQhZGB12Z249eIRaPWOqVcyoKwkF3aXCw4XR/VJM0YMMyA1RuuXNT14ogtpsTooGYLW/6ZEa3HS3N0JQxw/7buvQuwm5EvMSIt7ROL0Ghg0Sr+a6LKZufjrF0dx96x8/P/2zjs8jvJa3O/ZvqqWLMldsuVeZNzozdiEGDCYXkNI4sThEgM3JJQUWqgBLi3wA3zBuSEQeg0xhJoYAhhsXHDBTbZluVuWZPWVdr/fHzO73pVWxbbKypz3efbR7sx8M2dH3549e75T7p5nlXC799wCbjx1OKk+Nze+tiyuXr3n3VWRCj6z/7aYF2cdxa9eskI9Zk+xHBjNebijk5uvmTqU7NT4rajjxb3+8d1V1AdD3GB3BOzOiWKJ/P2RyLIpB88hYRxv2F3F3E/Xc8O0kZRU1pGXlcz6nVXcE1VZ4rYzR9M/wx8JnYDWPao5KR5mTxkSUXpz5lvhFl6ng78v28KVJw3lyue+5qfH58eU/Zk2pg+vf725SUvnX548jLPH9yPJ6yLJ46RHkovH/rWOQINh1gn5TMjN4IpnF0XOc+Gk3EgB+bD32i3w+L+KOLWgT0zy3R1nFVBdZy0/RnuWo99P4e4qXvu6mJnH5ZOb6adoT03M8t2WsuomXyjXTB2Kz+MgPyclcs7S6gAjeqdx4rAcFmwoaTXuKtEyoBVF6XzSfG6q6yubJMn1SvPxXyfms7sqwK6KWi47Ki+mwUYwBLe8ZSUi761rpqRmaTVDc1Jj6gCH29f37+En1efmJTt8Lqzf/r50C3efU4Db4YjkiJwzoX8Tz3TYk7u1rCYi06Y9VnjaQ3biXONckug8jbH90vjpCYMp2lMTyWEJG+91DcFmHRL3nzeWFK8Ll0uatKKGfeEUjfXv+RMHRAzj8Hvozoliifz9kciyKQdHtzaOw8phw+5KzpkwIPIL+oZpw5souFveWsFtZ46OSdIDy8OwqaSqiVH421NHkJ3qi3iZw+d54P01PHrxeK49ZQSb91RHMp7D48Nlf2aftM+oDo998AMrVOO2t1dFYnWv+/5wiktrqA4E2VO1b0mxufJBs07IZ/KIHJLczsgy3/a9tVQHGnj600KenXkkW8uqm2SEh0MvtpXX8vSnhcw6Yd+yHVgKuaI2yNvLtkRaqvbp4WNARhJ59jLRvDi/kDXuSlGUtlBXH7IaLEWFVbzwVREDMkaQn5NCRlUAEwqxpbyO/546lK3lNWQmeXjCNqZDxtLXza1+/f70kXFC1pw8+MFaSqsDzDwuP6az3Nh+6RTtqWavXf8eml91czqsShZ5Pf2RhkfnTtyXWxKdSxJebXQ6oKBvOoOzkuMmOf/1i038+Jg8/nDmaG5+a0WMrt5cWk1NfZDjh2QxfkBGE29keLV09fa9Mfq3T7qP3um+Vh0WiqK0TLc1jqNjrR65aHwkLhcgM8kTVzn0sMMWoo3Ga6YOJT87hQ27K7n3vMMoKqlieK9UPG5Hs007yqrrmf18bEvmd5dvi3hkM5I89EqLr6Ci6wPf9vcVPHThOPKzUlhaXM7OvbURRdeckg4ZGN0nja1lNVTWBXnm8zWUVge4ZupQrpw8hNXb93L7P1aRkeSJfAlY3ZZMxOvx21NHRDKlGyeIXHR4LiWVdcz9bANzLz+CQVHKNN4vZI27UhSlLdSHgnFbRwdDISprGyivDiAOR0Q/5/X0c+O0kVx8RC7BUAif28m28loqausjOQ/RNd0zkz3c+89vue+8w1i9oyLGgwuW4RvdWe7e8w7j/vdWx6z8QfxY5RG90/h2Wzl/mDGGm99cHjln+NiwJzhcAjRel7xw3ePoJOde6X7yMv08ffkkPi/cg8/lwOdyRKpvzJlfGDckIhxOkZHkiXHsnD+pP5v3VKvDQlEOEkdXC3CgFO2pYlNJFbedMZpgyMQogiSvC5879q353A5CIRM3maNwVyX3vLOa619ZikOEO+atpKK2IZJY1/g8uyrrYs7xyEdrOX5YDk9/WkhWipfzJ/WnuLQ67tjG9YFXbrN++YuAASt72x4Xb7xDwOt2cN97q3ns43URwzg3M4l+GV4yU7yRZcXHPl7Hox+t45EP19E3I4nHL53ATaePpF+Gn4aQ4f7zDuPxS8fzws+OYnjvFK47ZQQAcz/bwA3TRjIoq3UDNxx3Ne/q43lh1pGRQvUad6UoSjR+t6vJatgjH63F43KS7HWRluSNeH3DYWW/fGkJD7y/hifnF+IQoU+6j798tgm/28lTnxRGdODVU4ZSW9/Az+0a7eF90UZsWCWF44+L7JCEsGHrczt4dVGxFUoWpYNvmj6KuZ+up7w2yLodldwwbSRXTx2C33Y0+NwOtpXX8uLCIu45Z2zcLnnnTNjXqbS2PsSoPqnMu/p4zhjbl3G5mfRO8/PUJ4XU1IcihnH42GtfWsLGkqqYexkuIxYOH5l5XD6zpwxhVJ80Xlq47/2E38NdUY1GFEVpnW7pOQ6FDF8XlfHwh1YCxe0zRsf8Ut4SJ6zgmqlDWbuzMq43Nq9nEldPHUIwROSX/47yWv6+dEvcdp9l1YGY7GaAYTnJPHrJBF78aiPfG9WXB95fEzd+N9xRD/ZlT1fVBSN1g/uk+5h5XD7DcpK58+yCSP3M8Pgkt5PiPdUxnpNnPt8UWTbMSnHH9RqkeF2keJ0M65VqtWL1umLCI8IhKlmpHr4/uvd+JRZo3JWiKK1RVl0fV//WB0MkuZ1UOOojHtZ4YWUPfrAm4nFNcjuZfdIQAsFQpNPc9LH9eHvZFsu726jKz7XfG8bg7GT+eE4BRaU1vPBlEdfYjohoA9PpsFbIwklw28trmTN/PRdOyuWjb7dz7sTcmFWye88dyztXH88OO9ysudq3EqVKfW4H/TP8MfrS6SDSYKotIRHR4WzR3vAXZx1NaXUgJnzEITAht2kNekVRmqdbGscbS6r47evfMCwnhSsmD6Gspp4HLxzHPe+sYlNJDc9/WcSvvjcsptxY/ww/63ZWNms4DstJpXB3FdedMoL73vuWdJ+bn58wmCfnr48ozXDFielj+8R0wPO5rS5Oby/byCmj+7K7oq6Jgkr2OOmX4Y+pDxxehpuU1yMiTzgm+KkfTuLpTwojXuEkj5O1Oyp4Yr5VKSK6OkYYEZgzfwN3nDWG37+xr730nWcXcMygnng8zsixA7NiDVk1cBVF6UiyU+K3hu6d7qOmoYFrX1oacSA0F1aWm+ln5nH5PDG/MOIVvvfcAn5yzKDItp//dRGPXjI+ov8dYlX6McBDH66NSUAOxyiH9e7VU4Zy61srIiFo9593GNPH9uPFhUXcdPqoSDhdWJ7rX13GP646nqPys2LeU+P3GO21vuOsMfRIcvP5+t2RMmvbymt55vNN/Pa0kW0KiWgunG10n7TI9rDB/MAF4+Im9CmK0jzd0jjesbeWjCQPFx4R+yv+jrMKqA40kJeZhNsJW8pqyU7xUlRazWuLipl5fD45ab4mBeRvePWbyNLcnPnrmXnsIKoCQZ6MU4ptzc5KRvdLb1L14qY3l/PgBeN4fXERlx+Tz+0zxnDTm8sjCura7w2DUIgHLxjHqu17I17qHx49kCSvMyb+97YzLU/46Yf1JSfVS30wRMgYBmQm88uThzIgMyluXU1joLQ6wJ7KOp78wUTqGkL0SvMyuk86Lle3jaBRFOUQwO+xdNstjZLPrntlKVecOISMJA8Pf7g2YtQ2V5O9cSJxcVkNyZ59X2W19SFWbq0AYEAPP0WlNTz+70IuPTI3YhgDvLVkC1dNHcb95x2GATaVVDVpvuF0CBNzezBlRDY7K+riGuzrdlZaXVh7Jsc1Wv/n/HHk9fQzuk8avdN8lNUG+P5Dn8QYtcN7pVJaHeCueauarDjGy+FoqYyYlhdTlINHjDGtH9VJTJo0ySxcuLDV4wp3VfLGki1xDcQ5l01k1l8XceXkITzw/pqY8IfhvVLYXWGVegs0WPG+Ly8sjolLm3lcPn63I6Ywe3jfrBPy7baiSVz53OImcv36lGFkp3rpl+FlS0kN2Wl+lhSX4XE68DiFvJ7JeFxCdcBKQNlVWcdzC4q48dThbN5TQ21DiIm5PSguraF3uo/V2ys4clAmlYF6qmqtFtHJHhdet7CppIb731vdJKHuqinDmJjbgzxViIrSqYjIImPMpK6WozNpq84GeGf5Nh7/eB2/+v5wFm0qJRiC174ujnhpw40vHr1kPDvKa/F5nE1KYUYnqzWu0x4eH9bVPpczpiTcY5dM4Bd/i2odfeKQJh1Ow42cYJ/OP2tcP/KzU1hQWMLlf/6yyfdCuIlJOHEOrNXNeMZp4a5KTnvkkybnePea41m5rSKSZHf+pP4M65XKyN5pDMpSXX4ocih3NuwutKSzu6XneGDPZAZnp8T9FV9eY8W1BYKhSDxZ2NNwzdQhPGkb1LOnDInE+UaPF4FAMBT33P17+KkJBEnzxY/rnZiXweaSKoJB4Za3V0XKxtWaEIEgOJ3Cfz23uMm4NTuqIkp9/CXjeerTQi46PBef28nLCzdx0eEDcTmChIxhzc4KXl5YjMclPP6DiQiGDL+H+lCIaWP2L1ZYURSls0jxulizs5KvNpY2q3t9bgeb91gNh/J6+nn0kgkEGoIU7qqKtGu+/7zD+LaZahThsIW+6T5+8/o3EcP46ilDefGrjcy9/HD2VAUIQaS8Wvj6Ya91uCtq2PA+ZnBP8rNT6JXmjZvLUlxaHUmcC9cSbi5ErbmY5O17a9Xj+x2iuc6GmsyeOHRL49jhEAZk+OMaqNmp3kjWcePlqcwkD7eeMZpb/74icny82LAJuRlx9/k8VtOOW6aParI8eNuZo1m7o4Kn/7OBmccOilw7bPReM3Uoj3ywNq5yfebzTfjcDn59ynD+8PZKrjhxCGXVAf76xUZ+cdJQ/F4HY/tbCRUbS6o4ZnBPVZ6KonQrUr1Wbfba+viNLxwCd51dQGVtPfeeW0CKz80jH6zhx8cOiqzk+dwOkjzOSAOk6PEjeqUy57JJHJPfE4dD+POPjmDH3lqSPE7qg/ucBxtLqnhjyZa4Rmq/dD+zpwxheK9U7pq3itLqQCTeNzczmaG9UmJimZPcTp6YXxgZ31ot4Zbqwmvex3eHeJ0Nu3OjlkORbhlWARAIBHlj2VZufjM28eyfy7dw8qi+3Pzm8kg75gEZSazaXsFrXxeTneLhKrszUUVdMGZZ7fYZY6isref1xVs4taBPkxai4TrARw7KpCpQj8vhZHdlHYIwZ/561uys5M6zCuiR5KKopJohOalUBxooqwkwKCuZbeV17CivIRA0BIIhJuVlkO53s7OijhSvi7r6IEleJ26Hgx0VdfRJ92m8sKJ0EzSsomVWbC1l/a5qtpfVkOxzx4RM3D5jDAMy/VTWNrCzoo7ymvpIFZ4/XTQen8dJRW09LnHw/JebOHxQzxjHx11nFzAhtwe5ma07DEIhwydrd/FzuxtpmHBox9OfFkb+NvbmhZfCN5VUsXhzWZOwvHmtGDfqMVQAPl+/m4v/d0GT7S/MOjImuVPpWFrS2d3WOAbLQF6wcQ+LN5cxNCeFzXuquOud1Tx52QTqGgxel1BRG2TznqpIOAVY5dJ+fEweYwf0oD5oqKprIN3v5n/e+5aFm8rxuR387rSR1AdDZKV4cYhQXFZNdSDIkJwUyqoC3PXOt5HYtVvPGE15TT17qgL0z0hi2ZZyHAJDclJ4fVExn2/Yw6OXTCDV68AhDvZUBeiZ4sXrEpK9bvUAK8ohgBrHLbO4aA87K2rxu11UB4Kk+92UVNWR5nMTNCEe+2gd15w8nN+/8Q2bSmoipTOdGMpq6rnrndWRc+X19POrU0awxg6vOGl4FpMG9myz3IuL9rByW0WTTnsvLizi2u8Np18PH5nJ3mZ188EYuWEDW8Mnvrs0F3ve2o8rpX055GKOw7hcDrxuBw2hEL98aUmk01GgwXD9K0uZfdIQHv14XZMuQqXVAZJ9bhYXlfHCV0XMGNePlxcWc86E/pwwrBdDc1IAw6rtFbyxeAuTR+QwODuF3mlevli3kzEDMplz2UQq64I4gAffX8OanZXcfXYBWSkehuaksH5XJXfP+9bKQD67gIwkF16XkxG90tQTrCjKdw8DO8rrqApUk5nkoSFo8HucpPvdrNpaztSRvdm5t4bpY/tZTZEMPPHvdVx0eC7De6XGVPS5cFIud89bFYkpPndCv/0SJd3vsSoTHZeP1+VgYFYy28uqeeSi8RT0a70m8MFUhdDwCUU7yyY+3dpzXLirkoUbS/C6XVzzwhL6pPu47Kg8XA4IGqipD0bqAUdXrRjRK5U77XiyO88uwO2A61/d12zjpumj6JPuxeN0UlodIN3vxuMU5v6nkLH9M8lJ9dIrzUeq30mgwbC7MkDPZA8pHieDs5LZWRVgx946qgMN5GYma7axonwHUM9xy3ywcjs3vbkiooeNsapV/P70kdTWN5DkcfGHt1fFlFsD+NPF4xjWK5mdFfXU1QfxuJzc9OY+7/KBhCVoeIPS1egKQtfTZZ5jEZkGPAw4gaeMMfe05/l37K3lwQ/Wcf/5Y2M6Hf3w6Dx6pXnxuPbVD47uIjTnson85rQRZKV4cTlhRfFe/veHk9hbU0+a341DoD4YImgMTnuyul0OZh0/hO0VdfRM9pDkdlJT30B2qp8jBvaMmdQD/Z4mTTYURVESnY7U2al+F6XVgSZ1inNSPYCX+mAw0iQpev+oPukMzklhuFUljVDI8OcfHXFQRoXWA1a6Gl1BSGw6bH1fRJzAY8CpwCjgYhEZ1Z7X6JXmo7Q6QEMwxM3TR0UM5Ic/XEtFTQOVNQFunzEmpsf8H84cTU19iC2lNfzmtWVU1jQwvE8a28trEWDT7kpKKgN4XQ68Tgd90/1kJLnJSPIyIS+T6WP7cvTgLA7LzeCowdkMzklRhaooSreno3W21+ngxmkjYvTxnWcV0BAK4XE6qKgNctfZBTH7H7hgHIOymjbAyM9O4aj8LPKzD1z/ttd5FEU59OhIz/ERwDpjTCGAiLwAzABWttcFwnE7f/poLT87Pj+m+9zczzbwi8lDyMvyM+eyiZTXNOByCPe8uyqyHHfHWWPo4fdQG2xgUFYy9cEQI/qkqQdBUZTvIh2qs4dkJ1FcWhtTCg0x7K0NkuRxkexzcNKwHMYN6KHeXEVRupSONI77AZujXhcDRzY+SERmAbMAcnNz9+sCkaWx3qnsrQkgIqT4XFTVNTB1RDZOh7Bjbx1+t5MBGT6MgdtnjKG2PsSgLKuRiCpeRVEUoIN1dorfx+RhmfTt4WNXRQCfx0Gqx4Xf4yBo4KiB2bhcDl1qVhSly+lI4zie1dkk+88YMweYA1Zyx/5eJLw0piiKohwUHa6zU/w+JuT5Dkw6RVGUTqIja4oVAwOiXvcHtnbg9RRFUZQDR3W2oigKHWscfwUMFZFBIuIBLgLe6sDrKYqiKAeO6mxFURQ6MKzCGNMgIrOBf2KVBZprjFnRUddTFEVRDhzV2YqiKBYdWufYGDMPmNeR11AURVHaB9XZiqIoHRtWoSiKoiiKoijdCjWOFUVRFEVRFMVGjWNFURRFURRFsVHjWFEURVEURVFs1DhWFEVRFEVRFBs1jhVFURRFURTFRozZ747NHYaI7AI2xdmVBezuZHEOBJWzfVE52xeVs31pLGeeMSa7q4TpClrQ2a3RHf7H3UFGUDnbG5WzfUlkOZvV2QllHDeHiCw0xkzqajlaQ+VsX1TO9kXlbF+6i5yJSHe4d91BRlA52xuVs33pLnI2RsMqFEVRFEVRFMVGjWNFURRFURRFsekuxvGcrhagjaic7YvK2b6onO1Ld5EzEekO9647yAgqZ3ujcrYv3UXOGLpFzLGiKIqiKIqidAbdxXOsKIqiKIqiKB1OQhvHIjJNRFaLyDoRubELrj9ARD4WkVUiskJErrG3Z4rI+yKy1v6bETXmN7a8q0Xk+1HbJ4rIN/a+R0RE2llWp4gsFpG3E1VG+xo9ROQVEfnWvq9HJ6KsIvJL+3++XESeFxFfIsgpInNFZKeILI/a1m5yiYhXRF60ty8QkYHtKOd99v99mYi8LiI9ElHOqH2/FhEjIlldLWd3QVrR2WLxiL1/mYhMaOvYTpbzUlu+ZSLymYgcFrVvo/2/XiIiC7tYzskiUm7LskREbm7r2E6W87ooGZeLSFBEMu19nXI/W/qs2/sTZW62JmeizM3W5EyIuXnAGGMS8gE4gfVAPuABlgKjOlmGPsAE+3kqsAYYBdwL3GhvvxH4o/18lC2nFxhky++0930JHA0I8A5wajvLei3wN+Bt+3XCyWhf4y/AT+3nHqBHoskK9AM2AH779UvAjxJBTuAEYAKwPGpbu8kFXAk8YT+/CHixHeU8BXDZz/+YqHLa2wcA/8Sq4ZvV1XJ2hwdt0NnAafb9EeAoYEFbx3aynMcAGfbzU8Ny2q83hudEAtzPydg6f3/HdqacjY4/A/ioC+5n3M96Is3NNsrZ5XOzjXJ2+dw8mEcie46PANYZYwqNMQHgBWBGZwpgjNlmjPnafl4BrMIynGZgGXnYf8+yn88AXjDG1BljNgDrgCNEpA+QZoz53Fiz45moMQeNiPQHTgeeitqcUDLacqZhfaCeBjDGBIwxZYkoK+AC/CLiApKArYkgpzFmPrCn0eb2lCv6XK8AU8Ne0IOV0xjznjGmwX75BdA/EeW0eRC4HohOyugyObsJbdHZM4BnjMUXQA/7/nWmvm/1WsaYz4wxpfbL6LnamRzMPUmo+9mIi4HnO0iWZmnhsx4mEeZmq3ImyNxsy/1sji637dpCIhvH/YDNUa+L7W1dgr0cOh5YAPQyxmwDy4AGcuzDmpO5n/288fb24iGsL/JQ1LZEkxGsX4q7gD+LFQLylIgkJ5qsxpgtwP1AEbANKDfGvJdockbRnnJFxtiGbDnQswNk/gmWlybh5BSRM4EtxpiljXYllJwJSFt0dkv3sLP0/f5eayb75ipYP5jeE5FFIjKrA+QL01Y5jxaRpSLyjoiM3s+x7UGbryUiScA04NWozZ11P1sjEebm/tJVc7OtdPXcPGBcXS1AC8TzrnRJaQ0RScH6MP+3MWZvC46f5mTusPciItOBncaYRSIyuS1DmpGlM+63C2sZ5ipjzAIReRgrDKA5ukRWsWJ2Z2AtnZcBL4vID1oa0ow8XT2HD0SuDpdZRH4HNADPtXLNTpfT/vL+HVYISJPdzVyzS+9nAtGW95oIn5U2X0tETsIyQI6L2nysMWariOQA74vIt7YXrSvk/BqrBW6liJwGvAEMbePY9mJ/rnUG8B9jTLTHsbPuZ2skwtxsM108N9tCIszNAyaRPcfFWHF/YfpjLW13KiLixjKMnzPGvGZv3mEvt2D/3Wlvb07mYmKXPtrzvRwLnCkiG7GWJ6aIyLMJJmOYYqDYGLPAfv0KlrGcaLKeDGwwxuwyxtQDr2HFeSWanGHaU67IGDukJJ0DWzqLi4hcDkwHLrVDEBJNzsFYP4qW2p+p/sDXItI7weRMRNqis1u6h52l79t0LREZixWqNsMYUxLebozZav/dCbyOtUzcJXIaY/YaYyrt5/MAt1gJpAl3P20uolFIRSfez9ZIhLnZJhJgbrZKgszNA8ckQOBzvAeWl7EQ64sqHLQ9upNlEKz4wYcabb+P2ASoe+3no4lN2ClkX8LOV1hB/uGEndM6QN7J7EvIS1QZPwGG289vteVMKFmBI4EVWLHGghUzelWiyAkMJDbRrd3kAn5BbALZS+0o5zRgJZDd6LiEkrPRvo3sS8jrUjkT/UEbdDZWbkR00tOXbR3byXLmYsWUH9NoezKQGvX8M2BaF8rZm339Co7ACgWTRLuf9nHhH4bJXXE/7Wu09Fnv8rnZRjm7fG62Uc4un5sH9d66WoBWbvxpWBUi1gO/64LrH4fl7l8GLLEfp2HFDH4IrLX/ZkaN+Z0t72qiKhMAk4Dl9r5Hw5OmneWdzD7jOFFlHAcstO/pG0BGIsoK3AZ8a1/jr1gGUZfLieV12QbUY/0Cn9mecgE+4GUs5fslkN+Ocq7DijULf5aeSEQ5G+3fSFT2d1fJ2V0exNHZwBXAFfZzAR6z938DTGppbBfK+RRQGjVXF9rb87G+zJdi/YDuajln23IsxUrOOqalsV0lp/36R1gJrdHjOu1+xvusJ+jcbE3ORJmbrcmZEHPzQB/aIU9RFEVRFEVRbBI55lhRFEVRFEVROhU1jhVFURRFURTFRo1jRVEURVEURbFR41hRFEVRFEVRbNQ4VhRFURRFUboFIjJXRHaKyPI2Hn+BiKwUkRUi8rc2jdFqFYqiKIqiKEp3QEROACqBZ4wxY1o5dijwEjDFGFMqIjnGapLSIuo5VrodIuIVkQ9EZImIXCgiv23DmEr7b18ReaWVY88UkZbaWiuKoijtwMHo8xb2DxSRS9pPSiWRMFZL7JhOoyIyWETeFZFFIvKJiIywd/0MeMwYU2qPbdUwBqtTiaJ0N8YDbmPMOIgoyrvaMtBY7TXPa+WYt4C3DlJGRVEUpXUOWJ+3wEDgEqBNS+jKIcEcrAYka0XkSOD/AVOAYQAi8h/ACdxqjHm3tZOpcawkBCKSjLX00R9rAt8OlAMPAbuBr7E6AP0EeBbIFpElWF3h/PbzFcaYS1u5zkCsLoJjRGQB8BNjzAp737+AXwEFWN2RZovI/wF7sTqg9QauN8a8IiIOrE5oJwIbsFZh5hpjWvRKK4qiHOp0oj4X4F7gVKxutncYY14E7gFG2uf5izHmwfZ9h0oiISIpwDHAy9aUAKyutmDZuUOxOgj3Bz4RkTHGmLKWzqnGsZIoTAO2GmNOBxCRdKx2vFOwWu++CNaSiIj8FPi1MWa6fWxl2Ouwn7wAXADcIiJ9gL7GmEUiUtDouD5YrcRHYHmUXwHOwfJOFAA5wCpg7gHIoCiKcqjRWfr8HGAccBiQBXwlIvOBG6PPqRzyOICyZuZNMfCFMaYe2CAiq7GM5a9aO6GiJALfACeLyB9F5HhgELDBGLPWWFmjz3bANV8CzrefXwC83MxxbxhjQsaYlUAve9txwMv29u3Axx0gn6IoSneks/T5ccDzxpigMWYH8G/g8HY6t9JNMMbsxTJ8zwdrRUFEDrN3vwGcZG/PwgqzKGztnGocKwmBMWYNMBFLqd4NnIm1TNaR19wClIjIWOBCLE9yPOqinkujv4qiKEoUnajPVQ9/BxGR54HPgeEiUiwiM4FLgZkishRYAcywD/8n1vf8Siwn1nXGmJLWrqFhFUpCICJ9gT3GmGfthIwrgEEiMtgYsx64uIXh9SLitpdN9pcXgOuBdGPMN/sx7lPgchH5C5CNFc+kyR+Konzn6UR9Ph/4ua2HM4ETgOuAfkDqwb0LJVExxjQ3f6bFOdYA19qPNqPGsZIoFAD3iUgIqAf+CyuG7B8ishvLGG2unuEcYJmIfN1aAkccXgEexkoY2R9eBaZixdGtARZgJZwoiqJ81+ksff46cDSwFMszfb0xZruIlAANthfx/zQhT9lftAmI0i0QkckkWIKFiKQYYypFpCfwJXCsHX+sKIqiNEMi6nNFiUY9x4py4LwtIj0AD3C7GsaKoiiK0v1Rz7FyyGB7cD+Ms2tqWwLwFUVRlMRA9bnSlahxrCiKoiiKoig2WspNURRFURRFUWzUOFYURVEURVEUGzWOFUVRFEVRFMVGjWNFURRFURRFsVHjWFEURVEURVFs/j9DOhTAEnUZRQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(12, 6))\n", + "plt.subplot(1, 2, 1)\n", + "sns.scatterplot(x='sqft_living', y='price', data=df)\n", + "plt.title('Price vs Sqft Living')\n", + "plt.subplot(1, 2, 2)\n", + "sns.scatterplot(x='sqft_lot', y='price', data=df)\n", + "plt.title('Price vs Sqft Lot')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### PRE-PROCESSING" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 21597 entries, 7129300520 to 1523300157\n", + "Data columns (total 20 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 date 21597 non-null object \n", + " 1 price 21597 non-null float64\n", + " 2 bedrooms 21597 non-null int64 \n", + " 3 bathrooms 21597 non-null float64\n", + " 4 sqft_living 21597 non-null int64 \n", + " 5 sqft_lot 21597 non-null int64 \n", + " 6 floors 21597 non-null float64\n", + " 7 waterfront 21597 non-null object \n", + " 8 view 21597 non-null object \n", + " 9 condition 21597 non-null object \n", + " 10 grade 21597 non-null object \n", + " 11 sqft_above 21597 non-null int64 \n", + " 12 sqft_basement 21597 non-null object \n", + " 13 yr_built 21597 non-null int64 \n", + " 14 yr_renovated 21597 non-null float64\n", + " 15 zipcode 21597 non-null int64 \n", + " 16 lat 21597 non-null float64\n", + " 17 long 21597 non-null float64\n", + " 18 sqft_living15 21597 non-null int64 \n", + " 19 sqft_lot15 21597 non-null int64 \n", + "dtypes: float64(6), int64(8), object(6)\n", + "memory usage: 4.1+ MB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
datepricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongradesqft_abovesqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15
id
71293005202014-10-13221900.031.00118056501.0NONONEAverage7 Average11800.019550.09817847.5112-122.25713405650
64141001922014-12-09538000.032.25257072422.0NONONEAverage7 Average2170400.019511991.09812547.7210-122.31916907639
56315004002015-02-25180000.021.00770100001.0NONONEAverage6 Low Average7700.019330.09802847.7379-122.23327208062
24872008752014-12-09604000.043.00196050001.0NONONEVery Good7 Average1050910.019650.09813647.5208-122.39313605000
19544005102015-02-18510000.032.00168080801.0NONONEAverage8 Good16800.019870.09807447.6168-122.04518007503
...............................................................
2630000182014-05-21360000.032.50153011313.0NONONEAverage8 Good15300.020090.09810347.6993-122.34615301509
66000601202015-02-23400000.042.50231058132.0NONONEAverage8 Good23100.020140.09814647.5107-122.36218307200
15233001412014-06-23402101.020.75102013502.0NONONEAverage7 Average10200.020090.09814447.5944-122.29910202007
2913101002015-01-16400000.032.50160023882.0NONONEAverage8 Good16000.020040.09802747.5345-122.06914101287
15233001572014-10-15325000.020.75102010762.0NONONEAverage7 Average10200.020080.09814447.5941-122.29910201357
\n", + "

21597 rows × 20 columns

\n", + "
" + ], + "text/plain": [ + " date price bedrooms bathrooms sqft_living sqft_lot \\\n", + "id \n", + "7129300520 2014-10-13 221900.0 3 1.00 1180 5650 \n", + "6414100192 2014-12-09 538000.0 3 2.25 2570 7242 \n", + "5631500400 2015-02-25 180000.0 2 1.00 770 10000 \n", + "2487200875 2014-12-09 604000.0 4 3.00 1960 5000 \n", + "1954400510 2015-02-18 510000.0 3 2.00 1680 8080 \n", + "... ... ... ... ... ... ... \n", + "263000018 2014-05-21 360000.0 3 2.50 1530 1131 \n", + "6600060120 2015-02-23 400000.0 4 2.50 2310 5813 \n", + "1523300141 2014-06-23 402101.0 2 0.75 1020 1350 \n", + "291310100 2015-01-16 400000.0 3 2.50 1600 2388 \n", + "1523300157 2014-10-15 325000.0 2 0.75 1020 1076 \n", + "\n", + " floors waterfront view condition grade sqft_above \\\n", + "id \n", + "7129300520 1.0 NO NONE Average 7 Average 1180 \n", + "6414100192 2.0 NO NONE Average 7 Average 2170 \n", + "5631500400 1.0 NO NONE Average 6 Low Average 770 \n", + "2487200875 1.0 NO NONE Very Good 7 Average 1050 \n", + "1954400510 1.0 NO NONE Average 8 Good 1680 \n", + "... ... ... ... ... ... ... \n", + "263000018 3.0 NO NONE Average 8 Good 1530 \n", + "6600060120 2.0 NO NONE Average 8 Good 2310 \n", + "1523300141 2.0 NO NONE Average 7 Average 1020 \n", + "291310100 2.0 NO NONE Average 8 Good 1600 \n", + "1523300157 2.0 NO NONE Average 7 Average 1020 \n", + "\n", + " sqft_basement yr_built yr_renovated zipcode lat long \\\n", + "id \n", + "7129300520 0.0 1955 0.0 98178 47.5112 -122.257 \n", + "6414100192 400.0 1951 1991.0 98125 47.7210 -122.319 \n", + "5631500400 0.0 1933 0.0 98028 47.7379 -122.233 \n", + "2487200875 910.0 1965 0.0 98136 47.5208 -122.393 \n", + "1954400510 0.0 1987 0.0 98074 47.6168 -122.045 \n", + "... ... ... ... ... ... ... \n", + "263000018 0.0 2009 0.0 98103 47.6993 -122.346 \n", + "6600060120 0.0 2014 0.0 98146 47.5107 -122.362 \n", + "1523300141 0.0 2009 0.0 98144 47.5944 -122.299 \n", + "291310100 0.0 2004 0.0 98027 47.5345 -122.069 \n", + "1523300157 0.0 2008 0.0 98144 47.5941 -122.299 \n", + "\n", + " sqft_living15 sqft_lot15 \n", + "id \n", + "7129300520 1340 5650 \n", + "6414100192 1690 7639 \n", + "5631500400 2720 8062 \n", + "2487200875 1360 5000 \n", + "1954400510 1800 7503 \n", + "... ... ... \n", + "263000018 1530 1509 \n", + "6600060120 1830 7200 \n", + "1523300141 1020 2007 \n", + "291310100 1410 1287 \n", + "1523300157 1020 1357 \n", + "\n", + "[21597 rows x 20 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Converting date to datetime format \n", + "df['date'] = pd.to_datetime(df['date'])\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
datepricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongradesqft_abovesqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15
id
71293005202014-10-13221900.031.00118056501.0NONONEAverage7 Average11800.019550.09817847.5112-122.25713405650
64141001922014-12-09538000.032.25257072422.0NONONEAverage7 Average2170400.019511.09812547.7210-122.31916907639
56315004002015-02-25180000.021.00770100001.0NONONEAverage6 Low Average7700.019330.09802847.7379-122.23327208062
24872008752014-12-09604000.043.00196050001.0NONONEVery Good7 Average1050910.019650.09813647.5208-122.39313605000
19544005102015-02-18510000.032.00168080801.0NONONEAverage8 Good16800.019870.09807447.6168-122.04518007503
...............................................................
2630000182014-05-21360000.032.50153011313.0NONONEAverage8 Good15300.020090.09810347.6993-122.34615301509
66000601202015-02-23400000.042.50231058132.0NONONEAverage8 Good23100.020140.09814647.5107-122.36218307200
15233001412014-06-23402101.020.75102013502.0NONONEAverage7 Average10200.020090.09814447.5944-122.29910202007
2913101002015-01-16400000.032.50160023882.0NONONEAverage8 Good16000.020040.09802747.5345-122.06914101287
15233001572014-10-15325000.020.75102010762.0NONONEAverage7 Average10200.020080.09814447.5941-122.29910201357
\n", + "

21597 rows × 20 columns

\n", + "
" + ], + "text/plain": [ + " date price bedrooms bathrooms sqft_living sqft_lot \\\n", + "id \n", + "7129300520 2014-10-13 221900.0 3 1.00 1180 5650 \n", + "6414100192 2014-12-09 538000.0 3 2.25 2570 7242 \n", + "5631500400 2015-02-25 180000.0 2 1.00 770 10000 \n", + "2487200875 2014-12-09 604000.0 4 3.00 1960 5000 \n", + "1954400510 2015-02-18 510000.0 3 2.00 1680 8080 \n", + "... ... ... ... ... ... ... \n", + "263000018 2014-05-21 360000.0 3 2.50 1530 1131 \n", + "6600060120 2015-02-23 400000.0 4 2.50 2310 5813 \n", + "1523300141 2014-06-23 402101.0 2 0.75 1020 1350 \n", + "291310100 2015-01-16 400000.0 3 2.50 1600 2388 \n", + "1523300157 2014-10-15 325000.0 2 0.75 1020 1076 \n", + "\n", + " floors waterfront view condition grade sqft_above \\\n", + "id \n", + "7129300520 1.0 NO NONE Average 7 Average 1180 \n", + "6414100192 2.0 NO NONE Average 7 Average 2170 \n", + "5631500400 1.0 NO NONE Average 6 Low Average 770 \n", + "2487200875 1.0 NO NONE Very Good 7 Average 1050 \n", + "1954400510 1.0 NO NONE Average 8 Good 1680 \n", + "... ... ... ... ... ... ... \n", + "263000018 3.0 NO NONE Average 8 Good 1530 \n", + "6600060120 2.0 NO NONE Average 8 Good 2310 \n", + "1523300141 2.0 NO NONE Average 7 Average 1020 \n", + "291310100 2.0 NO NONE Average 8 Good 1600 \n", + "1523300157 2.0 NO NONE Average 7 Average 1020 \n", + "\n", + " sqft_basement yr_built yr_renovated zipcode lat long \\\n", + "id \n", + "7129300520 0.0 1955 0.0 98178 47.5112 -122.257 \n", + "6414100192 400.0 1951 1.0 98125 47.7210 -122.319 \n", + "5631500400 0.0 1933 0.0 98028 47.7379 -122.233 \n", + "2487200875 910.0 1965 0.0 98136 47.5208 -122.393 \n", + "1954400510 0.0 1987 0.0 98074 47.6168 -122.045 \n", + "... ... ... ... ... ... ... \n", + "263000018 0.0 2009 0.0 98103 47.6993 -122.346 \n", + "6600060120 0.0 2014 0.0 98146 47.5107 -122.362 \n", + "1523300141 0.0 2009 0.0 98144 47.5944 -122.299 \n", + "291310100 0.0 2004 0.0 98027 47.5345 -122.069 \n", + "1523300157 0.0 2008 0.0 98144 47.5941 -122.299 \n", + "\n", + " sqft_living15 sqft_lot15 \n", + "id \n", + "7129300520 1340 5650 \n", + "6414100192 1690 7639 \n", + "5631500400 2720 8062 \n", + "2487200875 1360 5000 \n", + "1954400510 1800 7503 \n", + "... ... ... \n", + "263000018 1530 1509 \n", + "6600060120 1830 7200 \n", + "1523300141 1020 2007 \n", + "291310100 1410 1287 \n", + "1523300157 1020 1357 \n", + "\n", + "[21597 rows x 20 columns]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Convert any houses that have been renovated to '1' to indicate true and any houses that have not been renovated to '0' to indicate false.\n", + "df['yr_renovated'] = df['yr_renovated'].apply(lambda x: 1 if x > 0 else x)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 21597 entries, 7129300520 to 1523300157\n", + "Data columns (total 20 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 date 21597 non-null datetime64[ns]\n", + " 1 price 21597 non-null float64 \n", + " 2 bedrooms 21597 non-null int64 \n", + " 3 bathrooms 21597 non-null float64 \n", + " 4 sqft_living 21597 non-null int64 \n", + " 5 sqft_lot 21597 non-null int64 \n", + " 6 floors 21597 non-null float64 \n", + " 7 waterfront 21597 non-null object \n", + " 8 view 21597 non-null object \n", + " 9 condition 21597 non-null object \n", + " 10 grade 21597 non-null object \n", + " 11 sqft_above 21597 non-null int64 \n", + " 12 sqft_basement 21597 non-null object \n", + " 13 yr_built 21597 non-null int64 \n", + " 14 yr_renovated 21597 non-null float64 \n", + " 15 zipcode 21597 non-null int64 \n", + " 16 lat 21597 non-null float64 \n", + " 17 long 21597 non-null float64 \n", + " 18 sqft_living15 21597 non-null int64 \n", + " 19 sqft_lot15 21597 non-null int64 \n", + "dtypes: datetime64[ns](1), float64(6), int64(8), object(5)\n", + "memory usage: 4.1+ MB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['0.0', '400.0', '910.0', '1530.0', '?', '730.0', '1700.0', '300.0',\n", + " '970.0', '760.0', '720.0', '700.0', '820.0', '780.0', '790.0',\n", + " '330.0', '1620.0', '360.0', '588.0', '1510.0', '410.0', '990.0',\n", + " '600.0', '560.0', '550.0', '1000.0', '1600.0', '500.0', '1040.0',\n", + " '880.0', '1010.0', '240.0', '265.0', '290.0', '800.0', '540.0',\n", + " '710.0', '840.0', '380.0', '770.0', '480.0', '570.0', '1490.0',\n", + " '620.0', '1250.0', '1270.0', '120.0', '650.0', '180.0', '1130.0',\n", + " '450.0', '1640.0', '1460.0', '1020.0', '1030.0', '750.0', '640.0',\n", + " '1070.0', '490.0', '1310.0', '630.0', '2000.0', '390.0', '430.0',\n", + " '850.0', '210.0', '1430.0', '1950.0', '440.0', '220.0', '1160.0',\n", + " '860.0', '580.0', '2060.0', '1820.0', '1180.0', '200.0', '1150.0',\n", + " '1200.0', '680.0', '530.0', '1450.0', '1170.0', '1080.0', '960.0',\n", + " '280.0', '870.0', '1100.0', '460.0', '1400.0', '660.0', '1220.0',\n", + " '900.0', '420.0', '1580.0', '1380.0', '475.0', '690.0', '270.0',\n", + " '350.0', '935.0', '1370.0', '980.0', '1470.0', '160.0', '950.0',\n", + " '50.0', '740.0', '1780.0', '1900.0', '340.0', '470.0', '370.0',\n", + " '140.0', '1760.0', '130.0', '520.0', '890.0', '1110.0', '150.0',\n", + " '1720.0', '810.0', '190.0', '1290.0', '670.0', '1800.0', '1120.0',\n", + " '1810.0', '60.0', '1050.0', '940.0', '310.0', '930.0', '1390.0',\n", + " '610.0', '1830.0', '1300.0', '510.0', '1330.0', '1590.0', '920.0',\n", + " '1320.0', '1420.0', '1240.0', '1960.0', '1560.0', '2020.0',\n", + " '1190.0', '2110.0', '1280.0', '250.0', '2390.0', '1230.0', '170.0',\n", + " '830.0', '1260.0', '1410.0', '1340.0', '590.0', '1500.0', '1140.0',\n", + " '260.0', '100.0', '320.0', '1480.0', '1060.0', '1284.0', '1670.0',\n", + " '1350.0', '2570.0', '1090.0', '110.0', '2500.0', '90.0', '1940.0',\n", + " '1550.0', '2350.0', '2490.0', '1481.0', '1360.0', '1135.0',\n", + " '1520.0', '1850.0', '1660.0', '2130.0', '2600.0', '1690.0',\n", + " '243.0', '1210.0', '1024.0', '1798.0', '1610.0', '1440.0',\n", + " '1570.0', '1650.0', '704.0', '1910.0', '1630.0', '2360.0',\n", + " '1852.0', '2090.0', '2400.0', '1790.0', '2150.0', '230.0', '70.0',\n", + " '1680.0', '2100.0', '3000.0', '1870.0', '1710.0', '2030.0',\n", + " '875.0', '1540.0', '2850.0', '2170.0', '506.0', '906.0', '145.0',\n", + " '2040.0', '784.0', '1750.0', '374.0', '518.0', '2720.0', '2730.0',\n", + " '1840.0', '3480.0', '2160.0', '1920.0', '2330.0', '1860.0',\n", + " '2050.0', '4820.0', '1913.0', '80.0', '2010.0', '3260.0', '2200.0',\n", + " '415.0', '1730.0', '652.0', '2196.0', '1930.0', '515.0', '40.0',\n", + " '2080.0', '2580.0', '1548.0', '1740.0', '235.0', '861.0', '1890.0',\n", + " '2220.0', '792.0', '2070.0', '4130.0', '2250.0', '2240.0',\n", + " '1990.0', '768.0', '2550.0', '435.0', '1008.0', '2300.0', '2610.0',\n", + " '666.0', '3500.0', '172.0', '1816.0', '2190.0', '1245.0', '1525.0',\n", + " '1880.0', '862.0', '946.0', '1281.0', '414.0', '2180.0', '276.0',\n", + " '1248.0', '602.0', '516.0', '176.0', '225.0', '1275.0', '266.0',\n", + " '283.0', '65.0', '2310.0', '10.0', '1770.0', '2120.0', '295.0',\n", + " '207.0', '915.0', '556.0', '417.0', '143.0', '508.0', '2810.0',\n", + " '20.0', '274.0', '248.0'], dtype=object)" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['sqft_basement'].unique()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "sqft_basement has a '?' value, let's replace it with a 0" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
datepricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongradesqft_abovesqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15
id
71293005202014-10-13221900.031.00118056501.0NONONEAverage7 Average11800.019550.09817847.5112-122.25713405650
64141001922014-12-09538000.032.25257072422.0NONONEAverage7 Average2170400.019511.09812547.7210-122.31916907639
56315004002015-02-25180000.021.00770100001.0NONONEAverage6 Low Average7700.019330.09802847.7379-122.23327208062
24872008752014-12-09604000.043.00196050001.0NONONEVery Good7 Average1050910.019650.09813647.5208-122.39313605000
19544005102015-02-18510000.032.00168080801.0NONONEAverage8 Good16800.019870.09807447.6168-122.04518007503
...............................................................
2630000182014-05-21360000.032.50153011313.0NONONEAverage8 Good15300.020090.09810347.6993-122.34615301509
66000601202015-02-23400000.042.50231058132.0NONONEAverage8 Good23100.020140.09814647.5107-122.36218307200
15233001412014-06-23402101.020.75102013502.0NONONEAverage7 Average10200.020090.09814447.5944-122.29910202007
2913101002015-01-16400000.032.50160023882.0NONONEAverage8 Good16000.020040.09802747.5345-122.06914101287
15233001572014-10-15325000.020.75102010762.0NONONEAverage7 Average10200.020080.09814447.5941-122.29910201357
\n", + "

21597 rows × 20 columns

\n", + "
" + ], + "text/plain": [ + " date price bedrooms bathrooms sqft_living sqft_lot \\\n", + "id \n", + "7129300520 2014-10-13 221900.0 3 1.00 1180 5650 \n", + "6414100192 2014-12-09 538000.0 3 2.25 2570 7242 \n", + "5631500400 2015-02-25 180000.0 2 1.00 770 10000 \n", + "2487200875 2014-12-09 604000.0 4 3.00 1960 5000 \n", + "1954400510 2015-02-18 510000.0 3 2.00 1680 8080 \n", + "... ... ... ... ... ... ... \n", + "263000018 2014-05-21 360000.0 3 2.50 1530 1131 \n", + "6600060120 2015-02-23 400000.0 4 2.50 2310 5813 \n", + "1523300141 2014-06-23 402101.0 2 0.75 1020 1350 \n", + "291310100 2015-01-16 400000.0 3 2.50 1600 2388 \n", + "1523300157 2014-10-15 325000.0 2 0.75 1020 1076 \n", + "\n", + " floors waterfront view condition grade sqft_above \\\n", + "id \n", + "7129300520 1.0 NO NONE Average 7 Average 1180 \n", + "6414100192 2.0 NO NONE Average 7 Average 2170 \n", + "5631500400 1.0 NO NONE Average 6 Low Average 770 \n", + "2487200875 1.0 NO NONE Very Good 7 Average 1050 \n", + "1954400510 1.0 NO NONE Average 8 Good 1680 \n", + "... ... ... ... ... ... ... \n", + "263000018 3.0 NO NONE Average 8 Good 1530 \n", + "6600060120 2.0 NO NONE Average 8 Good 2310 \n", + "1523300141 2.0 NO NONE Average 7 Average 1020 \n", + "291310100 2.0 NO NONE Average 8 Good 1600 \n", + "1523300157 2.0 NO NONE Average 7 Average 1020 \n", + "\n", + " sqft_basement yr_built yr_renovated zipcode lat long \\\n", + "id \n", + "7129300520 0.0 1955 0.0 98178 47.5112 -122.257 \n", + "6414100192 400.0 1951 1.0 98125 47.7210 -122.319 \n", + "5631500400 0.0 1933 0.0 98028 47.7379 -122.233 \n", + "2487200875 910.0 1965 0.0 98136 47.5208 -122.393 \n", + "1954400510 0.0 1987 0.0 98074 47.6168 -122.045 \n", + "... ... ... ... ... ... ... \n", + "263000018 0.0 2009 0.0 98103 47.6993 -122.346 \n", + "6600060120 0.0 2014 0.0 98146 47.5107 -122.362 \n", + "1523300141 0.0 2009 0.0 98144 47.5944 -122.299 \n", + "291310100 0.0 2004 0.0 98027 47.5345 -122.069 \n", + "1523300157 0.0 2008 0.0 98144 47.5941 -122.299 \n", + "\n", + " sqft_living15 sqft_lot15 \n", + "id \n", + "7129300520 1340 5650 \n", + "6414100192 1690 7639 \n", + "5631500400 2720 8062 \n", + "2487200875 1360 5000 \n", + "1954400510 1800 7503 \n", + "... ... ... \n", + "263000018 1530 1509 \n", + "6600060120 1830 7200 \n", + "1523300141 1020 2007 \n", + "291310100 1410 1287 \n", + "1523300157 1020 1357 \n", + "\n", + "[21597 rows x 20 columns]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Convert sqft_basement to int and replace ? with 0\n", + "df['sqft_basement'] = df['sqft_basement'].replace({'?':np.nan}).astype(float)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
datepricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewcondition...sqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15month_of_dateyear_of_date
id
71293005202014-10-13221900.031.00118056501.0NONONEAverage...0.019550.09817847.5112-122.25713405650102014
64141001922014-12-09538000.032.25257072422.0NONONEAverage...400.019511.09812547.7210-122.31916907639122014
56315004002015-02-25180000.021.00770100001.0NONONEAverage...0.019330.09802847.7379-122.2332720806222015
24872008752014-12-09604000.043.00196050001.0NONONEVery Good...910.019650.09813647.5208-122.39313605000122014
19544005102015-02-18510000.032.00168080801.0NONONEAverage...0.019870.09807447.6168-122.0451800750322015
..................................................................
2630000182014-05-21360000.032.50153011313.0NONONEAverage...0.020090.09810347.6993-122.3461530150952014
66000601202015-02-23400000.042.50231058132.0NONONEAverage...0.020140.09814647.5107-122.3621830720022015
15233001412014-06-23402101.020.75102013502.0NONONEAverage...0.020090.09814447.5944-122.2991020200762014
2913101002015-01-16400000.032.50160023882.0NONONEAverage...0.020040.09802747.5345-122.0691410128712015
15233001572014-10-15325000.020.75102010762.0NONONEAverage...0.020080.09814447.5941-122.29910201357102014
\n", + "

21597 rows × 22 columns

\n", + "
" + ], + "text/plain": [ + " date price bedrooms bathrooms sqft_living sqft_lot \\\n", + "id \n", + "7129300520 2014-10-13 221900.0 3 1.00 1180 5650 \n", + "6414100192 2014-12-09 538000.0 3 2.25 2570 7242 \n", + "5631500400 2015-02-25 180000.0 2 1.00 770 10000 \n", + "2487200875 2014-12-09 604000.0 4 3.00 1960 5000 \n", + "1954400510 2015-02-18 510000.0 3 2.00 1680 8080 \n", + "... ... ... ... ... ... ... \n", + "263000018 2014-05-21 360000.0 3 2.50 1530 1131 \n", + "6600060120 2015-02-23 400000.0 4 2.50 2310 5813 \n", + "1523300141 2014-06-23 402101.0 2 0.75 1020 1350 \n", + "291310100 2015-01-16 400000.0 3 2.50 1600 2388 \n", + "1523300157 2014-10-15 325000.0 2 0.75 1020 1076 \n", + "\n", + " floors waterfront view condition ... sqft_basement yr_built \\\n", + "id ... \n", + "7129300520 1.0 NO NONE Average ... 0.0 1955 \n", + "6414100192 2.0 NO NONE Average ... 400.0 1951 \n", + "5631500400 1.0 NO NONE Average ... 0.0 1933 \n", + "2487200875 1.0 NO NONE Very Good ... 910.0 1965 \n", + "1954400510 1.0 NO NONE Average ... 0.0 1987 \n", + "... ... ... ... ... ... ... ... \n", + "263000018 3.0 NO NONE Average ... 0.0 2009 \n", + "6600060120 2.0 NO NONE Average ... 0.0 2014 \n", + "1523300141 2.0 NO NONE Average ... 0.0 2009 \n", + "291310100 2.0 NO NONE Average ... 0.0 2004 \n", + "1523300157 2.0 NO NONE Average ... 0.0 2008 \n", + "\n", + " yr_renovated zipcode lat long sqft_living15 \\\n", + "id \n", + "7129300520 0.0 98178 47.5112 -122.257 1340 \n", + "6414100192 1.0 98125 47.7210 -122.319 1690 \n", + "5631500400 0.0 98028 47.7379 -122.233 2720 \n", + "2487200875 0.0 98136 47.5208 -122.393 1360 \n", + "1954400510 0.0 98074 47.6168 -122.045 1800 \n", + "... ... ... ... ... ... \n", + "263000018 0.0 98103 47.6993 -122.346 1530 \n", + "6600060120 0.0 98146 47.5107 -122.362 1830 \n", + "1523300141 0.0 98144 47.5944 -122.299 1020 \n", + "291310100 0.0 98027 47.5345 -122.069 1410 \n", + "1523300157 0.0 98144 47.5941 -122.299 1020 \n", + "\n", + " sqft_lot15 month_of_date year_of_date \n", + "id \n", + "7129300520 5650 10 2014 \n", + "6414100192 7639 12 2014 \n", + "5631500400 8062 2 2015 \n", + "2487200875 5000 12 2014 \n", + "1954400510 7503 2 2015 \n", + "... ... ... ... \n", + "263000018 1509 5 2014 \n", + "6600060120 7200 2 2015 \n", + "1523300141 2007 6 2014 \n", + "291310100 1287 1 2015 \n", + "1523300157 1357 10 2014 \n", + "\n", + "[21597 rows x 22 columns]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Retrieve the month and year from the date column.\n", + "df['month_of_date'] = pd.DatetimeIndex(df['date']).month\n", + "df['year_of_date'] = pd.DatetimeIndex(df['date']).year\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongrade...sqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15month_of_dateyear_of_date
id
7129300520221900.031.00118056501.0NONONEAverage7 Average...0.019550.09817847.5112-122.25713405650102014
6414100192538000.032.25257072422.0NONONEAverage7 Average...400.019511.09812547.7210-122.31916907639122014
5631500400180000.021.00770100001.0NONONEAverage6 Low Average...0.019330.09802847.7379-122.2332720806222015
2487200875604000.043.00196050001.0NONONEVery Good7 Average...910.019650.09813647.5208-122.39313605000122014
1954400510510000.032.00168080801.0NONONEAverage8 Good...0.019870.09807447.6168-122.0451800750322015
..................................................................
263000018360000.032.50153011313.0NONONEAverage8 Good...0.020090.09810347.6993-122.3461530150952014
6600060120400000.042.50231058132.0NONONEAverage8 Good...0.020140.09814647.5107-122.3621830720022015
1523300141402101.020.75102013502.0NONONEAverage7 Average...0.020090.09814447.5944-122.2991020200762014
291310100400000.032.50160023882.0NONONEAverage8 Good...0.020040.09802747.5345-122.0691410128712015
1523300157325000.020.75102010762.0NONONEAverage7 Average...0.020080.09814447.5941-122.29910201357102014
\n", + "

21597 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " price bedrooms bathrooms sqft_living sqft_lot floors \\\n", + "id \n", + "7129300520 221900.0 3 1.00 1180 5650 1.0 \n", + "6414100192 538000.0 3 2.25 2570 7242 2.0 \n", + "5631500400 180000.0 2 1.00 770 10000 1.0 \n", + "2487200875 604000.0 4 3.00 1960 5000 1.0 \n", + "1954400510 510000.0 3 2.00 1680 8080 1.0 \n", + "... ... ... ... ... ... ... \n", + "263000018 360000.0 3 2.50 1530 1131 3.0 \n", + "6600060120 400000.0 4 2.50 2310 5813 2.0 \n", + "1523300141 402101.0 2 0.75 1020 1350 2.0 \n", + "291310100 400000.0 3 2.50 1600 2388 2.0 \n", + "1523300157 325000.0 2 0.75 1020 1076 2.0 \n", + "\n", + " waterfront view condition grade ... sqft_basement \\\n", + "id ... \n", + "7129300520 NO NONE Average 7 Average ... 0.0 \n", + "6414100192 NO NONE Average 7 Average ... 400.0 \n", + "5631500400 NO NONE Average 6 Low Average ... 0.0 \n", + "2487200875 NO NONE Very Good 7 Average ... 910.0 \n", + "1954400510 NO NONE Average 8 Good ... 0.0 \n", + "... ... ... ... ... ... ... \n", + "263000018 NO NONE Average 8 Good ... 0.0 \n", + "6600060120 NO NONE Average 8 Good ... 0.0 \n", + "1523300141 NO NONE Average 7 Average ... 0.0 \n", + "291310100 NO NONE Average 8 Good ... 0.0 \n", + "1523300157 NO NONE Average 7 Average ... 0.0 \n", + "\n", + " yr_built yr_renovated zipcode lat long sqft_living15 \\\n", + "id \n", + "7129300520 1955 0.0 98178 47.5112 -122.257 1340 \n", + "6414100192 1951 1.0 98125 47.7210 -122.319 1690 \n", + "5631500400 1933 0.0 98028 47.7379 -122.233 2720 \n", + "2487200875 1965 0.0 98136 47.5208 -122.393 1360 \n", + "1954400510 1987 0.0 98074 47.6168 -122.045 1800 \n", + "... ... ... ... ... ... ... \n", + "263000018 2009 0.0 98103 47.6993 -122.346 1530 \n", + "6600060120 2014 0.0 98146 47.5107 -122.362 1830 \n", + "1523300141 2009 0.0 98144 47.5944 -122.299 1020 \n", + "291310100 2004 0.0 98027 47.5345 -122.069 1410 \n", + "1523300157 2008 0.0 98144 47.5941 -122.299 1020 \n", + "\n", + " sqft_lot15 month_of_date year_of_date \n", + "id \n", + "7129300520 5650 10 2014 \n", + "6414100192 7639 12 2014 \n", + "5631500400 8062 2 2015 \n", + "2487200875 5000 12 2014 \n", + "1954400510 7503 2 2015 \n", + "... ... ... ... \n", + "263000018 1509 5 2014 \n", + "6600060120 7200 2 2015 \n", + "1523300141 2007 6 2014 \n", + "291310100 1287 1 2015 \n", + "1523300157 1357 10 2014 \n", + "\n", + "[21597 rows x 21 columns]" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Drop the date column.\n", + "df.drop(columns=['date'], inplace=True)\n", + "df\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Average', 'Very Good', 'Good', 'Poor', 'Fair'], dtype=object)" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Inspecting the condition column\n", + "df['condition'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongrade...sqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15month_of_dateyear_of_date
id
7129300520221900.031.00118056501.0NONONE37 Average...0.019550.09817847.5112-122.25713405650102014
6414100192538000.032.25257072422.0NONONE37 Average...400.019511.09812547.7210-122.31916907639122014
5631500400180000.021.00770100001.0NONONE36 Low Average...0.019330.09802847.7379-122.2332720806222015
2487200875604000.043.00196050001.0NONONE17 Average...910.019650.09813647.5208-122.39313605000122014
1954400510510000.032.00168080801.0NONONE38 Good...0.019870.09807447.6168-122.0451800750322015
\n", + "

5 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " price bedrooms bathrooms sqft_living sqft_lot floors \\\n", + "id \n", + "7129300520 221900.0 3 1.00 1180 5650 1.0 \n", + "6414100192 538000.0 3 2.25 2570 7242 2.0 \n", + "5631500400 180000.0 2 1.00 770 10000 1.0 \n", + "2487200875 604000.0 4 3.00 1960 5000 1.0 \n", + "1954400510 510000.0 3 2.00 1680 8080 1.0 \n", + "\n", + " waterfront view condition grade ... sqft_basement \\\n", + "id ... \n", + "7129300520 NO NONE 3 7 Average ... 0.0 \n", + "6414100192 NO NONE 3 7 Average ... 400.0 \n", + "5631500400 NO NONE 3 6 Low Average ... 0.0 \n", + "2487200875 NO NONE 1 7 Average ... 910.0 \n", + "1954400510 NO NONE 3 8 Good ... 0.0 \n", + "\n", + " yr_built yr_renovated zipcode lat long sqft_living15 \\\n", + "id \n", + "7129300520 1955 0.0 98178 47.5112 -122.257 1340 \n", + "6414100192 1951 1.0 98125 47.7210 -122.319 1690 \n", + "5631500400 1933 0.0 98028 47.7379 -122.233 2720 \n", + "2487200875 1965 0.0 98136 47.5208 -122.393 1360 \n", + "1954400510 1987 0.0 98074 47.6168 -122.045 1800 \n", + "\n", + " sqft_lot15 month_of_date year_of_date \n", + "id \n", + "7129300520 5650 10 2014 \n", + "6414100192 7639 12 2014 \n", + "5631500400 8062 2 2015 \n", + "2487200875 5000 12 2014 \n", + "1954400510 7503 2 2015 \n", + "\n", + "[5 rows x 21 columns]" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Mapping conditions with the respective number\n", + "# Ratings mapping\n", + "ratings_mapping = {\n", + " 'Average': 3,\n", + " 'Very Good': 1,\n", + " 'Good': 2,\n", + " 'Poor': 4,\n", + " 'Fair': 5\n", + "}\n", + "\n", + "# Replace categorical values with numerical values\n", + "df['condition'] = df['condition'].replace(ratings_mapping)\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['NO', 'YES'], dtype=object)" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Inspecting the waterfront column\n", + "df['waterfront'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongrade...sqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15month_of_dateyear_of_date
id
7129300520221900.031.00118056501.00NONE37 Average...0.019550.09817847.5112-122.25713405650102014
6414100192538000.032.25257072422.00NONE37 Average...400.019511.09812547.7210-122.31916907639122014
5631500400180000.021.00770100001.00NONE36 Low Average...0.019330.09802847.7379-122.2332720806222015
2487200875604000.043.00196050001.00NONE17 Average...910.019650.09813647.5208-122.39313605000122014
1954400510510000.032.00168080801.00NONE38 Good...0.019870.09807447.6168-122.0451800750322015
\n", + "

5 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " price bedrooms bathrooms sqft_living sqft_lot floors \\\n", + "id \n", + "7129300520 221900.0 3 1.00 1180 5650 1.0 \n", + "6414100192 538000.0 3 2.25 2570 7242 2.0 \n", + "5631500400 180000.0 2 1.00 770 10000 1.0 \n", + "2487200875 604000.0 4 3.00 1960 5000 1.0 \n", + "1954400510 510000.0 3 2.00 1680 8080 1.0 \n", + "\n", + " waterfront view condition grade ... sqft_basement \\\n", + "id ... \n", + "7129300520 0 NONE 3 7 Average ... 0.0 \n", + "6414100192 0 NONE 3 7 Average ... 400.0 \n", + "5631500400 0 NONE 3 6 Low Average ... 0.0 \n", + "2487200875 0 NONE 1 7 Average ... 910.0 \n", + "1954400510 0 NONE 3 8 Good ... 0.0 \n", + "\n", + " yr_built yr_renovated zipcode lat long sqft_living15 \\\n", + "id \n", + "7129300520 1955 0.0 98178 47.5112 -122.257 1340 \n", + "6414100192 1951 1.0 98125 47.7210 -122.319 1690 \n", + "5631500400 1933 0.0 98028 47.7379 -122.233 2720 \n", + "2487200875 1965 0.0 98136 47.5208 -122.393 1360 \n", + "1954400510 1987 0.0 98074 47.6168 -122.045 1800 \n", + "\n", + " sqft_lot15 month_of_date year_of_date \n", + "id \n", + "7129300520 5650 10 2014 \n", + "6414100192 7639 12 2014 \n", + "5631500400 8062 2 2015 \n", + "2487200875 5000 12 2014 \n", + "1954400510 7503 2 2015 \n", + "\n", + "[5 rows x 21 columns]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Mapping waterfront with the respective number \n", + "# Replacing YES with 1 and NO with 0\n", + "df['waterfront'] = df['waterfront'].astype(str).replace({'YES': 1, 'NO': 0})\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['NONE', 'GOOD', 'EXCELLENT', 'AVERAGE', 'FAIR'], dtype=object)" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Inspecting the view column\n", + "df['view'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongrade...sqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15month_of_dateyear_of_date
id
7129300520221900.031.00118056501.00037 Average...0.019550.09817847.5112-122.25713405650102014
6414100192538000.032.25257072422.00037 Average...400.019511.09812547.7210-122.31916907639122014
5631500400180000.021.00770100001.00036 Low Average...0.019330.09802847.7379-122.2332720806222015
2487200875604000.043.00196050001.00017 Average...910.019650.09813647.5208-122.39313605000122014
1954400510510000.032.00168080801.00038 Good...0.019870.09807447.6168-122.0451800750322015
\n", + "

5 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " price bedrooms bathrooms sqft_living sqft_lot floors \\\n", + "id \n", + "7129300520 221900.0 3 1.00 1180 5650 1.0 \n", + "6414100192 538000.0 3 2.25 2570 7242 2.0 \n", + "5631500400 180000.0 2 1.00 770 10000 1.0 \n", + "2487200875 604000.0 4 3.00 1960 5000 1.0 \n", + "1954400510 510000.0 3 2.00 1680 8080 1.0 \n", + "\n", + " waterfront view condition grade ... sqft_basement \\\n", + "id ... \n", + "7129300520 0 0 3 7 Average ... 0.0 \n", + "6414100192 0 0 3 7 Average ... 400.0 \n", + "5631500400 0 0 3 6 Low Average ... 0.0 \n", + "2487200875 0 0 1 7 Average ... 910.0 \n", + "1954400510 0 0 3 8 Good ... 0.0 \n", + "\n", + " yr_built yr_renovated zipcode lat long sqft_living15 \\\n", + "id \n", + "7129300520 1955 0.0 98178 47.5112 -122.257 1340 \n", + "6414100192 1951 1.0 98125 47.7210 -122.319 1690 \n", + "5631500400 1933 0.0 98028 47.7379 -122.233 2720 \n", + "2487200875 1965 0.0 98136 47.5208 -122.393 1360 \n", + "1954400510 1987 0.0 98074 47.6168 -122.045 1800 \n", + "\n", + " sqft_lot15 month_of_date year_of_date \n", + "id \n", + "7129300520 5650 10 2014 \n", + "6414100192 7639 12 2014 \n", + "5631500400 8062 2 2015 \n", + "2487200875 5000 12 2014 \n", + "1954400510 7503 2 2015 \n", + "\n", + "[5 rows x 21 columns]" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Define the mappings\n", + "quality_mapping = {\n", + " 'NONE': 0,\n", + " 'GOOD': 1,\n", + " 'EXCELLENT': 2,\n", + " 'AVERAGE': 3,\n", + " 'FAIR': 4\n", + "}\n", + "\n", + "# Replace the values using the mapping\n", + "df['view'] = df['view'].replace(quality_mapping)\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['7 Average', '6 Low Average', '8 Good', '11 Excellent', '9 Better',\n", + " '5 Fair', '10 Very Good', '12 Luxury', '4 Low', '3 Poor',\n", + " '13 Mansion'], dtype=object)" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Inspecting the grade column\n", + "df['grade'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongrade...sqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15month_of_dateyear_of_date
id
7129300520221900.031.00118056501.00037...0.019550.09817847.5112-122.25713405650102014
6414100192538000.032.25257072422.00037...400.019511.09812547.7210-122.31916907639122014
5631500400180000.021.00770100001.00036...0.019330.09802847.7379-122.2332720806222015
2487200875604000.043.00196050001.00017...910.019650.09813647.5208-122.39313605000122014
1954400510510000.032.00168080801.00038...0.019870.09807447.6168-122.0451800750322015
..................................................................
263000018360000.032.50153011313.00038...0.020090.09810347.6993-122.3461530150952014
6600060120400000.042.50231058132.00038...0.020140.09814647.5107-122.3621830720022015
1523300141402101.020.75102013502.00037...0.020090.09814447.5944-122.2991020200762014
291310100400000.032.50160023882.00038...0.020040.09802747.5345-122.0691410128712015
1523300157325000.020.75102010762.00037...0.020080.09814447.5941-122.29910201357102014
\n", + "

21597 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " price bedrooms bathrooms sqft_living sqft_lot floors \\\n", + "id \n", + "7129300520 221900.0 3 1.00 1180 5650 1.0 \n", + "6414100192 538000.0 3 2.25 2570 7242 2.0 \n", + "5631500400 180000.0 2 1.00 770 10000 1.0 \n", + "2487200875 604000.0 4 3.00 1960 5000 1.0 \n", + "1954400510 510000.0 3 2.00 1680 8080 1.0 \n", + "... ... ... ... ... ... ... \n", + "263000018 360000.0 3 2.50 1530 1131 3.0 \n", + "6600060120 400000.0 4 2.50 2310 5813 2.0 \n", + "1523300141 402101.0 2 0.75 1020 1350 2.0 \n", + "291310100 400000.0 3 2.50 1600 2388 2.0 \n", + "1523300157 325000.0 2 0.75 1020 1076 2.0 \n", + "\n", + " waterfront view condition grade ... sqft_basement yr_built \\\n", + "id ... \n", + "7129300520 0 0 3 7 ... 0.0 1955 \n", + "6414100192 0 0 3 7 ... 400.0 1951 \n", + "5631500400 0 0 3 6 ... 0.0 1933 \n", + "2487200875 0 0 1 7 ... 910.0 1965 \n", + "1954400510 0 0 3 8 ... 0.0 1987 \n", + "... ... ... ... ... ... ... ... \n", + "263000018 0 0 3 8 ... 0.0 2009 \n", + "6600060120 0 0 3 8 ... 0.0 2014 \n", + "1523300141 0 0 3 7 ... 0.0 2009 \n", + "291310100 0 0 3 8 ... 0.0 2004 \n", + "1523300157 0 0 3 7 ... 0.0 2008 \n", + "\n", + " yr_renovated zipcode lat long sqft_living15 \\\n", + "id \n", + "7129300520 0.0 98178 47.5112 -122.257 1340 \n", + "6414100192 1.0 98125 47.7210 -122.319 1690 \n", + "5631500400 0.0 98028 47.7379 -122.233 2720 \n", + "2487200875 0.0 98136 47.5208 -122.393 1360 \n", + "1954400510 0.0 98074 47.6168 -122.045 1800 \n", + "... ... ... ... ... ... \n", + "263000018 0.0 98103 47.6993 -122.346 1530 \n", + "6600060120 0.0 98146 47.5107 -122.362 1830 \n", + "1523300141 0.0 98144 47.5944 -122.299 1020 \n", + "291310100 0.0 98027 47.5345 -122.069 1410 \n", + "1523300157 0.0 98144 47.5941 -122.299 1020 \n", + "\n", + " sqft_lot15 month_of_date year_of_date \n", + "id \n", + "7129300520 5650 10 2014 \n", + "6414100192 7639 12 2014 \n", + "5631500400 8062 2 2015 \n", + "2487200875 5000 12 2014 \n", + "1954400510 7503 2 2015 \n", + "... ... ... ... \n", + "263000018 1509 5 2014 \n", + "6600060120 7200 2 2015 \n", + "1523300141 2007 6 2014 \n", + "291310100 1287 1 2015 \n", + "1523300157 1357 10 2014 \n", + "\n", + "[21597 rows x 21 columns]" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Define the mappings\n", + "rating_mapping = {\n", + " 'Average': 7,\n", + " 'Low Average': 6,\n", + " 'Good': 8,\n", + " 'Excellent': 11,\n", + " 'Better': 9,\n", + " 'Fair': 5,\n", + " 'Very Good': 10,\n", + " 'Luxury': 12,\n", + " 'Low': 4,\n", + " 'Poor': 3,\n", + " 'Mansion': 13\n", + "}\n", + "\n", + "# Extract the rating string and replace with the corresponding numerical value\n", + "df['grade'] = df['grade'].str.extract('(\\d+)').astype(int)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 21597 entries, 7129300520 to 1523300157\n", + "Data columns (total 21 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 price 21597 non-null float64\n", + " 1 bedrooms 21597 non-null int64 \n", + " 2 bathrooms 21597 non-null float64\n", + " 3 sqft_living 21597 non-null int64 \n", + " 4 sqft_lot 21597 non-null int64 \n", + " 5 floors 21597 non-null float64\n", + " 6 waterfront 21597 non-null int64 \n", + " 7 view 21597 non-null int64 \n", + " 8 condition 21597 non-null int64 \n", + " 9 grade 21597 non-null int64 \n", + " 10 sqft_above 21597 non-null int64 \n", + " 11 sqft_basement 21143 non-null float64\n", + " 12 yr_built 21597 non-null int64 \n", + " 13 yr_renovated 21597 non-null float64\n", + " 14 zipcode 21597 non-null int64 \n", + " 15 lat 21597 non-null float64\n", + " 16 long 21597 non-null float64\n", + " 17 sqft_living15 21597 non-null int64 \n", + " 18 sqft_lot15 21597 non-null int64 \n", + " 19 month_of_date 21597 non-null int64 \n", + " 20 year_of_date 21597 non-null int64 \n", + "dtypes: float64(7), int64(14)\n", + "memory usage: 4.2 MB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "sqft_living 0.701917\n", + "grade 0.667951\n", + "sqft_above 0.605368\n", + "sqft_living15 0.585241\n", + "bathrooms 0.525906\n", + "sqft_basement 0.325008\n", + "bedrooms 0.308787\n", + "lat 0.306692\n", + "view 0.290620\n", + "waterfront 0.264306\n", + "floors 0.256804\n", + "yr_renovated 0.117543\n", + "sqft_lot 0.089876\n", + "sqft_lot15 0.082845\n", + "yr_built 0.053953\n", + "zipcode 0.053402\n", + "condition 0.040742\n", + "long 0.022036\n", + "month_of_date 0.009928\n", + "year_of_date 0.003727\n", + "Name: price, dtype: float64" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Checking the correlation between price (target) and predictors\n", + "df.corr()['price'].drop(['price']).map(abs).sort_values(ascending=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "sqft_living, grade, sqft_above have the highest correlation with the target while year_of_date, month_of_date and long have the lowest correlation with the target." + ] + }, + { + "cell_type": "code", + "execution_count": 40, "metadata": {}, "outputs": [], "source": [ - "# Your code here - remember to use markdown cells for comments as well!" + "# Identfying Numeric and categorical columns\n", + "numeric = ['bedrooms', \n", + " 'bathrooms', \n", + " 'sqft_living', \n", + " 'sqft_lot', \n", + " 'sqft_above', \n", + " 'sqft_basement',\n", + " 'lat', \n", + " 'long',\n", + " 'sqft_living15', \n", + " 'sqft_lot15']\n", + "\n", + "categorical = ['floors',\n", + " 'waterfront', \n", + " 'view', \n", + " 'condition', \n", + " 'grade',\n", + " 'yr_renovated',\n", + " 'zipcode',\n", + " 'month_of_date']" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
pricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontviewconditiongrade...sqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15month_of_dateyear_of_date
0221900.031.00118056501.00037...0.019550.09817847.5112-122.25713405650102014
1538000.032.25257072422.00037...400.019511.09812547.7210-122.31916907639122014
2180000.021.00770100001.00036...0.019330.09802847.7379-122.2332720806222015
3604000.043.00196050001.00017...910.019650.09813647.5208-122.39313605000122014
4510000.032.00168080801.00038...0.019870.09807447.6168-122.0451800750322015
..................................................................
21592360000.032.50153011313.00038...0.020090.09810347.6993-122.3461530150952014
21593400000.042.50231058132.00038...0.020140.09814647.5107-122.3621830720022015
21594402101.020.75102013502.00037...0.020090.09814447.5944-122.2991020200762014
21595400000.032.50160023882.00038...0.020040.09802747.5345-122.0691410128712015
21596325000.020.75102010762.00037...0.020080.09814447.5941-122.29910201357102014
\n", + "

21597 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " price bedrooms bathrooms sqft_living sqft_lot floors \\\n", + "0 221900.0 3 1.00 1180 5650 1.0 \n", + "1 538000.0 3 2.25 2570 7242 2.0 \n", + "2 180000.0 2 1.00 770 10000 1.0 \n", + "3 604000.0 4 3.00 1960 5000 1.0 \n", + "4 510000.0 3 2.00 1680 8080 1.0 \n", + "... ... ... ... ... ... ... \n", + "21592 360000.0 3 2.50 1530 1131 3.0 \n", + "21593 400000.0 4 2.50 2310 5813 2.0 \n", + "21594 402101.0 2 0.75 1020 1350 2.0 \n", + "21595 400000.0 3 2.50 1600 2388 2.0 \n", + "21596 325000.0 2 0.75 1020 1076 2.0 \n", + "\n", + " waterfront view condition grade ... sqft_basement yr_built \\\n", + "0 0 0 3 7 ... 0.0 1955 \n", + "1 0 0 3 7 ... 400.0 1951 \n", + "2 0 0 3 6 ... 0.0 1933 \n", + "3 0 0 1 7 ... 910.0 1965 \n", + "4 0 0 3 8 ... 0.0 1987 \n", + "... ... ... ... ... ... ... ... \n", + "21592 0 0 3 8 ... 0.0 2009 \n", + "21593 0 0 3 8 ... 0.0 2014 \n", + "21594 0 0 3 7 ... 0.0 2009 \n", + "21595 0 0 3 8 ... 0.0 2004 \n", + "21596 0 0 3 7 ... 0.0 2008 \n", + "\n", + " yr_renovated zipcode lat long sqft_living15 sqft_lot15 \\\n", + "0 0.0 98178 47.5112 -122.257 1340 5650 \n", + "1 1.0 98125 47.7210 -122.319 1690 7639 \n", + "2 0.0 98028 47.7379 -122.233 2720 8062 \n", + "3 0.0 98136 47.5208 -122.393 1360 5000 \n", + "4 0.0 98074 47.6168 -122.045 1800 7503 \n", + "... ... ... ... ... ... ... \n", + "21592 0.0 98103 47.6993 -122.346 1530 1509 \n", + "21593 0.0 98146 47.5107 -122.362 1830 7200 \n", + "21594 0.0 98144 47.5944 -122.299 1020 2007 \n", + "21595 0.0 98027 47.5345 -122.069 1410 1287 \n", + "21596 0.0 98144 47.5941 -122.299 1020 1357 \n", + "\n", + " month_of_date year_of_date \n", + "0 10 2014 \n", + "1 12 2014 \n", + "2 2 2015 \n", + "3 12 2014 \n", + "4 2 2015 \n", + "... ... ... \n", + "21592 5 2014 \n", + "21593 2 2015 \n", + "21594 6 2014 \n", + "21595 1 2015 \n", + "21596 10 2014 \n", + "\n", + "[21597 rows x 21 columns]" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#reset index and dropping the id column\n", + "df.reset_index(inplace=True, drop=True)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 21597 entries, 0 to 21596\n", + "Data columns (total 21 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 price 21597 non-null float64\n", + " 1 bedrooms 21597 non-null int64 \n", + " 2 bathrooms 21597 non-null float64\n", + " 3 sqft_living 21597 non-null int64 \n", + " 4 sqft_lot 21597 non-null int64 \n", + " 5 floors 21597 non-null float64\n", + " 6 waterfront 21597 non-null int64 \n", + " 7 view 21597 non-null int64 \n", + " 8 condition 21597 non-null int64 \n", + " 9 grade 21597 non-null int64 \n", + " 10 sqft_above 21597 non-null int64 \n", + " 11 sqft_basement 21143 non-null float64\n", + " 12 yr_built 21597 non-null int64 \n", + " 13 yr_renovated 21597 non-null float64\n", + " 14 zipcode 21597 non-null int64 \n", + " 15 lat 21597 non-null float64\n", + " 16 long 21597 non-null float64\n", + " 17 sqft_living15 21597 non-null int64 \n", + " 18 sqft_lot15 21597 non-null int64 \n", + " 19 month_of_date 21597 non-null int64 \n", + " 20 year_of_date 21597 non-null int64 \n", + "dtypes: float64(7), int64(14)\n", + "memory usage: 3.5 MB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### MODELLING" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "***1. Linear Regression model***\n", + "\n", + "We will pick **`sqft_living` - Square footage of living space in the home** to be used to create our linear regression model because it has the most correlation with the price and it has the most linear scatter plor hence a good candidate." ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "learn-env", "language": "python", "name": "python3" }, @@ -40,7 +5222,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.8.5" } }, "nbformat": 4,