{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "![alt text](../figures/header.png \"Logo Title Text 1\")\n", "\n", "\n", "# A Deep Dive into Geospatial Analysis\n", "\n", "Many of the datasets that data scientists handle have some kind of geospatial component to them, and that information is oftentimes useful-to-critical for understanding the problem at hand. As such, an understanding of spatial data and how to work with it is a valuable skill for any data scientist to have. Even better, Python provides a rich toolset for working in this domain, and recent advances have greatly simplified and consolidated these.\n", "\n", "In this tutorial we will take a deep dive into geospatial analysis in Python, using tools like geopandas, shapely, and pysal to analyze a dataset, provided by [Kaggle](https://www.kaggle.com/airbnb-data/boston-airbnb-open-data) (and originally from [Inside AirBnB](http://insideairbnb.com/get-the-data.html)), of sample AirBnB locations in Boston, Massachusetts.\n", "\n", "This tutorial is targeted at folks who know a thing or two about data but haven't used Python's geospatial data tools just yet. As such, it assumes a high level of familiarity with pandas. Some familiarity with scikit-learn, statsmodels, matplotlib, and seaborn is also helpful." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "pd.set_option(\"max_columns\", None)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Table of Contents\n", "\n", "* [**Plotting Points**](#Plotting-Points)\n", "* [**Plotting Geometries**](#Plotting-Geometries)\n", "* [**Upconverting DataFrame to GeoDataFrame Objects**](#Upconverting-DataFrame-to-GeoDataFrame-Objects)\n", "* [**Plotting Geometries and Points**](#Plotting-Geometries-and-Points)\n", "* [**Spatial Weights**](#Spatial-Weights)\n", "* [**Spatial Lag**](#Spatial-Lag)\n", "* [**Spatial Clustering**](#Spatial-Clustering)\n", "* [**Spatial Regression**](#Spatial-Regression)\n", "* [**Conclusion**](#Conclusion)\n", "* [**Extra Credit**](#Extra-Credit)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotting Points" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, let's boot up and examine our data. Since our data comes in a simple CSV file, we load it into a pandas DataFrame." ] }, { "cell_type": "code", "execution_count": 353, "metadata": { "collapsed": true }, "outputs": [], "source": [ "listings = pd.read_csv(\"../input/listings.csv\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012147973https://www.airbnb.com/rooms/12147973201609062049352016-09-07Sunny Bungalow in the CityCozy, sunny, family home. Master bedroom high...The house has an open and cozy feel at the sam...Cozy, sunny, family home. Master bedroom high...noneRoslindale is quiet, convenient and friendly. ...NaNThe bus stop is 2 blocks away, and frequent. B...You will have access to 2 bedrooms, a living r...NaNClean up and treat the home the way you'd like...https://a2.muscache.com/im/pictures/c0842db1-e...https://a2.muscache.com/im/pictures/c0842db1-e...https://a2.muscache.com/im/pictures/c0842db1-e...https://a2.muscache.com/im/pictures/c0842db1-e...31303940https://www.airbnb.com/users/show/31303940Virginia2015-04-15Boston, Massachusetts, United StatesWe are country and city connecting in our deck...NaNNaNNaNfhttps://a2.muscache.com/im/pictures/5936fef0-b...https://a2.muscache.com/im/pictures/5936fef0-b...Roslindale11['email', 'phone', 'facebook', 'reviews']tfBirch Street, Boston, MA 02131, United StatesRoslindaleRoslindaleNaNBostonMA02131BostonBoston, MAUSUnited States42.282619-71.133068tHouseEntire home/apt41.52.03.0Real Bed{TV,\"Wireless Internet\",Kitchen,\"Free Parking ...NaN$250.00NaNNaNNaN$35.001$0.00211252 weeks agoNaN00002016-09-060NaNNaNNaNNaNNaNNaNNaNNaNNaNfNaNNaNfmoderateff1NaN 13075044https://www.airbnb.com/rooms/3075044201609062049352016-09-07Charming room in pet friendly aptCharming and quiet room in a second floor 1910...Small but cozy and quite room with a full size...Charming and quiet room in a second floor 1910...noneThe room is in Roslindale, a diverse and prima...If you don't have a US cell phone, you can tex...Plenty of safe street parking. Bus stops a few...Apt has one more bedroom (which I use) and lar...If I am at home, I am likely working in my hom...Pet friendly but please confirm with me if the...https://a1.muscache.com/im/pictures/39327812/d...https://a1.muscache.com/im/pictures/39327812/d...https://a1.muscache.com/im/pictures/39327812/d...https://a1.muscache.com/im/pictures/39327812/d...2572247https://www.airbnb.com/users/show/2572247Andrea2012-06-07Boston, Massachusetts, United StatesI live in Boston and I like to travel and have...within an hour100%100%fhttps://a2.muscache.com/im/users/2572247/profi...https://a2.muscache.com/im/users/2572247/profi...Roslindale11['email', 'phone', 'facebook', 'linkedin', 'am...ttPinehurst Street, Boston, MA 02131, United StatesRoslindaleRoslindaleNaNBostonMA02131BostonBoston, MAUSUnited States42.286241-71.134374tApartmentPrivate room21.01.01.0Real Bed{TV,Internet,\"Wireless Internet\",\"Air Conditio...NaN$65.00$400.00NaN$95.00$10.000$0.00215a week agoNaN2654843592016-09-06362014-06-012016-08-1394.010.09.010.010.09.09.0fNaNNaNtmoderateff11.30
26976https://www.airbnb.com/rooms/6976201609062049352016-09-07Mexican Folk Art Haven in BostonCome stay with a friendly, middle-aged guy in ...Come stay with a friendly, middle-aged guy in ...Come stay with a friendly, middle-aged guy in ...noneThe LOCATION: Roslindale is a safe and diverse...I am in a scenic part of Boston with a couple ...PUBLIC TRANSPORTATION: From the house, quick p...I am living in the apartment during your stay,...ABOUT ME: I'm a laid-back, friendly, unmarried...I encourage you to use my kitchen, cooking and...https://a2.muscache.com/im/pictures/6ae8335d-9...https://a2.muscache.com/im/pictures/6ae8335d-9...https://a2.muscache.com/im/pictures/6ae8335d-9...https://a2.muscache.com/im/pictures/6ae8335d-9...16701https://www.airbnb.com/users/show/16701Phil2009-05-11Boston, Massachusetts, United StatesI am a middle-aged, single male with a wide ra...within a few hours100%88%thttps://a2.muscache.com/im/users/16701/profile...https://a2.muscache.com/im/users/16701/profile...Roslindale11['email', 'phone', 'reviews', 'jumio']ttArdale St., Boston, MA 02131, United StatesRoslindaleRoslindaleNaNBostonMA02131BostonBoston, MAUSUnited States42.292438-71.135765tApartmentPrivate room21.01.01.0Real Bed{TV,\"Cable TV\",\"Wireless Internet\",\"Air Condit...NaN$65.00$395.00$1,350.00NaNNaN1$20.003455 days agoNaN1946613192016-09-06412009-07-192016-08-0598.010.09.010.010.09.010.0fNaNNaNfmoderatetf10.47
31436513https://www.airbnb.com/rooms/1436513201609062049352016-09-07Spacious Sunny Bedroom Suite in Historic HomeCome experience the comforts of home away from...Most places you find in Boston are small howev...Come experience the comforts of home away from...noneRoslindale is a lovely little neighborhood loc...Please be mindful of the property as it is old...There are buses that stop right in front of th...The basement has a washer dryer and gym area. ...We do live in the house therefore might be som...- The bathroom and house are shared so please ...https://a2.muscache.com/im/pictures/39764190-1...https://a2.muscache.com/im/pictures/39764190-1...https://a2.muscache.com/im/pictures/39764190-1...https://a2.muscache.com/im/pictures/39764190-1...6031442https://www.airbnb.com/users/show/6031442Meghna2013-04-21Boston, Massachusetts, United StatesMy husband and I live on the property. He’s a...within a few hours100%50%fhttps://a2.muscache.com/im/pictures/5d430cde-7...https://a2.muscache.com/im/pictures/5d430cde-7...NaN11['email', 'phone', 'reviews']tfBoston, MA, United StatesNaNRoslindaleNaNBostonMANaNBostonBoston, MAUSUnited States42.281106-71.121021fHousePrivate room41.01.02.0Real Bed{TV,Internet,\"Wireless Internet\",\"Air Conditio...NaN$75.00NaNNaN$100.00$50.002$25.0011125a week agoNaN61626982016-09-0612016-08-282016-08-28100.010.010.010.010.010.010.0fNaNNaNfmoderateff11.00
47651065https://www.airbnb.com/rooms/7651065201609062049352016-09-07Come Home to BostonMy comfy, clean and relaxing home is one block...Clean, attractive, private room, one block fro...My comfy, clean and relaxing home is one block...noneI love the proximity to downtown, the neighbor...I have one roommate who lives on the lower lev...From Logan Airport and South Station you have...You will have access to the front and side por...I love my city and really enjoy sharing it wit...Please no smoking in the house, porch or on th...https://a1.muscache.com/im/pictures/97154760/8...https://a1.muscache.com/im/pictures/97154760/8...https://a1.muscache.com/im/pictures/97154760/8...https://a1.muscache.com/im/pictures/97154760/8...15396970https://www.airbnb.com/users/show/15396970Linda2014-05-11Boston, Massachusetts, United StatesI work full time for a public school district....within an hour100%100%thttps://a0.muscache.com/im/users/15396970/prof...https://a0.muscache.com/im/users/15396970/prof...Roslindale11['email', 'phone', 'reviews', 'kba']ttDurnell Avenue, Boston, MA 02131, United StatesRoslindaleRoslindaleNaNBostonMA02131BostonBoston, MAUSUnited States42.284512-71.136258tHousePrivate room21.51.02.0Real Bed{Internet,\"Wireless Internet\",\"Air Conditionin...NaN$79.00NaNNaNNaN$15.001$0.002312 weeks agoNaN1334593342016-09-06292015-08-182016-09-0199.010.010.010.010.09.010.0fNaNNaNfflexibleff12.25 \n", " " ], "text/plain": [ " id listing_url scrape_id \\\n", "0 12147973 https://www.airbnb.com/rooms/12147973 20160906204935 \n", "1 3075044 https://www.airbnb.com/rooms/3075044 20160906204935 \n", "2 6976 https://www.airbnb.com/rooms/6976 20160906204935 \n", "3 1436513 https://www.airbnb.com/rooms/1436513 20160906204935 \n", "4 7651065 https://www.airbnb.com/rooms/7651065 20160906204935 \n", "\n", " last_scraped name \\\n", "0 2016-09-07 Sunny Bungalow in the City \n", "1 2016-09-07 Charming room in pet friendly apt \n", "2 2016-09-07 Mexican Folk Art Haven in Boston \n", "3 2016-09-07 Spacious Sunny Bedroom Suite in Historic Home \n", "4 2016-09-07 Come Home to Boston \n", "\n", " summary \\\n", "0 Cozy, sunny, family home. Master bedroom high... \n", "1 Charming and quiet room in a second floor 1910... \n", "2 Come stay with a friendly, middle-aged guy in ... \n", "3 Come experience the comforts of home away from... \n", "4 My comfy, clean and relaxing home is one block... \n", "\n", " space \\\n", "0 The house has an open and cozy feel at the sam... \n", "1 Small but cozy and quite room with a full size... \n", "2 Come stay with a friendly, middle-aged guy in ... \n", "3 Most places you find in Boston are small howev... \n", "4 Clean, attractive, private room, one block fro... \n", "\n", " description experiences_offered \\\n", "0 Cozy, sunny, family home. Master bedroom high... none \n", "1 Charming and quiet room in a second floor 1910... none \n", "2 Come stay with a friendly, middle-aged guy in ... none \n", "3 Come experience the comforts of home away from... none \n", "4 My comfy, clean and relaxing home is one block... none \n", "\n", " neighborhood_overview \\\n", "0 Roslindale is quiet, convenient and friendly. ... \n", "1 The room is in Roslindale, a diverse and prima... \n", "2 The LOCATION: Roslindale is a safe and diverse... \n", "3 Roslindale is a lovely little neighborhood loc... \n", "4 I love the proximity to downtown, the neighbor... \n", "\n", " notes \\\n", "0 NaN \n", "1 If you don't have a US cell phone, you can tex... \n", "2 I am in a scenic part of Boston with a couple ... \n", "3 Please be mindful of the property as it is old... \n", "4 I have one roommate who lives on the lower lev... \n", "\n", " transit \\\n", "0 The bus stop is 2 blocks away, and frequent. B... \n", "1 Plenty of safe street parking. Bus stops a few... \n", "2 PUBLIC TRANSPORTATION: From the house, quick p... \n", "3 There are buses that stop right in front of th... \n", "4 From Logan Airport and South Station you have... \n", "\n", " access \\\n", "0 You will have access to 2 bedrooms, a living r... \n", "1 Apt has one more bedroom (which I use) and lar... \n", "2 I am living in the apartment during your stay,... \n", "3 The basement has a washer dryer and gym area. ... \n", "4 You will have access to the front and side por... \n", "\n", " interaction \\\n", "0 NaN \n", "1 If I am at home, I am likely working in my hom... \n", "2 ABOUT ME: I'm a laid-back, friendly, unmarried... \n", "3 We do live in the house therefore might be som... \n", "4 I love my city and really enjoy sharing it wit... \n", "\n", " house_rules \\\n", "0 Clean up and treat the home the way you'd like... \n", "1 Pet friendly but please confirm with me if the... \n", "2 I encourage you to use my kitchen, cooking and... \n", "3 - The bathroom and house are shared so please ... \n", "4 Please no smoking in the house, porch or on th... \n", "\n", " thumbnail_url \\\n", "0 https://a2.muscache.com/im/pictures/c0842db1-e... \n", "1 https://a1.muscache.com/im/pictures/39327812/d... \n", "2 https://a2.muscache.com/im/pictures/6ae8335d-9... \n", "3 https://a2.muscache.com/im/pictures/39764190-1... \n", "4 https://a1.muscache.com/im/pictures/97154760/8... \n", "\n", " medium_url \\\n", "0 https://a2.muscache.com/im/pictures/c0842db1-e... \n", "1 https://a1.muscache.com/im/pictures/39327812/d... \n", "2 https://a2.muscache.com/im/pictures/6ae8335d-9... \n", "3 https://a2.muscache.com/im/pictures/39764190-1... \n", "4 https://a1.muscache.com/im/pictures/97154760/8... \n", "\n", " picture_url \\\n", "0 https://a2.muscache.com/im/pictures/c0842db1-e... \n", "1 https://a1.muscache.com/im/pictures/39327812/d... \n", "2 https://a2.muscache.com/im/pictures/6ae8335d-9... \n", "3 https://a2.muscache.com/im/pictures/39764190-1... \n", "4 https://a1.muscache.com/im/pictures/97154760/8... \n", "\n", " xl_picture_url host_id \\\n", "0 https://a2.muscache.com/im/pictures/c0842db1-e... 31303940 \n", "1 https://a1.muscache.com/im/pictures/39327812/d... 2572247 \n", "2 https://a2.muscache.com/im/pictures/6ae8335d-9... 16701 \n", "3 https://a2.muscache.com/im/pictures/39764190-1... 6031442 \n", "4 https://a1.muscache.com/im/pictures/97154760/8... 15396970 \n", "\n", " host_url host_name host_since \\\n", "0 https://www.airbnb.com/users/show/31303940 Virginia 2015-04-15 \n", "1 https://www.airbnb.com/users/show/2572247 Andrea 2012-06-07 \n", "2 https://www.airbnb.com/users/show/16701 Phil 2009-05-11 \n", "3 https://www.airbnb.com/users/show/6031442 Meghna 2013-04-21 \n", "4 https://www.airbnb.com/users/show/15396970 Linda 2014-05-11 \n", "\n", " host_location \\\n", "0 Boston, Massachusetts, United States \n", "1 Boston, Massachusetts, United States \n", "2 Boston, Massachusetts, United States \n", "3 Boston, Massachusetts, United States \n", "4 Boston, Massachusetts, United States \n", "\n", " host_about host_response_time \\\n", "0 We are country and city connecting in our deck... NaN \n", "1 I live in Boston and I like to travel and have... within an hour \n", "2 I am a middle-aged, single male with a wide ra... within a few hours \n", "3 My husband and I live on the property. He’s a... within a few hours \n", "4 I work full time for a public school district.... within an hour \n", "\n", " host_response_rate host_acceptance_rate host_is_superhost \\\n", "0 NaN NaN f \n", "1 100% 100% f \n", "2 100% 88% t \n", "3 100% 50% f \n", "4 100% 100% t \n", "\n", " host_thumbnail_url \\\n", "0 https://a2.muscache.com/im/pictures/5936fef0-b... \n", "1 https://a2.muscache.com/im/users/2572247/profi... \n", "2 https://a2.muscache.com/im/users/16701/profile... \n", "3 https://a2.muscache.com/im/pictures/5d430cde-7... \n", "4 https://a0.muscache.com/im/users/15396970/prof... \n", "\n", " host_picture_url host_neighbourhood \\\n", "0 https://a2.muscache.com/im/pictures/5936fef0-b... Roslindale \n", "1 https://a2.muscache.com/im/users/2572247/profi... Roslindale \n", "2 https://a2.muscache.com/im/users/16701/profile... Roslindale \n", "3 https://a2.muscache.com/im/pictures/5d430cde-7... NaN \n", "4 https://a0.muscache.com/im/users/15396970/prof... Roslindale \n", "\n", " host_listings_count host_total_listings_count \\\n", "0 1 1 \n", "1 1 1 \n", "2 1 1 \n", "3 1 1 \n", "4 1 1 \n", "\n", " host_verifications host_has_profile_pic \\\n", "0 ['email', 'phone', 'facebook', 'reviews'] t \n", "1 ['email', 'phone', 'facebook', 'linkedin', 'am... t \n", "2 ['email', 'phone', 'reviews', 'jumio'] t \n", "3 ['email', 'phone', 'reviews'] t \n", "4 ['email', 'phone', 'reviews', 'kba'] t \n", "\n", " host_identity_verified street \\\n", "0 f Birch Street, Boston, MA 02131, United States \n", "1 t Pinehurst Street, Boston, MA 02131, United States \n", "2 t Ardale St., Boston, MA 02131, United States \n", "3 f Boston, MA, United States \n", "4 t Durnell Avenue, Boston, MA 02131, United States \n", "\n", " neighbourhood neighbourhood_cleansed neighbourhood_group_cleansed city \\\n", "0 Roslindale Roslindale NaN Boston \n", "1 Roslindale Roslindale NaN Boston \n", "2 Roslindale Roslindale NaN Boston \n", "3 NaN Roslindale NaN Boston \n", "4 Roslindale Roslindale NaN Boston \n", "\n", " state zipcode market smart_location country_code country latitude \\\n", "0 MA 02131 Boston Boston, MA US United States 42.282619 \n", "1 MA 02131 Boston Boston, MA US United States 42.286241 \n", "2 MA 02131 Boston Boston, MA US United States 42.292438 \n", "3 MA NaN Boston Boston, MA US United States 42.281106 \n", "4 MA 02131 Boston Boston, MA US United States 42.284512 \n", "\n", " longitude is_location_exact property_type room_type accommodates \\\n", "0 -71.133068 t House Entire home/apt 4 \n", "1 -71.134374 t Apartment Private room 2 \n", "2 -71.135765 t Apartment Private room 2 \n", "3 -71.121021 f House Private room 4 \n", "4 -71.136258 t House Private room 2 \n", "\n", " bathrooms bedrooms beds bed_type \\\n", "0 1.5 2.0 3.0 Real Bed \n", "1 1.0 1.0 1.0 Real Bed \n", "2 1.0 1.0 1.0 Real Bed \n", "3 1.0 1.0 2.0 Real Bed \n", "4 1.5 1.0 2.0 Real Bed \n", "\n", " amenities square_feet price \\\n", "0 {TV,\"Wireless Internet\",Kitchen,\"Free Parking ... NaN$250.00 \n", "1 {TV,Internet,\"Wireless Internet\",\"Air Conditio... NaN $65.00 \n", "2 {TV,\"Cable TV\",\"Wireless Internet\",\"Air Condit... NaN$65.00 \n", "3 {TV,Internet,\"Wireless Internet\",\"Air Conditio... NaN $75.00 \n", "4 {Internet,\"Wireless Internet\",\"Air Conditionin... NaN$79.00 \n", "\n", " weekly_price monthly_price security_deposit cleaning_fee guests_included \\\n", "0 NaN NaN NaN $35.00 1 \n", "1$400.00 NaN $95.00$10.00 0 \n", "2 $395.00$1,350.00 NaN NaN 1 \n", "3 NaN NaN $100.00$50.00 2 \n", "4 NaN NaN NaN $15.00 1 \n", "\n", " extra_people minimum_nights maximum_nights calendar_updated \\\n", "0$0.00 2 1125 2 weeks ago \n", "1 $0.00 2 15 a week ago \n", "2$20.00 3 45 5 days ago \n", "3 $25.00 1 1125 a week ago \n", "4$0.00 2 31 2 weeks ago \n", "\n", " has_availability availability_30 availability_60 availability_90 \\\n", "0 NaN 0 0 0 \n", "1 NaN 26 54 84 \n", "2 NaN 19 46 61 \n", "3 NaN 6 16 26 \n", "4 NaN 13 34 59 \n", "\n", " availability_365 calendar_last_scraped number_of_reviews first_review \\\n", "0 0 2016-09-06 0 NaN \n", "1 359 2016-09-06 36 2014-06-01 \n", "2 319 2016-09-06 41 2009-07-19 \n", "3 98 2016-09-06 1 2016-08-28 \n", "4 334 2016-09-06 29 2015-08-18 \n", "\n", " last_review review_scores_rating review_scores_accuracy \\\n", "0 NaN NaN NaN \n", "1 2016-08-13 94.0 10.0 \n", "2 2016-08-05 98.0 10.0 \n", "3 2016-08-28 100.0 10.0 \n", "4 2016-09-01 99.0 10.0 \n", "\n", " review_scores_cleanliness review_scores_checkin \\\n", "0 NaN NaN \n", "1 9.0 10.0 \n", "2 9.0 10.0 \n", "3 10.0 10.0 \n", "4 10.0 10.0 \n", "\n", " review_scores_communication review_scores_location review_scores_value \\\n", "0 NaN NaN NaN \n", "1 10.0 9.0 9.0 \n", "2 10.0 9.0 10.0 \n", "3 10.0 10.0 10.0 \n", "4 10.0 9.0 10.0 \n", "\n", " requires_license license jurisdiction_names instant_bookable \\\n", "0 f NaN NaN f \n", "1 f NaN NaN t \n", "2 f NaN NaN f \n", "3 f NaN NaN f \n", "4 f NaN NaN f \n", "\n", " cancellation_policy require_guest_profile_picture \\\n", "0 moderate f \n", "1 moderate f \n", "2 moderate t \n", "3 moderate f \n", "4 flexible f \n", "\n", " require_guest_phone_verification calculated_host_listings_count \\\n", "0 f 1 \n", "1 f 1 \n", "2 f 1 \n", "3 f 1 \n", "4 f 1 \n", "\n", " reviews_per_month \n", "0 NaN \n", "1 1.30 \n", "2 0.47 \n", "3 1.00 \n", "4 2.25 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "listings.head()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3585" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(listings)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "At the moment our listings have several geospatial variables, the most important of which are longitude and latitude, which give the exact coordinates of the BnB in question. This means that it's easy for us to, say, plot every BnB location on a map:" ] }, { "cell_type": "code", "execution_count": 525, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 525, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(listings['longitude'], listings['latitude'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Chances are you've already done this before, and it's a perfectly adequate way to get started working with locations. In this plot we see...not much, really. If you're very intimately familiar with the layout of the city of Boston, you will probably be able to make sense of some of these clusters which are, to me, not being from the city, totally mysterious.\n", "\n", "In other words, this plot is missing something important: **geospatial context**.\n", "\n", "Additionally, this display is **unprojected**—it's displayed in terms of raw coordinates. The amount of distance contained in a coordinate degree varies greatly depending on where you are, so this naive plot potentially pretty badly distorts distances.\n", "\n", "We'll come back to the projection issue later; for now, there's an easy fix for both these problems.\n", "\n", "Enter [mplleaflet](https://github.com/jwass/mplleaflet). mplleaflet is a tool that automatically takes a coordinate matplotlib plot of any kind and places it on top of a [leaflet](http://leafletjs.com/) slippy map. The best part is that it's just one additional line of code. Just throw mplleaflet.display() after generating your plot to drop it inline in your Jupyter notebook:" ] }, { "cell_type": "code", "execution_count": 526, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "