{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Let's make a heat map"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Heat maps are useful ways of aggregating points on a 2D plane (including, but not limited to, maps) that highlight the density. In this notebook we'll explore simple ways of making heatmaps, skipping over for now the more complicated ways like using matplotlib.\n",
"\n",
"_Note: if you're viewing this on GitHub, charting libraries that output Javascript (Bokeh, Holoviews, Altair) won't display. Try viewing the notebook on [nbviewer](http://nbviewer.jupyter.org/github/dovinmu/python-viz-notebooks/tree/master/) instead._\n",
"\n",
"First, we're going to need geographic data. Open Street Map is a fantastic repository of it, maintained by a community \n",
"of volunteers and free to use. We'll use a python wrapper to the Overpass API."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import overpass\n",
"api = overpass.API()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We'll also be making a couple of plots with matplotlib, and for convenience we can tell it to always display those in the notebook."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Overpass API is the framework that Open Street Maps has developed to access their data. It's the way to select certain parts of the very large amount of geographic data, letting you download a dataset of, say, everything that's labeled as an embassy. \n",
"\n",
"First, let's start out with a small amount of data to make sure we understand what we're doing. In order to satiate my addiction to caffeine, I'm going to request all the coffeeshops in the city of Seattle (my home city). The Overpass module for Python is just a simple wrapper around the Overpass API. We're basically just going to pass a string that's written in the query language. To make things easy we'll hardcode the latitude and longitude into the text of the query; these can easily be found by clicking on a point of Google Maps, or if you're using Open Street Maps, by right-clicking and selecting Show Address. "
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"response = api.Get('node[\"amenity\"=\"cafe\"](47.5, -122.436, 47.734, -122.235);')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The response returns a lot of data we don't care about, so let's create a utility function to return just the name, latitude, and longitude in a pandas DataFrame. There's actually nothing that says it has to be a cafe, so we can generalize the function when we name it to be any of this type of data fetched from Open Street Map."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from pandas import DataFrame\n",
"\n",
"def parse_fetched_OSM_data(response):\n",
" reduced = []\n",
" for feature in response['features']:\n",
" if 'name' in feature['properties']:\n",
" reduced.append((feature['properties']['name'], *feature['geometry']['coordinates']))\n",
" return DataFrame.from_records(sorted(reduced), columns=[\"name\", \"lon\", \"lat\"])\n",
" \n",
"seattle_cafes = parse_fetched_OSM_data(response)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we have a list of tuples, each of which contain the name of the cafe and its latitude and longitude. To make things easier, let's load the data into a pandas DataFrame."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"
\n",
" \n",
" \n",
" | \n",
" name | \n",
" lon | \n",
" lat | \n",
"
\n",
" \n",
" \n",
" \n",
" | 66 | \n",
" Caffe Ladro | \n",
" -122.356521 | \n",
" 47.625335 | \n",
"
\n",
" \n",
" | 462 | \n",
" Starbucks | \n",
" -122.235249 | \n",
" 47.586423 | \n",
"
\n",
" \n",
" | 81 | \n",
" Caffè Appassionato | \n",
" -122.342497 | \n",
" 47.661536 | \n",
"
\n",
" \n",
" | 356 | \n",
" Samir's Mediterranean Grill | \n",
" -122.313507 | \n",
" 47.659910 | \n",
"
\n",
" \n",
" | 74 | \n",
" Caffe Vita | \n",
" -122.355110 | \n",
" 47.682730 | \n",
"
\n",
" \n",
" | 179 | \n",
" Flame Catering Cafe | \n",
" -122.331085 | \n",
" 47.602123 | \n",
"
\n",
" \n",
" | 393 | \n",
" Starbucks | \n",
" -122.351920 | \n",
" 47.614049 | \n",
"
\n",
" \n",
" | 416 | \n",
" Starbucks | \n",
" -122.335989 | \n",
" 47.661729 | \n",
"
\n",
" \n",
" | 491 | \n",
" The Crumpet Shop | \n",
" -122.340390 | \n",
" 47.608968 | \n",
"
\n",
" \n",
" | 284 | \n",
" Moondrop Coffee & Tea | \n",
" -122.381368 | \n",
" 47.589167 | \n",
"
\n",
" \n",
" | 302 | \n",
" Old School Frozen Custard | \n",
" -122.314702 | \n",
" 47.614232 | \n",
"
\n",
" \n",
" | 83 | \n",
" Caffè Fiore | \n",
" -122.360822 | \n",
" 47.632460 | \n",
"
\n",
" \n",
" | 502 | \n",
" The Stage Door | \n",
" -122.355960 | \n",
" 47.690720 | \n",
"
\n",
" \n",
" | 192 | \n",
" Gio's | \n",
" -122.406647 | \n",
" 47.674368 | \n",
"
\n",
" \n",
" | 567 | \n",
" Zeitgeist Coffee and Art | \n",
" -122.331856 | \n",
" 47.599091 | \n",
"
\n",
" \n",
" | 562 | \n",
" Yellow Dot Cafe | \n",
" -122.349403 | \n",
" 47.649224 | \n",
"
\n",
" \n",
" | 327 | \n",
" Pioneer Square Deli | \n",
" -122.331364 | \n",
" 47.599335 | \n",
"
\n",
" \n",
" | 379 | \n",
" Square Knot | \n",
" -122.316720 | \n",
" 47.548900 | \n",
"
\n",
" \n",
" | 370 | \n",
" Sound Soups | \n",
" -122.334730 | \n",
" 47.605203 | \n",
"
\n",
" \n",
" | 100 | \n",
" Chatterbox Cafe | \n",
" -122.316581 | \n",
" 47.611725 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" name lon lat\n",
"66 Caffe Ladro -122.356521 47.625335\n",
"462 Starbucks -122.235249 47.586423\n",
"81 Caffè Appassionato -122.342497 47.661536\n",
"356 Samir's Mediterranean Grill -122.313507 47.659910\n",
"74 Caffe Vita -122.355110 47.682730\n",
"179 Flame Catering Cafe -122.331085 47.602123\n",
"393 Starbucks -122.351920 47.614049\n",
"416 Starbucks -122.335989 47.661729\n",
"491 The Crumpet Shop -122.340390 47.608968\n",
"284 Moondrop Coffee & Tea -122.381368 47.589167\n",
"302 Old School Frozen Custard -122.314702 47.614232\n",
"83 Caffè Fiore -122.360822 47.632460\n",
"502 The Stage Door -122.355960 47.690720\n",
"192 Gio's -122.406647 47.674368\n",
"567 Zeitgeist Coffee and Art -122.331856 47.599091\n",
"562 Yellow Dot Cafe -122.349403 47.649224\n",
"327 Pioneer Square Deli -122.331364 47.599335\n",
"379 Square Knot -122.316720 47.548900\n",
"370 Sound Soups -122.334730 47.605203\n",
"100 Chatterbox Cafe -122.316581 47.611725"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"seattle_cafes.sample(20)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"How many coffeeshops did we get?"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"576"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(seattle_cafes)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So many coffeeshops, so little time.\n",
"\n",
"Anyway, DataFrames have some nice built-in plotting functions that output matplotlib charts, but abstract away the annoying details. This is what it looks like when we scatter plot by geographic coordinates."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"seattle_cafes.plot.scatter(x='lon', y='lat')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So here we've got a quick-and-dirty point-plotting that actually lets us see some geography, specifically the waterfront around downtown Seattle in the center, which is kind of neat. \n",
"\n",
"To make the actual heat map, we're going to use [Folium](https://github.com/python-visualization/folium), a Python wrapper to [Leaflet](http://leafletjs.com/). Though it doesn't have some cartography features like map projections, it's great for simple interactive maps."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import folium\n",
"from folium.plugins import HeatMap"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Folium doesn't natively work with pandas, so we'll have to do a little work first, and convert the DataFrame into a list of [latitude, longitude] vectors."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[[47.5171783, -122.3549598], [47.6120244, -122.3399314]]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"coords = [[item[1].lat, item[1].lon] for item in seattle_cafes.iterrows()]\n",
"coords[:2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The rest is just instantiating the map with the right parameters, which do take some tweaking to get right."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hmap = folium.Map(location=[47.6, -122.35], zoom_start=12)\n",
"hm_wide = HeatMap( coords, \n",
" max_zoom=1,\n",
" min_opacity=0.2,\n",
" radius=10, blur=15, \n",
" )\n",
"hmap.add_child(hm_wide)\n",
"hmap"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's try a heatmap for the whole country. I've saved the query as a file, since it's ~8mb."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"lines = \"\"\n",
"with open('cafes_us_OSM.geojson', encoding='utf-8') as f:\n",
" result = json.loads(f.read())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sure is convenient we wrote that helper function above, so we don't have to duplicate all that code."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" name | \n",
" lon | \n",
" lat | \n",
"
\n",
" \n",
" \n",
" \n",
" | 15018 | \n",
" Starbucks | \n",
" -81.508187 | \n",
" 41.148689 | \n",
"
\n",
" \n",
" | 2469 | \n",
" Caffe mille gusti | \n",
" -73.605203 | \n",
" 45.539060 | \n",
"
\n",
" \n",
" | 12158 | \n",
" Spencer's Coffee | \n",
" -86.442094 | \n",
" 36.993715 | \n",
"
\n",
" \n",
" | 4369 | \n",
" Cutter Point Coffee | \n",
" -122.807083 | \n",
" 46.996474 | \n",
"
\n",
" \n",
" | 15492 | \n",
" Starbucks | \n",
" -77.033170 | \n",
" 38.904215 | \n",
"
\n",
" \n",
" | 16682 | \n",
" Starbucks Coffee | \n",
" -77.096055 | \n",
" 38.917237 | \n",
"
\n",
" \n",
" | 18742 | \n",
" Tim Hortons | \n",
" -76.804788 | \n",
" 44.279883 | \n",
"
\n",
" \n",
" | 14859 | \n",
" Starbucks | \n",
" -83.687939 | \n",
" 42.255973 | \n",
"
\n",
" \n",
" | 13973 | \n",
" Starbucks | \n",
" -105.762477 | \n",
" 39.885281 | \n",
"
\n",
" \n",
" | 7839 | \n",
" Jittery Joe's Roaster | \n",
" -83.386533 | \n",
" 33.967248 | \n",
"
\n",
" \n",
" | 15666 | \n",
" Starbucks | \n",
" -75.166717 | \n",
" 39.952529 | \n",
"
\n",
" \n",
" | 2094 | \n",
" Cafe Happy | \n",
" -122.206364 | \n",
" 47.675663 | \n",
"
\n",
" \n",
" | 16339 | \n",
" Starbucks Coffee | \n",
" -97.375888 | \n",
" 32.672069 | \n",
"
\n",
" \n",
" | 3616 | \n",
" Coffee Cup Cafe | \n",
" -114.154683 | \n",
" 46.242606 | \n",
"
\n",
" \n",
" | 6837 | \n",
" Granada Coffee Company | \n",
" -96.180442 | \n",
" 38.407781 | \n",
"
\n",
" \n",
" | 3951 | \n",
" Cookie Jar | \n",
" -96.726585 | \n",
" 43.544929 | \n",
"
\n",
" \n",
" | 16043 | \n",
" Starbucks | \n",
" -71.085667 | \n",
" 42.363032 | \n",
"
\n",
" \n",
" | 6908 | \n",
" GreenStreet | \n",
" -80.243994 | \n",
" 25.726735 | \n",
"
\n",
" \n",
" | 6106 | \n",
" Es Café | \n",
" -71.300074 | \n",
" 46.719430 | \n",
"
\n",
" \n",
" | 1403 | \n",
" Bluebird Coffee Shop & Tea House | \n",
" -90.971862 | \n",
" 36.263205 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" name lon lat\n",
"15018 Starbucks -81.508187 41.148689\n",
"2469 Caffe mille gusti -73.605203 45.539060\n",
"12158 Spencer's Coffee -86.442094 36.993715\n",
"4369 Cutter Point Coffee -122.807083 46.996474\n",
"15492 Starbucks -77.033170 38.904215\n",
"16682 Starbucks Coffee -77.096055 38.917237\n",
"18742 Tim Hortons -76.804788 44.279883\n",
"14859 Starbucks -83.687939 42.255973\n",
"13973 Starbucks -105.762477 39.885281\n",
"7839 Jittery Joe's Roaster -83.386533 33.967248\n",
"15666 Starbucks -75.166717 39.952529\n",
"2094 Cafe Happy -122.206364 47.675663\n",
"16339 Starbucks Coffee -97.375888 32.672069\n",
"3616 Coffee Cup Cafe -114.154683 46.242606\n",
"6837 Granada Coffee Company -96.180442 38.407781\n",
"3951 Cookie Jar -96.726585 43.544929\n",
"16043 Starbucks -71.085667 42.363032\n",
"6908 GreenStreet -80.243994 25.726735\n",
"6106 Es Café -71.300074 46.719430\n",
"1403 Bluebird Coffee Shop & Tea House -90.971862 36.263205"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"us_cafes = parse_fetched_OSM_data(result)\n",
"us_cafes.sample(20)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"20172"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(us_cafes)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"us_cafes.plot.scatter(x='lon', y='lat')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can see the coasts pretty well just from coffeeshops, which isn't surprising."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"coffeeshops: 20172\n"
]
},
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hmap = folium.Map(location=[35, -90], zoom_start=4)\n",
"coords = [[item[1].lat, item[1].lon] for item in us_cafes.iterrows()]\n",
"print(\"coffeeshops:\", len(coords))\n",
"hm_wide = HeatMap( coords, \n",
" max_zoom=1,\n",
" min_opacity=0.1,\n",
" radius=4, blur=7,\n",
" )\n",
"hmap.add_child(hm_wide)\n",
"hmap"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I wonder how many of those are Starbucks? Let's get a count of the most common cafes."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"name\n",
"Starbucks 3768\n",
"Tim Hortons 811\n",
"Dunkin' Donuts 730\n",
"Starbucks Coffee 657\n",
"Dunkin Donuts 204\n",
"Second Cup 162\n",
"Caribou Coffee 132\n",
"Peet's Coffee & Tea 81\n",
"Panera Bread 80\n",
"Coffee Time 74\n",
"Jamba Juice 65\n",
"Starbuck's 64\n",
"Subway 62\n",
"Peet's Coffee 49\n",
"Country Style 48\n",
"Au Bon Pain 33\n",
"Biggby Coffee 31\n",
"Le Pain Quotidien 31\n",
"club house 30\n",
"Tropical Smoothie Cafe 28\n",
"Name: count, dtype: int64"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"us_cafes['count'] = 1\n",
"us_cafes_counted = us_cafes.groupby(\"name\")['count'].count().sort_values(ascending=False)\n",
"us_cafes_counted[:20]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks like the data are somewhat messy, since there are a couple of different names for Starbucks. It would be interesting to look at a heatmap of _only_ non-chain coffeeshops. Let's take out the most ones. First we'll get a list of the names of the 50 most common cafes."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Starbucks', 'Tim Hortons', 'Dunkin' Donuts', 'Starbucks Coffee',\n",
" 'Dunkin Donuts', 'Second Cup', 'Caribou Coffee', 'Peet's Coffee & Tea',\n",
" 'Panera Bread', 'Coffee Time', 'Jamba Juice', 'Starbuck's', 'Subway',\n",
" 'Peet's Coffee', 'Country Style', 'Au Bon Pain', 'Biggby Coffee',\n",
" 'Le Pain Quotidien', 'club house', 'Tropical Smoothie Cafe',\n",
" 'The Coffee Bean & Tea Leaf', 'Panera', 'Cafeteria',\n",
" 'Cold Stone Creamery', 'Blenz Coffee', 'Coffee Culture',\n",
" 'Baskin-Robbins', 'Bruegger's Bagels', 'Tully's Coffee',\n",
" 'Coffee Bean & Tea Leaf', 'Einstein Bros Bagels', 'Bridgehead',\n",
" 'Peet's', 'Cosi', 'Einstein Bros. Bagels', 'Timothy's World Coffee',\n",
" 'Peet's Coffee and Tea', 'Van Houtte', 'Dutch Bros', 'Presse Café',\n",
" 'Corner Bakery Cafe', 'Philz Coffee', 'Tim Horton's', 'Tim Horton',\n",
" 'Timothy's', 'Corner Bakery', 'Aroma Espresso Bar',\n",
" 'Café Starbucks Coffee', 'Top Pot Doughnuts', 'Club House'],\n",
" dtype='object', name='name')"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"chains = us_cafes_counted.index[:50]\n",
"chains"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"How many individual cafes is this? We can create a selection of cafes with one of these names by using the isin function, which outputs a True/False for each row. We use that to filter out the rest of the cafes, and finally get a tally."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7662"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(us_cafes[us_cafes.name.isin(chains)])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That's the number of cafes we'll remove."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"12510"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(us_cafes[~us_cafes.name.isin(chains)])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And the number still in.\n",
"\n",
"Looks like we don't have nearly complete data, as the number of Starbucks in the US is closer to 12,000 (see References section). Still, should be good enough for our purposes."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"coffeeshops 12510\n"
]
},
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hmap = folium.Map(location=[35, -90], zoom_start=4)\n",
"coords = [[item[1].lat, item[1].lon] for item in us_cafes[~us_cafes.name.isin(chains)].iterrows()]\n",
"print(\"coffeeshops\", len(coords))\n",
"hm_wide = HeatMap( coords, \n",
" max_zoom=0.1,\n",
" min_opacity=10,\n",
" radius=4, blur=7, \n",
" )\n",
"hmap.add_child(hm_wide)\n",
"hmap"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The two heatmaps look almost exactly the same, although they have subtle differences. There are some hot in the Midwest that shrink noticeably when you remove the chains, like Dallas. But all in all, a good showing for independent coffeeshops.\n",
"\n",
"Thanks for reading!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### References\n",
"Heatmaps with Folium in Python: https://alcidanalytics.com/p/geographic-heatmap-in-python\n",
"\n",
"Number of Starbucks in the US: https://www.statista.com/statistics/218360/number-of-starbucks-stores-in-the-us/\n",
"\n",
"Getting cafe data: http://overpass-turbo.eu/, https://wiki.openstreetmap.org/wiki/Overpass_API"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}