Created
May 24, 2018 00:15
-
-
Save csb19815/67c0247d1eed2286ca0b323a02a1179f 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": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"## Steps\n", | |
"## Group route_ids that share common short_names\n", | |
"## Assign each group the 0th route_id in the list\n", | |
"## Assign associated trips to that route_id\n", | |
"## Delete all unused rows from routes.txt\n", | |
"## Write the new feed" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"inpath = '/Users/Charlie/Downloads/AT_5May_raw.zip'\n", | |
"outpath = '/Users/Charlie/Downloads/AT_5May_combined_by_shortname.zip'" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from collections import defaultdict\n", | |
"import pprint\n", | |
"import partridge as ptg" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"feed = ptg.raw_feed(inpath)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Remove direction_id column from trips.txt in case direction_ids are the same on routes collapsed by short_name\n", | |
"feed.trips.drop('direction_id', axis=1, inplace=True)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"route_id_mapping = {}\n", | |
"\n", | |
"for route_short_name, routes in feed.routes.groupby('route_short_name'):\n", | |
" if len(routes) < 2:\n", | |
" continue\n", | |
" \n", | |
" keeper_route_id = routes.route_id.values[0]\n", | |
" removes_route_ids = routes.route_id.values[1:]\n", | |
" \n", | |
" for remove_route_id in removes_route_ids:\n", | |
" route_id_mapping[remove_route_id] = keeper_route_id\n", | |
"\n", | |
"# route_id_mapping" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def swap_route_ids(route_id):\n", | |
" return route_id_mapping.get(route_id, route_id)\n", | |
"\n", | |
"feed.trips.route_id = feed.trips.route_id.apply(swap_route_ids)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Sanity check that we've successfully swapped route_ids\n", | |
"\n", | |
"trips_with_deleted_route_ids = feed.trips[feed.trips.route_id.isin(route_id_mapping.keys())]\n", | |
" \n", | |
"assert len(trips_with_deleted_route_ids) == 0" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"delete_list = feed.routes.route_id.isin(route_id_mapping.keys())\n", | |
"rows_to_remove = feed.routes[delete_list].index\n", | |
"feed.routes.drop(rows_to_remove, inplace=True)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# feed.routes.head(20)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"'/Users/Charlie/Downloads/AT_5May_combined_by_shortname.zip'" | |
] | |
}, | |
"execution_count": 11, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"ptg.writers.write_feed_dangerously(feed, outpath)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"feed_merged = ptg.feed(outpath)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>block_id</th>\n", | |
" <th>route_id</th>\n", | |
" <th>trip_headsign</th>\n", | |
" <th>shape_id</th>\n", | |
" <th>service_id</th>\n", | |
" <th>trip_id</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>NaN</td>\n", | |
" <td>22305-20180426095657_v66.18</td>\n", | |
" <td>New Lynn</td>\n", | |
" <td>963-20180426095657_v66.18</td>\n", | |
" <td>13223108975-20180426095657_v66.18</td>\n", | |
" <td>13223108975-20180426095657_v66.18</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>NaN</td>\n", | |
" <td>22106-20180426095657_v66.18</td>\n", | |
" <td>City Centre</td>\n", | |
" <td>921-20180426102952_v66.19</td>\n", | |
" <td>13221125463-20180426102952_v66.19</td>\n", | |
" <td>13221125463-20180426102952_v66.19</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>NaN</td>\n", | |
" <td>13302-20180426102952_v66.19</td>\n", | |
" <td>City Centre</td>\n", | |
" <td>971-20180426102952_v66.19</td>\n", | |
" <td>1090107018-20180426102952_v66.19</td>\n", | |
" <td>1090107018-20180426102952_v66.19</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>NaN</td>\n", | |
" <td>03301-20180426095657_v66.18</td>\n", | |
" <td>Papakura</td>\n", | |
" <td>833-20180426102952_v66.19</td>\n", | |
" <td>1064122123-20180426102952_v66.19</td>\n", | |
" <td>1064122123-20180426102952_v66.19</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>NaN</td>\n", | |
" <td>31303-20180426095657_v66.18</td>\n", | |
" <td>Onehunga</td>\n", | |
" <td>847-20180426095657_v66.18</td>\n", | |
" <td>14313121181-20180426095657_v66.18</td>\n", | |
" <td>14313121181-20180426095657_v66.18</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>NaN</td>\n", | |
" <td>29901-20180426095657_v66.18</td>\n", | |
" <td>Lynfield</td>\n", | |
" <td>276-20180426102952_v66.19</td>\n", | |
" <td>14299113511-20180426102952_v66.19</td>\n", | |
" <td>14299113511-20180426102952_v66.19</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>NaN</td>\n", | |
" <td>03505-20180426095657_v66.18</td>\n", | |
" <td>Manukau</td>\n", | |
" <td>1160-20180426095657_v66.18</td>\n", | |
" <td>1140103259-20180426095657_v66.18</td>\n", | |
" <td>1140103259-20180426095657_v66.18</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>NaN</td>\n", | |
" <td>98302-20180426102952_v66.19</td>\n", | |
" <td>Hibiscus Coast Station</td>\n", | |
" <td>812-20180426102952_v66.19</td>\n", | |
" <td>1983053891-20180426102952_v66.19</td>\n", | |
" <td>1983053891-20180426102952_v66.19</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>a_1037-20180426095657_v66.18</td>\n", | |
" <td>77102-20180426095657_v66.18</td>\n", | |
" <td>Newmarket</td>\n", | |
" <td>566-20180426095657_v66.18</td>\n", | |
" <td>14771052786-20180426095657_v66.18</td>\n", | |
" <td>14771052786-20180426095657_v66.18</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>NaN</td>\n", | |
" <td>87552-20180426102952_v66.19</td>\n", | |
" <td>Browns Bay</td>\n", | |
" <td>167-20180426095657_v66.18</td>\n", | |
" <td>12875118977-20180426095657_v66.18</td>\n", | |
" <td>12875118977-20180426095657_v66.18</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>NaN</td>\n", | |
" <td>90013-20180426102952_v66.19</td>\n", | |
" <td>Bayswater</td>\n", | |
" <td>1196-20180426102952_v66.19</td>\n", | |
" <td>7005018537-20180426102952_v66.19</td>\n", | |
" <td>7005018537-20180426102952_v66.19</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>NaN</td>\n", | |
" <td>50140-20180426102952_v66.19</td>\n", | |
" <td>Britomart</td>\n", | |
" <td>1232-20180426095657_v66.18</td>\n", | |
" <td>50051071445-20180426095657_v66.18</td>\n", | |
" <td>50051071445-20180426095657_v66.18</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>NaN</td>\n", | |
" <td>07208-20180426095657_v66.18</td>\n", | |
" <td>Botany Town Centre</td>\n", | |
" <td>1139-20180426102952_v66.19</td>\n", | |
" <td>1149103042-20180426102952_v66.19</td>\n", | |
" <td>1149103042-20180426102952_v66.19</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>b_456-20180426102952_v66.19</td>\n", | |
" <td>79702-20180426102952_v66.19</td>\n", | |
" <td>Wynyard Qtr</td>\n", | |
" <td>237-20180426102952_v66.19</td>\n", | |
" <td>14797108753-20180426102952_v66.19</td>\n", | |
" <td>14797108753-20180426102952_v66.19</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>b_89-20180426102952_v66.19</td>\n", | |
" <td>14301-20180426102952_v66.19</td>\n", | |
" <td>Henderson</td>\n", | |
" <td>984-20180426102952_v66.19</td>\n", | |
" <td>1094125117-20180426102952_v66.19</td>\n", | |
" <td>1094125117-20180426102952_v66.19</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>15</th>\n", | |
" <td>NaN</td>\n", | |
" <td>07008-20180426102952_v66.19</td>\n", | |
" <td>Botany Town Centre</td>\n", | |
" <td>1081-20180426102952_v66.19</td>\n", | |
" <td>1141101981-20180426102952_v66.19</td>\n", | |
" <td>1141101981-20180426102952_v66.19</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16</th>\n", | |
" <td>NaN</td>\n", | |
" <td>62506-20180426102952_v66.19</td>\n", | |
" <td>Glen Innes</td>\n", | |
" <td>256-20180426095657_v66.18</td>\n", | |
" <td>14625085446-20180426095657_v66.18</td>\n", | |
" <td>14625085446-20180426095657_v66.18</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>17</th>\n", | |
" <td>NaN</td>\n", | |
" <td>03002-20180426095657_v66.18</td>\n", | |
" <td>City Centre</td>\n", | |
" <td>681-20180426102952_v66.19</td>\n", | |
" <td>14030111231-20180426102952_v66.19</td>\n", | |
" <td>14030111231-20180426102952_v66.19</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>18</th>\n", | |
" <td>NaN</td>\n", | |
" <td>10003-20180426095657_v66.18</td>\n", | |
" <td>Britomart</td>\n", | |
" <td>131-20180426102952_v66.19</td>\n", | |
" <td>3100092089-20180426102952_v66.19</td>\n", | |
" <td>3100092089-20180426102952_v66.19</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>19</th>\n", | |
" <td>NaN</td>\n", | |
" <td>70303-20180426102952_v66.19</td>\n", | |
" <td>Britomart</td>\n", | |
" <td>551-20180426102952_v66.19</td>\n", | |
" <td>14703089905-20180426102952_v66.19</td>\n", | |
" <td>14703089905-20180426102952_v66.19</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" block_id route_id \\\n", | |
"0 NaN 22305-20180426095657_v66.18 \n", | |
"1 NaN 22106-20180426095657_v66.18 \n", | |
"2 NaN 13302-20180426102952_v66.19 \n", | |
"3 NaN 03301-20180426095657_v66.18 \n", | |
"4 NaN 31303-20180426095657_v66.18 \n", | |
"5 NaN 29901-20180426095657_v66.18 \n", | |
"6 NaN 03505-20180426095657_v66.18 \n", | |
"7 NaN 98302-20180426102952_v66.19 \n", | |
"8 a_1037-20180426095657_v66.18 77102-20180426095657_v66.18 \n", | |
"9 NaN 87552-20180426102952_v66.19 \n", | |
"10 NaN 90013-20180426102952_v66.19 \n", | |
"11 NaN 50140-20180426102952_v66.19 \n", | |
"12 NaN 07208-20180426095657_v66.18 \n", | |
"13 b_456-20180426102952_v66.19 79702-20180426102952_v66.19 \n", | |
"14 b_89-20180426102952_v66.19 14301-20180426102952_v66.19 \n", | |
"15 NaN 07008-20180426102952_v66.19 \n", | |
"16 NaN 62506-20180426102952_v66.19 \n", | |
"17 NaN 03002-20180426095657_v66.18 \n", | |
"18 NaN 10003-20180426095657_v66.18 \n", | |
"19 NaN 70303-20180426102952_v66.19 \n", | |
"\n", | |
" trip_headsign shape_id \\\n", | |
"0 New Lynn 963-20180426095657_v66.18 \n", | |
"1 City Centre 921-20180426102952_v66.19 \n", | |
"2 City Centre 971-20180426102952_v66.19 \n", | |
"3 Papakura 833-20180426102952_v66.19 \n", | |
"4 Onehunga 847-20180426095657_v66.18 \n", | |
"5 Lynfield 276-20180426102952_v66.19 \n", | |
"6 Manukau 1160-20180426095657_v66.18 \n", | |
"7 Hibiscus Coast Station 812-20180426102952_v66.19 \n", | |
"8 Newmarket 566-20180426095657_v66.18 \n", | |
"9 Browns Bay 167-20180426095657_v66.18 \n", | |
"10 Bayswater 1196-20180426102952_v66.19 \n", | |
"11 Britomart 1232-20180426095657_v66.18 \n", | |
"12 Botany Town Centre 1139-20180426102952_v66.19 \n", | |
"13 Wynyard Qtr 237-20180426102952_v66.19 \n", | |
"14 Henderson 984-20180426102952_v66.19 \n", | |
"15 Botany Town Centre 1081-20180426102952_v66.19 \n", | |
"16 Glen Innes 256-20180426095657_v66.18 \n", | |
"17 City Centre 681-20180426102952_v66.19 \n", | |
"18 Britomart 131-20180426102952_v66.19 \n", | |
"19 Britomart 551-20180426102952_v66.19 \n", | |
"\n", | |
" service_id trip_id \n", | |
"0 13223108975-20180426095657_v66.18 13223108975-20180426095657_v66.18 \n", | |
"1 13221125463-20180426102952_v66.19 13221125463-20180426102952_v66.19 \n", | |
"2 1090107018-20180426102952_v66.19 1090107018-20180426102952_v66.19 \n", | |
"3 1064122123-20180426102952_v66.19 1064122123-20180426102952_v66.19 \n", | |
"4 14313121181-20180426095657_v66.18 14313121181-20180426095657_v66.18 \n", | |
"5 14299113511-20180426102952_v66.19 14299113511-20180426102952_v66.19 \n", | |
"6 1140103259-20180426095657_v66.18 1140103259-20180426095657_v66.18 \n", | |
"7 1983053891-20180426102952_v66.19 1983053891-20180426102952_v66.19 \n", | |
"8 14771052786-20180426095657_v66.18 14771052786-20180426095657_v66.18 \n", | |
"9 12875118977-20180426095657_v66.18 12875118977-20180426095657_v66.18 \n", | |
"10 7005018537-20180426102952_v66.19 7005018537-20180426102952_v66.19 \n", | |
"11 50051071445-20180426095657_v66.18 50051071445-20180426095657_v66.18 \n", | |
"12 1149103042-20180426102952_v66.19 1149103042-20180426102952_v66.19 \n", | |
"13 14797108753-20180426102952_v66.19 14797108753-20180426102952_v66.19 \n", | |
"14 1094125117-20180426102952_v66.19 1094125117-20180426102952_v66.19 \n", | |
"15 1141101981-20180426102952_v66.19 1141101981-20180426102952_v66.19 \n", | |
"16 14625085446-20180426095657_v66.18 14625085446-20180426095657_v66.18 \n", | |
"17 14030111231-20180426102952_v66.19 14030111231-20180426102952_v66.19 \n", | |
"18 3100092089-20180426102952_v66.19 3100092089-20180426102952_v66.19 \n", | |
"19 14703089905-20180426102952_v66.19 14703089905-20180426102952_v66.19 " | |
] | |
}, | |
"execution_count": 15, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"feed_merged.trips.head(20)" | |
] | |
}, | |
{ | |
"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.6.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment