import geopandas
import os
from rivus.utils import pandashp as pdshp
from datetime import datetime
ospno = os.path.normpath
base_directory = os.path.join(ospno('./data'), 'haag15')
building_shapefile = os.path.join(base_directory, 'building.shp')
edge_shapefile = os.path.join(base_directory, 'edge.shp')
to_edge_shapefile = os.path.join(base_directory, 'to_edge.shp')
vertex_shapefile = os.path.join(base_directory, 'vertex.shp')
data_spreadsheet = os.path.join(base_directory, 'data.xlsx')
# This is the function we want to explore
def prepare_edge(edge_shapefile, building_shapefile):
"""Create edge graph with grouped building demands.
"""
# load buildings and sum by type and nearest edge ID
# 1. read shapefile to DataFrame (with special geometry column)
# 2. group DataFrame by columns 'nearest' (ID of nearest edge) and 'type'
# (residential, commercial, industrial, other)
# 3. sum by group and unstack, i.e. convert secondary index 'type' to
# columns
buildings = geopandas.read_file(building_shapefile)
buildings = buildings.convert_objects(convert_numeric=True)
building_type_mapping = {
'basin': 'other', 'chapel': 'other', 'church': 'other',
'farm_auxiliary': 'other', 'greenhouse': 'other',
'school': 'public',
'office': 'commercial', 'restaurant': 'commercial',
'yes': 'residential', 'house': 'residential'}
buildings.replace(to_replace={'type': building_type_mapping}, inplace=True)
buildings = buildings.to_crs(epsg=32632)
buildings['AREA'] = buildings.area
buildings_grouped = buildings.groupby(['nearest', 'type'])
total_area = buildings_grouped.sum()['AREA'].unstack()
# load edges (streets) and join with summed areas
# 1. read shapefile to DataFrame (with geometry column)
# 2. join DataFrame total_area on index (=ID)
# 3. fill missing values with 0
edge = geopandas.read_file(edge_shapefile)
edge = edge.set_index('Edge')
edge = edge.join(total_area)
edge = edge.fillna(0)
return edge
"""Create edge graph with grouped building demands.
"""
# load buildings and sum by type and nearest edge ID
# 1. read shapefile to DataFrame (with special geometry column)
# 2. group DataFrame by columns 'nearest' (ID of nearest edge) and 'type'
# (residential, commercial, industrial, other)
# 3. sum by group and unstack, i.e. convert secondary index 'type' to
# columns
buildings = geopandas.read_file(building_shapefile)
buildings.head(5)
admin_leve | amenity | area | building | cluster | geometry | man_made | name | nearest | office | osm_id | osm_way_id | other_tags | perimeter | place | shop | type | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | None | None | 2826.504627 | yes | Einzelhandel | POLYGON ((12.17066699998406 48.16282049995247,... | None | None | 59 | None | None | 27482213 | None | 213.714235 | None | mall | retail |
1 | None | None | 2353.301977 | yes | Einzelhandel | POLYGON ((12.16622309998395 48.16498569995202,... | None | Edeka Neukauf | 34 | None | None | 27482423 | None | 216.232143 | None | supermarket | retail |
2 | None | None | 1197.697244 | yes | Einzelhandel | POLYGON ((12.16717579998398 48.16471269995211,... | None | Euronics XXL | 34 | None | None | 27482425 | None | 139.223865 | None | electronics | retail |
3 | None | None | 1603.551916 | yes | Einzelhandel | POLYGON ((12.16660029998396 48.16411089995206,... | None | Lidl | 28 | None | None | 27482427 | None | 183.319654 | None | supermarket | retail |
4 | None | None | 1295.101702 | yes | Einzelhandel | POLYGON ((12.16846829998401 48.16375659995224,... | None | Penny | 40 | None | None | 27482428 | None | 160.751446 | None | supermarket | retail |
buildings = buildings.convert_objects(convert_numeric=True)
buildings.head(5)
C:\Users\Kristof\Anaconda2\envs\fion\lib\site-packages\ipykernel\__main__.py:1: FutureWarning: convert_objects is deprecated. Use the data-type specific converters pd.to_datetime, pd.to_timedelta and pd.to_numeric. if __name__ == '__main__':
admin_leve | amenity | area | building | cluster | geometry | man_made | name | nearest | office | osm_id | osm_way_id | other_tags | perimeter | place | shop | type | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | None | None | 2826.504627 | yes | Einzelhandel | POLYGON ((12.17066699998406 48.16282049995247,... | None | None | 59 | None | None | 27482213 | None | 213.714235 | None | mall | retail |
1 | None | None | 2353.301977 | yes | Einzelhandel | POLYGON ((12.16622309998395 48.16498569995202,... | None | Edeka Neukauf | 34 | None | None | 27482423 | None | 216.232143 | None | supermarket | retail |
2 | None | None | 1197.697244 | yes | Einzelhandel | POLYGON ((12.16717579998398 48.16471269995211,... | None | Euronics XXL | 34 | None | None | 27482425 | None | 139.223865 | None | electronics | retail |
3 | None | None | 1603.551916 | yes | Einzelhandel | POLYGON ((12.16660029998396 48.16411089995206,... | None | Lidl | 28 | None | None | 27482427 | None | 183.319654 | None | supermarket | retail |
4 | None | None | 1295.101702 | yes | Einzelhandel | POLYGON ((12.16846829998401 48.16375659995224,... | None | Penny | 40 | None | None | 27482428 | None | 160.751446 | None | supermarket | retail |
building_type_mapping = {
'basin': 'other', 'chapel': 'other', 'church': 'other',
'farm_auxiliary': 'other', 'greenhouse': 'other',
'school': 'public',
'office': 'commercial', 'restaurant': 'commercial',
'yes': 'residential', 'house': 'residential'}
buildings.replace(to_replace={'type': building_type_mapping}, inplace=True)
buildings = buildings.to_crs(epsg=32632)
buildings.head(5)
admin_leve | amenity | area | building | cluster | geometry | man_made | name | nearest | office | osm_id | osm_way_id | other_tags | perimeter | place | shop | type | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | None | None | 2826.504627 | yes | Einzelhandel | POLYGON ((735759.1584048691 5339259.793506399,... | None | None | 59 | None | None | 27482213 | None | 213.714235 | None | mall | retail |
1 | None | None | 2353.301977 | yes | Einzelhandel | POLYGON ((735418.8462222115 5339486.786609476,... | None | Edeka Neukauf | 34 | None | None | 27482423 | None | 216.232143 | None | supermarket | retail |
2 | None | None | 1197.697244 | yes | Einzelhandel | POLYGON ((735490.9253872562 5339459.367663603,... | None | Euronics XXL | 34 | None | None | 27482425 | None | 139.223865 | None | electronics | retail |
3 | None | None | 1603.551916 | yes | Einzelhandel | POLYGON ((735450.8963961252 5339390.725584941,... | None | Lidl | 28 | None | None | 27482427 | None | 183.319654 | None | supermarket | retail |
4 | None | None | 1295.101702 | yes | Einzelhandel | POLYGON ((735591.3989202955 5339357.078318694,... | None | Penny | 40 | None | None | 27482428 | None | 160.751446 | None | supermarket | retail |
buildings['AREA'] = buildings.area
buildings.head(5)
admin_leve | amenity | area | building | cluster | geometry | man_made | name | nearest | office | osm_id | osm_way_id | other_tags | perimeter | place | shop | type | AREA | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | None | None | 2826.504627 | yes | Einzelhandel | POLYGON ((735759.1584048691 5339259.793506399,... | None | None | 59 | None | None | 27482213 | None | 213.714235 | None | mall | retail | 2832.189206 |
1 | None | None | 2353.301977 | yes | Einzelhandel | POLYGON ((735418.8462222115 5339486.786609476,... | None | Edeka Neukauf | 34 | None | None | 27482423 | None | 216.232143 | None | supermarket | retail | 2358.133449 |
2 | None | None | 1197.697244 | yes | Einzelhandel | POLYGON ((735490.9253872562 5339459.367663603,... | None | Euronics XXL | 34 | None | None | 27482425 | None | 139.223865 | None | electronics | retail | 1200.071553 |
3 | None | None | 1603.551916 | yes | Einzelhandel | POLYGON ((735450.8963961252 5339390.725584941,... | None | Lidl | 28 | None | None | 27482427 | None | 183.319654 | None | supermarket | retail | 1606.707165 |
4 | None | None | 1295.101702 | yes | Einzelhandel | POLYGON ((735591.3989202955 5339357.078318694,... | None | Penny | 40 | None | None | 27482428 | None | 160.751446 | None | supermarket | retail | 1297.783949 |
Why AREA != area
?? we just assigned it from one an other...
buildings_grouped = buildings.groupby(['nearest', 'type'])
buildings_grouped.describe().head(40)
AREA | area | ... | osm_way_id | perimeter | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | mean | std | min | 25% | 50% | 75% | max | count | mean | ... | 75% | max | count | mean | std | min | 25% | 50% | 75% | max | ||
nearest | type | |||||||||||||||||||||
0 | farm | 1.0 | 613.107966 | NaN | 613.107966 | 613.107966 | 613.107966 | 613.107966 | 613.107966 | 1.0 | 6.118382e+02 | ... | 2.816692e+08 | 281669205.0 | 1.0 | 126.744403 | NaN | 126.744403 | 126.744403 | 126.744403 | 126.744403 | 126.744403 |
other | 1.0 | 519.074015 | NaN | 519.074015 | 519.074015 | 519.074015 | 519.074015 | 519.074015 | 1.0 | 5.179353e+02 | ... | 2.815083e+08 | 281508305.0 | 1.0 | 107.276628 | NaN | 107.276628 | 107.276628 | 107.276628 | 107.276628 | 107.276628 | |
residential | 3.0 | 239.346601 | 30.872299 | 205.464289 | 226.077832 | 246.691375 | 256.287757 | 265.884139 | 3.0 | 2.389415e+02 | ... | 2.816692e+08 | 281669209.0 | 3.0 | 62.853104 | 4.143033 | 58.163383 | 61.271527 | 64.379670 | 65.197965 | 66.016260 | |
1 | farm | 1.0 | 2115.137359 | NaN | 2115.137359 | 2115.137359 | 2115.137359 | 2115.137359 | 2115.137359 | 1.0 | 2.110956e+03 | ... | 2.815083e+08 | 281508306.0 | 1.0 | 224.696828 | NaN | 224.696828 | 224.696828 | 224.696828 | 224.696828 | 224.696828 |
residential | 4.0 | 209.959588 | 75.186861 | 142.504014 | 152.647210 | 197.012138 | 254.324516 | 303.310062 | 4.0 | 2.095329e+02 | ... | 2.815083e+08 | 281508313.0 | 4.0 | 58.663606 | 11.891804 | 47.904944 | 49.864683 | 56.500447 | 65.299370 | 73.748587 | |
2 | farm | 2.0 | 694.419395 | 116.201162 | 612.252765 | 653.336080 | 694.419395 | 735.502709 | 776.586024 | 2.0 | 6.932345e+02 | ... | 2.816894e+08 | 281689428.0 | 2.0 | 124.666924 | 15.093892 | 113.993930 | 119.330427 | 124.666924 | 130.003420 | 135.339917 |
residential | 8.0 | 205.324196 | 120.489247 | 98.398435 | 106.558282 | 164.345127 | 265.589578 | 397.912785 | 8.0 | 2.048858e+02 | ... | 2.816894e+08 | 302586968.0 | 8.0 | 60.975753 | 22.800008 | 41.034070 | 44.039173 | 53.460730 | 68.926916 | 98.905103 | |
3 | farm | 2.0 | 606.588576 | 290.706853 | 401.027789 | 503.808182 | 606.588576 | 709.368969 | 812.149362 | 2.0 | 6.052987e+02 | ... | 2.816894e+08 | 281689439.0 | 2.0 | 115.942788 | 32.690592 | 92.827048 | 104.384918 | 115.942788 | 127.500657 | 139.058527 |
other | 1.0 | 288.162026 | NaN | 288.162026 | 288.162026 | 288.162026 | 288.162026 | 288.162026 | 1.0 | 2.875666e+02 | ... | 2.816894e+08 | 281689438.0 | 1.0 | 69.650115 | NaN | 69.650115 | 69.650115 | 69.650115 | 69.650115 | 69.650115 | |
residential | 23.0 | 225.786187 | 118.602536 | 34.980934 | 162.674701 | 229.366828 | 293.652306 | 468.258848 | 23.0 | 2.254115e+02 | ... | 2.816894e+08 | 303596049.0 | 23.0 | 60.980293 | 19.623507 | 24.948542 | 51.522762 | 61.193566 | 76.850867 | 96.669758 | |
4 | farm | 1.0 | 897.389164 | NaN | 897.389164 | 897.389164 | 897.389164 | 897.389164 | 897.389164 | 1.0 | 1.396132e+07 | ... | 2.817009e+08 | 281700854.0 | 1.0 | 139.912865 | NaN | 139.912865 | 139.912865 | 139.912865 | 139.912865 | 139.912865 |
hotel | 1.0 | 1772.569197 | NaN | 1772.569197 | 1772.569197 | 1772.569197 | 1772.569197 | 1772.569197 | 1.0 | 1.768936e+03 | ... | 2.816692e+08 | 281669211.0 | 1.0 | 273.758075 | NaN | 273.758075 | 273.758075 | 273.758075 | 273.758075 | 273.758075 | |
other | 1.0 | 875.885988 | NaN | 875.885988 | 875.885988 | 875.885988 | 875.885988 | 875.885988 | 1.0 | 8.741183e+02 | ... | 2.816894e+08 | 281689434.0 | 1.0 | 125.234574 | NaN | 125.234574 | 125.234574 | 125.234574 | 125.234574 | 125.234574 | |
residential | 15.0 | 259.377472 | 202.675034 | 42.900938 | 94.067225 | 243.549398 | 364.255829 | 748.319821 | 15.0 | 3.608283e+05 | ... | 2.817009e+08 | 302586970.0 | 15.0 | 67.784448 | 32.779619 | 26.226804 | 38.770922 | 66.563069 | 91.892214 | 133.012831 | |
5 | farm | 1.0 | 542.460212 | NaN | 542.460212 | 542.460212 | 542.460212 | 542.460212 | 542.460212 | 1.0 | 5.414658e+02 | ... | 2.817008e+08 | 281700849.0 | 1.0 | 99.826185 | NaN | 99.826185 | 99.826185 | 99.826185 | 99.826185 | 99.826185 |
other | 2.0 | 565.674526 | 276.900248 | 369.876483 | 467.775504 | 565.674526 | 663.573547 | 761.472569 | 2.0 | 5.644801e+02 | ... | 2.817009e+08 | 281700851.0 | 2.0 | 102.352744 | 32.953477 | 79.051117 | 90.701931 | 102.352744 | 114.003557 | 125.654371 | |
residential | 10.0 | 159.083292 | 97.777833 | 56.673996 | 82.480964 | 130.246117 | 231.299164 | 317.240462 | 10.0 | 1.587249e+02 | ... | 2.817009e+08 | 281700862.0 | 10.0 | 50.668861 | 17.602476 | 31.701653 | 37.101670 | 47.017746 | 60.850418 | 83.874135 | |
7 | residential | 2.0 | 320.631344 | 23.164990 | 304.251223 | 312.441283 | 320.631344 | 328.821405 | 337.011466 | 2.0 | 3.200414e+02 | ... | 2.945240e+08 | 302729800.0 | 2.0 | 72.972374 | 1.961609 | 71.585307 | 72.278841 | 72.972374 | 73.665908 | 74.359441 |
warehouse | 2.0 | 110.165182 | 1.281146 | 109.259275 | 109.712229 | 110.165182 | 110.618136 | 111.071089 | 2.0 | 1.099617e+02 | ... | 2.699065e+08 | 269906533.0 | 2.0 | 43.057298 | 1.378396 | 42.082625 | 42.569961 | 43.057298 | 43.544635 | 44.031971 | |
8 | farm | 1.0 | 1336.139222 | NaN | 1336.139222 | 1336.139222 | 1336.139222 | 1336.139222 | 1336.139222 | 1.0 | 1.333456e+03 | ... | 3.027298e+08 | 302729801.0 | 1.0 | 187.509876 | NaN | 187.509876 | 187.509876 | 187.509876 | 187.509876 | 187.509876 |
other | 1.0 | 322.006706 | NaN | 322.006706 | 322.006706 | 322.006706 | 322.006706 | 322.006706 | 1.0 | 3.213029e+02 | ... | 3.027298e+08 | 302729804.0 | 1.0 | 79.702736 | NaN | 79.702736 | 79.702736 | 79.702736 | 79.702736 | 79.702736 | |
residential | 2.0 | 275.931534 | 286.854827 | 73.094540 | 174.513037 | 275.931534 | 377.350030 | 478.768527 | 2.0 | 2.753217e+02 | ... | 3.027298e+08 | 302729806.0 | 2.0 | 68.533906 | 48.110341 | 34.514757 | 51.524331 | 68.533906 | 85.543480 | 102.553054 | |
9 | warehouse | 1.0 | 404.260374 | NaN | 404.260374 | 404.260374 | 404.260374 | 404.260374 | 404.260374 | 1.0 | 4.034089e+02 | ... | 3.027298e+08 | 302729802.0 | 1.0 | 96.428673 | NaN | 96.428673 | 96.428673 | 96.428673 | 96.428673 | 96.428673 |
11 | other | 1.0 | 270.482948 | NaN | 270.482948 | 270.482948 | 270.482948 | 270.482948 | 270.482948 | 1.0 | 2.699605e+02 | ... | 3.027413e+08 | 302741259.0 | 1.0 | 68.918471 | NaN | 68.918471 | 68.918471 | 68.918471 | 68.918471 | 68.918471 |
residential | 1.0 | 250.160405 | NaN | 250.160405 | 250.160405 | 250.160405 | 250.160405 | 250.160405 | 1.0 | 2.496481e+02 | ... | 3.027298e+08 | 302729805.0 | 1.0 | 73.133029 | NaN | 73.133029 | 73.133029 | 73.133029 | 73.133029 | 73.133029 | |
warehouse | 2.0 | 93.384707 | 42.742733 | 63.161030 | 78.272868 | 93.384707 | 108.496545 | 123.608383 | 2.0 | 9.320389e+01 | ... | 3.027411e+08 | 302741258.0 | 2.0 | 38.693779 | 8.989685 | 32.337112 | 35.515445 | 38.693779 | 41.872113 | 45.050446 | |
12 | industrial | 1.0 | 1443.309281 | NaN | 1443.309281 | 1443.309281 | 1443.309281 | 1443.309281 | 1443.309281 | 1.0 | 1.440611e+03 | ... | 2.697017e+08 | 269701680.0 | 1.0 | 164.042627 | NaN | 164.042627 | 164.042627 | 164.042627 | 164.042627 | 164.042627 |
residential | 1.0 | 97.773269 | NaN | 97.773269 | 97.773269 | 97.773269 | 97.773269 | 97.773269 | 1.0 | 9.761862e+01 | ... | 2.703062e+08 | 270306179.0 | 1.0 | 39.543040 | NaN | 39.543040 | 39.543040 | 39.543040 | 39.543040 | 39.543040 | |
13 | other | 1.0 | 606.305920 | NaN | 606.305920 | 606.305920 | 606.305920 | 606.305920 | 606.305920 | 1.0 | 6.050569e+02 | ... | 3.027413e+08 | 302741260.0 | 1.0 | 108.349557 | NaN | 108.349557 | 108.349557 | 108.349557 | 108.349557 | 108.349557 |
residential | 3.0 | 198.829456 | 92.272053 | 106.804693 | 152.570771 | 198.336849 | 244.841838 | 291.346827 | 3.0 | 1.984457e+02 | ... | 3.027444e+08 | 302744717.0 | 3.0 | 59.760548 | 15.218449 | 43.366174 | 52.922449 | 62.478725 | 67.957735 | 73.436746 | |
warehouse | 2.0 | 236.589180 | 19.061928 | 223.110362 | 229.849771 | 236.589180 | 243.328589 | 250.067999 | 2.0 | 2.361424e+02 | ... | 3.027445e+08 | 302744718.0 | 2.0 | 63.935222 | 5.635799 | 59.950110 | 61.942666 | 63.935222 | 65.927778 | 67.920334 | |
14 | industrial | 2.0 | 28630.388591 | 40142.208794 | 245.560541 | 14437.974566 | 28630.388591 | 42822.802616 | 57015.216641 | 2.0 | 2.857195e+04 | ... | 2.108386e+08 | 270306167.0 | 2.0 | 888.977046 | 1159.835068 | 68.849804 | 478.913425 | 888.977046 | 1299.040666 | 1709.104287 |
16 | farm | 1.0 | 696.000014 | NaN | 696.000014 | 696.000014 | 696.000014 | 696.000014 | 696.000014 | 1.0 | 6.945302e+02 | ... | 3.027447e+08 | 302744715.0 | 1.0 | 131.033367 | NaN | 131.033367 | 131.033367 | 131.033367 | 131.033367 | 131.033367 |
residential | 2.0 | 117.289386 | 85.934256 | 56.524691 | 86.907039 | 117.289386 | 147.671734 | 178.054081 | 2.0 | 1.170470e+02 | ... | 3.027447e+08 | 302744716.0 | 2.0 | 43.691846 | 15.588828 | 32.668880 | 38.180363 | 43.691846 | 49.203329 | 54.714812 | |
18 | residential | 2.0 | 242.578550 | 107.193653 | 166.781191 | 204.679871 | 242.578550 | 280.477230 | 318.375909 | 2.0 | 2.416488e+02 | ... | 2.703062e+08 | 270306182.0 | 2.0 | 66.187342 | 19.827973 | 52.166848 | 59.177095 | 66.187342 | 73.197589 | 80.207836 |
19 | residential | 4.0 | 311.255995 | 270.367952 | 31.230764 | 121.162559 | 293.297178 | 483.390614 | 627.198860 | 4.0 | 3.106302e+02 | ... | 3.028779e+08 | 302877881.0 | 4.0 | 76.571112 | 48.644461 | 22.499745 | 43.855169 | 77.109826 | 109.825770 | 129.565051 |
warehouse | 1.0 | 51.625470 | NaN | 51.625470 | 51.625470 | 51.625470 | 51.625470 | 51.625470 | 1.0 | 5.129327e+01 | ... | 3.028779e+08 | 302877882.0 | 1.0 | 30.585017 | NaN | 30.585017 | 30.585017 | 30.585017 | 30.585017 | 30.585017 | |
28 | commercial | 1.0 | 626.065086 | NaN | 626.065086 | 626.065086 | 626.065086 | 626.065086 | 626.065086 | 1.0 | 6.248344e+02 | ... | 3.213150e+07 | 32131503.0 | 1.0 | 150.386199 | NaN | 150.386199 | 150.386199 | 150.386199 | 150.386199 | 150.386199 |
residential | 2.0 | 136.662383 | 63.588313 | 91.698656 | 114.180519 | 136.662383 | 159.144247 | 181.626110 | 2.0 | 1.364283e+02 | ... | 3.213151e+07 | 32131513.0 | 2.0 | 66.749869 | 15.978725 | 55.451204 | 61.100537 | 66.749869 | 72.399202 | 78.048534 | |
retail | 1.0 | 1606.707165 | NaN | 1606.707165 | 1606.707165 | 1606.707165 | 1606.707165 | 1606.707165 | 1.0 | 1.603552e+03 | ... | 2.748243e+07 | 27482427.0 | 1.0 | 183.319654 | NaN | 183.319654 | 183.319654 | 183.319654 | 183.319654 | 183.319654 |
40 rows × 32 columns
# split up total_area = buildings_grouped.sum()['AREA'].unstack()
bgsum = buildings_grouped.sum()
bgsum.head(8)
area | osm_way_id | perimeter | AREA | ||
---|---|---|---|---|---|
nearest | type | ||||
0 | farm | 611.838159 | 281669205 | 126.744403 | 613.107966 |
other | 517.935265 | 281508305 | 107.276628 | 519.074015 | |
residential | 716.824605 | 844846723 | 188.559313 | 718.039803 | |
1 | farm | 2110.955784 | 281508306 | 224.696828 | 2115.137359 |
residential | 838.131703 | 1126033245 | 234.654424 | 839.838351 | |
2 | farm | 1386.469064 | 563378849 | 249.333847 | 1388.838789 |
residential | 1639.086737 | 2274372479 | 487.806022 | 1642.593569 | |
3 | farm | 1210.597372 | 563378872 | 231.885575 | 1213.177151 |
bgsum['AREA'].head(20)
nearest type 0 farm 613.107966 other 519.074015 residential 718.039803 1 farm 2115.137359 residential 839.838351 2 farm 1388.838789 residential 1642.593569 3 farm 1213.177151 other 288.162026 residential 5193.082310 4 farm 897.389164 hotel 1772.569197 other 875.885988 residential 3890.662073 5 farm 542.460212 other 1131.349052 residential 1590.832921 7 residential 641.262688 warehouse 220.330364 8 farm 1336.139222 Name: AREA, dtype: float64
total_area = bgsum['AREA'].unstack()
total_area.head(5)
type | commercial | farm | garage | hospital | hotel | industrial | other | public | residential | retail | warehouse |
---|---|---|---|---|---|---|---|---|---|---|---|
nearest | |||||||||||
0 | NaN | 613.107966 | NaN | NaN | NaN | NaN | 519.074015 | NaN | 718.039803 | NaN | NaN |
1 | NaN | 2115.137359 | NaN | NaN | NaN | NaN | NaN | NaN | 839.838351 | NaN | NaN |
2 | NaN | 1388.838789 | NaN | NaN | NaN | NaN | NaN | NaN | 1642.593569 | NaN | NaN |
3 | NaN | 1213.177151 | NaN | NaN | NaN | NaN | 288.162026 | NaN | 5193.082310 | NaN | NaN |
4 | NaN | 897.389164 | NaN | NaN | 1772.569197 | NaN | 875.885988 | NaN | 3890.662073 | NaN | NaN |
# load edges (streets) and join with summed areas
# 1. read shapefile to DataFrame (with geometry column)
# 2. join DataFrame total_area on index (=ID)
# 3. fill missing values with 0
edge = geopandas.read_file(edge_shapefile)
edge.head(5)
Cluster | Edge | Vertex1 | Vertex2 | geometry | length | x0 | x1 | y0 | y1 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | Moosham | 0 | 31 | 123 | LINESTRING (12.13846526289267 48.1869855970568... | 160.220094 | 733255.29 | 733414.83 | 5341846.97 | 5341831.71 |
1 | Moosham | 1 | 4 | 31 | LINESTRING (12.14060007803448 48.1867898718811... | 142.647898 | 733414.83 | 733353.52 | 5341831.71 | 5341702.86 |
2 | Moosham | 2 | 23 | 31 | LINESTRING (12.14060007803448 48.1867898718811... | 92.301263 | 733414.83 | 733499.78 | 5341831.71 | 5341795.57 |
3 | Moosham | 3 | 23 | 109 | LINESTRING (12.14558850186704 48.1862331650699... | 298.905848 | 733788.07 | 733499.78 | 5341785.01 | 5341795.57 |
4 | Moosham | 4 | 45 | 109 | LINESTRING (12.14558850186704 48.1862331650699... | 173.175415 | 733788.07 | 733639.65 | 5341785.01 | 5341874.33 |
edge = edge.set_index('Edge')
edge.head(5)
Cluster | Vertex1 | Vertex2 | geometry | length | x0 | x1 | y0 | y1 | |
---|---|---|---|---|---|---|---|---|---|
Edge | |||||||||
0 | Moosham | 31 | 123 | LINESTRING (12.13846526289267 48.1869855970568... | 160.220094 | 733255.29 | 733414.83 | 5341846.97 | 5341831.71 |
1 | Moosham | 4 | 31 | LINESTRING (12.14060007803448 48.1867898718811... | 142.647898 | 733414.83 | 733353.52 | 5341831.71 | 5341702.86 |
2 | Moosham | 23 | 31 | LINESTRING (12.14060007803448 48.1867898718811... | 92.301263 | 733414.83 | 733499.78 | 5341831.71 | 5341795.57 |
3 | Moosham | 23 | 109 | LINESTRING (12.14558850186704 48.1862331650699... | 298.905848 | 733788.07 | 733499.78 | 5341785.01 | 5341795.57 |
4 | Moosham | 45 | 109 | LINESTRING (12.14558850186704 48.1862331650699... | 173.175415 | 733788.07 | 733639.65 | 5341785.01 | 5341874.33 |
edge = edge.join(total_area)
edge.head(5)
Cluster | Vertex1 | Vertex2 | geometry | length | x0 | x1 | y0 | y1 | commercial | farm | garage | hospital | hotel | industrial | other | public | residential | retail | warehouse | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Edge | ||||||||||||||||||||
0 | Moosham | 31 | 123 | LINESTRING (12.13846526289267 48.1869855970568... | 160.220094 | 733255.29 | 733414.83 | 5341846.97 | 5341831.71 | NaN | 613.107966 | NaN | NaN | NaN | NaN | 519.074015 | NaN | 718.039803 | NaN | NaN |
1 | Moosham | 4 | 31 | LINESTRING (12.14060007803448 48.1867898718811... | 142.647898 | 733414.83 | 733353.52 | 5341831.71 | 5341702.86 | NaN | 2115.137359 | NaN | NaN | NaN | NaN | NaN | NaN | 839.838351 | NaN | NaN |
2 | Moosham | 23 | 31 | LINESTRING (12.14060007803448 48.1867898718811... | 92.301263 | 733414.83 | 733499.78 | 5341831.71 | 5341795.57 | NaN | 1388.838789 | NaN | NaN | NaN | NaN | NaN | NaN | 1642.593569 | NaN | NaN |
3 | Moosham | 23 | 109 | LINESTRING (12.14558850186704 48.1862331650699... | 298.905848 | 733788.07 | 733499.78 | 5341785.01 | 5341795.57 | NaN | 1213.177151 | NaN | NaN | NaN | NaN | 288.162026 | NaN | 5193.082310 | NaN | NaN |
4 | Moosham | 45 | 109 | LINESTRING (12.14558850186704 48.1862331650699... | 173.175415 | 733788.07 | 733639.65 | 5341785.01 | 5341874.33 | NaN | 897.389164 | NaN | NaN | 1772.569197 | NaN | 875.885988 | NaN | 3890.662073 | NaN | NaN |
edge = edge.fillna(0)
edge.head(5)
Cluster | Vertex1 | Vertex2 | geometry | length | x0 | x1 | y0 | y1 | commercial | farm | garage | hospital | hotel | industrial | other | public | residential | retail | warehouse | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Edge | ||||||||||||||||||||
0 | Moosham | 31 | 123 | LINESTRING (12.13846526289267 48.1869855970568... | 160.220094 | 733255.29 | 733414.83 | 5341846.97 | 5341831.71 | 0.0 | 613.107966 | 0.0 | 0.0 | 0.000000 | 0.0 | 519.074015 | 0.0 | 718.039803 | 0.0 | 0.0 |
1 | Moosham | 4 | 31 | LINESTRING (12.14060007803448 48.1867898718811... | 142.647898 | 733414.83 | 733353.52 | 5341831.71 | 5341702.86 | 0.0 | 2115.137359 | 0.0 | 0.0 | 0.000000 | 0.0 | 0.000000 | 0.0 | 839.838351 | 0.0 | 0.0 |
2 | Moosham | 23 | 31 | LINESTRING (12.14060007803448 48.1867898718811... | 92.301263 | 733414.83 | 733499.78 | 5341831.71 | 5341795.57 | 0.0 | 1388.838789 | 0.0 | 0.0 | 0.000000 | 0.0 | 0.000000 | 0.0 | 1642.593569 | 0.0 | 0.0 |
3 | Moosham | 23 | 109 | LINESTRING (12.14558850186704 48.1862331650699... | 298.905848 | 733788.07 | 733499.78 | 5341785.01 | 5341795.57 | 0.0 | 1213.177151 | 0.0 | 0.0 | 0.000000 | 0.0 | 288.162026 | 0.0 | 5193.082310 | 0.0 | 0.0 |
4 | Moosham | 45 | 109 | LINESTRING (12.14558850186704 48.1862331650699... | 173.175415 | 733788.07 | 733639.65 | 5341785.01 | 5341874.33 | 0.0 | 897.389164 | 0.0 | 0.0 | 1772.569197 | 0.0 | 875.885988 | 0.0 | 3890.662073 | 0.0 | 0.0 |