Skip to content

Instantly share code, notes, and snippets.

@csb19815
Created May 24, 2018 00:15
Show Gist options
  • Save csb19815/67c0247d1eed2286ca0b323a02a1179f to your computer and use it in GitHub Desktop.
Save csb19815/67c0247d1eed2286ca0b323a02a1179f to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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