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
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>
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
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>
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
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 [ ]:
Content source: araichev/pyclub
Similar notebooks: