{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "73898b7a", "metadata": {}, "outputs": [], "source": [ "from bs4 import BeautifulSoup\n", "import requests\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import plotly.express as px ### To create interactive plots in python\n", "import chart_studio\n", "username ='janice.gbedemah' ### An account needs to be created online to retrieve API keys\n", "api_key = '7fuMphA2ExbPtpp9j3Bv'\n", "chart_studio.tools.set_credentials_file(username=username,api_key=api_key)\n", "import chart_studio.plotly as py\n", "import chart_studio.tools as tls" ] }, { "cell_type": "code", "execution_count": 2, "id": "49d01bc5", "metadata": {}, "outputs": [], "source": [ "alberta_data = {'address':[], 'bedroom': [], 'bathroom':[], 'price':[]}\n", "ontario_data = {'address':[], 'bedroom': [], 'bathroom':[], 'price':[]}\n", "BC_data = {'address':[], 'bedroom': [], 'bathroom':[], 'price':[]}" ] }, { "cell_type": "code", "execution_count": 3, "id": "3e87652a", "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", "
addressbedroombathroomprice
0618 5 Avenue ...1 Bed1 Bath$1,399 CA...
19721 92 Ave.,...1 Bed1 Bath$999 CAD ...
210717 107 Str...Studio1 Bath$699 CAD ...
36707 Elbow Dr...Studio1 Bath$1,050 CA...
43011 James Mo...2 Beds2 Baths$1,429 CA...
\n", "
" ], "text/plain": [ " address bedroom bathroom \\\n", "0 618 5 Avenue ... 1 Bed 1 Bath \n", "1 9721 92 Ave.,... 1 Bed 1 Bath \n", "2 10717 107 Str... Studio 1 Bath \n", "3 6707 Elbow Dr... Studio 1 Bath \n", "4 3011 James Mo... 2 Beds 2 Baths \n", "\n", " price \n", "0 $1,399 CA... \n", "1 $999 CAD ... \n", "2 $699 CAD ... \n", "3 $1,050 CA... \n", "4 $1,429 CA... " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## SCRAPING LISTINGS IN ALBERTA\n", "for i in range(1,54): ## TO loop through all the url pages from page 1 to 53\n", " url='https://apartmentlove.com/apartments-for-rent/alberta/canada/apartment/page'+str(i)\n", " page = requests.get(url) ## requesting to have access/connection to that page from the url\n", " soup = BeautifulSoup(page.content, 'html.parser') ## used to parse the html imformation from that page\n", " lists = soup.find_all('div', class_=\"property-details\")## The parent class for all the information for each listing\n", " for list in lists:\n", " address = list.find('div', class_='property-details-heading').h3.a.text.replace(\"\\n\",\" \")\n", " bedroom = list.find('ul', class_='d-flex').li.text.replace(\"\\n\",\" \")\n", " bathroom = list.find('i', class_='bath-icon').next_sibling ## to extract the first string/text next to a tag/element \n", " price = list.find('span', class_='price-text').text.replace(\"\\n\",\" \")\n", " if address:\n", " alberta_data['address'].append(address)\n", " if bedroom:\n", " alberta_data['bedroom'].append(bedroom)\n", " if bathroom:\n", " alberta_data['bathroom'].append(bathroom)\n", " if price:\n", " alberta_data['price'].append(price) \n", "alberta = pd.DataFrame(alberta_data)\n", "alberta.head(5)" ] }, { "cell_type": "code", "execution_count": 5, "id": "0f540caa", "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", "
addressbedroombathroomprice
0185 Lyon Stre...1 Bed1 Bath$1,900 CA...
150 Prince Art...1 Bed1 Bath$1,800 CA...
22 Quebec Stre...1 Bed1 Bath$1,580 CA...
3Klaskamp, Han...1 Bed1 Bath$980 CAD ...
460 Conway Dr....1 Bed1 Bath$1,359 CA...
\n", "
" ], "text/plain": [ " address bedroom bathroom \\\n", "0 185 Lyon Stre... 1 Bed 1 Bath \n", "1 50 Prince Art... 1 Bed 1 Bath \n", "2 2 Quebec Stre... 1 Bed 1 Bath \n", "3 Klaskamp, Han... 1 Bed 1 Bath \n", "4 60 Conway Dr.... 1 Bed 1 Bath \n", "\n", " price \n", "0 $1,900 CA... \n", "1 $1,800 CA... \n", "2 $1,580 CA... \n", "3 $980 CAD ... \n", "4 $1,359 CA... " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## SCRAPING LISTINGS IN ONTARIO\n", "for j in range(1,9):\n", " url2 = 'https://apartmentlove.com/apartments-for-rent/ontario/canada/apartment/page'+str(j)\n", " page2 = requests.get(url2)\n", " soup2 = BeautifulSoup(page2.content, \"html.parser\")\n", " lists2 = soup2.find_all('div', class_=\"property-details\")\n", " for list in lists2:\n", " address2 = list.find('div', class_='property-details-heading').h3.a.text.replace(\"\\n\",\" \")\n", " bedroom2 = list.find('ul', class_='d-flex').li.text.replace(\"\\n\",\" \")\n", " bathroom2= list.find('i', class_='bath-icon').next_sibling ## to extract the first string/text next to a tag/element \n", " price2 = list.find('span', class_='price-text').text.replace(\"\\n\",\" \")\n", " if address2:\n", " ontario_data['address'].append(address2)\n", " if bedroom:\n", " ontario_data['bedroom'].append(bedroom2)\n", " if bathroom:\n", " ontario_data['bathroom'].append(bathroom2)\n", " if price:\n", " ontario_data['price'].append(price2) \n", "ontario = pd.DataFrame(ontario_data)\n", "ontario.head(5)" ] }, { "cell_type": "code", "execution_count": 6, "id": "96428266", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(156, 4)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ontario.shape" ] }, { "cell_type": "code", "execution_count": 7, "id": "fa0cca89", "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", "
addressbedroombathroomprice
0610 Granville...1 Bed1 Bath$1,650 CA...
1828 Howe Stre...1 Bed1 Bath$1,650 CA...
2833 Seymour S...1 Bed1 Bath$1,400 CA...
3Alexander Str...1 Bed1 Bath$1,600 CA...
4928 Homer Str...1 Bed1 Bath$1,400 CA...
\n", "
" ], "text/plain": [ " address bedroom bathroom \\\n", "0 610 Granville... 1 Bed 1 Bath \n", "1 828 Howe Stre... 1 Bed 1 Bath \n", "2 833 Seymour S... 1 Bed 1 Bath \n", "3 Alexander Str... 1 Bed 1 Bath \n", "4 928 Homer Str... 1 Bed 1 Bath \n", "\n", " price \n", "0 $1,650 CA... \n", "1 $1,650 CA... \n", "2 $1,400 CA... \n", "3 $1,600 CA... \n", "4 $1,400 CA... " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## SCRAPING LISTINGS IN BRITISH COLUMBIA\n", "for k in range(1,7):\n", " url3 = 'https://apartmentlove.com/apartments-for-rent/british-columbia/canada/apartment/page'+str(k)\n", " page3 = requests.get(url3)\n", " soup3 = BeautifulSoup(page3.content, \"html.parser\")\n", " lists3 = soup3.find_all('div', class_=\"property-details\")\n", " for list in lists3:\n", " address3 = list.find('div', class_='property-details-heading').h3.a.text.replace(\"\\n\",\" \")\n", " bedroom3 = list.find('ul', class_='d-flex').li.text.replace(\"\\n\",\" \")\n", " bathroom3= list.find('i', class_='bath-icon').next_sibling ## to extract the first string/text next to a tag/element \n", " price3 = list.find('span', class_='price-text').text.replace(\"\\n\",\" \")\n", " if address3:\n", " BC_data['address'].append(address3)\n", " if bedroom:\n", " BC_data['bedroom'].append(bedroom3)\n", " if bathroom:\n", " BC_data['bathroom'].append(bathroom3)\n", " if price:\n", " BC_data['price'].append(price3) \n", "BC = pd.DataFrame(BC_data)\n", "BC.head(5)" ] }, { "cell_type": "code", "execution_count": 8, "id": "eeb3724d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(144, 4)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "BC.shape" ] }, { "cell_type": "code", "execution_count": 9, "id": "a32f488e", "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", "
addressbedroombathroomprice
0618 5 Avenue ...1 Bed1 Bath$1,399 CA...
19721 92 Ave.,...1 Bed1 Bath$999 CAD ...
210717 107 Str...Studio1 Bath$699 CAD ...
36707 Elbow Dr...Studio1 Bath$1,050 CA...
43011 James Mo...2 Beds2 Baths$1,429 CA...
...............
1391970 Fitzgera...2 Beds1 Bath$1,295 CA...
1401970 Fitzgera...3 Beds1 Bath$1,495 CA...
141144 Brunswick...1 Bed1 Bath$1,250 CA...
142908 Sixth Ave...2 Beds1 Bath$1,995 CA...
143144 Brunswick...2 Beds1 Bath$1,395 CA...
\n", "

1572 rows × 4 columns

\n", "
" ], "text/plain": [ " address bedroom bathroom \\\n", "0 618 5 Avenue ... 1 Bed 1 Bath \n", "1 9721 92 Ave.,... 1 Bed 1 Bath \n", "2 10717 107 Str... Studio 1 Bath \n", "3 6707 Elbow Dr... Studio 1 Bath \n", "4 3011 James Mo... 2 Beds 2 Baths \n", ".. ... ... ... \n", "139 1970 Fitzgera... 2 Beds 1 Bath \n", "140 1970 Fitzgera... 3 Beds 1 Bath \n", "141 144 Brunswick... 1 Bed 1 Bath \n", "142 908 Sixth Ave... 2 Beds 1 Bath \n", "143 144 Brunswick... 2 Beds 1 Bath \n", "\n", " price \n", "0 $1,399 CA... \n", "1 $999 CAD ... \n", "2 $699 CAD ... \n", "3 $1,050 CA... \n", "4 $1,429 CA... \n", ".. ... \n", "139 $1,295 CA... \n", "140 $1,495 CA... \n", "141 $1,250 CA... \n", "142 $1,995 CA... \n", "143 $1,395 CA... \n", "\n", "[1572 rows x 4 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_listings = pd.concat([alberta,ontario,BC], axis = 0)\n", "all_listings" ] }, { "cell_type": "markdown", "id": "6670c0d3", "metadata": {}, "source": [ " ## DATA INSPECTION" ] }, { "cell_type": "code", "execution_count": 10, "id": "a658bcc2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1572, 4)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ " all_listings.shape" ] }, { "cell_type": "code", "execution_count": 11, "id": "539c3348", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "address 0\n", "bedroom 0\n", "bathroom 0\n", "price 0\n", "dtype: int64" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_listings.isna().sum()" ] }, { "cell_type": "code", "execution_count": 12, "id": "08620257", "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", "
addressbedroombathroomprice
count1572157215721572
unique56583432
top150-8930 Jasp...2 Beds1 Bath$999 CAD ...
freq13587147237
\n", "
" ], "text/plain": [ " address bedroom bathroom \\\n", "count 1572 1572 1572 \n", "unique 565 8 3 \n", "top 150-8930 Jasp... 2 Beds 1 Bath \n", "freq 13 587 1472 \n", "\n", " price \n", "count 1572 \n", "unique 432 \n", "top $999 CAD ... \n", "freq 37 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_listings.describe()" ] }, { "cell_type": "markdown", "id": "964c11f4", "metadata": {}, "source": [ "## DATA CLEANING/WRANGLING" ] }, { "cell_type": "code", "execution_count": 14, "id": "5abdc611", "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", "
addressbedroombathroompricecityprovince
0618 5 Avenue ...1 Bed1 Bath$1,399 CA...CalgaryAB
19721 92 Ave.1 Bed1 Bath$999 CAD ...Grande PrairieAB
210717 107 Str...Studio1 Bath$699 CAD ...EdmontonAB
36707 Elbow Dr...Studio1 Bath$1,050 CA...CalgaryAB
43011 James Mo...2 Beds2 Baths$1,429 CA...EdmontonAB
\n", "
" ], "text/plain": [ " address bedroom bathroom \\\n", "0 618 5 Avenue ... 1 Bed 1 Bath \n", "1 9721 92 Ave. 1 Bed 1 Bath \n", "2 10717 107 Str... Studio 1 Bath \n", "3 6707 Elbow Dr... Studio 1 Bath \n", "4 3011 James Mo... 2 Beds 2 Baths \n", "\n", " price city \\\n", "0 $1,399 CA... Calgary \n", "1 $999 CAD ... Grande Prairie \n", "2 $699 CAD ... Edmonton \n", "3 $1,050 CA... Calgary \n", "4 $1,429 CA... Edmonton \n", "\n", " province \n", "0 AB \n", "1 AB \n", "2 AB \n", "3 AB \n", "4 AB " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_listings[['address','city','province']] = all_listings['address'].str.rsplit(',', n=2,expand=True)\n", "all_listings.head(5)" ] }, { "cell_type": "code", "execution_count": 15, "id": "60e1b99b", "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", "
addressbedroombathroompricecityprovince
0618 5 Avenue ...11$1,399 CA...CalgaryAB
19721 92 Ave.11$999 CAD ...Grande PrairieAB
210717 107 Str...01$699 CAD ...EdmontonAB
36707 Elbow Dr...01$1,050 CA...CalgaryAB
43011 James Mo...22$1,429 CA...EdmontonAB
\n", "
" ], "text/plain": [ " address bedroom bathroom \\\n", "0 618 5 Avenue ... 1 1 \n", "1 9721 92 Ave. 1 1 \n", "2 10717 107 Str... 0 1 \n", "3 6707 Elbow Dr... 0 1 \n", "4 3011 James Mo... 2 2 \n", "\n", " price city \\\n", "0 $1,399 CA... Calgary \n", "1 $999 CAD ... Grande Prairie \n", "2 $699 CAD ... Edmonton \n", "3 $1,050 CA... Calgary \n", "4 $1,429 CA... Edmonton \n", "\n", " province \n", "0 AB \n", "1 AB \n", "2 AB \n", "3 AB \n", "4 AB " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## DATA MANIPULATION\n", "all_listings['bedroom'] = all_listings['bedroom'].str.replace('Beds','')\n", "all_listings['bedroom'] = all_listings['bedroom'].str.replace('Bed','')\n", "all_listings['bathroom'] = all_listings['bathroom'].str.replace('Baths','')\n", "all_listings['bathroom'] = all_listings['bathroom'].str.replace('Bath','')\n", "all_listings['bedroom'] = all_listings['bedroom'].str.replace('Studio',\"0\")\n", "all_listings.head(5)" ] }, { "cell_type": "code", "execution_count": 16, "id": "0d2b5baa", "metadata": {}, "outputs": [], "source": [ "## CHANGE THE DATA TYPES\n", "all_listings[['bedroom','bathroom']] = all_listings[['bedroom','bathroom']].apply(pd.to_numeric)\n", "all_listings['price'] = all_listings['price'].str.replace('CAD / month','')\n", "all_listings['price'] = all_listings['price'].str.replace('\\$','',regex = True)\n", "all_listings['price'] = pd.to_numeric(all_listings['price'].replace({',':''}, regex = True)).astype(float)\n" ] }, { "cell_type": "code", "execution_count": 17, "id": "75873759", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3], dtype=int64)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_listings.bathroom.unique()" ] }, { "cell_type": "code", "execution_count": 18, "id": "51e5733b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1. , 0. , 2. , 3. , 5. , 4. , 2.5, 1.5])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_listings.bedroom.unique()" ] }, { "cell_type": "code", "execution_count": 19, "id": "25f6ea39", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "address object\n", "bedroom float64\n", "bathroom int64\n", "price float64\n", "city object\n", "province object\n", "dtype: object" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_listings.dtypes" ] }, { "cell_type": "code", "execution_count": 20, "id": "f22cca67", "metadata": {}, "outputs": [], "source": [ "## SAVING DATA TO A CSV FILE\n", "all_listings.to_csv('apartment_listings.csv')" ] }, { "cell_type": "code", "execution_count": 69, "id": "8119545a", "metadata": {}, "outputs": [], "source": [ "## Analysis is performed for only 0-3 bedroom apartments\n", "apartments = all_listings[(all_listings['bedroom']== 0) | (all_listings['bedroom']==1)|(all_listings['bedroom']==2)|(all_listings['bedroom']==3)]" ] }, { "cell_type": "code", "execution_count": 70, "id": "c542e25b", "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", "
Unnamed: 0addressbedroombathroompricecityprovince
00618 5 Avenue ...1.011399.0CalgaryAB
119721 92 Ave.1.01999.0Grande PrairieAB
2210717 107 Str...0.01699.0EdmontonAB
336707 Elbow Dr...0.011050.0CalgaryAB
443011 James Mo...2.021429.0EdmontonAB
........................
15671391970 Fitzgera...2.011295.0CourtenayBC
15681401970 Fitzgera...3.011495.0CourtenayBC
1569141144 Brunswick...1.011250.0PentictonBC
1570142908 Sixth Avenue2.011995.0New WestminsterBC
1571143144 Brunswick St2.011395.0PentictonBC
\n", "

1563 rows × 7 columns

\n", "
" ], "text/plain": [ " Unnamed: 0 address bedroom \\\n", "0 0 618 5 Avenue ... 1.0 \n", "1 1 9721 92 Ave. 1.0 \n", "2 2 10717 107 Str... 0.0 \n", "3 3 6707 Elbow Dr... 0.0 \n", "4 4 3011 James Mo... 2.0 \n", "... ... ... ... \n", "1567 139 1970 Fitzgera... 2.0 \n", "1568 140 1970 Fitzgera... 3.0 \n", "1569 141 144 Brunswick... 1.0 \n", "1570 142 908 Sixth Avenue 2.0 \n", "1571 143 144 Brunswick St 2.0 \n", "\n", " bathroom price city province \n", "0 1 1399.0 Calgary AB \n", "1 1 999.0 Grande Prairie AB \n", "2 1 699.0 Edmonton AB \n", "3 1 1050.0 Calgary AB \n", "4 2 1429.0 Edmonton AB \n", "... ... ... ... ... \n", "1567 1 1295.0 Courtenay BC \n", "1568 1 1495.0 Courtenay BC \n", "1569 1 1250.0 Penticton BC \n", "1570 1 1995.0 New Westminster BC \n", "1571 1 1395.0 Penticton BC \n", "\n", "[1563 rows x 7 columns]" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "apartments" ] }, { "cell_type": "code", "execution_count": 71, "id": "23416349", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfcAAAFNCAYAAAAdJCY0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAt0klEQVR4nO3de1hVdb7H8c+GDWjJZPpstMHLTF6LUmycEjMoHcEJSEN0vIzaxdSOytE6mAJB5DWGMk2dqTmNc0rPKSIVZRRLK7uoWWQqHTUnxRQ9CJgIIte9zh+e9hnGcIvuvYXl+/U8Pg/rt9f+re/61ebDuuz1sxiGYQgAAJiG17UuAAAAuBbhDgCAyRDuAACYDOEOAIDJEO4AAJgM4Q4AgMkQ7kATcfz4cd12220aOnSo499DDz2kzMzMn1x/69atmjdvnku2/corr6hfv36O7UZGRuqpp55Sfn6+Y52hQ4fq7NmzDfZRVlam8ePHN/j6j+9fs2aNJk+e3Ogaly1bpi1btkiSlixZonXr1jW6D+B6Yb3WBQD4fy1atFBWVpZjubCwUFFRUbrjjjvUs2fPeusOGjRIgwYNctm2H3zwQSUnJzuW161bpwkTJuhvf/ubWrVqVa+un1JaWqp9+/Y1+Lqz9zvz+eefq2vXrpKkf/3Xf72qvgCzI9yBJqxdu3bq3Lmz8vPz9d///d/KzMzU+fPn1apVKz388MPavHmzXn31VRUVFSklJUWHDx+Wl5eXRo0apfHjx6usrEzz58/Xt99+q5qaGoWEhGjWrFmyWp1/9IcNG6b169drw4YNGj16tHr06KEdO3aorq5OzzzzjH744QdJUlhYmGbMmKE5c+aosrJSQ4cO1Zo1a9S7d28NGjRIBw4cUHp6umJjY7Vjxw5JUlFRkR5//HGdOnVKgYGBmjt3rmw2m8aNG6exY8dqyJAhkuRYLikpUV5entLS0uTt7a2tW7eqW7duevzxx/Xll18qLS1N58+fl4+Pj2bMmKHQ0FCtWbNG77//vry8vHT06FG1aNFCL7zwgrp06eK+/2BAE8FpeaAJ2717t77//nv17t1bkvT3v/9db775pt58881666WmpuoXv/iFcnJy9PbbbysjI0NHjx7VggULFBQUpDVr1mjdunX64YcftHLlysvefo8ePfTtt9/Wa8vIyFCHDh20du1arV69WkePHlVZWZkWLlzoOPPg7e2tmpoaPfDAA9q8ebPuvPPOen0cOXJEycnJ2rBhg7p376758+dfso6xY8fqjjvu0KxZszR48GBH+w8//KC4uDglJiZqw4YNeuGFFxQfH69jx45Jkr744gs9++yzys7OVu/evfXaa69d9r4DzRlH7kAT8uORryTV1dXp5ptv1h/+8Afdcsstki6EbatWrS563/bt2xUfHy9J8vf3V3Z2tiTpo48+0r59+xzX7SsrKxtVj8ViUYsWLeq13XfffZo0aZJOnjyp/v376+mnn5a/v79KS0sven/fvn1/st/+/furc+fOkqTY2FjFxsY2qq4f7d27V506dXL88dOtWzfddddd2rVrlywWi4KCgtS+fXtJ0u23367333//irYDNDeEO9CE/PM19392ww03/GS71WqVxWJxLB87dkw333yz7Ha7lixZ4jgVffbs2XrrObNv3z4NHz68XluvXr20detW7dixQzt37tSIESP05z//Wa1bt77ser29vR0/2+32epcJ/nG6i5qamkvWV1dXd9H+GIah2tpa+fj41PvDxGKxiKk0cL3gtDxgAiEhIXr33XclXbhrfcKECcrPz9eAAQP017/+VYZhqLq6Wk8++aRWrVp1WX2+8847On78uH7729/Wa09PT9eKFSv0m9/8RomJieratasOHTokq9Wqurq6ywrQzz//XCdOnJAkvfXWWwoNDZUktWnTRnl5eZIuXII4ePCg4z3e3t6qra2t109wcLAOHz6svXv3SpIOHTqkL774Qnffffdl7SNgVhy5AyaQnJys5557TtHR0TIMQ5MnT9Ydd9yhxMREzZ8/X9HR0aqpqVH//v01ceLEn+xj48aNys3NlcVikd1u1y9/+Uu98cYb8vPzq7fehAkTNHv2bEVFRcnX11c9evRQZGSkvL291atXL0VGRmr16tWXrLd79+5KSEhQcXGxbr31Vj3//POSpCeffFKzZ8/Wtm3bdOutt9Y7rT9w4EC99NJL9Y7m27RpoyVLlmju3LmqrKyUxWLRwoUL9ctf/lK7d+++0uEEmj0LU74CAGAunJYHAMBkCHcAAEyGcAcAwGQIdwAATIZwBwDAZAh3AABMxjTfc//hh3Oy2/lWX9u2rVRSUn6ty7huMN6exXh7FuPtWY0Zby8vi26++cYGXzdNuNvtBuH+fxgHz2K8PYvx9izG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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "## Price Distribution for the dataset\n", "plt.figure(figsize=(8,5))\n", "plt.hist(apartments['price'],bins =range(500,5000,200),color='purple') \n", "plt.xlabel('Rent Prices/month')\n", "plt.ylabel('Count of listings')\n", "plt.title('Price Distribution')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 72, "id": "b67d74ec", "metadata": {}, "outputs": [ { "data": { "image/png": "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WCdOnFBhYaEkybIsPfroo9q6datSU1MdrBgAAPQW36jFibVr12revHnBkCZJw4cP16pVq/TP//zP6uzslCSNGzdOf/Znf6af/exnDlUKAADsQlCLE3/84x81ZsyYi5Z/5zvfkcvl0v/+7/9Kklwul372s5+pqqpKv//972NdJgAAsBFBLY74/f5LLu/s7JTL5Qo+9nq9euaZZ1RcXCyfzxer8gAAgM0IanHi9ttv1x/+8IeLltfX16tfv366+eabL1h+9913Kzc3V0uWLJFlWbEqEwAA2IigFiceffRR/epXv1JNTU1w2YcffqjHH39cP/7xjy954sDSpUvV2tqqffv2xbJUAABgE876jBPf+c539MILL2jt2rVasWKFkpOTdc0116ioqEi5ubmXXCc1NVX/9E//pPvuuy/G1QIAADu4LObFAAAAjMTUJwAAgKEIagAAAIYiqAEAABiKoAYAAGAoghoAAIChCGoAAACGMu46ap99dlqBQPxcMWTQoKt18mSb02UYgV6E0IuQr/YiKcml668f4GBFABA/jAtqgYAVV0FNUtzVG030IoRehNALAIgMU58AAACGIqgBAAAYiqAGAABgKIIaAACAoQhqAAAAhjLurE+YbcC1yUpLSbvs8x5P+iWXn+k8o9Ofd0WrLAAA+iSCGsKSlpIm13JX2OtZpZZO61QUKgIAoO9i6hMAAMBQvfpGbf369aqqqpIkZWVlafHixXr88cdVV1enq666SpK0YMECjR8/vveVAgAAJJiIg1ptba3efvttbd++XS6XSw888IDeeOMNNTQ06JVXXpHX67WzTgAAgIQT8dSnx+PR0qVLlZKSon79+mn48OE6fvy4jh8/ruLiYhUUFGjdunUKBAJ21gsAAJAwIg5qt9xyi0aPHi1JampqUlVVlf7mb/5GY8eO1YoVK1RWVqZDhw5p69atdtUKAACQUFyWZfXqbskffPCB5s6dq6KiIk2ePPmC59544w3t2LFDGzZs6FWR+Hrt/nb1d/eP2XqRnvUJAADC06uTCerq6vTwww+ruLhYeXl5ev/999XU1KScnBxJkmVZcrvD28TJk20KBOLnTd3jSZfP5+xlJzye9IjDU7i1X+46aT3hdJ9iyYT9whRf7UVSkkuDBl3tYEUAED8invpsbm7W/PnztXr1auXl5UnqDmYrVqzQ559/rnPnzum1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/fff73R5MfXee+/p1KlTam1tVWNjow4cOKDCwsKEurbelzo6OlRfXx882Wbr1q16/vnnE+qDDADYiaAWpq++EX0ZUBLpjWj16tV69913dfPNN6uqqkpLlizRpEmTJEmTJ0/W9u3bHa4wdl566SVt3rxZgUBAY8eOVXNzs8aPH6+9e/fq9ttv1/z5850uMWYef/zxi5bt3btXd999tyQl3DeMAGAHpj7DcPz4cUnS4MGDNXjw4ODyEydOSFLCXKajpqZG27dvl9vt1qxZszRnzhylpKTonnvuUaLl/tdff12VlZU6ceKE8vPztX//fqWmpuq+++7T1KlTEyqoXXfdddqxY4fmzZuna665RpK0f/9+3XnnnQ5XBgDxi6AWhrlz56qpqSl4xuf5XC6X3nzzTYcqiy3LsuRyuSRJw4YN0y9/+Uv98Ic/1MCBA4PLE0UgEFBKSooGDx6sOXPmKDU1NfhcV1eXg5XF3pIlS5SZmannnntOjzzyiO666y795je/0eTJk50uDQDiFlOfYWhra9P06dNVWlqqv/qrv3K6HMesX79etbW1Wrp0afB2WnV1dVqwYIE6OztVV1fncIWxs3btWh04cEAvv/yykpOTJXUfs1ZSUqLvf//7WrBggcMVxt7//d//qbS0VDfeeKPefvtt7dq1y+mSACBuEdTCVF9fry1btujpp592uhRH7du3T16vV8OHDw8ua25u1osvvqhly5Y5WFnsHTx4UGPGjAk+Pnr0qP70pz8pKyvLwaqct2XLFlVVVenFF190uhQAiFsENQAAAEMlXfklAAAAcAJBDQAAwFAENQAAAEMR1AAAAAxFUAMAADDU/wPEE6HRNSkxjwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "## Histogram of prices for each province\n", "apartments['price'].hist(by=apartments['province'],color='green',bins =range(500,4000,200),figsize=(10,8))\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 73, "id": "7d68488b", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAf0AAAINCAYAAAA0tqYMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABDeUlEQVR4nO3de1yUZf7/8fdwtBIz3WE1M9tI1LTENFk3d0xbgVKypSwPq5Vuqesh2pVUQPyaReSyRmawh87WL0UlSDLc2jxEKipbupRK5mFVDNE8gAoMM/fvD7/ON/IAlOPA3K/n49ED5rrvmfnc49W8ua77ZDEMwxAAAPB6Pp4uAAAAXB6EPgAAJkHoAwBgEoQ+AAAmQegDAGAShD4AACZB6MPrdOrUqdZ/PXv21Pjx47Vv377L8v4FBQXq1KmTTp48Wa/19+/fr48//tjNVXnWqlWr1KlTpwsu79Spk1atWnUZK7p0XnrpJcXExHi6DKBeCH14pblz5yo/P19r167VO++8Ix8fH02cOFGN8bIUM2bMUGFhoafLwI80ZswYvfrqq54uA6gXQh9eqUWLFrJarfr5z3+uzp07a8qUKdqxY4eKi4s9XRq8zFVXXaVrrrnG02UA9ULowxTO96W8fPlyRUdH69Zbb1VkZKTee+89SVJ1dbUGDRqkCRMmuNZ97bXXdPvtt+vbb79VQUGBevXqpaysLPXt21e9evXSzJkzVVlZed73Li8v15w5c/TrX/9a3bt319ixY7Vr1y5J0vTp07Vx40a99tprGjBgwHmff/z4ccXGxuq2225Tv379lJWVpZtvvln79++XdGZqPC0tTb/61a907733yuFwaM+ePZowYYJuv/12hYeHKzExURUVFZLOv/vh+1PU+/fvV6dOnZSbm6u77rpLPXr00JQpU3T06FHX+mVlZXriiSfUo0cP9e3bVwkJCSovL3ct37t3rx555BF1795dQ4YM0c6dO+v8N9q6dauio6N1yy236JFHHlFJSYkk6R//+IfuvPPOWrM0mzZtUlhY2Hl3oUyfPl1JSUn605/+pO7du2vgwIHKzc2ttXzq1KkaOnSoevfurXXr1qm6ulrz58/XgAEDdMstt2j48OHasmWLJGnJkiXq06ePHA6H6zW2bdumzp0769tvv6312RUUFCg8PFzZ2dkaMGCAa9fS4cOHXc/dsGGDHnroIXXv3l2/+c1vlJmZ6Vq2e/dujR07Vt27d1f//v01d+5cVVdX1/nZAfVF6MPrnT59Wn/729/UtWtXhYaGSpLef/99zZgxQ8OHD9f777+vUaNGaebMmVq9erUCAgKUnJys1atX6+OPP9auXbuUlpamxMREtWnTRpJ06tQpvfrqq5o/f74yMjK0bt06zZ49+7zvP2XKFBUUFGjevHnKzMxUYGCgxo4dq9OnTyshIUE9evTQ8OHDtXTp0vM+/49//KP27dunt956S3/+85/117/+tVYASWf+gHnzzTf1/PPPq7y8XCNGjJC/v7/eeecdvfTSSyosLFR8fHyDPrd58+bpf/7nf7Rw4ULt379fTzzxhGvZ5MmTZRiGFi9erIyMDP33v//Vk08+KUmy2+16/PHHdcUVV2jZsmWaOHGi/vGPf9T5fgsXLtTEiROVlZWlgIAAPfroo3I6nbr33ntVWlpaaxfI8uXLddddd+mqq64672tlZWWpefPmysrK0siRIxUXF6eCgoJazx8+fLjefPNN9ejRQ08//bSWLVumWbNmKTs7Wx07dtSjjz6qQ4cOKTIyUhUVFbWe/8EHH+j222939YfvKy8v16JFizR//ny9/PLL2rJlizIyMiRJ33zzjX7/+9+rZ8+eys7OVmxsrJ5++ml99tlnqqqq0tixY9W+fXu99957mjt3rj799FM988wzdX52QL0ZgJcJDQ01brnlFiMsLMzo3r270alTJ6NLly7G6tWrXev89re/NWbPnl3reUlJScZDDz3kevzcc88Z/fv3Nx566CFj0qRJrvYNGzYYoaGhxqZNm1xtH330kdG1a1ejvLzctbyiosLYsWOHERoaamzdutW17smTJ43evXsbixcvNgzDMH73u98ZKSkp592WXbt2GaGhoca2bdtcbWvWrDFCQ0ONffv2ubb3b3/7m2v5woULjfDwcOP06dOuti+++MIIDQ01du3aVau+s+bPn2/89re/NQzDMPbt22eEhoYa7733nmv5V199ZYSGhho7d+401q9fb4SFhRlVVVWu5d9++60RGhpq7Nixw1i9erXRrVs34+jRo67lf/vb34zQ0NDzbuPZbcjIyHA9PnLkiNG1a1cjPz/fMAzDGDVqlOvfq7q62ujdu7exatWq877WtGnTjIiICMPhcLjaJkyYYDzxxBOu5ZGRka5lx48fN7p06WJ8+OGHrjaHw2Hcc889xrx58wzDMIyJEycaiYmJruUDBgxw/ft9/7M7+9l+/vnnrnWTk5Nd/SolJcW47777atX79ttvG/n5+cbSpUuNiIgIw+l0upYVFhYanTt3NsrLyy/42QENwUgfXikxMVHZ2dnKycnRsmXLNGnSJE2cOFHr16+XJO3cuVNhYWG1ntOzZ89a09CxsbGSpOLi4nNG8b6+vrWef8stt8hut7um7c/auXOn/P391a1bN1fblVdeqZtvvllff/11nduxY8cOBQQE1DryvUePHues1759e9fvX3/9tbp06aJmzZrVqs/f31/ffPNNne95Vq9evVy/d+7cWQEBASouLtbOnTt1+vRphYeHq0ePHurRo4eioqIknZme/vrrr3XttdeqZcuWtd6/Lt//PFu1aqV27dq5PqMhQ4YoLy9PDodD+fn5slgsuuOOOy74Wj169JCPz/99vd166621Pu/rr7/e9fvu3bvlcDhqfa4+Pj7q0aOH6zmDBw/WRx99pJqaGm3ZskWlpaWKjIy84PvfcMMNrt+bN28uu90u6cxI//t9QZJGjhypO+64Qzt37tS+fft02223uT7XMWPGyOl0as+ePRd8L6Ah/DxdAOAOVqtVHTp0cD3u2rWrCgsL9e6776pPnz61AvEswzDkdDpdjw8dOqQjR46opqZGW7du1Z133ula5uPjUytUjP/d3+zr61vrNQMDA89bn2EY9TqTwM/Pr17rfX97zrdtZzmdTlkslnPaa2pqzvve32cYhnx9fVVTU6Nrr71Wr7/++jnPad26tRYtWnROu7+//0Xrl8797JxOp+t5kZGRevrpp7Vx40bl5ubq7rvvvuhrnu+1vv/v9f3P6GL/Rmf7Q//+/ZWYmKgNGzbo008/lc1m09VXX33B9/9hbWf/Df39/c/7+Utn/g3CwsL03HPPnbPs5z//+QXfC2gIRvowDafT6foSv/HGG/XFF1/UWv7555/rxhtvlHTmSzohIUF9+/bV448/rqSkpFoHqtnt9lpnAmzdulWBgYH6xS9+Ues1Q0JCZLfbVVRU5Go7ffq0tm/ffs6659OxY0fZ7Xbt2LHD1faf//znos8JCQnR9u3bax1YWFRUJLvdrhtvvNEVSGcP7JPkOijw+7788kvX71999ZXsdrs6d+6skJAQHTp0SFdddZU6dOigDh06yN/fXykpKfruu+/UqVMnHThwoNbBa1999VWd2/r9bTx06JAOHjyom266SdKZ0XL//v318ccf69NPP1V0dPRFX+uH77d161Z17tz5vOuerf/zzz93tRmGoS1btrj6Q2BgoAYOHKhPPvlEH330UZ3vfyE33HBDrc9VOjMrlZKSopCQEO3du1dt2rRxfa7Hjx/XX/7yF9dMAfBTEfrwSidOnFBZWZnKyspUUlKiN998Uxs2bNCgQYMkSY8//rgyMzP1//7f/9OePXv07rvvaunSpRo9erQk6d1331VRUZESExM1fvx4BQYG6vnnn6/1HjNnztSXX36pgoICpaSkaOjQobryyitrrXPDDTcoIiJC8fHx2rx5s4qLizVt2jT5+vq6arnqqqu0d+9elZaWnrMdHTp0UP/+/TVz5kz95z//0b///W/NmTNHki44YoyOjlZgYKCeeuopFRcXa/PmzUpISNCvfvUr3XTTTerYsaOaNWumtLQ07du3T0uXLtXq1avPeZ3nn39emzdv1tatW5WYmKj+/fvr+uuv1x133KGOHTvqySefVFFRkbZv3664uDjt27dP7dq1U58+fXTjjTdq2rRp2rFjh9asWaO///3vdf6bLViwQKtWrdKOHTs0bdo03XzzzQoPD3ctHzJkiJYsWaKgoCDddtttF32tr776Si+88IJ2796t119/XZ9++qlGjRp13nWvuOIK/e53v9Nzzz2nNWvW6JtvvtGcOXO0b98+Pfjgg7U+1/fee0/Hjh1T//7969ye8xkxYoSKi4uVlpamvXv3Kjc3Vzk5OerXr5/uvfde+fj4aNq0aSouLtbnn3+uGTNm6NSpUwoKCvpR7wecw1MHEwDuEhoaWuu/bt26Gffee6+xZMmSWutlZmYaAwcONLp27Wrcc889rgPXSkpKjB49ehivvvqqa921a9canTp1Mj777DPXwVqvv/66ER4ebvTu3dtISUkxqqurDcMwzjlQ7sSJE8aMGTOMXr16GWFhYcZjjz1m7Nq1y/Xaq1evdr3O9w8+O+vIkSPGxIkTjVtvvdX49a9/7ToorrS01LW9n3zySa3nfP3118ajjz5q3HLLLUZ4eLiRlJRU62Cw3NxcY8CAAcYtt9xijBs3znjttdfOOZAvIyPDsNlsxm233WZMnz691vMPHjxoTJo0yejRo4fRs2dP4w9/+INx4MAB1/Jv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mpru3burqKhIdru9VvsXX3yhbt261Wrz8fFRcnIy0/xejtA/j8OHD2vdunXKzc3VJ598ok8++UTZ2dnasGGD9u3bd876J06c0FdffXXOVCzQEA6HQxs3bnT1o7FjxyolJUVlZWWSpO+++04pKSnq0KGDJ8tEE9KrVy/ddNNNSk5OdgV/UVGRMjIy9Ic//OGc9W+44QaNHz9er7766uUuFZcJR++fR05Ojvr166ef//znrrb27dtrwIABWrx4sQIDA7Vo0SJ9/PHH8vHxUVVVlYYOHeo6BQaor7P79C0Wi2pqatSpUyc99thjkqThw4erpqZGY8aMkcVikWEYeuihhzhyHw2yYMECvfDCCxo8eLB8fX119dVX689//rPryP0fGj16tP75z39e5ipxuVgMjtoAAMAUmN4HAMAkCH0AAEyC0AcAwCQIfQAATILQBwDAJAh9AD/JkCFDdOLECU+XAaAeOGUPAACT4OI8gAkUFBQoNTVV1157rXbt2qVmzZopJSVF//jHP3Ts2DHt27dPd955p8aPH6/Zs2dr+/btslgs+vWvf60//vGPWrZsmVatWqW//vWvkqRvvvlGjzzyiFavXq2bb75Z69ev1+rVq/XRRx/Jx8dHe/fuVbNmzfT8888rJCREZWVlmjVrlnbt2iUfHx8NGzZMo0ePVnl5uZ599lkVFxfLbrerT58+euqpp+Tnx1cT4A5M7wMmUVRUpFGjRmn58uWKiYlRXFycJKmyslIffPCB4uLi9Mwzz6hly5Zavny5li1bph07dui1117ToEGDVFhY6LokcFZWlmJiYuTr61vrPTZt2qSZM2cqNzdX3bt319///ndJ0uzZs3XDDTcoLy9PixcvVmZmpvbu3avk5GR17dpVWVlZys7O1tGjR/X6669f3g8GMBFCHzCJzp07q1evXpKk+++/X9u2bdOxY8fUs2dP1zpr167V7373O1ksFgUEBGjYsGFau3atmjdvroEDB+r999+Xw+HQ8uXL9cADD5zzHl27dlWbNm0knblv+/HjxyVJ69at00MPPSRJCgoKUm5urjp06KDVq1dr8eLFGjJkiGJiYrR161YVFxe7+6MATIs5NMAkfjgql87cWe3KK690PXY6nbVuuep0OlVTUyNJevDBBzVz5kyFhIQoJCRE7du3P+f1mjVr5vr97P0CJMnPz6/W6+7bt0/XXHONnE6nXnzxRYWEhEg6c/OqH97yFcClw0gfMInt27dr+/btkqTFixerR48eatGiRa11+vbtq7fffluGYai6ulqZmZn61a9+JUkKCwuTJL388ssNvulPnz59tGzZMklSeXm5Hn74Ye3Zs0d9+/bVG2+84Xq/CRMm6O233/6JWwrgQgh9wCR+9rOfKS0tTdHR0fr44481d+7cc9ZJTEzUd999p+joaEVHR+sXv/iFxo8f71o+dOhQ7du3T7/5zW8a9N5JSUnatWuXoqOjNXz4cI0bN07dunVTQkKCTp065Xq/0NBQ/f73v//J2wrg/DhlDzCBgoICzZkzR7m5uZ4uBYAHMdIHAMAkGOkDAGASjPQBADAJQh8AAJMg9AEAMAlCHwAAkyD0AQAwif8PI2GeismkM/AAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "##Boxplot for each province \n", "apartments.boxplot(column='price', by='province',color= \"green\", figsize=(8,8), showmeans=True)\n", "plt.show()\n", "## The ouliers in the plot below can be attributed to the natural variations in the provinces. That is, the cities in each province have their own unique characteristics which may cause the disparity in prices" ] }, { "cell_type": "code", "execution_count": 76, "id": "f3ae0cdb", "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", "
bedroom0.01.02.03.0
province
AB882.7865171067.6139241285.6527201533.129496
BC1046.9444441401.5573771593.2608701876.666667
ON1245.5000001600.8200002019.1904762254.785714
\n", "
" ], "text/plain": [ "bedroom 0.0 1.0 2.0 \\\n", "province \n", " AB 882.786517 1067.613924 1285.652720 \n", " BC 1046.944444 1401.557377 1593.260870 \n", " ON 1245.500000 1600.820000 2019.190476 \n", "\n", "bedroom 3.0 \n", "province \n", " AB 1533.129496 \n", " BC 1876.666667 \n", " ON 2254.785714 " ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## A pivot table for the average rent prices for 0-3 bedroom apartments in each province\n", "pivot1 = pd.pivot_table(apartments,\n", " index=[\"province\"],\n", " columns ='bedroom',\n", " values='price',\n", " aggfunc = 'mean')\n", "pivot1" ] }, { "cell_type": "code", "execution_count": 77, "id": "27c1b4fd", "metadata": { "scrolled": true }, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plotly.com" }, "data": [ { "alignmentgroup": "True", "bingroup": "x", "histfunc": "sum", "hovertemplate": "bedroom=0.0
province=%{x}
sum of price=%{y}", "legendgroup": "0.0", "marker": { "color": "#FFA15A", "pattern": { "shape": "" } }, "name": "0.0", "offsetgroup": "0.0", "orientation": "v", "showlegend": true, "texttemplate": "%{value}", "type": "histogram", "x": [ " AB ", " BC ", " ON " ], "xaxis": "x", "y": [ 882.7865168539325, 1046.9444444444443, 1245.5 ], "yaxis": "y" }, { "alignmentgroup": "True", "bingroup": "x", "histfunc": "sum", "hovertemplate": "bedroom=1.0
province=%{x}
sum of price=%{y}", "legendgroup": "1.0", "marker": { "color": "#19d3f3", "pattern": { "shape": "" } }, "name": "1.0", "offsetgroup": "1.0", "orientation": "v", "showlegend": true, "texttemplate": "%{value}", "type": "histogram", "x": [ " AB ", " BC ", " ON " ], "xaxis": "x", "y": [ 1067.613924050633, 1401.5573770491803, 1600.82 ], "yaxis": "y" }, { "alignmentgroup": "True", "bingroup": "x", "histfunc": "sum", "hovertemplate": "bedroom=2.0
province=%{x}
sum of price=%{y}", "legendgroup": "2.0", "marker": { "color": "#FF6692", "pattern": { "shape": "" } }, "name": "2.0", "offsetgroup": "2.0", "orientation": "v", "showlegend": true, "texttemplate": "%{value}", "type": "histogram", "x": [ " AB ", " BC ", " ON " ], "xaxis": "x", "y": [ 1285.652719665272, 1593.2608695652175, 2019.1904761904761 ], "yaxis": "y" }, { "alignmentgroup": "True", "bingroup": "x", "histfunc": "sum", "hovertemplate": "bedroom=3.0
province=%{x}
sum of price=%{y}", "legendgroup": "3.0", "marker": { "color": "#B6E880", "pattern": { "shape": "" } }, "name": "3.0", "offsetgroup": "3.0", "orientation": "v", "showlegend": true, "texttemplate": "%{value}", "type": "histogram", "x": [ " AB ", " BC ", " ON " ], "xaxis": "x", "y": [ 1533.1294964028777, 1876.6666666666667, 2254.785714285714 ], "yaxis": "y" } ], "layout": { "barmode": "group", "font": { "size": 13 }, "legend": { "title": { "text": "BEDROOM SIZE" }, "tracegroupgap": 0 }, "margin": { "t": 60 }, "paper_bgcolor": "rgba(0,0,0,0)", "plot_bgcolor": "rgba(0,0,0,0)", "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "AVERAGE RENT PRICES FOR 0-3 BEDROOM APARTMENTS" }, "xaxis": { "anchor": "y", "domain": [ 0, 1 ], "title": { "text": "PROVINCE" } }, "yaxis": { "anchor": "x", "domain": [ 0, 1 ], "title": { "text": "AVERAGE RENT PRICE" } } } }, "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "table1 = apartments.groupby(['province','bedroom'], as_index=False)['price'].mean()\n", "plt.figure(figsize=(1,1))\n", "fig=px.histogram(data_frame=pivot2, x='province',y ='price', color='bedroom', barmode=\"group\",text_auto=True,color_discrete_map={\n", " \"0.0\": \"gold\",\n", " \"1.0\": \"bronze\",\n", " \"2.0\": \"blue\",\n", " \"3.0\": \"goldenrod\"})\n", "\n", "fig.update_layout(\n", " title='AVERAGE RENT PRICES FOR 0-3 BEDROOM APARTMENTS',\n", " xaxis_title='PROVINCE',\n", " yaxis_title='AVERAGE RENT PRICE',\n", " legend_title='BEDROOM SIZE',\n", " paper_bgcolor=\"rgba(0,0,0,0)\", ## Sets the background to white\n", " plot_bgcolor=\"rgba(0,0,0,0)\", ## Sets the background of the plot to white/clear\n", " font_size=13,\n", ")\n", "fig.show()" ] }, { "cell_type": "code", "execution_count": 51, "id": "7bc6304c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'https://plotly.com/~janice.gbedemah/1/'" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "py.plot(fig, filename=\"housing affordability study\", auto_open=True) ## This saves the plot to your account and can be retrieved online" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.12" } }, "nbformat": 4, "nbformat_minor": 5 }