Skip to content

Instantly share code, notes, and snippets.

@sgoel
Created February 25, 2020 21:22
Show Gist options
  • Save sgoel/bff9384129974967817404abe80e7c6a to your computer and use it in GitHub Desktop.
Save sgoel/bff9384129974967817404abe80e7c6a to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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