{ "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": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/aagesenh/.conda/envs/python-gis/lib/python3.8/site-packages/geopandas/_compat.py:111: UserWarning: The Shapely GEOS version (3.9.1dev-CAPI-1.14.1) is incompatible with the GEOS version PyGEOS was compiled with (3.9.1-CAPI-1.14.2). Conversions between both will be slow.\n", " warnings.warn(\n" ] } ], "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
0POLYGON ((25472499.995 6689749.005, 25472499.9...688928.0999999999999999999
1POLYGON ((25472499.995 6685998.998, 25472499.9...703551.0999999999999999999
2POLYGON ((25472499.995 6684249.004, 25472499.9...710844.0999999999999999999
3POLYGON ((25472499.995 6683999.005, 25472499.9...711590.0999999999999999999
4POLYGON ((25472499.995 6682998.998, 25472499.9...7151141.0999999999999999999
\n", "
" ], "text/plain": [ " geometry index asukkaita \\\n", "0 POLYGON ((25472499.995 6689749.005, 25472499.9... 688 9 \n", "1 POLYGON ((25472499.995 6685998.998, 25472499.9... 703 5 \n", "2 POLYGON ((25472499.995 6684249.004, 25472499.9... 710 8 \n", "3 POLYGON ((25472499.995 6683999.005, 25472499.9... 711 5 \n", "4 POLYGON ((25472499.995 6682998.998, 25472499.9... 715 11 \n", "\n", " asvaljyys ika0_9 ika10_19 ika20_29 ika30_39 ika40_49 ika50_59 \\\n", "0 28.0 99 99 99 99 99 99 \n", "1 51.0 99 99 99 99 99 99 \n", "2 44.0 99 99 99 99 99 99 \n", "3 90.0 99 99 99 99 99 99 \n", "4 41.0 99 99 99 99 99 99 \n", "\n", " ika60_69 ika70_79 ika_yli80 \n", "0 99 99 99 \n", "1 99 99 99 \n", "2 99 99 99 \n", "3 99 99 99 \n", "4 99 99 99 " ] }, "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
09POLYGON ((25472499.995 6689749.005, 25472499.9...
15POLYGON ((25472499.995 6685998.998, 25472499.9...
28POLYGON ((25472499.995 6684249.004, 25472499.9...
35POLYGON ((25472499.995 6683999.005, 25472499.9...
411POLYGON ((25472499.995 6682998.998, 25472499.9...
\n", "
" ], "text/plain": [ " pop18 geometry\n", "0 9 POLYGON ((25472499.995 6689749.005, 25472499.9...\n", "1 5 POLYGON ((25472499.995 6685998.998, 25472499.9...\n", "2 8 POLYGON ((25472499.995 6684249.004, 25472499.9...\n", "3 5 POLYGON ((25472499.995 6683999.005, 25472499.9...\n", "4 11 POLYGON ((25472499.995 6682998.998, 25472499.9..." ] }, "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 ensemble\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 - nominally onshore between 24°30'E and 25°30'E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.\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 ensemble\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\",ENSEMBLE[\"European Terrestrial Reference System 1989 ensemble\",MEMBER[\"European Terrestrial Reference Frame 1989\"],MEMBER[\"European Terrestrial Reference Frame 1990\"],MEMBER[\"European Terrestrial Reference Frame 1991\"],MEMBER[\"European Terrestrial Reference Frame 1992\"],MEMBER[\"European Terrestrial Reference Frame 1993\"],MEMBER[\"European Terrestrial Reference Frame 1994\"],MEMBER[\"European Terrestrial Reference Frame 1996\"],MEMBER[\"European Terrestrial Reference Frame 1997\"],MEMBER[\"European Terrestrial Reference Frame 2000\"],MEMBER[\"European Terrestrial Reference Frame 2005\"],MEMBER[\"European Terrestrial Reference Frame 2014\"],ELLIPSOID[\"GRS 1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1]],ENSEMBLEACCURACY[0.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[\"Cadastre, engineering survey, topographic mapping (large scale).\"],AREA[\"Finland - nominally onshore between 24°30'E and 25°30'E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.\"],BBOX[59.94,24.5,68.9,25.5]],ID[\"EPSG\",3879]]\n", "PROJCRS[\"ETRS89 / GK25FIN\",BASEGEOGCRS[\"ETRS89\",ENSEMBLE[\"European Terrestrial Reference System 1989 ensemble\",MEMBER[\"European Terrestrial Reference Frame 1989\"],MEMBER[\"European Terrestrial Reference Frame 1990\"],MEMBER[\"European Terrestrial Reference Frame 1991\"],MEMBER[\"European Terrestrial Reference Frame 1992\"],MEMBER[\"European Terrestrial Reference Frame 1993\"],MEMBER[\"European Terrestrial Reference Frame 1994\"],MEMBER[\"European Terrestrial Reference Frame 1996\"],MEMBER[\"European Terrestrial Reference Frame 1997\"],MEMBER[\"European Terrestrial Reference Frame 2000\"],MEMBER[\"European Terrestrial Reference Frame 2005\"],MEMBER[\"European Terrestrial Reference Frame 2014\"],ELLIPSOID[\"GRS 1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1]],ENSEMBLEACCURACY[0.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[\"Cadastre, engineering survey, topographic mapping (large scale).\"],AREA[\"Finland - nominally onshore between 24°30'E and 25°30'E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.\"],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": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/aagesenh/.conda/envs/python-gis/lib/python3.8/site-packages/IPython/core/interactiveshell.py:3361: FutureWarning: The `op` parameter is deprecated and will be removed in a future release. Please use the `predicate` parameter instead.\n", " if (await self.run_code(code, result, async_=asy)):\n" ] } ], "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)3252515
1Kamppi, 1, Kampinkuja, Kamppi, Eteläinen suurp...1001Kampinkuja 1, 00100 Helsinki, FinlandPOINT (25496207.840 6672906.173)3364182
2Kauppakeskus Citycenter, 8, Kaivokatu, Keskust...1002Kaivokatu 8, 00101 Helsinki, FinlandPOINT (25496768.622 6673002.004)348838
10Rautatientori, Kaisaniemi, Kluuvi, Eteläinen s...1011Rautatientori 1, 00100 Helsinki, FinlandPOINT (25496896.734 6673162.114)348838
3Hermannin rantatie, Verkkosaari, Kalasatama, S...1003Hermannin rantatie 1, 00580 Helsinki, FinlandPOINT (25498769.713 6675121.127)382261
\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", "10 Rautatientori, Kaisaniemi, Kluuvi, Eteläinen s... 1011 \n", "3 Hermannin rantatie, Verkkosaari, Kalasatama, S... 1003 \n", "\n", " addr \\\n", "0 Itämerenkatu 14, 00101 Helsinki, Finland \n", "1 Kampinkuja 1, 00100 Helsinki, Finland \n", "2 Kaivokatu 8, 00101 Helsinki, Finland \n", "10 Rautatientori 1, 00100 Helsinki, Finland \n", "3 Hermannin rantatie 1, 00580 Helsinki, Finland \n", "\n", " geometry index_right pop18 \n", "0 POINT (25495311.608 6672258.695) 3252 515 \n", "1 POINT (25496207.840 6672906.173) 3364 182 \n", "2 POINT (25496768.622 6673002.004) 3488 38 \n", "10 POINT (25496896.734 6673162.114) 3488 38 \n", "3 POINT (25498769.713 6675121.127) 3822 61 " ] }, "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": [ "31" ] }, "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": "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A/DYY4/Ru3dv+vXrxwknnMDChd9cGuH222+noKCAgoICnn/++SrbTdQUewDTp0+nX79+9OrVi5NPPjmyfMuWLYwePZru3bvTo0cPPvzww8i6P/7xj3Tr1o1evXpx2223VdluvZhiL1VummJPpH4LlZd7WdFML/von1624N8eKi1Odkh7iXWKvTW/+4PPOLL9fm9rfveHuMSzdetWdw9PUXfeeef5hAkT9lru7j5p0iQfPny4u7u/+uqr/u1vf9tLS0t9x44dfswxx+xVtkKiptjbvHmz9+jRw1euXOnu30z95+5+2WWX+Z///Gd3D08ZuHnzZnd3nzZtmg8dOtT37NmzT50K9WmKPRGRhAsVzYAvFsP2r2HdMkLzpic7pBor27aNdX98pNoy6/74COXbtx/ytpoEQ9JlZWWUlJRELr7fJGqoOnoqu4ULF3LyySeTkZFBw4YN6du3b61Osfe3v/2N8847jw4dOgDfTP23bds23n33Xa666iogPGVgs2bNAPjTn/7EHXfcQXZ29l51otWLKfZERGrNhtUQCg+F4iHYvL7KGV1S2eZXXye0q/q5akO7dvH1q6/HZXvDhw+nTZs2NG7cmNGjR0eWP/LII3Tq1InbbruNP/zhDwD07duXN954g127drFx40befvvtA05ZF88p9oqKiti8eTOnnHIKxxxzDE8//TQAy5Yto3Xr1lxxxRX079+fMWPGsHPnzkid9957j0GDBnHyySfzySefVBtv5bjq0hR7IiK1o0GjvR9n5aTcVGkHUro+tn/msZY7kClTprBu3TqKi4uZNm1aZPn111/P0qVL+fWvf829994LwOmnn85ZZ53Fcccdx8UXX8yQIUPIyNj3PNmqvuDEY4q9srIyZs2axWuvvcaUKVP45S9/SVFREWVlZcyePZvrrruOOXPm0LBhw8hx17KyMjZv3sxHH33EAw88wAUXXLBPHIcaV21QshWRlJHW63jIbgiWBhlZpPU9Ndkh1VjmEbFN4RZruVjk5OQwcuTIyNBptIsuumivodO77rqLuXPn8uabb+LudOnSZZ86iZpiLy8vjzPOOIOGDRvSqlUrTjrpJObNm0deXh55eXmRCeNHjx7N7NmzI3XOO+88zIxjjz2WtLS0fablqy9T7ImI1Apr0Ji0E84j7cTRpJ18Ada0VbJDqrHm3zmLtNzqr3+clptL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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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m6r6NvBWmOoHguSrC/ztRGRrggKI02KLXwB2FZFBYSb78cD0cN10GjKSn+61MwzDSOWTTz5hm222sQGvhhERttlmm7LVft44vW8BvwsHrteAM0TkPABVdWVKxgGPaFDMkHDdRgmKZD5MELLwa22o5nstcF+YRuxN4MSyem4YRk1jA57RmGcg16CnqnOBUd7iCd42d5NQO0tVZwAzEpavIlCNhmEY1UUVNm0A3QzSATp2Ahs0axJLQ2YYRvtmwyewdg2sXwsb1gW/164Jljcjd999N3369GH48OEMHz6ciRMnJm43e/Zs9t57bwYPHsxFF13k6uixbt06Tj75ZAYPHsz+++/P4sWLK9Kvn//85+yxxx4MGzaMQw89lDfeaIjrnjx5Mrvuuiu77rorkydPTmyf1a887Zudli7oV87Pvvvuq4ZhGAsWLMi34fq1qvWr03/Wr61uR2PcddddesEFF5TcbvTo0fr3v/9dN2/erEcddZTOmDFDVVVvu+02Pffcc1VV9d5779WTTjqpIv164okntL6+XlVVb7/99mi/q1at0kGDBumqVav0vffe00GDBul7771X1D6tX3nbN5WkZwGYpSnjiCk9wzDaJ6qBsstiw7pgu1bC8uXLWbNmDWPGjEFEOO200/jzn/8MwLRp0zj99MD374QTTuDxxx+PVGBTOOSQQ+jWrRsABxxwAEuWLAHg4Ycf5vDDD6d379706tWLww8/nJkzZxa1T+tX3vbNjQ16hmG0TzZtqOx2FeBPf/oTw4YN44QTTuCtt94qWr906VL69+8ffe/fvz9Lly6N1u24YxABVldXx9Zbb82qVZUtDzpp0iSOPvroouP5ffH7nNSvvO2bGxv0DMNon+jmym7XRI477jgWL17MvHnzOOywwyJ1VNCVBOXmPBSz1lWC3/72t8yaNYtLL720rOOlbVft/jYWG/QMw2ifSM5/b3m3ayLbbLMNXbp0AeAb3/gGs2fPLtqmf//+0fQiBEH422+/fbTOqcONGzfywQcf0Lt374r07bHHHuPqq69m+vTpUR/jx/P74vc5qV952zc3NugZhtE+6ZgzNVXe7ZrI8uXLo8/Tp09n9913L9qmX79+bLXVVjz77LOoKvfccw/HHx/k6B87dmzkATl16lQ+//nPR8pp6NChje7Xiy++yLnnnsv06dPp27chBfKRRx7JI488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+OOPM2TIEK644gomT54c5RLdtGkT3//+9znyyCNT9/3973+f73znO4wfP57zzjuPSZMmcf755/PQQw+xaNEiFi1axHPPPcf555/Pc889l7qfpmJKzzCMdsnGNWtYfsttmdu8feddbKqvz9ymXEbstQcDd+xf0X0CTPvLTE790jhEhANGDmf1hx+y/N13M0v4lMuQIUOiVGnbb789ffv2ZcWKFaxatYouXbowZEgQsHj44Yfzpz/9KWp3yy238OUvfzk1h6aq8sQTT3DCCScAxWWSTjvttOC8DjiA1atXF6Q5qzSm9IzyqaTiaW3EzqE5bF0FGVn84zVG2fn2xRJp0Noz7z84g80fZ9fK2/zxWt5+8DF6HXlElEU/yT7XfafgX+XHry8LlwS/u+8zzFsey9YiHZCttomWS/et+ccLs9lnn2Fs3297rv/PH7Hn7kOR7j2DEj5HH41IB84991y+ceQh4UmEqrNXL5YtX86O40+EXr2QHtvSf+AglkkXli5dXFTCpxJK6fnnn2f9+vXssssuiAgbNmxg1qxZjBo1iqlTp0bJpJcuXcoDDzzAE088wQsvvJC4r1WrVtGzZ0/q6uqiProyQ2kliMpJpVYONugZhtEu2fBOvhptG9/LWYKoiYwcOZI33niDLbfoyowZDzHulNN45cUgMfTfnn6K7bffnndXvcfhhx/Obj235OD9Rxe0TyvVU40SPsuXL+fUU09l8uTJdOgQTAhOmTKF73znO6xbt44jjjgiGsAuvvhirrvuuij3ZxJZfWzuEkQ26BnlUyu2pWqep1dyKNfx0mx88XXudxvyKK0WnbbLV66m+5BBdBu0fYFac7hE0928NGNRAupYYdkIp850M/rhKrQ++L5VuFp79eLoz47hm+vWs/LVV9m2d2/6EeTs7LvTrkEJn1cWcfBRDRlkpHtP+u80kCXvfRh5eLpSPevXr69omaE1a9Zw7LHH8tOf/pQDDjggWj5mzBieeeYZAB555BFeeeUVAGbNmsX48eOD67JyZZRs+otf/GLUdtttt2X16tVs3LiRurq6gj42V5kkh9n0DMNol/T6wjF06JadX7PDFl3pddRhzdKft99dEama52fPYbNuZptevaj/+GM+/OgjIFbCZ4+hRe3HfuE47rnnHlSVZ599lq233pp+/fpllvC59dZbufXWW3P3cf369YwbN47T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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": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_8817/218676674.py:5: UserWarning: Column names longer than 10 characters will be truncated when saved to ESRI Shapefile.\n", " join.to_file(outfp)\n" ] } ], "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 (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.8.12" } }, "nbformat": 4, "nbformat_minor": 4 }