{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Spatial join\n", "\n", "[Spatial join](http://wiki.gis.com/wiki/index.php/Spatial_Join) is\n", "yet another classic GIS problem. Getting attributes from one layer and\n", "transferring them into another layer based on their spatial relationship\n", "is something you most likely need to do on a regular basis.\n", "\n", "In the previous section we learned how to perform **a Point in Polygon query**.\n", "We can now use the same logic to conduct **a spatial join** between two layers based on their\n", "spatial relationship. We could, for example, join the attributes of a polygon layer into a point layer where each point would get the\n", "attributes of a polygon that ``contains`` the point.\n", "\n", "Luckily, [spatial join is already implemented in Geopandas](http://geopandas.org/mergingdata.html#spatial-joins), thus we do not need to create our own function for doing it. There are three possible types of\n", "join that can be applied in spatial join that are determined with ``op`` -parameter in the ``gpd.sjoin()`` -function:\n", "\n", "- ``\"intersects\"``\n", "- ``\"within\"``\n", "- ``\"contains\"``\n", "\n", "Sounds familiar? Yep, all of those spatial relationships were discussed\n", "in the [Point in Polygon lesson](point-in-polygon.ipynb), thus you should know how they work. \n", "\n", "Furthermore, pay attention to the different options for the type of join via the `how` parameter; \"left\", \"right\" and \"inner\". You can read more about these options in the [geopandas sjoin documentation](http://geopandas.org/mergingdata.html#sjoin-arguments) and pandas guide for [merge, join and concatenate](https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html)\n", "\n", "Let's perform a spatial join between these two layers:\n", "- **Addresses:** the geocoded address-point (we created this Shapefile in the geocoding tutorial)\n", "- **Population grid:** 250m x 250m grid polygon layer that contains population information from the Helsinki Region.\n", " - The population grid a dataset is produced by the **Helsinki Region Environmental\n", "Services Authority (HSY)** (see [this page](https://www.hsy.fi/fi/asiantuntijalle/avoindata/Sivut/AvoinData.aspx?dataID=7) to access data from different years).\n", " - You can download the data from [from this link](https://www.hsy.fi/sites/AvoinData/AvoinData/SYT/Tietoyhteistyoyksikko/Shape%20(Esri)/V%C3%A4est%C3%B6tietoruudukko/Vaestotietoruudukko_2018_SHP.zip) in the [Helsinki Region Infroshare\n", "(HRI) open data portal](https://hri.fi/en_gb/).\n", "\n", "\n", "\n", "- Here, we will access the data directly from the HSY wfs:\n", "\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import geopandas as gpd\n", "from pyproj import CRS\n", "import requests\n", "import geojson\n", "\n", "# Specify the url for web feature service\n", "url = 'https://kartta.hsy.fi/geoserver/wfs'\n", "\n", "# Specify parameters (read data in json format). \n", "# Available feature types in this particular data source: http://geo.stat.fi/geoserver/vaestoruutu/wfs?service=wfs&version=2.0.0&request=describeFeatureType\n", "params = dict(service='WFS', \n", " version='2.0.0', \n", " request='GetFeature', \n", " typeName='asuminen_ja_maankaytto:Vaestotietoruudukko_2018', \n", " outputFormat='json')\n", "\n", "# Fetch data from WFS using requests\n", "r = requests.get(url, params=params)\n", "\n", "# Create GeoDataFrame from geojson\n", "pop = gpd.GeoDataFrame.from_features(geojson.loads(r.content))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the result: " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
geometryindexasukkaitaasvaljyysika0_9ika10_19ika20_29ika30_39ika40_49ika50_59ika60_69ika70_79ika_yli80
0MULTIPOLYGON Z (((25476499.999 6674248.999 0.0...3342108451123672617864
1MULTIPOLYGON Z (((25476749.997 6674498.998 0.0...3503273353524526240262590
2MULTIPOLYGON Z (((25476999.994 6675749.004 0.0...36602393446242445333025102
3MULTIPOLYGON Z (((25476999.994 6675499.004 0.0...366120230523713364311433
4MULTIPOLYGON Z (((25476999.994 6675249.005 0.0...366226130643236643420632
\n", "
" ], "text/plain": [ " geometry index asukkaita \\\n", "0 MULTIPOLYGON Z (((25476499.999 6674248.999 0.0... 3342 108 \n", "1 MULTIPOLYGON Z (((25476749.997 6674498.998 0.0... 3503 273 \n", "2 MULTIPOLYGON Z (((25476999.994 6675749.004 0.0... 3660 239 \n", "3 MULTIPOLYGON Z (((25476999.994 6675499.004 0.0... 3661 202 \n", "4 MULTIPOLYGON Z (((25476999.994 6675249.005 0.0... 3662 261 \n", "\n", " asvaljyys ika0_9 ika10_19 ika20_29 ika30_39 ika40_49 ika50_59 \\\n", "0 45 11 23 6 7 26 17 \n", "1 35 35 24 52 62 40 26 \n", "2 34 46 24 24 45 33 30 \n", "3 30 52 37 13 36 43 11 \n", "4 30 64 32 36 64 34 20 \n", "\n", " ika60_69 ika70_79 ika_yli80 \n", "0 8 6 4 \n", "1 25 9 0 \n", "2 25 10 2 \n", "3 4 3 3 \n", "4 6 3 2 " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pop.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Okey so we have multiple columns in the dataset but the most important\n", "one here is the column `asukkaita` (\"population\" in Finnish) that\n", "tells the amount of inhabitants living under that polygon.\n", "\n", "- Let's change the name of that column into `pop18` so that it is\n", " more intuitive. As you might remember, we can easily rename (Geo)DataFrame column names using the ``rename()`` function where we pass a dictionary of new column names like this: ``columns={'oldname': 'newname'}``." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['geometry', 'index', 'pop18', 'asvaljyys', 'ika0_9', 'ika10_19',\n", " 'ika20_29', 'ika30_39', 'ika40_49', 'ika50_59', 'ika60_69', 'ika70_79',\n", " 'ika_yli80'],\n", " dtype='object')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Change the name of a column\n", "pop = pop.rename(columns={'asukkaita': 'pop18'})\n", "\n", "# Check the column names\n", "pop.columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's also get rid of all unnecessary columns by selecting only columns that we need i.e. ``pop18`` and ``geometry``" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Subset columns\n", "pop = pop[[\"pop18\", \"geometry\"]]" ] }, { "cell_type": "code", "execution_count": 5, "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", "
pop18geometry
0108MULTIPOLYGON Z (((25476499.999 6674248.999 0.0...
1273MULTIPOLYGON Z (((25476749.997 6674498.998 0.0...
2239MULTIPOLYGON Z (((25476999.994 6675749.004 0.0...
3202MULTIPOLYGON Z (((25476999.994 6675499.004 0.0...
4261MULTIPOLYGON Z (((25476999.994 6675249.005 0.0...
\n", "
" ], "text/plain": [ " pop18 geometry\n", "0 108 MULTIPOLYGON Z (((25476499.999 6674248.999 0.0...\n", "1 273 MULTIPOLYGON Z (((25476749.997 6674498.998 0.0...\n", "2 239 MULTIPOLYGON Z (((25476999.994 6675749.004 0.0...\n", "3 202 MULTIPOLYGON Z (((25476999.994 6675499.004 0.0...\n", "4 261 MULTIPOLYGON Z (((25476999.994 6675249.005 0.0..." ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pop.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have cleaned the data and have only those columns that we need\n", "for our analysis." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Join the layers\n", "\n", "Now we are ready to perform the spatial join between the two layers that\n", "we have. The aim here is to get information about **how many people live\n", "in a polygon that contains an individual address-point** . Thus, we want\n", "to join attributes from the population layer we just modified into the\n", "addresses point layer ``addresses.shp`` that we created trough gecoding in the previous section.\n", "\n", "- Read the addresses layer into memory:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Addresses filpath\n", "addr_fp = r\"data/addresses.shp\"\n", "\n", "# Read data\n", "addresses = gpd.read_file(addr_fp)" ] }, { "cell_type": "code", "execution_count": 7, "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", "
addressidaddrgeometry
0Ruoholahti, 14, Itämerenkatu, Ruoholahti, Läns...1000Itämerenkatu 14, 00101 Helsinki, FinlandPOINT (24.91556 60.16320)
1Kamppi, 1, Kampinkuja, Kamppi, Eteläinen suurp...1001Kampinkuja 1, 00100 Helsinki, FinlandPOINT (24.93169 60.16902)
2Kauppakeskus Citycenter, 8, Kaivokatu, Keskust...1002Kaivokatu 8, 00101 Helsinki, FinlandPOINT (24.94179 60.16989)
3Hermannin rantatie, Verkkosaari, Kalasatama, S...1003Hermannin rantatie 1, 00580 Helsinki, FinlandPOINT (24.97783 60.18892)
4Hesburger, 9, Tyynenmerenkatu, Jätkäsaari, Län...1005Tyynenmerenkatu 9, 00220 Helsinki, FinlandPOINT (24.92160 60.15665)
\n", "
" ], "text/plain": [ " address id \\\n", "0 Ruoholahti, 14, Itämerenkatu, Ruoholahti, Läns... 1000 \n", "1 Kamppi, 1, Kampinkuja, Kamppi, Eteläinen suurp... 1001 \n", "2 Kauppakeskus Citycenter, 8, Kaivokatu, Keskust... 1002 \n", "3 Hermannin rantatie, Verkkosaari, Kalasatama, S... 1003 \n", "4 Hesburger, 9, Tyynenmerenkatu, Jätkäsaari, Län... 1005 \n", "\n", " addr geometry \n", "0 Itämerenkatu 14, 00101 Helsinki, Finland POINT (24.91556 60.16320) \n", "1 Kampinkuja 1, 00100 Helsinki, Finland POINT (24.93169 60.16902) \n", "2 Kaivokatu 8, 00101 Helsinki, Finland POINT (24.94179 60.16989) \n", "3 Hermannin rantatie 1, 00580 Helsinki, Finland POINT (24.97783 60.18892) \n", "4 Tyynenmerenkatu 9, 00220 Helsinki, Finland POINT (24.92160 60.15665) " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check the head of the file\n", "addresses.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to do a spatial join, the layers need to be in the same projection\n", "\n", "- Check the crs of input layers:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "Name: WGS 84\n", "Axis Info [ellipsoidal]:\n", "- Lat[north]: Geodetic latitude (degree)\n", "- Lon[east]: Geodetic longitude (degree)\n", "Area of Use:\n", "- name: World\n", "- bounds: (-180.0, -90.0, 180.0, 90.0)\n", "Datum: World Geodetic System 1984\n", "- Ellipsoid: WGS 84\n", "- Prime Meridian: Greenwich" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "addresses.crs" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "pop.crs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If the crs information is missing from the population grid, we can **define the coordinate reference system** as **ETRS GK-25 (EPSG:3879)** because we know what it is based on the [population grid metadata](https://hri.fi/data/dataset/vaestotietoruudukko). " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# Define crs\n", "pop.crs = CRS.from_epsg(3879).to_wkt()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "Name: ETRS89 / GK25FIN\n", "Axis Info [cartesian]:\n", "- N[north]: Northing (metre)\n", "- E[east]: Easting (metre)\n", "Area of Use:\n", "- name: Finland - 24.5°E to 25.5°E onshore nominal\n", "- bounds: (24.5, 59.94, 25.5, 68.9)\n", "Coordinate Operation:\n", "- name: Finland Gauss-Kruger zone 25\n", "- method: Transverse Mercator\n", "Datum: European Terrestrial Reference System 1989\n", "- Ellipsoid: GRS 1980\n", "- Prime Meridian: Greenwich" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pop.crs" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Are the layers in the same projection?\n", "addresses.crs == pop.crs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's re-project addresses to the projection of the population layer:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "addresses = addresses.to_crs(pop.crs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Let's make sure that the coordinate reference system of the layers\n", "are identical" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PROJCRS[\"ETRS89 / GK25FIN\",BASEGEOGCRS[\"ETRS89\",DATUM[\"European Terrestrial Reference System 1989\",ELLIPSOID[\"GRS 1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1]]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],ID[\"EPSG\",4258]],CONVERSION[\"Finland Gauss-Kruger zone 25\",METHOD[\"Transverse Mercator\",ID[\"EPSG\",9807]],PARAMETER[\"Latitude of natural origin\",0,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8801]],PARAMETER[\"Longitude of natural origin\",25,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8802]],PARAMETER[\"Scale factor at natural origin\",1,SCALEUNIT[\"unity\",1],ID[\"EPSG\",8805]],PARAMETER[\"False easting\",25500000,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8806]],PARAMETER[\"False northing\",0,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8807]]],CS[Cartesian,2],AXIS[\"northing (N)\",north,ORDER[1],LENGTHUNIT[\"metre\",1]],AXIS[\"easting (E)\",east,ORDER[2],LENGTHUNIT[\"metre\",1]],USAGE[SCOPE[\"unknown\"],AREA[\"Finland - 24.5°E to 25.5°E onshore nominal\"],BBOX[59.94,24.5,68.9,25.5]],ID[\"EPSG\",3879]]\n", "PROJCRS[\"ETRS89 / GK25FIN\",BASEGEOGCRS[\"ETRS89\",DATUM[\"European Terrestrial Reference System 1989\",ELLIPSOID[\"GRS 1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1]]],PRIMEM[\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],ID[\"EPSG\",4258]],CONVERSION[\"Finland Gauss-Kruger zone 25\",METHOD[\"Transverse Mercator\",ID[\"EPSG\",9807]],PARAMETER[\"Latitude of natural origin\",0,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8801]],PARAMETER[\"Longitude of natural origin\",25,ANGLEUNIT[\"degree\",0.0174532925199433],ID[\"EPSG\",8802]],PARAMETER[\"Scale factor at natural origin\",1,SCALEUNIT[\"unity\",1],ID[\"EPSG\",8805]],PARAMETER[\"False easting\",25500000,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8806]],PARAMETER[\"False northing\",0,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8807]]],CS[Cartesian,2],AXIS[\"northing (N)\",north,ORDER[1],LENGTHUNIT[\"metre\",1]],AXIS[\"easting (E)\",east,ORDER[2],LENGTHUNIT[\"metre\",1]],USAGE[SCOPE[\"unknown\"],AREA[\"Finland - 24.5°E to 25.5°E onshore nominal\"],BBOX[59.94,24.5,68.9,25.5]],ID[\"EPSG\",3879]]\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check the crs of address points\n", "print(addresses.crs)\n", "\n", "# Check the crs of population layer\n", "print(pop.crs)\n", "\n", "# Do they match now?\n", "addresses.crs == pop.crs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now they should be identical. Thus, we can be sure that when doing spatial\n", "queries between layers the locations match and we get the right results\n", "e.g. from the spatial join that we are conducting here.\n", "\n", "- Let's now join the attributes from ``pop`` GeoDataFrame into\n", " ``addresses`` GeoDataFrame by using ``gpd.sjoin()`` -function:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# Make a spatial join\n", "join = gpd.sjoin(addresses, pop, how=\"inner\", op=\"within\")" ] }, { "cell_type": "code", "execution_count": 16, "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", "
addressidaddrgeometryindex_rightpop18
0Ruoholahti, 14, Itämerenkatu, Ruoholahti, Läns...1000Itämerenkatu 14, 00101 Helsinki, FinlandPOINT (25495311.608 6672258.695)1514515
1Kamppi, 1, Kampinkuja, Kamppi, Eteläinen suurp...1001Kampinkuja 1, 00100 Helsinki, FinlandPOINT (25496207.840 6672906.173)1600182
4Hesburger, 9, Tyynenmerenkatu, Jätkäsaari, Län...1005Tyynenmerenkatu 9, 00220 Helsinki, FinlandPOINT (25495645.995 6671528.068)15501435
6Itäväylä, Vartioharju, Vartiokylä, Helsinki, H...1007Itäväylä 3, 00950 Helsinki, FinlandPOINT (25506221.445 6678859.295)3007155
7Tapulikaupungintie, Tapulikaupunki, Suutarila,...1008Tapulikaupungintie 3, 00750 Helsinki, FinlandPOINT (25501664.428 6685108.440)2264262
\n", "
" ], "text/plain": [ " address id \\\n", "0 Ruoholahti, 14, Itämerenkatu, Ruoholahti, Läns... 1000 \n", "1 Kamppi, 1, Kampinkuja, Kamppi, Eteläinen suurp... 1001 \n", "4 Hesburger, 9, Tyynenmerenkatu, Jätkäsaari, Län... 1005 \n", "6 Itäväylä, Vartioharju, Vartiokylä, Helsinki, H... 1007 \n", "7 Tapulikaupungintie, Tapulikaupunki, Suutarila,... 1008 \n", "\n", " addr \\\n", "0 Itämerenkatu 14, 00101 Helsinki, Finland \n", "1 Kampinkuja 1, 00100 Helsinki, Finland \n", "4 Tyynenmerenkatu 9, 00220 Helsinki, Finland \n", "6 Itäväylä 3, 00950 Helsinki, Finland \n", "7 Tapulikaupungintie 3, 00750 Helsinki, Finland \n", "\n", " geometry index_right pop18 \n", "0 POINT (25495311.608 6672258.695) 1514 515 \n", "1 POINT (25496207.840 6672906.173) 1600 182 \n", "4 POINT (25495645.995 6671528.068) 1550 1435 \n", "6 POINT (25506221.445 6678859.295) 3007 155 \n", "7 POINT (25501664.428 6685108.440) 2264 262 " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "join.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Awesome! Now we have performed a successful spatial join where we got\n", "two new columns into our ``join`` GeoDataFrame, i.e. ``index_right``\n", "that tells the index of the matching polygon in the population grid and\n", "``pop18`` which is the population in the cell where the address-point is\n", "located.\n", "\n", "- Let's still check how many rows of data we have now:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "27" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(join)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Did we lose some data here? \n", "\n", "- Check how many addresses we had originally:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "34" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(addresses)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we plot the layers on top of each other, we can observe that some of the points are located outside the populated grid squares (increase figure size if you can't see this properly!)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "# Create a figure with one subplot\n", "fig, ax = plt.subplots(figsize=(15,8))\n", "\n", "# Plot population grid\n", "pop.plot(ax=ax)\n", "\n", "# Plot points\n", "addresses.plot(ax=ax, color='red', markersize=5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's also visualize the joined output:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the points and use the ``pop18`` column to indicate the color.\n", " ``cmap`` -parameter tells to use a sequential colormap for the\n", " values, ``markersize`` adjusts the size of a point, ``scheme`` parameter can be used to adjust the classification method based on [pysal](http://pysal.readthedocs.io/en/latest/library/esda/mapclassify.html), and ``legend`` tells that we want to have a legend:\n" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdUAAAGoCAYAAAAQBX/oAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABOtElEQVR4nO3deXxU1f3/8dcnCSGERUBAloDsCGEH9yoqRVQstoiKWuXn0rrVrVXUWlutbdXq1+VbRWvRSv1aVKiKVYtSUaBWlFVWBVkEBNkXCZD18/vjXsZJMglZhkxC3s/HYx6Zuffccz9nlnzmnnvnHHN3REREpPKSEh2AiIjI4UJJVUREJE6UVEVEROJESVVERCROlFRFRETiRElVREQkTpRUpdqwwF/NbIeZfRpj/aVm9l4Z6/p/ZvafCsZxmpmtL2X9M2Z2T0XqPpSKttnM9phZxzJs90szG3dooyu2z3vN7P+qcp9VHYOZrTGz7x+q+ssYQ7vwfZCcyDhqEyXVGsTMPgwTTt1ExxJLZRJZ6HvAECDD3Y8rutLdX3L3MytRf1y4+7Xufj8cPAGXVxyewwh3b+Duq8pQ7g/ufnU89lldxft1ilH/C2b2u0NVf0W5+9rwfZB/sLJm1t7M3MxSqiK2w5WSag1hZu2BUwAHhic2mkPmaGCNu2clOhARkYpQUq05LgdmAS8Ao6NXhN+Sx5rZv8Kuno/MrKWZPR4e2X5uZv2iyncPj3p3mtkSMxsete5DM7s66nHRLkU3s2vNbEVY91Nht2134BngxDCGnbEaYWatzexNM9tuZl+a2U/C5VcB46K2vy/GtmWKpcg2j4TrVpvZ2VHLrzCzZWb2rZmtMrNrYuzvl2a2NezGu7TI8/07M6sP/AtoHca8J2zfcWb2cfj8bjSzJ80staLPoZmdY2ZLw1i/NrPbYj23MeJ3M+tsZieY2TfRXYBm9iMzWxjej3SDRh2tjDaztWH7747arp6ZjQ/jXmZmY0o7AjSzTDObGr7em8zslyWUGx6+F3eG78HuUevuCNv9rZl9YWaDw+VJZnanma00s21m9qqZNY1Rd8zXKVydamZ/C+teYmYDo7ZrbWb/MLMt4fvnphJi/ylwKTAmrPufUav7mtlCM9tlZq+YWVrUduea2YKwzf81s96lPI9uZjeF79WtZvawmSVFPQ+/MrOvzGxz2J4jwnWFjj7D5/Z+C/5HfGtm75lZs3A3M8K/O8N2nFhSPFIKd9etBtyAL4HrgQFALnBU1LoXgK3hujRgGrCaIBEnA78DPgjL1gnr+iWQCpwBfAt0C9d/CFwdVff/A/4T9diBt4DGQDtgC3BWrLIltGM6MDaMs2+4/eCybF+BWHKBn4TPwXXABsDC9cOAToABg4C9QP9w3WlAHvAoUDdcnxX1HL0A/C6q7PoicQ4ATgBSgPbAMuCWij6HwEbglPB+kwNxlvH56RzeXwkMiVo3EbgzvH8v8H/h/fbhdn8B6gF9gGyge7j+wfA1bAJkAAuLtj9qHw3D2H8Rvt4NgeNj7LNr+PwOIXh/jiF4j6YC3YB1QOuo+DqF928h+KKZEb5OfwYmlBBLrNfpXmA/cA7Be+QBYFa4LgmYC/w6jKMjsAoYWkL9kfdE1LI1wKdAa6Bp+D64NlzXH9gMHB/ue3RYvm4J9TvwQVhPO2A54ecUuDJ8vjoCDYDXgBeLvJ4pUZ/vleFzXi98/GCssrpV7FbjjlTN7Pnw29jiMpa/MPyWv8TM/n6o4zsUzOx7BF2jr7r7XIIPxSVFir3u7nPdfT/wOrDf3f/mwbmUV4ADR6onEHzwHnT3HHefRvAP/uJyhPSgu+9097UEH/S+ZWxHW4Lzpne4+353X0BwdHpZOfZdnli+cve/hM/BeKAVcBSAu7/t7is9MB14j6B7Pdo97p4drn8buLAsAYWvwyx3z3P3NQT/7AeVI+6icoEeZtbI3Xe4+7yyxFHEBMLX2MwaEiSSCaWUv8/d97n7Z8BnBMkVgufgD2Ec64H/LaWOc4Fv3P1/wtf7W3f/JEa5i4C33X2qu+cCjxD8wz8JyCdImD3MrI67r3H3leF21wB3u/t6d88mSJIjrXznBP/j7u+E75EXo9p5LNDc3X8bfk5WEXzRGFWOugH+1903uPt24J989zr/BPizu3/i7vnuPp7gy8sJpdT1kLtvD98zj/PdZ/ZS4FF3X+Xue4C7gFGlPA9/dffl7r4PeJUyfn6lbGpcUiX4RnhWWQqaWReCN9jJ7p5J8M22JhoNvOfuW8PHf6dIFzCwKer+vhiPG4T3WwPr3L0gav1XQJtyxPNN1P29UXUfTGtgu7t/W4l9lyeWyDp33xvebQBgZmeb2aywW3InQZJpFrXtDi98bverMP6DMrOuZvZW2OW6G/hDkboPFndR54fxfWVm0yvYLfd3YIQFF7mNAOa5+1ellC8pvtYER44HRN8vqi3BF8CDaU3w/AIQvjfXAW3c/UuCz+29wGYzezmq6/Zo4PWw+3QnwZFgPuEXpzIq2s60MBkdTdBdvDOq/l+Ws+5Y9R94Ho8GflGk/raU/h6Lfq6j34+Fnr/wfkopsVb08ytlUOOSqrvPALZHLzOzTmY2xczmmtlMMzsmXPUT4Cl33xFuu7mKw600M6tHcHQwKPwn/Q1wK9DHzPqUvnVMG4C2B87HhNoBX4f3s4D0qHUty1H3waY82gA0DY+UYu27SoSJ5R8ER0RHuXtj4B2CruADmoTn4g5oRxB/UbHa/DTwOdDF3RsR/DO2GOViKVafu8929/OAFsAbBEcX5eLuSwn+2Z5N0MtR0V6bjQTdrQe0LaXsOoIu9oPZQJBkgOCnVWG9XwO4+9/d/UBvjQMPRdV/trs3jrqluXus91N5p+NaB6wuUndDdz+nhPIVqf/3RepPd/fSeg+in+vo92Oh5y9cl0fhL9ZloSnL4qDGJdUSPAvc6O4DgNsIztlBcN6ga3hSfpaZlekIt5r5IcG37x4E3TR9ge7ATIJzpuX1CUHiHGNmdczsNOAHwMvh+gUERzTpZtYZuKocdW8CMizqopxo7r4O+C/wgJmlhRdmXAW8VIF2VEYqQZfiFiDPgguYYv1U5z4zSzWzUwi6MifGKLMJOPLAhSGhhsBuYE/4Be+6csRW6DkM93+pmR0Rdo3uJng/VMTfgZuAU4ndlrJ4FbjLzJqYWRvgZ6WUfQtoaWa3mFldM2toZseXUOcwMxtsZnUIzsFmA/81s25mdkb4RWg/Qa/LgfY/A/zezI4GMLPmZnZeCbHEep1K8ymw24KLpOqZWbKZ9TSzY0up/6C/CY7yF+BaMzveAvXNbFiRL5xF3R4+722BmwlO60DQjX+rmXUwswYEPSOvuHteOeKB4PNQUM52SBE1PqmGb6KTgIlmtoDg/FWrcHUK0IXgIoWLgXFm1rjqo6yU0QTnQNa6+zcHbsCTwKXlPH+Eu+cQ/CTnbIKLm8YCl7v752GRx4Acgn8S4ylfwpsGLAG+MbOtJZS5mOCCiA0E535/4+5Ty9OGygq7n28i+Ge+g+DI7c0ixb4J120geA6ujXqOouv6nOCf2qqwG681wRe7SwguAPsL3/3zK4tYz+FlwJqwK/la4MflqC/aBILPwrSoUwnl9VtgPcGFcP8GJhEkwGLC53kIwZe2b4AVwOkxyn1B0KY/EbwnfwD8IHyv1iW4OGprWEcLgiN/gCcIXrf3zOxbgouWYiXtkl6nEoXnWH9A8CV2dbj/cUBJSfk5gvO+O83sjdLqDuufQ9CT9iTB++xLggvNSjOZ4OKpBQTn+J8Llz9PcD54RhjrfuDGg8UQI6a9wO+Bj8J2lHZ+V0pw4ErIGsWC32y+5e49zawR8IW7t4pR7hmCq/leCB+/T3DF4+yqjFfkcGVm1wGj3L3ohVgSR2bmBKcTvkx0LFK6Gn+k6u67gdVmdgFEhro7cK7xDcJvxhb8FqsrwWXxIlIBZtbKzE624LeR3Qi6al9PdFwi1UWNS6pmNgH4GOhmZustGDTgUuAqM/uMoOvswHmVd4FtZraU4GcLt7v7tkTELXKYSCU4xfItQVf1ZL67hkGk1quR3b8iIiLVUY07UhUREamuatRsBM2aNfP27dsnOgwRETkMzZ07d6u7N69MHTUqqbZv3545c+YkOgwRETkMmVlpo4yVibp/RURE4kRJVUREJE6UVEVEROKkRp1TFRGprNzcXNavX8/+/fsTHYokSFpaGhkZGdSpUyfudSupikitsn79eho2bEj79u0JJsSR2sTd2bZtG+vXr6dDhw5xr1/dvyJSq+zfv58jjzxSCbWWMjOOPPLIQ9ZToaQqIrWOEmrtdihff3X/ioiUxh3yc8ELwJIguQ4oKUsJlFRFREqSux9yi04Xuw/q1IU6aQkJSao3df+KiMQSM6EeWJcdrK+ANWvWUK9ePfr27Rtz/d13303btm1p0KBBoeUzZsygf//+pKSkMGnSpMjyDz74gL59+0ZuaWlpvPHGG8Xqzc7O5qKLLqJz584cf/zxrFmzJrJu/PjxdOnShS5dujB+/Phyteell16id+/e9O7dm5NOOonPPvsssu7KK6+kRYsW9OzZs9A2F110USTe9u3bl/hc7Ny5k5EjR3LMMcfQvXt3Pv74YwC2b9/OkCFD6NKlC0OGDGHHjh0AzJw5kx49ehTbX5Vy9xpzGzBggIuIVMbSpUsPXqigwD1r58FvBQXl3v/q1as9MzOzxPUff/yxb9iwwevXr19su88++8wvu+wynzhxYsxtt23b5k2aNPGsrKxi65566im/5ppr3N19woQJfuGFF0a26dChg2/bts23b9/uHTp08O3bt5e5PR999FGk/DvvvOPHHXdcZN306dN97ty5pbb35z//ud93330x111++eX+l7/8xd3ds7OzfceOHe7ufvvtt/sDDzzg7u4PPPCAjxkzJrLNwZ7fA2K9D4A5Xsk8pSNVEZGi8nPjW64cTjjhBFq1alVsefv27enduzdJSSX/2540aRJnn3026enpxdZNnjyZ0aNHAzBy5Ejef/993J13332XIUOG0LRpU5o0acKQIUOYMmVKmeM96aSTaNKkSST29evXR9adeuqpNG3atMRt3Z1XX32Viy++uNi63bt3M2PGDK666ioAUlNTady4cbG2jB49OuaReaIoqYpIwrgXUPDNagq+Wopn7Ux0ON/xgviWqyIvv/xyzAQF8PXXX9O2bVsAUlJSOOKII9i2bVuh5QAZGRl8/fXXFdr/c889x9lnn13m8jNnzuSoo46iS5cuxdatWrWK5s2bc8UVV9CvXz+uvvpqsrKyANi0aVPki0erVq3YvHlzheI9FJRURSRhChbNwJd9jH85j4JP3sZ3bkl0SAEr47/GsparAhs3bmTRokUMHTo05vqgd7MwMytxeXl98MEHPPfcczz00ENl3mbChAklfgnIy8tj3rx5XHfddcyfP5/69evz4IMPljuuqlZ93hEiUqt49l7Yuh7y84IjvoJ8CtYsSnRYgeQyDl9X1nJV4NVXX+VHP/pRiUPvZWRksG7dOiBIWLt27aJp06aFlkMw4lTr1q3Lte+FCxdy9dVXM3nyZI488sgybZOXl8drr73GRRddVGK8GRkZHH/88UDQZT1v3jwAjjrqKDZu3AgEXyZatGhRrngPJSVVEUkQg6IHSdXl959mwc9mSlOnbvWJl9KP+gCGDx8eubJ30qRJnHHGGZgZQ4cO5b333mPHjh3s2LGD9957L3K0e9ddd/H666+Xut+1a9cyYsQIXnzxRbp27VrmeP/9739zzDHHkJGREXN9y5Ytadu2LV988QUA77//Pj169CjWlvHjx3PeeeeVeb+HmpKqiCSE1a0HrTpCckrkltSxT6LD+k6dtJIT6yH8neqYMWPIyMhg7969ZGRkcO+99wIwe/ZsMjIymDhxItdccw2ZmZmRbdasWcO6desYNGhQobp+/etf8+abbwJw1VVXsW3bNjp37syjjz4a6Upt2rQp99xz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ffv2PejwjfGmpCoiUsS+Xbt494FHSy3z7gOPsi+c9aW8nn/+eUaMGBHz5zQ333wzZ511Fp9//jmfffZZ5LeUr7zyCgsWLGDBggWcf/75jBgxAoBmzZrxz3/+k0WLFjF+/Hguu+yyEve7bt06pk6dSrt27SLLli5dyssvv8ySJUuYMmUK119/fcxkH61nz5689tprnHrqqYWWT5w4kezsbBYtWsTcuXP585//HElyEIySdKANB2azadeuHS+88EJkHtaSXHfddTz77LOsWLGCFStWRAbuf+6552jSpAlffvklt956K3fccQcAnTp1YsGCBaXWeSgoqYqIFDFv0uRiR6hFZWdlMW/S5ArVX9LUb7t372bGjBmREYJSU1OLDb7v7rz66quRof/69esXGfs2MzOT/fv3k50de9L3W2+9lT/+8Y+FBqCvyNRv3bt3p1u3bsWWmxlZWVnk5eWxb98+UlNTadSoUYwavtO+fXt69+5d4nCFEIw0tXv3bk488UTMjMsvvzwy3dvkyZMZPXo0ACNHjuT999+POeh+VVFSFREpYtfGb+JaLlppU7+tWrWK5s2bc8UVV9CvXz+uvvpqsook95kzZ3LUUUdFxu6N9o9//IN+/fpRt27dYuvefPNN2rRpQ58+fQotr+zUb9FGjhxJ/fr1adWqFe3ateO2226jadOmkfVXXHEFffv25f777y9X4vv666/JyMiIGWN0/CkpKRxxxBFs27atQvHHg5KqiEgRR7RqGddy0Uqb+i0vL4958+Zx3XXXMX/+fOrXr8+DDz5YqEysAeoBlixZwh133BFz1pe9e/fy+9//nt/+9rfF1sVzKrVPP/2U5ORkNmzYwOrVq/mf//kfVq1aBQRH54sWLWLmzJnMnDmzXEM0lhZjdZsKTklVRKSI/iPPo279+qWWqVu/Pv1Hln92lNKmfsvIyCAjIyMyMfnIkSOZN29eZH1eXh6vvfZasVGD1q9fz49+9CP+9re/0alTp2L1rly5ktWrV9OnTx/at2/P+vXr6d+/P998802lp36L9ve//52zzjqLOnXq0KJFC04++eTIhUxt2rQBoGHDhlxyySUH7WKOlpGRwfr162PGGB1/Xl4eu3btKnR0XNWUVEVEiqh3xBEMvevnpZYZetfPqXeQ84WxlDb1W8uWLWnbti1ffPEFAO+//z49evSIrD8wFVx0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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Create a figure with one subplot\n", "fig, ax = plt.subplots(figsize=(10,6))\n", "\n", "# Plot the points with population info\n", "join.plot(ax=ax, column='pop18', cmap=\"Reds\", markersize=15, scheme='quantiles', legend=True);\n", "\n", "# Add title\n", "plt.title(\"Amount of inhabitants living close the the point\");\n", "\n", "# Remove white space around the figure\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In a similar way, we can plot the original population grid and check the overall population distribution in Helsinki:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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+uuvr3f75557jkGDBjFkyJCizqE+avxFRMqBe7zhr7Z+bWa9Bujfvz8zZ84s+NxRRx3Fiy++WGv55MmT6d69O//+97+58MILueSSS4BMQ/jzn/+cF154gRdffJGf//znBRvTxm4f06NHD37961/zwx/+sODz119/PbvvvnvOsiuvvJIxY8Ywb948xowZw5VXXllru4qKCn75y18yd+5cnn/+eW688UbmzJlT5/ajR4/m0UcfTX3saanxFxEpBxvWl3a9Iuy777707t271vKpU6dy5plnAnDCCSfw1FNP4e489thjjB07lh49etC9e3fGjh3LtGnTSr59TK9evRg1alTBefOVlZU88sgjnHPOOdFjOfPMM/nTn/5Ua9vevXszYsQIALp06cLuu+/O+++/n3r7UlLjLyJSDnxjadcrgffff58ddtgByHwr3mqrrVi6dGnOcoA+ffpkG8lSbt8Q3//+97n66qtp1y63+fzoo4+yH3B69+7Nxx9/XOd+FixYwIwZM9hnn30atH1jqfEXESkHlvK/+7TrlYAX6GIws+jyUm9frIcffphevXqx1157NWo/n3/+OccffzzXXXcdXbt2bfRxNYQafxGRctA+ZerXtOuVQJ8+fVi4cCEAVVVVfPrpp/To0SNnOWRC7dttt13Jty/WP/7xDx566CH69evHKaecwtNPP81XvvIVALbddlsWLVoEwKJFi+jVq1fBfaxfv57jjz+e008/neOOOy67PO32paLGX0SkHJhlpvPVpcPm0fn+vmJJ9qdUJkyYkB2J/8ADD3DIIYdgZhx66KE8/vjjLFu2jGXLlvH4449z6KGHlmT7H/3oRzz44IMNOt4rrriCyspKFixYwJQpUzjkkEO46667ah3L7bffztFHH11re3fn7LPPZvfdd+cHP/hB9Fxi25eUu7eZn7322stFRCTXnDlz0q+8brX7yuW1f9atrnOzjZ8uzv7kmz9/vg8ePDi67UUXXeTbb7+9m5lvv/32/tOf/tTd3VevXu0nnHCC9+/f30eNGuVvv/12dpvJkyd7//79vX///n7rrbdml1922WU+derUBm9/xBFH+D//+c86z3XRokW+/fbbe5cuXXyrrbby7bff3j/99NOcdZ555hk/4ogjsr8vWbLEDznkEB8wYIAfcsghvnTpUnd3f//99338+PHu7v7cc8854Hvs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3lhqYZX0raEMfyIiZca26IR9cVz295Wvziq4XqedCvc7hw1zp6QswH47bccR773D9j060b59+5zEQNEPFHklfaMlfovMz59TSyD44KCSvjXU+IuISEmcddIJLX0ImxyV9BUREZGS0Dd/EZEy13nontnHYX/5e2+9l33cd5vC5X3DsQAEjzv3qVkclg8OuwM61VQSzuwrFvYvVooxAr5iSelftw1R4y8iUmaqVqxg2cOPsv6jj+mwbS+6H3k4FV27tvRhSTNS4y8iUkY+uO43LPrNjWxctSq77L3LfkbvC77Ddt+/oAWPTJqT+vxFRMrEB9f9hvevuian4QfYuGoV7191DR9c9xtsx4HZnx1Hjsj+hMt9xZKanyQX/6olizjwwAOoWrE0Z3T/woULOeRr5zLosAkMOfwYrr7jDpasr2LJ+iqOOv40Bo/cn8Ej92eH3fZk2LBhADzxxBPstdde7LHHHuy111489ecHs68Xyinp++Uvs2zJYthQha9czv/8188YMHBgbknfoK6Ade2Z/Yl54IEHMDPCKebvvfce48aNY/fdd2fQoEEsWLAAgNGjR2dL/W633XYcc8wxBfepkr4iItJsqlasYNFvbqxznUW/uZENn33WoP3fetfvOfaoI2qV9K2oqOCXv/wlc+fO5fnnn+fOB+5n3jvvAHDjFVfyl9/fw19+fw/jDz6E4447DoCePXvy5z//mddee43bb7+dM7757YKvmVPS95BDuPKqqwGY88ab3PvHPzH7hb83qKQvwGeffcavf/1r9tlnn5zlZ5xxBhdddBFz587lxRdfzGYAfO6557Llfvfbb7/suYRU0ldERJrVsocfrfWNP9/GVav45OFHG7T/39/3B44+vHb1u969ezNixAgAunTpQv9+O/Hh4o9z1nF3HnnyyWzK3OHDh2dz2w8ePJg1a9aytkDq4JySvmd8lT899FBm+SN/4eTjjmlwSV+Ayy67jIsvvjinrPCcOXOoqqpi7NixAGy55ZbZkr7VPvvsM55++umC3/xV0ldERJrV+o8+rn+lItYLrVu3jncWLKDfjn3rXG/BggXMefMNhg0ekrP8xRkz6Ll1DwYOHFhrmz/84Q8M33OPWsV1oI6SvosWsUOf7bPrFVsid8aMGSxcuLBWqP2tt96iW7duHHfccQwfPpyLLrqoVkThwQcfZMyYMXQtMICyNZX01YA/EZEy0GHb2gVqGrpefj/50g8+oFv3HvH+8w1VfP755xx//HFcc/HF7NS9W87Tjz/5OKeOH18rLe/rr7/OJZdcwuOPP17/dLzqKX3tK/A1a2DlSli2DAd83RpY/VmqTIEbN27kwgsv5Lbbbqv1XFVVFc899xwzZsygb9++nHzyydx22205efjvueeebC7/fCrpKyIizar7kYfTLi9Ena9dp070OPLwove9xRZbsGbNmujz69ev5/gTT+L0U0/l6DFfznmuqqqKh556iuMPPSxneWVlJcceeyx33HEH/fv3L7jfaEnfL3yBhR8syq73/gcfsF3vL6Q6l88++4zZs2dz0EEH0a9fP55//nkmTJjA9OnT6dOnD8OHD2fnnXemoqKCY445hldeeSW77dKlS3nxxRc54ogjCu5bJX1FRKRZVXTtSu8LvlPnOr0v+A7tu3Qpet/du3dnw4YNBT8AuDtnf+Mb7L77bvzgwgtrPf/MCy+wy047sf2222aXLf90BUcccQRXXHEF+++/f/R1YyV9J4wdw71/foS1a9cxf8G7zHt7PnvvlRl3UF9J36222oolS5awYMECFixYwL777stDDz3EyJEjGTVqFMuWLWPx4sUAPP300wwaVFO06P777+fII4/MGScQUklfERFpkJd6983+bHjyDjY8eQe+5vNU2273/QvY/pKLakUA2nXqxPYX/wfbXfCtnOlwK1+dlf2pz7hx4/j73/9ea/k//vEP7rzrbp5+6imGDR/G/meewV/fr8xmFXxg2jROPCz51t+9O3Tvzg33P8C///1vfvGLX2Snz1X350dL+j7+OJde9EPYUMWQsYdz0le+yuDxExh/4mncePPNVHTPfLhIU9I3pn379kycOJExY8awxx574O584xvfyD4/ZcqU7KDFairpWwIq6Ssi5e6l3jWD6kbc+d8AvLn17gwaPir1PjZ89hmfBBn+eowfV/Ab/8rZc7KPwxTAhcyYMYNrr72WO++8s9ZzsVS6+R8qwiqCRafcTZHSVyV9a2jAn4hImWnfpQvbnBpUigsbzgYaPnw4Bx98MBs2bKg117+1UEnfGvrmLyLSGq36NPuw6oen1bnqW6ddzKAvHdjglwpH2cdYn50KPxEbQZ/im7iUTrHf/NXnLyIiUmbU+IuIiJQZxWJERFqJDU/ekX3c/stnZB/bcScXXJ59fu7col5n9aef8q9f3ciKJUvo2rMn+559CltslclIZ527ZdfLGfDXJ3bQkfB+Q0L96ipoNrq6IiJl5NHLr+GxK65l7cqV2WVTJ/6aQy/8FuMvqjsPgGw6FPYXESkTj15+DQ/95y9yGn6AtStX8dB//5K/XFN31b+6rF69mgMPPDBaPW/Dhg0MHz68Vr783/zmN+y6664MHjyYiy+5FIC7f//77Pz+YcOG0a5dO2bOnFlrnzklfceOzVbIA7jiiisYMGBAbknfOlx00UXstttu7Lnnnhx77LEsX74cgBdffDF7HEOHDuXBBx/MbnPYYYcxdOhQBg8ezHnnnZdz7vfddx+DBg1i8ODBnHZa4QGbL7/8MnvssQcDBgzgu9/9bjbN79q1azn55JMZMGAA++yzT7Zs8Ntvv82wYcPYcsst6z2f+mi0v8gmKBY+DkeQ5+i0VRMfkUSF9yS8D5F7VWjkf5rR/qs//ZRLt9+tVsMf2rxzJ6784C22SIrShPPwY/P8q+fw3/i7yVRVVfG9b30TyO0+oH0F1157LdOnT2fFihXZ+erPPPkkl19xBY/8+SE233xzPv7442yK3mqvvfYaRx93PO8kZYBDF198MT169ODSSy/lyiuvZNmyZVx11VXMmTOHU089lRdffJEPPviAL3/5y7z11lt1TkF8/PHHOeSQQ6ioqOCSSy4BMol3Vq1axWabbUZFRQWLFi1i6NChfPDBB1RUVLBixQq6du2Ku3PCCSdw4okncsoppzBv3jxOOukknn76abp3717wvAD23ntvrr/+evbdd18OP/xwvvvd7zJ+/HhuuukmZs2axaRJk5gyZQoPPvgg9957b3a7Lbfcks8/z03spNH+IiJSyysPTK2z4YdMBOCVB6Y2aP+xkr6QyVX/yCOP1Cp4c/P//i+XXnxxtmJfoQbynin31sqaVy2npG9QBnfq1KmccsopRZX0HTduXLaq3r777ktlZSUAnTp1yi5fs2ZNTsGd6sp9VVVVrFu3Lvvc7373O77zne/QvXv36HktWrSIFStWsN9++2FmnHHGGTnHX31eJ5xwAk899VTB4j+NocZfRKQMfLrow5KuF6qvpO/3v/99rr76atq1y21y3pr3Fs/9/e/ss98XOfDgQ3jppZdqbXvv/fdHG/9oSd9I6dy0br31VsaPr/kg88ILLzB48GD22GMPJk2alP0wAJl8/b169aJLly6ccMIJmfN66y3eeust9t9/f/bdd1+mTZtW6zXef/99+vSpGUUZHmN4/BUVFWy11VYsXbo09fGnoQF/Im1ZEBre8M+ab2ztv1hTFCTaBSCtT4ougIqJv6+1mc2vrHfXW6Wsale1di3vTs9Uqttx5IiaJ+rIArhk6Sd022qrWqF+gIcffphevXqx11578eyzz+a+VtUGli1fxvP//AcvvfQSJ516Gu/Meyv7DfqFF16gU6ctGDJkSKpjr9aYErmXX345FRUVnH766dll++yzD6+//jpz587lzDPPZPz48dniPY899hhr1qzh9NNP5+mnn2bs2LFUVVUxb948nn32WSorKxk9ejSzZ8+mW7duqY6xOUr86pu/iEgZGHHC0WzeuXOd62zeuTO7HVJ8psAtOnZkzdq1BZ/7xz/+wUMPPUS/fv045ZRTePrpp/nKV74CQJ/tt+e4Y47FzNh7771p164dS5bU1AGYcu99nHryKdHXjZb0jZTOrc/tt9/Oww8/zN13312wsd19993p3Lkzs2fPzlnesWNHJkyYwNSpU7Ovf/TRR9OhQwd22mkndt11V+bNy82i2KdPn2zXQv4xhsdfVVXFp59+mi0AVCpq/EVEysAWW23FoT/6QZ3rHHrJ99l8y7o/IBTSvXu3aEnfK664gsrKShYsWMCUKVM45JBDuOuuuwA45ugJPP3MM0AmVL5u3Tp69swU9Nm4cSP3/+EPnHLySdHXjZb0nTCBKVOmsHbtWubPn8+8efPYe++9gXhJ32nTpnHVVVfx0EMP0Smoejh//nyqqjJRj3fffZc333yTfv368fnnn2c/eFRVVfHoo4+y2267Zc7rmGN4JjmvJUuW8NZbb7HzzjvnvF7v3r3p0qULzz//PO7OHXfckXP81ef1wAMPcMghh5T8m7/C/iJt2Ev998g+rq7wllosxCzNKxLeL1S9D3K7dLLbtvsgZ5dhrv4wJ/+BRx7K+kUf8tStd7Fu9ers8s07d+bQH/2Aw398UU54P7afMAFPdah/3LhxPPfkY3z54EzkIFqVzz37Gmed8w3OOusshgwdxmabbcbtt96abeT++vhf6NP7C+y0be433nPOOYfzzjuPkSNHcumll3LSSScxefJk+vbtmy3aM3jwYE466SQGDRpERUUFN954Y3akf6yk7/nnn8/a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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Create a figure with one subplot\n", "fig, ax = plt.subplots(figsize=(10,6))\n", "\n", "# Plot the grid with population info\n", "pop.plot(ax=ax, column='pop18', cmap=\"Reds\", scheme='quantiles', legend=True);\n", "\n", "# Add title\n", "plt.title(\"Population 2018 in 250 x 250 m grid squares\");\n", "\n", "# Remove white space around the figure\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, let's save the result point layer into a file:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "# Output path\n", "outfp = r\"data/addresses_population.shp\"\n", "\n", "# Save to disk\n", "join.to_file(outfp)" ] } ], "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.8.6" } }, "nbformat": 4, "nbformat_minor": 4 }