from urllib2 import urlopen
from cStringIO import StringIO
import json
from pyproj import Proj
from shapely.geometry import Point
from geopandas import GeoSeries, GeoDataFrame
pylab.rcParams['figure.figsize'] = (10.0, 8.0)
#%config InlineBackend.figure_format = 'svg'
NYC borough boundaries downloaded from Bytes of the Big Apple
boros = GeoDataFrame.from_file('nybb.shp')
Load real time bike station data from CitiBike json API:
try:
url = 'http://citibikenyc.com/stations/json'
f = urlopen(url)
buffer = StringIO(f.read())
c = json.load(buffer)
print "Loaded Citibike data"
except:
print "Reading cached data"
c = json.load(open('citibike.json'))
else:
json.dump(c, open('citibike.json', 'w'))
df = GeoDataFrame(c['stationBeanList'])
Loaded Citibike data
s = GeoSeries([Point(x, y) for x, y in zip(df['longitude'], df['latitude'])])
df['geometry'] = s
df.crs = {'init': 'epsg:4326', 'no_defs': True}
df.geometry.total_bounds
(-74.01713445, 40.680342422999999, -73.950047975900006, 40.770513000000001)
df.to_crs(boros.crs, inplace=True)
df.geometry.total_bounds
(979499.5403944857, 187146.60521020592, 998104.68869063177, 219995.67072442052)
manhattan = boros.geometry[3]
brooklyn = boros.geometry[2]
in_mn = df.geometry.within(manhattan)
in_bk = df.geometry.within(brooklyn)
print sum(in_mn), 'stations in Manhattan'
print sum(in_bk), 'stations in Brooklyn'
print sum(df['availableBikes'][in_mn]), 'available bikes in Manhattan'
print sum(df['availableBikes'][in_bk]), 'available bikes in Brooklyn'
252 stations in Manhattan 79 stations in Brooklyn 4017 available bikes in Manhattan 607 available bikes in Brooklyn
block = 260
mp = df['geometry'].unary_union
geoms = [mp]
for r in range(1, 6):
contour = mp.buffer(r * block)
geoms.append(contour)
zones = GeoSeries(geoms)
zones.plot()
<matplotlib.axes.AxesSubplot at 0x10beabf50>
nyc = boros.geometry.unary_union
zones.intersection(nyc).plot('Set1')
<matplotlib.axes.AxesSubplot at 0x10c408090>
Load cleaned version of MTA subway station locations from Steven Romalewski's Spatiality blog:
subways = GeoDataFrame.from_file('nyctsubwaystops_100627_curcleaned.shp')
subways.to_crs(boros.crs, inplace=True)
boros.plot()
subways.plot()
<matplotlib.axes.AxesSubplot at 0x10c1f3ad0>
subways
<class 'geopandas.geodataframe.GeoDataFrame'> Int64Index: 493 entries, 0 to 492 Data columns (total 15 columns): LOCATION_T 493 non-null values NAME_CUR 493 non-null values PARENT_STA 493 non-null values Routes_ALL 492 non-null values Routes_OFF 492 non-null values Routes_WKD 492 non-null values STOP_CODE 493 non-null values STOP_DESC 493 non-null values STOP_ID 493 non-null values STOP_LAT 493 non-null values STOP_LON 493 non-null values STOP_NAME 493 non-null values STOP_URL 493 non-null values ZONE_ID 493 non-null values geometry 493 non-null values dtypes: float64(2), int64(6), object(7)
subways['bike_distance'] = subways.geometry.distance(mp)
subways.sort('bike_distance', inplace=True)
len(subways[subways['bike_distance'] < 260])
41
subways[subways['bike_distance'] < 260]
LOCATION_T | NAME_CUR | PARENT_STA | Routes_ALL | Routes_OFF | Routes_WKD | STOP_CODE | STOP_DESC | STOP_ID | STOP_LAT | STOP_LON | STOP_NAME | STOP_URL | ZONE_ID | geometry | bike_distance | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
144 | 0 | 51TH STREET | 0 | 4, 6, 6X | 4, 6 | 6, 6X | 0 | 0 | 630 | 40.757107 | -73.971920 | 51TH STREET - LEXINGTON | 0 | 0 | POINT (992029.3760274292435497 215112.44386741... | 46.296726 |
211 | 0 | CLINTON - WASHINGTON | 0 | A, C | A, C | C | 0 | 0 | A44 | 40.683263 | -73.965838 | CLINTON - WASHINGTON | 0 | 0 | POINT (993724.8454718440771103 188209.40608920... | 46.682524 |
64 | 0 | FULTON STREET | 0 | 2, 3 | 2, 3 | 2, 3 | 0 | 0 | 229 | 40.709416 | -74.006571 | FULTON STREET | 0 | 0 | POINT (982428.2450188983930275 197735.93816920... | 53.198352 |
344 | 0 | CLASSON AVENUE | 0 | G | G | G | 0 | 0 | G34 | 40.688873 | -73.960070 | CLASSON AVENUE | 0 | 0 | POINT (995323.6709855881053954 190253.96867972... | 66.914476 |
29 | 0 | 14TH STREET | 0 | 1, 2, 3 | 1, 2, 3 | 1, 2, 3 | 0 | 0 | 132 | 40.737826 | -74.000201 | 14TH STREET - 7 AV | 0 | 0 | POINT (984194.2981757809175178 208086.51014474... | 70.609422 |
25 | 0 | 34TH ST - PENN STA | 0 | 1, 2, 3 | 1, 2, 3 | 1, 2, 3 | 0 | 0 | 128 | 40.750373 | -73.991057 | 34TH ST. - PENN STA. | 0 | 0 | POINT (986727.8487967300461605 212657.90902494... | 72.088107 |
264 | 0 | WEST 4 ST - WASHINGTON SQ | 0 | B, D, F, M | B, D, F, M | B, D, F, M | 0 | 0 | D20 | 40.732338 | -74.000495 | WEST 4 ST - WASHINGTON SQ | 0 | 0 | POINT (984112.8125671034213156 206087.05948621... | 73.108384 |
202 | 0 | WEST 4 ST - UPPER LEVEL | 0 | A, C, E | A, C, E | A, C, E | 0 | 0 | A32 | 40.732338 | -74.000495 | WEST 4 ST - UPPER LEVEL - WASHINTON SQ | 0 | 0 | POINT (984112.8125671034213156 206087.05948621... | 73.108384 |
379 | 0 | UNION SQUARE - 14 STREET | 0 | L | L | L | 0 | 0 | L03 | 40.734789 | -73.990730 | UNION SQUARE - 14 STREET | 0 | 0 | POINT (986819.0519664773019031 206980.17122261... | 88.709241 |
468 | 0 | FRANKLIN - FULTON | 0 | FS | FS | FS | 0 | 0 | S01 | 40.680596 | -73.955827 | FRANKLIN - FULTON | 0 | 0 | POINT (996501.8904273939551786 187238.98248850... | 93.778460 |
33 | 0 | FRANKLIN STREET | 0 | 1, 2 | 1, 2 | 1 | 0 | 0 | 136 | 40.719318 | -74.006886 | FRANKLIN STREET - IRT | 0 | 0 | POINT (982341.1974872518330812 201343.54471072... | 95.605657 |
66 | 0 | CLARK STREET | 0 | 2, 3 | 2, 3 | 2, 3 | 0 | 0 | 231 | 40.697466 | -73.993086 | CLARK STREET | 0 | 0 | POINT (986167.1925104620167986 193382.20318109... | 111.225469 |
452 | 0 | COURT STREET | 0 | N, R | N, R | R | 0 | 0 | R28 | 40.694100 | -73.991777 | COURT STREET | 0 | 0 | POINT (986530.2820280743762851 192155.90130567... | 118.711249 |
150 | 0 | ASTOR PL - 8TH ST | 0 | 4, 6, 6X | 4, 6 | 6, 6X | 0 | 0 | 636 | 40.730054 | -73.991070 | ASTOR PL-8TH ST-LEXINGTON | 0 | 0 | POINT (986725.0015453442465514 205255.05267647... | 119.770376 |
453 | 0 | LAWRENCE STREET | 0 | N, R | N, R | R | 0 | 0 | R29 | 40.692180 | -73.985942 | LAWRENCE STREET | 0 | 0 | POINT (988148.4710910519352183 191456.59461087... | 123.398057 |
146 | 0 | 33RD STREET | 0 | 4, 6, 6X | 4, 6 | 6, 6X | 0 | 0 | 632 | 40.746081 | -73.982076 | 33RD STREET - LEXINGTON | 0 | 0 | POINT (989216.5462419623509049 211094.57719528... | 138.982620 |
110 | 0 | BOWLING GREEN | 0 | 4, 5 | 4, 5 | 4, 5 | 0 | 0 | 420 | 40.704817 | -74.014065 | BOWLING GREEN | 0 | 0 | POINT (980350.3269596468890086 196060.62890152... | 141.074685 |
111 | 0 | BOROUGH HALL | 0 | 4, 5 | 4, 5 | 4, 5 | 0 | 0 | 423 | 40.692404 | -73.990151 | BOROUGH HALL | 0 | 0 | POINT (986981.2500260559609160 191538.04511447... | 143.559130 |
65 | 0 | WALL - WILLIAM ST | 0 | 2, 3 | 2, 3 | 2, 3 | 0 | 0 | 230 | 40.706821 | -74.009100 | WALL - WILLIAM ST | 0 | 0 | POINT (981727.0026338548632339 196790.56422357... | 144.929036 |
286 | 0 | WORLD TRADE CENTER | 0 | E | E | E | 0 | 0 | E01 | 40.712582 | -74.009781 | WORLD TRADE CENTER | 0 | 0 | POINT (981538.4280721555696800 198889.49082954... | 167.690080 |
153 | 0 | CANAL STREET | 0 | 4, 6, 6X | 4, 6 | 6, 6X | 0 | 0 | 639 | 40.718803 | -74.000193 | CANAL STREET | 0 | 0 | POINT (984196.4998937002383173 201155.83945951... | 168.431615 |
440 | 0 | TIMES SQUARE - 42 ST | 0 | N, Q, R | N, Q, R | N, Q, R | 0 | 0 | R16 | 40.754672 | -73.986754 | TIMES SQUARE - 42 ST | 0 | 0 | POINT (987919.8498279451159760 214224.32476743... | 175.614456 |
152 | 0 | SPRING STREET | 0 | 4, 6, 6X | 4, 6 | 6, 6X | 0 | 0 | 638 | 40.722301 | -73.997141 | SPRING STREET-LEXINGTON | 0 | 0 | POINT (985042.4807051534298807 202430.28120299... | 177.608606 |
154 | 0 | BROOKLYN BRIDGE - CITY HALL | 0 | 4, 5, 6, 6X | 4, 5, 6 | 4, 5, 6, 6X | 0 | 0 | 640 | 40.713065 | -74.004131 | BROOKLYN BRIDGE-CITY HALL | 0 | 0 | POINT (983104.7773761419812217 199065.33800586... | 179.154057 |
437 | 0 | 5TH AVENUE - 59 ST | 0 | N, Q, R | N, Q, R | N, Q, R | 0 | 0 | R13 | 40.764811 | -73.973347 | 5TH AVENUE - 59 ST | 0 | 0 | POINT (991633.1812181912828237 217919.14007588... | 181.966930 |
63 | 0 | PARK PLACE | 0 | 2, 3 | 2, 3 | 2, 3 | 0 | 0 | 228 | 40.713051 | -74.008811 | PARK PLACE | 0 | 0 | POINT (981807.3569002770818770 199060.33322413... | 193.206210 |
447 | 0 | CANAL STREET / TUNNEL | 0 | N, R | N, R | R | 0 | 0 | R23 | 40.719527 | -74.001775 | CANAL STREET / TUNNEL | 0 | 0 | POINT (983757.9706885487539694 201419.61978007... | 199.384739 |
455 | 0 | PACIFIC STREET - ATLANTIC | 0 | D, N, R | D, N, R | D, N, R | 0 | 0 | R31 | 40.683666 | -73.978810 | PACIFIC STREET - ATLANTIC | 0 | 0 | POINT (990127.0202370891347528 188355.09395690... | 201.003312 |
451 | 0 | WHITEHALL ST - SOUTH FERRY | 0 | N, R | N, R | R | 0 | 0 | R27 | 40.703087 | -74.012994 | WHITEHALL ST - SOUTH FERRY | 0 | 0 | POINT (980647.1797695906134322 195430.29227482... | 209.317385 |
30 | 0 | CHRISTOPHER - SHERIDAN S | 0 | 1, 2 | 1, 2 | 1 | 0 | 0 | 133 | 40.733422 | -74.002906 | CHRISTOPHER - SHERIDAN S | 0 | 0 | POINT (983444.6258696077857167 206482.00762564... | 214.939800 |
233 | 0 | 57TH STREET | 0 | F | F | F | 0 | 0 | B10 | 40.763971 | -73.977451 | 57TH STREET | 0 | 0 | POINT (990496.4057980824727565 217612.78110756... | 215.129488 |
299 | 0 | EAST BROADWAY | 0 | F | F | F | 0 | 0 | F16 | 40.713715 | -73.990173 | EAST BROADWAY | 0 | 0 | POINT (986974.2781306741526350 199302.27855590... | 217.541106 |
149 | 0 | 14TH STREET - UNION SQ | 0 | 4, 5, 6, 6X | 4, 5, 6 | 4, 5, 6, 6X | 0 | 0 | 635 | 40.734673 | -73.989951 | 14TH STREET - LEXINGTON - UNION SQ | 0 | 0 | POINT (987034.9458625873085111 206937.93258355... | 223.912820 |
213 | 0 | NOSTRAND AVENUE | 0 | A, C | A, C | A, C | 0 | 0 | A46 | 40.680438 | -73.950426 | NOSTRAND AVENUE | 0 | 0 | POINT (997999.9524234756827354 187182.22013890... | 224.666183 |
32 | 0 | CANAL STREET | 0 | 1, 2 | 1, 2 | 1 | 0 | 0 | 135 | 40.722854 | -74.006277 | CANAL STREET - IRT | 0 | 0 | POINT (982510.1048944095382467 202631.80555372... | 227.607107 |
145 | 0 | GRAND CENTRAL - 42 ST | 0 | 4, 5, 6, 6X | 4, 5, 6 | 4, 5, 6, 6X | 0 | 0 | 631 | 40.751776 | -73.976848 | GRAND CENTRAL - LEXINGTON - 42 ST | 0 | 0 | POINT (990664.6199910029536113 213169.78841024... | 239.768312 |
23 | 0 | 50TH STREET | 0 | 1, 2 | 1, 2 | 1 | 0 | 0 | 126 | 40.761728 | -73.983849 | 50TH STREET-BWAY | 0 | 0 | POINT (988724.2160682404646650 216795.19093156... | 244.701644 |
37 | 0 | SOUTH FERRY - A LOOP | 0 | None | None | None | 0 | 0 | 140 | 40.701411 | -74.013205 | SOUTH FERRY (A LOOP) | 0 | 0 | POINT (980588.5841761393239722 194819.68421093... | 249.023753 |
441 | 0 | 34TH STREET - HERALD SQ | 0 | N, Q, R | N, Q, R | N, Q, R | 0 | 0 | R17 | 40.749567 | -73.987950 | 34TH STREET - HERALD SQ | 0 | 0 | POINT (987588.7497721284162253 212364.36041824... | 250.339118 |
26 | 0 | 28TH STREET | 0 | 1, 2 | 1, 2 | 1 | 0 | 0 | 129 | 40.747215 | -73.993365 | 28TH STREET - 7 AV | 0 | 0 | POINT (986088.4553448115475476 211507.29123174... | 257.000565 |
24 | 0 | 42ND ST - TIMES SQ | 0 | 1, 2, 3 | 1, 2, 3 | 1, 2, 3 | 0 | 0 | 127 | 40.755290 | -73.987495 | 42ND ST. - TIMES SQ. | 0 | 0 | POINT (987714.5210899838712066 214449.45205993... | 259.584020 |