In [1]:
from pathlib import Path

import pandas as pd
import geopandas as gpd
from shapely.geometry import Point
import spectra

DATA_DIR = Path('../data')
OUT_DIR = Path('../output')

%matplotlib inline

Problem 2


In [2]:
# Load Auckland roads as a geodataframe

path = DATA_DIR/'auckland_new-zealand_roads_gen1.geojson'  # 50 m tolerance
roads = gpd.read_file(str(path))
roads['osm_id'] = roads['osm_id'].astype(int).astype(str)
roads.head()


Out[2]:
access bridge class geometry name oneway osm_id ref service tunnel type z_order
0 None 0 highway LINESTRING (174.885374754468 -36.9925097039147... Redoubt Road 1 4077492 None None 0 secondary 5.0
1 None 0 highway LINESTRING (174.7825679460168 -36.926756607184... Neilson Street 0 4077500 None None 0 primary 6.0
2 None 0 highway LINESTRING (174.8133010321928 -36.920145632513... Church Street 0 4077501 10 None 0 primary 6.0
3 yes 0 highway LINESTRING (174.7635943347171 -36.858437809893... Grafton Bridge 0 4279302 None None 0 secondary 5.0
4 None 0 highway LINESTRING (174.7613962644289 -36.857914276220... Upper Queen Street 0 4279661 4 None 0 secondary 5.0

In [3]:
# Reproject to NZTM 

print(roads.crs)
CRS_WGS84 = roads.crs
roads = roads.to_crs(epsg=2193)
print(roads.crs)
CRS_NZTM = roads.crs
roads.head()


{'init': 'epsg:4326'}
{'init': 'epsg:2193', 'no_defs': True}
Out[3]:
access bridge class geometry name oneway osm_id ref service tunnel type z_order
0 None 0 highway LINESTRING (1767778.116978053 5904297.21402450... Redoubt Road 1 4077492 None None 0 secondary 5.0
1 None 0 highway LINESTRING (1758765.076053659 5911768.63763862... Neilson Street 0 4077500 None None 0 primary 6.0
2 None 0 highway LINESTRING (1761516.533885194 5912450.48134130... Church Street 0 4077501 10 None 0 primary 6.0
3 yes 0 highway LINESTRING (1757215.13659337 5919379.770159338... Grafton Bridge 0 4279302 None None 0 secondary 5.0
4 None 0 highway LINESTRING (1757020.244158367 5919441.47088102... Upper Queen Street 0 4279661 4 None 0 secondary 5.0

In [4]:
# Plot

roads.plot(column='type')


Out[4]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f9ddf1153c8>

Problem 3


In [4]:
# Load NZ crashes as a dataframe

path = DATA_DIR/'nz_crashes_2011--2016.csv'
crashes = pd.read_csv(path)
crashes.head().T


Out[4]:
0 1 2 3 4
CRASH_YEAR 2011 2011 2011 2011 2011
CRASH_SEV F F F F F
fatal_count 1 1 1 1 2
seriousinj_count 1 1 1 1 0
minorinj_count 4 4 0 0 0
MULTI_VEH Multi vehicle Multi vehicle Multi vehicle Single vehicle Multi vehicle
HOLIDAY Christmas/New Year Christmas/New Year Christmas/New Year Christmas/New Year None
lg_region Bay of Plenty Waikato Waikato Auckland Bay of Plenty
TLA_ID 27 13 11 7 23
TLA_NAME Opotiki District Waikato District Thames-Coromandel District Auckland Tauranga City
AU_ID 542906 527911 533100 516001 537602
MB_ID 1.3376e+06 975800 1.04571e+06 491200 1.1939e+06
EASTING 1.96816e+06 1.79443e+06 1.82544e+06 1.75917e+06 1.87695e+06
NORTHING 5.7856e+06 5.82448e+06 5.92951e+06 5.91683e+06 5.81788e+06
CRASH_LOCN1 SH 2 GREAT SOUTH ROAD SH 25 MOUNT HOBSON ROAD OROPI ROAD
CRASH_LOCN2 WAIOTAHI VALLEY BACK ROAD HOROTIU BRIDGE ROAD TIKI ROAD MARKET ROAD CHEYNE ROAD EAST
OUTDTD_LOCN_DESC Current location Current location Current location Current location Current location
CRASH_RP_RS 294 NaN 84 NaN NaN
INTERSECTION Unknown Unknown Unknown Unknown Unknown
JUNCTION_TYPE Unknown Unknown Unknown Unknown Unknown
CR_RD_SIDE_RD 1 1 1 1 1
CRASH_DIRN_DESC North South East North South
CRASH_DIST 50 600 3100 80 400
CRASH_RP_DIRN_DESC NaN NaN NaN NaN NaN
DIRN_ROLE1_DESC South South East South South
CRASH_RP_DISP 132 0 3100 0 0
CRASH_SH_DESC Yes No Yes No No
CRASH_RP_SH 2 NaN 25 NaN NaN
CRASH_RP_NEWS_DESC NaN NaN NaN NaN NaN
INTSN_MIDBLOCK Mid Block Mid Block Mid Block Mid Block Mid Block
FLAT_HILL Flat Hill Hill Flat Hill
ROAD_CHARACTER Unknown Unknown Unknown Unknown Unknown
ROAD_CURVATURE Straight Road Easy Curve Severe Curve Straight Road Easy Curve
ROAD_LANE 2 2 2 1 2
ROAD_MARKINGS Centre Line Centre Line Centre Line No Marks No Passing Lines
ROAD_SURFACE Sealed Sealed Sealed Sealed Sealed
ROAD_WET Dry Dry Dry Dry Dry
NUM_LANES 2 2 2 2 2
TRAFFIC_CTRL Nil Nil Nil Nil Nil
SPD_LIM 100 100 100 50 100
ADV_SPD NaN NaN NaN NaN NaN
TMP_SPD_LIM NaN NaN NaN NaN NaN
URBAN Openroad Openroad Openroad Urban Openroad
DARK_LIGHT Light Light Light Dark Light
LIGHT Bright Sun Bright Sun Bright Sun Dark Bright Sun
STREET_LIGHT Off None None On None
WEATHER_A Fine Fine Fine Fine Fine
WEATHER_B Unknown Unknown Unknown Unknown Unknown

In [5]:
# Filter data frame and drop bad locations

f = crashes.copy()
cond = f['lg_region'] == 'Auckland'
#cond &= f['MULTI_VEH'].str.contains(r'cyclist|pedestrian', case=False)
cond &= (f['EASTING'] > 0) & (f['NORTHING'] > 0)
f = f[cond].copy()

# Convert to geodataframe in NZTM

geometry = [Point(p) for p in zip(f['EASTING'], f['NORTHING'])]
crashes = gpd.GeoDataFrame(f, crs=CRS_NZTM, geometry=geometry)
print(crashes.crs)
crashes.T


{'init': 'epsg:2193', 'no_defs': True}
Out[5]:
3 5 13 15 16 20 21 25 27 28 ... 49930 49937 49944 49963 49965 49966 49977 49978 49982 49983
CRASH_YEAR 2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 ... 2016 2016 2016 2016 2016 2016 2016 2016 2016 2016
CRASH_SEV F F F F F F F F F F ... M S S M S M S M M M
fatal_count 1 1 1 1 1 1 1 2 1 2 ... 0 0 0 0 0 0 0 0 0 0
seriousinj_count 1 1 0 0 0 0 0 0 0 4 ... 0 1 1 0 1 0 1 0 0 0
minorinj_count 0 0 1 0 0 0 0 0 0 0 ... 1 1 0 1 0 2 0 1 1 1
MULTI_VEH Single vehicle Multi vehicle Multi vehicle Multi vehicle Multi vehicle Vehicle(s)+Pedestrian(s) Single vehicle Single vehicle Single vehicle Multi vehicle ... Multi vehicle Multi vehicle Vehicle(s)+Pedestrian(s) Single vehicle Vehicle(s)+Pedestrian(s) Single vehicle Multi vehicle Multi vehicle Multi vehicle Multi vehicle
HOLIDAY Christmas/New Year None None None None None None None None None ... None None None None None Easter None None None Christmas/New Year
lg_region Auckland Auckland Auckland Auckland Auckland Auckland Auckland Auckland Auckland Auckland ... Auckland Auckland Auckland Auckland Auckland Auckland Auckland Auckland Auckland Auckland
TLA_ID 7 7 7 7 7 7 7 7 7 7 ... 7 7 7 7 7 7 7 7 7 7
TLA_NAME Auckland Auckland Auckland Auckland Auckland Auckland Auckland Auckland Auckland Auckland ... Auckland Auckland Auckland Auckland Auckland Auckland Auckland Auckland Auckland Auckland
AU_ID 516001 508701 521201 514102 506615 522721 521151 518600 520201 506615 ... 508807 506614 517901 506300 514102 524601 516500 520202 518702 517800
MB_ID 491200 178400 806604 432500 139107 680701 830600 564700 610600 136400 ... 180401 177700 524800 176005 433301 674600 500600 612300 567900 526700
EASTING 1.75917e+06 1.74988e+06 1.77114e+06 1.75661e+06 1.74724e+06 1.7695e+06 1.74913e+06 1.75701e+06 1.76202e+06 1.73737e+06 ... 1.75258e+06 1.74374e+06 1.75244e+06 1.75198e+06 1.75706e+06 1.76597e+06 1.76303e+06 1.76171e+06 1.75763e+06 1.75384e+06
NORTHING 5.91683e+06 5.93502e+06 5.89516e+06 5.92072e+06 5.96994e+06 5.91464e+06 5.88214e+06 5.91375e+06 5.91477e+06 5.98049e+06 ... 5.93329e+06 5.94759e+06 5.91611e+06 5.93886e+06 5.92068e+06 5.90446e+06 5.92058e+06 5.91404e+06 5.91353e+06 5.91707e+06
CRASH_LOCN1 MOUNT HOBSON ROAD DAIRY FLAT HIGHWAY HINGAIA ROAD HALSEY ST FALLS ROAD PAKURANGA ROAD AWHITU ROAD MOUNT ALBERT ROAD ELLERSLIE-PANMURE HIGHWAY SH 1N ... ALBANY EXPRESSWAY WAINUI ROAD Z BP STATION EAST COAST ROAD GORST LANE CAVENDISH DRIVE TAMAKI DRIVE SH 1N PAH ROAD NEW NORTH ROAD
CRASH_LOCN2 MARKET ROAD HOBSON ROAD PAPAKURA OFF NBD FANSHAWE ST VIV DAVIE-MARTIN DRIVE PIGEON MOUNTAIN ROAD GLEESON ROAD HILLSBOROUGH ROAD ELLERSLIE PARK ROAD CENTENNIAL PARK ROAD ... MERCARI WAY JOBLIN ROAD WOODWARD ROAD OLD WRIGHT ROAD HOBSON ST PLUNKET AVENUE ATKIN AVENUE PENROSE OFF NBD MOUNT ALBERT ROAD ALBERTON AVENUE
OUTDTD_LOCN_DESC Current location Current location Current location Current location Current location Current location Current location Current location Current location Current location ... Current location Current location Current location Current location Current location Current location Current location Current location Current location Current location
CRASH_RP_RS NaN NaN NaN NaN NaN NaN NaN NaN NaN 346 ... NaN NaN NaN NaN NaN NaN NaN 431 NaN NaN
INTERSECTION Unknown Unknown Unknown Unknown Unknown Intersection Unknown Intersection Unknown Unknown ... Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Intersection
JUNCTION_TYPE Unknown Unknown Unknown Driveway Unknown Driveway Unknown T Type Junction Unknown Unknown ... Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown T Type Junction
CR_RD_SIDE_RD 1 1 1 1 1 1 1 1 1 1 ... 1 1 1 1 1 1 1 1 1 1
CRASH_DIRN_DESC North South West South South NaN North NaN West South ... South West East North West East West East South NaN
CRASH_DIST 80 150 200 40 230 NaN 100 NaN 60 900 ... 80 150 50 80 50 100 170 30 50 NaN
CRASH_RP_DIRN_DESC NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN Decreasing NaN NaN
DIRN_ROLE1_DESC South South West North South West North West East South ... West East North East East East East East North West
CRASH_RP_DISP 0 0 0 0 0 0 0 0 0 1829 ... 0 0 0 0 0 0 0 4606 0 0
CRASH_SH_DESC No No No No No No No No No Yes ... No No No No No No No Yes No No
CRASH_RP_SH NaN NaN NaN NaN NaN NaN NaN NaN NaN 1N ... NaN NaN NaN NaN NaN NaN NaN 1N NaN NaN
CRASH_RP_NEWS_DESC NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN Southbound NaN NaN
INTSN_MIDBLOCK Mid Block Mid Block Mid Block Mid Block Mid Block Intersection Mid Block Intersection Mid Block Mid Block ... Mid Block Mid Block Mid Block Mid Block Mid Block Mid Block Mid Block Mid Block Mid Block Intersection
FLAT_HILL Flat Hill Flat Flat Hill Flat Hill Hill Flat Hill ... Flat Flat Flat Flat Flat Flat Flat Flat Flat Hill
ROAD_CHARACTER Unknown Unknown Unknown Unknown Unknown Unknown Bridge Unknown Unknown Unknown ... Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown
ROAD_CURVATURE Straight Road Easy Curve Straight Road Straight Road Moderate Curve Straight Road Moderate Curve Straight Road Easy Curve Easy Curve ... Straight Road Easy Curve Straight Road Straight Road Straight Road Easy Curve Straight Road Straight Road Straight Road Straight Road
ROAD_LANE 1 2 2 2 2 2 2 2 2 2 ... 2 2 O 2 1 2 1 1 2 2
ROAD_MARKINGS No Marks Centre Line Painted Island Centre Line Centre Line Centre Line Centre Line Centre Line Centre Line No Passing Lines ... Raised Island Centre Line No Marks No Passing Lines No Marks Centre Line Centre Line Centre Line Centre Line Centre Line
ROAD_SURFACE Sealed Sealed Sealed Sealed Sealed Sealed Sealed Sealed Sealed Sealed ... Sealed Sealed Sealed Sealed Sealed Sealed Sealed Sealed Sealed Sealed
ROAD_WET Dry Dry Dry Dry Dry Dry Wet Dry Dry Wet ... Dry Dry Wet Dry Dry Wet Wet Dry Dry Wet
NUM_LANES 2 3 4 2 2 3 2 5 4 3 ... 5 2 NaN 2 1 4 2 3 4 4
TRAFFIC_CTRL Nil Nil Nil Nil Nil Traffic Signal Nil Traffic Signal Nil Nil ... NaN NaN NaN NaN NaN NaN NaN NaN NaN Stop Sign
SPD_LIM 50 80 70 50 100 60 100 50 50 100 ... 80 100 50 80 50 60 40 100 50 50
ADV_SPD NaN NaN NaN NaN NaN NaN 65 NaN NaN NaN ... NaN 55 NaN NaN NaN NaN NaN NaN NaN NaN
TMP_SPD_LIM NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
URBAN Urban Openroad Urban Urban Openroad Urban Openroad Urban Urban Openroad ... Openroad Openroad Urban Openroad Urban Urban Urban Openroad Urban Urban
DARK_LIGHT Dark Light Light Light Light Light Light Dark Light Light ... Light Light Light Dark Dark Dark Dark Light Light Light
LIGHT Dark Bright Sun Overcast Overcast Bright Sun Bright Sun Overcast Dark Bright Sun Overcast ... Bright Sun Bright Sun Overcast Dark Dark Dark Dark Bright Sun Overcast Overcast
STREET_LIGHT On None Off Off None Off None On Off None ... Unknown Unknown Unknown None None On On Unknown Unknown Unknown
WEATHER_A Fine Fine Fine Fine Fine Fine Light Rain Fine Fine Heavy Rain ... Fine Fine Heavy Rain Fine Fine Fine Heavy Rain Fine Fine Heavy Rain
WEATHER_B Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown ... Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Strong Wind
geometry POINT (1759172 5916834) POINT (1749878 5935022) POINT (1771143 5895160) POINT (1756607 5920717) POINT (1747243 5969936) POINT (1769496 5914637) POINT (1749127 5882144) POINT (1757006 5913751) POINT (1762019 5914768) POINT (1737372 5980489) ... POINT (1752575 5933292) POINT (1743736 5947586) POINT (1752436 5916114) POINT (1751975 5938858) POINT (1757064 5920680) POINT (1765968 5904461) POINT (1763026 5920584) POINT (1761713 5914045) POINT (1757631 5913528) POINT (1753837 5917071)

49 rows × 15124 columns

Problem 4


In [7]:
# Plot crashes on roads

base = roads.plot(color='black')
crashes.plot(ax=base, marker='o', color='red', markersize=3)


Out[7]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f9dd77e0080>

Problem 5


In [6]:
# Spatial-join roads and buffered crash points

r = roads[['geometry', 'osm_id', 'name', 'class']].copy()
c = crashes[['geometry', 'CRASH_SEV']].copy()
c['geometry'] = c['geometry'].buffer(10)
f = gpd.sjoin(r, c, how='inner', op='intersects')
f


Out[6]:
geometry osm_id name class index_right CRASH_SEV
0 LINESTRING (1767778.116978053 5904297.21402450... 4077492 Redoubt Road highway 2523 M
2283 LINESTRING (1767791.477600971 5903962.81922155... 77350008 Great South Road highway 2523 M
3845 LINESTRING (1767637.767513235 5904283.68400765... 150576644 Manukau Station Road highway 2523 M
3878 LINESTRING (1767587.805189282 5904627.71478708... 150701358 Great South Road highway 2523 M
0 LINESTRING (1767778.116978053 5904297.21402450... 4077492 Redoubt Road highway 37494 M
2320 LINESTRING (1767979.890629536 5904329.84242963... 79605480 Redoubt Road highway 37494 M
1 LINESTRING (1758765.076053659 5911768.63763862... 4077500 Neilson Street highway 10552 M
88 LINESTRING (1758188.337122448 5911911.60221063... 4309879 None highway 10552 M
2918 LINESTRING (1758765.076053659 5911768.63763862... 117599450 Gloucester Park Road highway 10552 M
4894 LINESTRING (1758768.214096504 5911757.51803280... 217844827 Gloucester Park Road highway 10552 M
5212 LINESTRING (1758789.324323765 5911771.70064265... 306061200 Neilson Street highway 10552 M
5675 LINESTRING (1758754.653538544 5911725.29579590... 356370853 Gloucester Park Road highway 10552 M
1 LINESTRING (1758765.076053659 5911768.63763862... 4077500 Neilson Street highway 30310 S
88 LINESTRING (1758188.337122448 5911911.60221063... 4309879 None highway 30310 S
2918 LINESTRING (1758765.076053659 5911768.63763862... 117599450 Gloucester Park Road highway 30310 S
4894 LINESTRING (1758768.214096504 5911757.51803280... 217844827 Gloucester Park Road highway 30310 S
5212 LINESTRING (1758789.324323765 5911771.70064265... 306061200 Neilson Street highway 30310 S
5675 LINESTRING (1758754.653538544 5911725.29579590... 356370853 Gloucester Park Road highway 30310 S
1 LINESTRING (1758765.076053659 5911768.63763862... 4077500 Neilson Street highway 31140 M
88 LINESTRING (1758188.337122448 5911911.60221063... 4309879 None highway 31140 M
2918 LINESTRING (1758765.076053659 5911768.63763862... 117599450 Gloucester Park Road highway 31140 M
4894 LINESTRING (1758768.214096504 5911757.51803280... 217844827 Gloucester Park Road highway 31140 M
5212 LINESTRING (1758789.324323765 5911771.70064265... 306061200 Neilson Street highway 31140 M
5675 LINESTRING (1758754.653538544 5911725.29579590... 356370853 Gloucester Park Road highway 31140 M
2 LINESTRING (1761516.533885194 5912450.48134130... 4077501 Church Street highway 4168 M
4256 LINESTRING (1761450.888947824 5912322.98719497... 159429956 Neilson Street highway 4168 M
4358 LINESTRING (1761403.294926243 5912436.59597552... 162324685 Church Street highway 4168 M
2 LINESTRING (1761516.533885194 5912450.48134130... 4077501 Church Street highway 46701 M
3 LINESTRING (1757215.13659337 5919379.770159338... 4279302 Grafton Bridge highway 11391 M
30 LINESTRING (1757211.462371929 5919373.89371228... 4282866 None highway 11391 M
... ... ... ... ... ... ...
6350 LINESTRING (1749484.77520227 5945775.73575641,... 461764142 East Coast Road highway 39732 M
6359 LINESTRING (1749475.225194697 5945842.62307143... 461766796 Brian Smith Drive highway 39732 M
6343 LINESTRING (1749538.370189605 5945833.44039001... 461766798 Hibiscus Coast Highway highway 39755 M
6347 LINESTRING (1749479.482399696 5945811.09062816... 461764143 Hibiscus Coast Highway highway 39755 M
6350 LINESTRING (1749484.77520227 5945775.73575641,... 461764142 East Coast Road highway 39755 M
6359 LINESTRING (1749475.225194697 5945842.62307143... 461766796 Brian Smith Drive highway 39755 M
6343 LINESTRING (1749538.370189605 5945833.44039001... 461766798 Hibiscus Coast Highway highway 45281 M
6347 LINESTRING (1749479.482399696 5945811.09062816... 461764143 Hibiscus Coast Highway highway 45281 M
6350 LINESTRING (1749484.77520227 5945775.73575641,... 461764142 East Coast Road highway 45281 M
6359 LINESTRING (1749475.225194697 5945842.62307143... 461766796 Brian Smith Drive highway 45281 M
6347 LINESTRING (1749479.482399696 5945811.09062816... 461764143 Hibiscus Coast Highway highway 3222 M
6347 LINESTRING (1749479.482399696 5945811.09062816... 461764143 Hibiscus Coast Highway highway 2504 M
6348 LINESTRING (1752245.323724374 5946958.07655793... 461506061 Whangaparaoa Road highway 22745 M
6355 LINESTRING (1756481.271132506 5927735.70289122... 462237911 Taharoto Road highway 10509 M
6355 LINESTRING (1756481.271132506 5927735.70289122... 462237911 Taharoto Road highway 13963 M
6355 LINESTRING (1756481.271132506 5927735.70289122... 462237911 Taharoto Road highway 14338 M
6355 LINESTRING (1756481.271132506 5927735.70289122... 462237911 Taharoto Road highway 31222 M
6355 LINESTRING (1756481.271132506 5927735.70289122... 462237911 Taharoto Road highway 34120 S
6355 LINESTRING (1756481.271132506 5927735.70289122... 462237911 Taharoto Road highway 45162 S
6360 LINESTRING (1749363.662614017 5945773.16474989... 461764141 Hibiscus Coast Highway highway 33212 M
6360 LINESTRING (1749363.662614017 5945773.16474989... 461764141 Hibiscus Coast Highway highway 22699 M
6360 LINESTRING (1749363.662614017 5945773.16474989... 461764141 Hibiscus Coast Highway highway 27494 M
6362 LINESTRING (1756649.501454583 5927430.39276794... 462452704 Northcote Road highway 21056 M
6362 LINESTRING (1756649.501454583 5927430.39276794... 462452704 Northcote Road highway 23394 M
6362 LINESTRING (1756649.501454583 5927430.39276794... 462452704 Northcote Road highway 28041 M
6362 LINESTRING (1756649.501454583 5927430.39276794... 462452704 Northcote Road highway 31186 M
6362 LINESTRING (1756649.501454583 5927430.39276794... 462452704 Northcote Road highway 33955 M
6371 LINESTRING (1749509.702047974 5945664.44410888... 463506258 East Coast Road highway 46921 M
6374 LINESTRING (1756497.347106252 5927289.47205960... 462234846 Northcote Road highway 11464 M
6374 LINESTRING (1756497.347106252 5927289.47205960... 462234846 Northcote Road highway 49317 M

14347 rows × 6 columns


In [ ]:
oid = '100761816'
f[f['osm_id'] == oid]

In [12]:
# Assign crash scores to roads

f['#crashes'] = 1

g = f.groupby('osm_id').agg({
    'geometry': 'first', 
    'name': 'first', 
    '#crashes': 'sum',
#    'num_crashes_weighted': 'sum',
    }).reset_index()

g = gpd.GeoDataFrame(g, crs=CRS_NZTM)  # Lost the geodataframe during the groupby
g['length_m'] = g['geometry'].length
g['#crashes/m'] = g['#crashes']/g['length_m']
g = g.sort_values('#crashes/m', ascending=False)
crashy_roads = g.copy()
g


Out[12]:
osm_id geometry #crashes name length_m #crashes/m
2185 326487533 LINESTRING (1763374.763724625 5908433.15188175... 8 Massey Road 7.821663 1.022800
2234 334450327 LINESTRING (1761710.035363007 5906529.77931559... 5 Massey Road 5.241659 0.953897
2372 373835442 LINESTRING (1749953.404430177 5946087.71054170... 6 Hibiscus Coast Highway 7.533971 0.796393
2689 450027290 LINESTRING (1770326.277210595 5911324.38194685... 11 Ti Rakau Drive 15.518462 0.708833
969 154227174 LINESTRING (1763878.057528016 5912600.02890272... 5 Mount Wellington Highway offramp 7.686945 0.650453
972 154227191 LINESTRING (1763904.445168815 5912490.33971071... 4 None 6.666481 0.600017
68 114133938 LINESTRING (1757211.462371929 5919373.89371228... 4 Symonds Street 6.930551 0.577155
973 154227192 LINESTRING (1763883.968352459 5912595.11450732... 4 None 7.180216 0.557086
1385 207249359 LINESTRING (1761069.636508226 5914364.92156405... 11 Great South Road 19.785928 0.555951
1383 207249354 LINESTRING (1761080.325824664 5914348.27159567... 9 Ellerslie Panmure Highway 17.818328 0.505098
566 147841782 LINESTRING (1745376.569319429 5920374.88892483... 6 Lincoln Road 12.085093 0.496479
2109 316686867 LINESTRING (1766880.451899352 5903852.99092021... 7 None 14.137122 0.495150
102 117594119 LINESTRING (1755717.563780623 5916234.76047424... 6 Dominion Road 12.598023 0.476265
1315 200854688 LINESTRING (1761713.887547869 5906533.33398261... 18 Massey Road 40.988743 0.439145
1464 24271938 LINESTRING (1758143.447552512 5920850.61102069... 14 Quay Street 32.346337 0.432816
2382 373848790 LINESTRING (1757805.160210258 5920488.18969149... 3 Waterloo Quadrant 7.202359 0.416530
1307 199196702 LINESTRING (1754013.731579846 5917213.34008845... 5 New North Road 12.061962 0.414526
2038 312516257 LINESTRING (1753133.928760318 5915043.79827747... 2 Richardson Road 4.884987 0.409418
963 154227155 LINESTRING (1763890.758540878 5912597.44878162... 4 Mount Wellington Highway 9.937889 0.402500
1528 24605531 LINESTRING (1764674.004540871 5905771.46445479... 5 St. George Street 12.610565 0.396493
3452 87475269 LINESTRING (1758135.987804197 5920030.66466166... 4 None 10.089714 0.396443
974 154227202 LINESTRING (1763913.661513862 5912486.02201062... 4 None 10.177600 0.393020
2318 35972983 LINESTRING (1763880.429630305 5912585.53557721... 4 None 10.211682 0.391708
1519 24550133 LINESTRING (1758217.730374409 5913427.91113722... 5 Royal Oak Roundabout 13.087356 0.382048
811 150589426 LINESTRING (1766428.865828793 5905246.52938244... 4 Puhinui Road 11.154534 0.358599
2531 4279302 LINESTRING (1757215.13659337 5919379.770159338... 7 Grafton Bridge 19.682596 0.355644
970 154227176 LINESTRING (1763883.968352459 5912595.11450732... 4 Mount Wellington Highway offramp 11.547888 0.346384
116 117599450 LINESTRING (1758765.076053659 5911768.63763862... 4 Gloucester Park Road 11.553915 0.346203
2777 461766796 LINESTRING (1749475.225194697 5945842.62307143... 11 Brian Smith Drive 31.818529 0.345711
964 154227157 LINESTRING (1763880.429630305 5912585.53557721... 5 Mount Wellington Highway 14.686162 0.340457
... ... ... ... ... ... ...
2072 31365654 LINESTRING (1736626.140862317 5944480.89729289... 3 Kahikatea Flat Road 10340.242735 0.000290
1647 26673323 LINESTRING (1738901.61799801 5928687.152540354... 1 Waitakere Road 3583.169011 0.000279
2286 351273788 LINESTRING (1763721.535071522 5907646.75750565... 1 North Island Main Trunk 3808.210632 0.000263
428 13882568 LINESTRING (1774847.639707215 5909390.61863676... 1 Whitford Road 3815.532462 0.000262
2997 68014386 LINESTRING (1719063.101241108 5950423.85066014... 1 Shelly Beach Road 3864.739529 0.000259
1586 25600595 LINESTRING (1734250.101117366 5945512.16288046... 1 Peak Road 3981.203229 0.000251
3367 83343175 LINESTRING (1768629.25593051 5882996.160968689... 1 Paerata Road 4317.631910 0.000232
2792 47972944 LINESTRING (1775973.223440686 5900700.84277071... 1 Clevedon Takanini Road 4360.767785 0.000229
2976 59285869 LINESTRING (1747862.548234815 5953690.81495473... 1 Weranui Road 4711.773239 0.000212
2799 48163861 LINESTRING (1759926.808559306 5886301.34259014... 1 Waiau Pa Road 4769.154069 0.000210
1417 229147614 LINESTRING (1738648.521752821 5938258.07122099... 1 Ararimu Valley Road 4894.157377 0.000204
2104 316330623 LINESTRING (1765492.209827061 5904014.46727899... 2 North Island Main Trunk 10038.191699 0.000199
2099 31525475 LINESTRING (1742389.316534964 5948214.73409115... 1 Waitoki Road 5214.012107 0.000192
1409 223211359 LINESTRING (1731321.887447157 5939273.96260463... 1 Inland Road 5223.495230 0.000191
1741 277723936 LINESTRING (1773230.1008451 5895849.464527713,... 1 North Island Main Trunk 5368.942261 0.000186
461 145944040 LINESTRING (1732769.487678385 5944986.43740923... 1 North Auckland Line 5625.302004 0.000178
2520 42332543 LINESTRING (1748798.074941116 5949226.35669118... 1 Auckland Northern Motorway 5635.803297 0.000177
3430 85254937 LINESTRING (1750483.698973543 5954605.95302682... 1 Auckland Northern Motorway 5677.829634 0.000176
2883 51973854 LINESTRING (1782857.36885383 5898335.906009631... 1 Monument Road 5682.416581 0.000176
2963 55412011 LINESTRING (1749016.511937554 5934111.07147744... 1 Ridge Road 5864.820899 0.000171
2078 31432678 LINESTRING (1742389.316534964 5948214.73409115... 1 Wainui Road 6200.022684 0.000161
3024 74865177 LINESTRING (1751657.231645344 5939043.14365112... 1 Auckland Northern Motorway 6658.359590 0.000150
2004 31031506 LINESTRING (1775081.449054936 5909470.49842058... 1 Whitford-Maraetai Road 7274.503652 0.000137
1042 158672078 LINESTRING (1743679.893434038 5888477.50207810... 2 Awhitu Road 14709.927697 0.000136
2077 31432624 LINESTRING (1739437.868806561 5943932.19997934... 1 Horseshoe Bush Road 7418.305862 0.000135
3318 8167753 LINESTRING (1775977.843123679 5883806.50680657... 1 Auckland Southern Motorway 7994.984925 0.000125
2385 374037528 LINESTRING (1772553.979153641 5890508.87180544... 1 North Island Main Trunk 8911.922488 0.000112
2237 334663220 LINESTRING (1774834.013772719 5897396.14042575... 1 Papakura–Clevedon Road 9329.199694 0.000107
3282 80566809 LINESTRING (1769556.196871672 5893754.76690404... 1 Linwood Road 10431.331786 0.000096
2996 68014226 LINESTRING (1719063.101241108 5950423.85066014... 1 South Head Road 13189.103136 0.000076

3510 rows × 6 columns

Problem 6


In [13]:
# Color-code roads by number of crashes.
# Use Spectra for the coloring.

r = crashy_roads.round(3).sort_values('#crashes/m')
r = gpd.GeoDataFrame(r, crs=CRS_NZTM)  # Lost the geodataframe during rounding

# Color
print(r.describe())
cuts = [0] + [r['#crashes/m'].quantile(k/100) for k in [25, 50, 75, 98, 100]]

colors = reversed(['#d7191c', '#d7191c','#fdae61','#ffffbf','#abdda4','#2b83ba'])
scale = spectra.scale(colors).colorspace('lch').domain(cuts)
r['stroke'] = r['#crashes/m'].map(
  lambda x: scale(x).hexcode)

# Thickness
r['stroke-width'] = 10

# Export to GeoJSON and plot in geojsonio for a closer look
path = OUT_DIR/'auckland_crashy_roads.geojson'
geo = r.to_crs(CRS_WGS84).to_json()
with path.open('w') as tgt:
    tgt.write(geo)
    
# path = OUT_DIR/'auckland_crashes.geojson'
# geo = crashes[['geometry', 'CRASH_SEV']].to_crs(CRS_WGS84).to_json()
# with path.open('w') as tgt:
#     tgt.write(geo)


          #crashes      length_m   #crashes/m
count  3510.000000   3510.000000  3510.000000
mean      4.087464    482.892670     0.031304
std       4.199708    882.940471     0.062038
min       1.000000      4.706000     0.000000
25%       1.000000     85.174500     0.005000
50%       3.000000    254.573500     0.013000
75%       5.000000    549.915000     0.031000
max      62.000000  14709.928000     1.023000

In [ ]:


In [ ]: