-
-
Save sgoel/bff9384129974967817404abe80e7c6a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import partridge as ptg\n", | |
"import json\n", | |
"from collections import defaultdict\n", | |
"from shapely.geometry import mapping\n", | |
"from haversine import haversine, Unit\n", | |
"%matplotlib inline " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"broken_path = \"/Users/sachin/Downloads/contents20200222-12-1p783wl.zip\"" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"broken_feed = ptg.load_geo_feed(broken_path)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": { | |
"scrolled": false | |
}, | |
"outputs": [], | |
"source": [ | |
"trip_ids_by_pattern = defaultdict(list)\n", | |
"pattern_by_trip_id = {}\n", | |
"for trip_id, stop_times in broken_feed.stop_times.sort_values(\"stop_sequence\").groupby(\"trip_id\"):\n", | |
" pattern = tuple(stop_times.stop_id)\n", | |
" pattern_by_trip_id[trip_id] = pattern\n", | |
" trip_ids_by_pattern[pattern].append(trip_id)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"route_id_by_trip_id = {}\n", | |
"shape_by_trip_id = {}\n", | |
"for _, trip in broken_feed.trips.iterrows():\n", | |
" assert trip.trip_id not in shape_by_trip_id, f\"{trip_id} {json.dumps(shape_by_trip_id)}\"\n", | |
" shape_by_trip_id[trip.trip_id] = trip.shape_id\n", | |
" route_id_by_trip_id[trip.trip_id] = trip.route_id\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"shape_id_by_pattern = {}\n", | |
"for trip_id, shape_id in shape_by_trip_id.items():\n", | |
" stopping_pattern = pattern_by_trip_id[trip_id]\n", | |
" shape_id_by_pattern[stopping_pattern] = shape_id" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 23, | |
"metadata": { | |
"scrolled": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"pattern ('9469', '9460', '2455479', '2455478', '2455480', '2455481', '9457', '2455703', '2455482', '2455471', '2455483', '2506080', '2455472', '9469')\n", | |
"meters 6.568914525347264 route_ids {'11129'}\n", | |
"meters 6.557003325478246 route_ids {'11129'}\n", | |
"meters 4.978957685195558 route_ids {'11129'}\n", | |
"meters 1.746135628096774 route_ids {'11129'}\n", | |
"meters 3.6308089047554426 route_ids {'11129'}\n", | |
"meters 14.900140747964098 route_ids {'11129'}\n", | |
"meters 8.784411339231136 route_ids {'11129'}\n", | |
"meters 3.1369469222268807 route_ids {'11129'}\n", | |
"meters 5.418349941652845 route_ids {'11129'}\n", | |
"meters 8.41883549616254 route_ids {'11129'}\n", | |
"meters 7.259231856227205 route_ids {'11129'}\n", | |
"meters 3.5273363398733673 route_ids {'11129'}\n", | |
"meters 4.515261171731342 route_ids {'11129'}\n", | |
"meters 6.568914525347264 route_ids {'11129'}\n", | |
"pattern ('9469', '9460', '2455479', '2455478', '2455480', '2455481', '9457')\n", | |
"meters 6.568914525347264 route_ids {'11129'}\n", | |
"meters 6.557003325478246 route_ids {'11129'}\n", | |
"meters 4.978957685195558 route_ids {'11129'}\n", | |
"meters 1.746135628096774 route_ids {'11129'}\n", | |
"meters 3.6308089047554426 route_ids {'11129'}\n", | |
"meters 14.900140747964098 route_ids {'11129'}\n", | |
"meters 8.784411339231136 route_ids {'11129'}\n", | |
"pattern ('2430903', '2555692', '2555694', '2555693', '9468', '2430903')\n", | |
"meters 26.050424148233095 route_ids {'14113'}\n", | |
"meters 11.10081143741139 route_ids {'14113'}\n", | |
"meters 5.334426002306899 route_ids {'14113'}\n", | |
"meters 7.803979636826141 route_ids {'14113'}\n", | |
"meters 7.879326060700059 route_ids {'14113'}\n", | |
"meters 26.050424148233095 route_ids {'14113'}\n", | |
"pattern ('2578029', '2578028', '2578027', '2455471', '9469')\n", | |
"meters 0.8372383196740318 route_ids {'15302'}\n", | |
"meters 134.4646137304006 route_ids {'15302'}\n", | |
"meters 15.372868900480038 route_ids {'15302'}\n", | |
"meters 8.97805599780156 route_ids {'15302'}\n", | |
"meters 6.913525377451336 route_ids {'15302'}\n", | |
"pattern ('9469', '2455471', '2578027', '2578028', '2578029')\n", | |
"meters 6.913525377451336 route_ids {'15302'}\n", | |
"meters 9.240081197424162 route_ids {'15302'}\n", | |
"meters 15.372868900480038 route_ids {'15302'}\n", | |
"meters 134.4646137304006 route_ids {'15302'}\n", | |
"meters 0.8372383196740318 route_ids {'15302'}\n", | |
"pattern ('9469', '2455471', '2578029')\n", | |
"meters 6.913525377451336 route_ids {'15302'}\n", | |
"meters 9.240081197424162 route_ids {'15302'}\n", | |
"meters 0.8372383196740318 route_ids {'15302'}\n", | |
"pattern ('820643', '2573617', '820645', '2537573', '2455471', '2506080', '2455472', '9469', '9466', '2430903')\n", | |
"meters 49.51854706853741 route_ids {'3643'}\n", | |
"meters 3.1269814317332796 route_ids {'3643'}\n", | |
"meters 2.4643484540538454 route_ids {'3643'}\n", | |
"meters 14.192347733315172 route_ids {'3643'}\n", | |
"meters 9.104408577436581 route_ids {'3643'}\n", | |
"meters 3.5256903358611993 route_ids {'3643'}\n", | |
"meters 4.515261171731342 route_ids {'3643'}\n", | |
"meters 6.913525377451336 route_ids {'3643'}\n", | |
"meters 0.9284785334520486 route_ids {'3643'}\n", | |
"meters 26.290943645482184 route_ids {'3643'}\n", | |
"pattern ('820643', '2573617', '820645', '2537573', '2455471')\n", | |
"meters 49.51854706853741 route_ids {'3643'}\n", | |
"meters 3.1269814317332796 route_ids {'3643'}\n", | |
"meters 2.4643484540538454 route_ids {'3643'}\n", | |
"meters 14.192347733315172 route_ids {'3643'}\n", | |
"meters 9.351065681459687 route_ids {'3643'}\n", | |
"pattern ('820643', '2573617', '820645', '2537573', '2455471', '2506080', '2455472', '9469')\n", | |
"meters 49.51854706853741 route_ids {'3643'}\n", | |
"meters 3.1269814317332796 route_ids {'3643'}\n", | |
"meters 2.4643484540538454 route_ids {'3643'}\n", | |
"meters 14.192347733315172 route_ids {'3643'}\n", | |
"meters 9.104408577436581 route_ids {'3643'}\n", | |
"meters 3.5256903358611993 route_ids {'3643'}\n", | |
"meters 4.515261171731342 route_ids {'3643'}\n", | |
"meters 6.913525377451336 route_ids {'3643'}\n", | |
"pattern ('820643', '2573617', '820645', '2537573', '2455471', '9466', '2430903')\n", | |
"meters 49.51854706853741 route_ids {'3643'}\n", | |
"meters 3.1269814317332796 route_ids {'3643'}\n", | |
"meters 2.4643484540538454 route_ids {'3643'}\n", | |
"meters 14.192347733315172 route_ids {'3643'}\n", | |
"meters 9.170125113022175 route_ids {'3643'}\n", | |
"meters 0.9284785334520486 route_ids {'3643'}\n", | |
"meters 26.290943645482184 route_ids {'3643'}\n", | |
"pattern ('9469', '9466', '2430903')\n", | |
"meters 6.913525377451336 route_ids {'3643'}\n", | |
"meters 0.9284785334520486 route_ids {'3643'}\n", | |
"meters 26.290943645482184 route_ids {'3643'}\n", | |
"pattern ('9469', '2537574', '820645', '820643')\n", | |
"meters 6.587103168177267 route_ids {'3643'}\n", | |
"meters 10.553562457611568 route_ids {'3643'}\n", | |
"meters 2.498914026160073 route_ids {'3643'}\n", | |
"meters 20.52712159455721 route_ids {'3643'}\n", | |
"pattern ('2430903', '9466', '2455471')\n", | |
"meters 26.290943645482184 route_ids {'3643'}\n", | |
"meters 0.9284785334520486 route_ids {'3643'}\n", | |
"meters 9.361806985774248 route_ids {'3643'}\n", | |
"pattern ('2430903', '9466', '2455471', '9469', '2537574', '820645', '820643')\n", | |
"meters 26.290943645482184 route_ids {'3643'}\n", | |
"meters 0.9284785334520486 route_ids {'3643'}\n", | |
"meters 9.018716836444261 route_ids {'3643'}\n", | |
"meters 6.587103168177267 route_ids {'3643'}\n", | |
"meters 10.553562457611568 route_ids {'3643'}\n", | |
"meters 2.498914026160073 route_ids {'3643'}\n", | |
"meters 20.52712159455721 route_ids {'3643'}\n", | |
"pattern ('2430903', '9466', '9469', '2537574', '820645', '820643')\n", | |
"meters 26.290943645482184 route_ids {'3643'}\n", | |
"meters 0.9284785334520486 route_ids {'3643'}\n", | |
"meters 6.587103168177267 route_ids {'3643'}\n", | |
"meters 10.553562457611568 route_ids {'3643'}\n", | |
"meters 2.498914026160073 route_ids {'3643'}\n", | |
"meters 20.52712159455721 route_ids {'3643'}\n", | |
"pattern ('2430903', '9466', '2455471', '9469')\n", | |
"meters 26.290943645482184 route_ids {'3643'}\n", | |
"meters 0.9284785334520486 route_ids {'3643'}\n", | |
"meters 9.018716836444261 route_ids {'3643'}\n", | |
"meters 6.913525377451336 route_ids {'3643'}\n", | |
"pattern ('9469', '2537574', '820643')\n", | |
"meters 6.587103168177267 route_ids {'3643'}\n", | |
"meters 10.577037514393382 route_ids {'3643'}\n", | |
"meters 50.25506939899891 route_ids {'3643'}\n", | |
"pattern ('2455471', '9469', '2537574', '820645', '820643')\n", | |
"meters 8.633483366639796 route_ids {'3643'}\n", | |
"meters 6.587103168177267 route_ids {'3643'}\n", | |
"meters 10.553562457611568 route_ids {'3643'}\n", | |
"meters 2.498914026160073 route_ids {'3643'}\n", | |
"meters 20.52712159455721 route_ids {'3643'}\n", | |
"pattern ('2430911', '9457')\n", | |
"meters 0.6991523526836423 route_ids {'9768'}\n", | |
"meters 8.784411339231136 route_ids {'9768'}\n", | |
"pattern ('2430912', '2430911', '9457')\n", | |
"meters 7.785959147378223 route_ids {'9768'}\n", | |
"meters 0.6988950703813223 route_ids {'9768'}\n", | |
"meters 8.784411339231136 route_ids {'9768'}\n", | |
"pattern ('2430911', '2578030', '9457')\n", | |
"meters 0.739146380134753 route_ids {'9768'}\n", | |
"meters 15.478977403114778 route_ids {'9768'}\n", | |
"meters 9.118737908206628 route_ids {'9768'}\n", | |
"pattern ('2430912', '9457')\n", | |
"meters 7.785959147378223 route_ids {'9768'}\n", | |
"meters 8.784411339231136 route_ids {'9768'}\n", | |
"pattern ('9457', '2430911')\n", | |
"meters 8.784411339231136 route_ids {'9768'}\n", | |
"meters 0.6991523526836423 route_ids {'9768'}\n", | |
"pattern ('9457', '2430911', '2430912')\n", | |
"meters 8.784411339231136 route_ids {'9768'}\n", | |
"meters 0.6989619279489497 route_ids {'9768'}\n", | |
"meters 7.785959147378223 route_ids {'9768'}\n" | |
] | |
} | |
], | |
"source": [ | |
"for pattern, shape_id in shape_id_by_pattern.items():\n", | |
" print(\"pattern\", pattern)\n", | |
" shape = broken_feed.shapes[broken_feed.shapes.shape_id == shape_id].iloc[0].geometry\n", | |
" for stop_id in pattern:\n", | |
" stop_point = broken_feed.stops[broken_feed.stops.stop_id == stop_id].iloc[0].geometry\n", | |
" closest_point_on_line = shape.interpolate(shape.project(stop_point))\n", | |
" a = (stop_point.x, stop_point.y)\n", | |
" b = (closest_point_on_line.x, closest_point_on_line.y)\n", | |
" distance = haversine(a, b, unit=Unit.METERS)\n", | |
" route_ids = set([route_id_by_trip_id[route_id] for route_id in trip_ids_by_pattern[pattern]])\n", | |
" print(\"meters\", distance,\"route_ids\", route_ids)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"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.7.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment