diff --git a/rt_segment_speeds/22a_investigate_post_interpolation.ipynb b/rt_segment_speeds/22a_investigate_post_interpolation.ipynb new file mode 100644 index 000000000..98f19b8e0 --- /dev/null +++ b/rt_segment_speeds/22a_investigate_post_interpolation.ipynb @@ -0,0 +1,2014 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 19, + "id": "bd13ebd1-69b0-4fc2-8202-cc34eacb6e9e", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import pandas as pd\n", + "from siuba import *\n", + "\n", + "from shared_utils import rt_dates, rt_utils, geography_utils\n", + "from segment_speed_utils import helpers\n", + "from segment_speed_utils.project_vars import SEGMENT_GCS, PROJECT_CRS\n", + "\n", + "from prep_comparison import map_one_trip, remove_interpolated_segments\n", + "\n", + "analysis_date = rt_dates.DATES[\"sep2023\"]\n", + "\n", + "import folium\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "28bed394-670c-4f25-81c2-1db9e8f451b0", + "metadata": {}, + "outputs": [], + "source": [ + "from calitp_data_analysis.calitp_color_palette import CALITP_CATEGORY_BOLD_COLORS" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "369c795d-5a7a-4471-9432-c0338f430b27", + "metadata": {}, + "outputs": [], + "source": [ + "df_eric = gpd.read_parquet(f\"{SEGMENT_GCS}speeds_eric_{analysis_date}.parquet\")\n", + "df_eric = remove_interpolated_segments(df_eric)\n", + "df_tiff = gpd.read_parquet(f\"{SEGMENT_GCS}speeds_tiff_{analysis_date}.parquet\")\n", + "df_tiff_interp = pd.read_parquet(f\"{SEGMENT_GCS}speeds_tiff_interp_{analysis_date}.parquet\")\n", + "speed_df = pd.read_parquet(\n", + " f\"{SEGMENT_GCS}speeds_comparison_{analysis_date}.parquet\")" + ] + }, + { + "cell_type": "markdown", + "id": "65dadf9f-17e5-4774-9789-0c6ebe3fc211", + "metadata": {}, + "source": [ + "# Dataset-level comparison\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "e964fbdc-4426-42d8-bb36-10ad3e122ebe", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
_mergen
0left_only8067
1right_only0
2both130920
\n", + "
" + ], + "text/plain": [ + " _merge n\n", + "0 left_only 8067\n", + "1 right_only 0\n", + "2 both 130920" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "speed_df >> count(_._merge)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "424279aa-fcf3-46ec-b706-bdae0f8b4b0d", + "metadata": {}, + "outputs": [], + "source": [ + "# some infinite speeds present\n", + "speed_df = speed_df >> filter(_._merge == 'both', _.tiff_interp_speed_mph < np.inf)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "79d957c1-672a-4e62-9f9d-87a3f8d80be0", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_319/1626851892.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " speed_df['interp_difference'] = speed_df.tiff_interp_speed_mph - speed_df.eric_speed_mph\n" + ] + } + ], + "source": [ + "speed_df['interp_difference'] = speed_df.tiff_interp_speed_mph - speed_df.eric_speed_mph" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "2365831f-53b0-4124-b6e6-20a741a8fc32", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
trip_idshape_idstop_idstop_sequenceroute_iddirection_ideric_speed_mphtiff_speed_mph_mergetiff_interp_speed_mphinterp_difference
89110040009470701-JUNE23400947_JUNE236833.040-131681.07.2369807.286552both99.14663291.909652
89310040009470808-JUNE23400947_JUNE236833.040-131681.03.8881038.222882both90.13330286.245199
89510040009470535-JUNE23400947_JUNE236833.040-131681.01.4369084.609504both82.62219381.185286
89810040009470758-JUNE23400947_JUNE236833.040-131681.07.9317318.454223both123.933290116.001560
150210222000790716-JUNE232220079_JUNE23130383.0222-131681.052.23393428.658222both348.226230295.992295
....................................
12452510460002000705-JUNE234600200_JUNE231692669.0460-131680.023.95137025.758521both191.610963167.659593
12453110106000690704-JUNE231060069_JUNE23442769.0106-131680.012.6805973.190622both97.21791284.537315
12453410106000690744-JUNE231060069_JUNE23442769.0106-131680.014.5826875.579753both124.994459110.411772
12547710070003020649-JUNE23700302_JUNE23217670.070-131680.09.89027417.969755both890.124693880.234419
13308610070003000833-JUNE23700300_JUNE231354980.070-131681.026.5912452442.099225both132.956224106.364979
\n", + "

89 rows × 11 columns

\n", + "
" + ], + "text/plain": [ + " trip_id shape_id stop_id stop_sequence \\\n", + "891 10040009470701-JUNE23 400947_JUNE23 683 3.0 \n", + "893 10040009470808-JUNE23 400947_JUNE23 683 3.0 \n", + "895 10040009470535-JUNE23 400947_JUNE23 683 3.0 \n", + "898 10040009470758-JUNE23 400947_JUNE23 683 3.0 \n", + "1502 10222000790716-JUNE23 2220079_JUNE23 13038 3.0 \n", + "... ... ... ... ... \n", + "124525 10460002000705-JUNE23 4600200_JUNE23 16926 69.0 \n", + "124531 10106000690704-JUNE23 1060069_JUNE23 4427 69.0 \n", + "124534 10106000690744-JUNE23 1060069_JUNE23 4427 69.0 \n", + "125477 10070003020649-JUNE23 700302_JUNE23 2176 70.0 \n", + "133086 10070003000833-JUNE23 700300_JUNE23 13549 80.0 \n", + "\n", + " route_id direction_id eric_speed_mph tiff_speed_mph _merge \\\n", + "891 40-13168 1.0 7.236980 7.286552 both \n", + "893 40-13168 1.0 3.888103 8.222882 both \n", + "895 40-13168 1.0 1.436908 4.609504 both \n", + "898 40-13168 1.0 7.931731 8.454223 both \n", + "1502 222-13168 1.0 52.233934 28.658222 both \n", + "... ... ... ... ... ... \n", + "124525 460-13168 0.0 23.951370 25.758521 both \n", + "124531 106-13168 0.0 12.680597 3.190622 both \n", + "124534 106-13168 0.0 14.582687 5.579753 both \n", + "125477 70-13168 0.0 9.890274 17.969755 both \n", + "133086 70-13168 1.0 26.591245 2442.099225 both \n", + "\n", + " tiff_interp_speed_mph interp_difference \n", + "891 99.146632 91.909652 \n", + "893 90.133302 86.245199 \n", + "895 82.622193 81.185286 \n", + "898 123.933290 116.001560 \n", + "1502 348.226230 295.992295 \n", + "... ... ... \n", + "124525 191.610963 167.659593 \n", + "124531 97.217912 84.537315 \n", + "124534 124.994459 110.411772 \n", + "125477 890.124693 880.234419 \n", + "133086 132.956224 106.364979 \n", + "\n", + "[89 rows x 11 columns]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "speed_df >> filter(_.tiff_interp_speed_mph > 80)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "d3cbad40-f49e-47c8-843d-8b0d71f4ce20", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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EKBp06Zp2rRpx61p3769Fi5ceMLn6du373G/j6fBHXfcoTvuuOPECwYAAOckfrsKAAAYiZADAACMRMgBAABGIuQAAAAjEXIAAICRCDkAAMBIhBwAAGAkv78nB+bqPmHFKdU5gizNGiD1nlIkd/2Jf+a+uX09M6NFnx8AcPbiTA4AADASIQcAABiJkAMAAIxEyAEAAEYi5AAAACMRcgAAgJEIOQAAwEiEHAAAYCRCDgAAMBIhBwAAGImQAwAAjETIAQAARiLkAAAAIxFyAACAkQg5AADASIQcAABgJEIOAAAwEiEHAAAYiZADAACMRMgBAABGIuQAAAAjEXIAAICRCDkAAMBIhBwAAGAkQg4AADASIQcAABiJkAMAAIxEyAEAAEYi5AAAACMRcgAAgJEIOQAAwEiEHAAAYCRCDgAAMBIhBwAAGImQAwAAjETIAQAARiLkAAAAIxFyAACAkQg5AADASIQcAABgJEIOAAAwEiEHAAAYya+QM2XKFAUEBPjcevbsaY8fPnxYWVlZ6tChg9q2bathw4apsrLSZ449e/YoIyND4eHh6tSpkx599FEdOXLEp2b16tW6/PLL5XA41KNHDxUWFjZaS35+vrp3767Q0FClpKRo48aN/rQCAAAM5/eZnMsuu0zffvutffvwww/tsXHjxumdd97RkiVLtGbNGn3zzTe67bbb7PH6+nplZGSorq5O69at0+uvv67CwkJNmjTJrtm9e7cyMjJ07bXXqqKiQjk5OXrggQdUVFRk1yxatEi5ubmaPHmytmzZon79+ik9PV1VVVWnux8AAIBh/A45bdq0UUxMjH3r2LGjJKmmpkavvfaaZs+ereuuu05JSUlasGCB1q1bp/Xr10uSiouL9emnn+qNN95QYmKihg4dqunTpys/P191dXWSpIKCAsXHx+u5555Tr169lJ2drdtvv11z5syx1zB79myNHj1aI0eOVEJCggoKChQeHq758+c3xT4BAAAGaOPvA7744gvFxsYqNDRUTqdTM2bMUFxcnMrLy+XxeJSammrX9uzZU3FxcSorK9PAgQNVVlamPn36KDo62q5JT0/XmDFjtGPHDvXv319lZWU+czTU5OTkSJLq6upUXl6uvLw8ezwwMFCpqakqKys74drdbrfcbrd9v7a2VpLk8Xjk8Xj83RXH1TBXU875c3AEWadWF2j5/G9L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WFiYUlNT9cUXX/jU7Nu3TyNGjFBERISioqI0atQo/fDDDz41n3zyia655hqFhoaqa9eumjVrVqO1LFmyRD179lRoaKj69Omjd9991992AACAofwOOQcOHFC/fv2Un59/zPFZs2bphRdeUEFBgTZs2KDzzjtP6enpOnz4sF0zYsQI7dixQyUlJVq+fLnWrl2rBx980B6vra1VWlqaunXrpvLycj377LOaMmWKXn75Zbtm3bp1uuuuuzRq1Cht3bpVt9xyi2655RZt377d35YAAICB/P7tqqFDh2ro0KHHHLMsS88//7wmTpyom2++WZL0P//zP4qOjtayZct055136rPPPtPKlSu1adMmJScnS5L+8Ic/6IYbbtB///d/KzY2Vm+++abq6uo0f/58hYSE6LLLLlNFRYVmz55th6G5c+fq+uuv16OPPipJmj59ukpKSvTiiy+qoKDgmOtzu91yu932/draWkmSx+ORx+Pxd1ccV8NcjkCryeY8mzT0ZWp/Ej0eS1P+O/JzaFhva1u3P+ix9TO9P6l5ejzVuQIsyzrtv+IBAQFaunSpbrnlFknSV199pYsuukhbt25VYmKiXferX/1KiYmJmjt3rubPn69HHnlE33//vT1+5MgRhYaGasmSJbr11lt17733qra21uetsPfff1/XXXed9u3bp3bt2ikuLk65ubnKycmxayZPnqxly5bp448/PuZ6p0yZoqlTpzbavnDhQoWHh5/ubgAAAD+jgwcP6u6771ZNTY0iIiKOW9ekv0LucrkkSdHR0T7bo6Oj7TGXy6VOnTr5LqJNG7Vv396nJj4+vtEcDWPt2rWTy+U64fMcS15ennJzc+37tbW16tq1q9LS0k64k/zl8XhUUlKiJzcHyu09+a87tzaOQEvTk73G9ifR47Fsn5L+M6yq6TT8ezhkyBAFBwe39HKaBT22fqb3JzVPjw3vxJxMk4acs53D4ZDD4Wi0PTg4uFleXG5vgNz1Zv4HUjK/P4kej9Za/wA317/fZxN6bP1M709q2h5PdZ4mvYQ8JiZGklRZWemzvbKy0h6LiYlRVVWVz/iRI0e0b98+n5pjzXH0cxyvpmEcAACc25o05MTHxysmJkalpaX2ttraWm3YsEFOp1OS5HQ6VV1drfLycrtm1apV8nq9SklJsWvWrl3r88GikpISXXrppWrXrp1dc/TzNNQ0PA8AADi3+R1yfvjhB1VUVKiiokKStHv3blVUVGjPnj0KCAhQTk6OnnrqKb399tvatm2b7r33XsXGxtofTu7Vq5euv/56jR49Whs3btRHH32k7Oxs3XnnnYqNjZUk3X333QoJCdGoUaO0Y8cOLVq0SHPnzvX5PM3YsWO1cuVKPffcc9q5c6emTJmizZs3Kzs7+8z3CgAAaPX8/kzO5s2bde2119r3G4JHZmamCgsLNX78eB04cEAPPvigqqurdfXVV2vlypUKDQ21H/Pmm28qOztbgwcPVmBgoIYNG6YXXnjBHo+MjFRxcbGysrKUlJSkjh07atKkST7fpXPllVdq4cKFmjhxoh5//HFdfPHFWrZsmXr37n1aOwIAAJjF75AzaNAgneiq84CAAE2bNk3Tpk07bk379u21cOHCEz5P37599cEHH5yw5o477tAdd9xx4gUDAIBzEr9dBQAAjETIAQAARiLkAAAAIxFyAACAkQg5AADASIQcAABgJEIOAAAwEiEHAAAYiZADAACMRMgBAABGIuQAAAAjEXIAAICRCDkAAMBIhBwAAGAkQg4AADASIQcAABiJkAMAAIxEyAEAAEYi5AAAACMRcgAAgJEIOQAAwEiEHAAAYCRCDgAAMBIhBwAAGImQAwAAjETIAQAARiLkAAAAIxFyAACAkQg5AADASIQcAABgJEIOAAAwUpuWXgCA1qH7hBUtvQS/OIIszRrQ0qsA0JI4kwMAAIxEyAEAAEYi5AAAACMRcgAAgJEIOQAAwEiEHAAAYCRCDgAAMBIhBwAAGImQAwAAjETIAQAARiLkAAAAIxFyAACAkQg5AADASIQcAABgJEIOAAAwEiEHAAAYiZADAACM1KalFwAAzan3lCK56wNaehmn7OuZGS29BMAYrf5MTn5+vrp3767Q0FClpKRo48aNLb0kAABwFmjVIWfRokXKzc3V5MmTtWXLFvXr10/p6emqqqpq6aUBAIAW1qrfrpo9e7ZGjx6tkSNHSpIKCgq0YsUKzZ8/XxMmTGhU73a75Xa77fs1NTWSpH379snj8TTZujwejw4ePKg2nkDVe1vPafJT1cZr6eBBr7H9SfRogtbaX4/fLT7lWkegpYn9vUp84i9yt2CPG/IGN9vcDX9P//Of/yg4OLjZnqelmN6f1Dw97t+/X5JkWdaJC61Wyu12W0FBQdbSpUt9tt97773WTTfddMzHTJ482ZLEjRs3bty4cTPgtnfv3hNmhVZ7Juff//636uvrFR0d7bM9OjpaO3fuPOZj8vLylJuba9/3er3at2+fOnTooICApvt/QbW1teratav27t2riIiIJpv3bGF6fxI9msD0/iR6NIHp/UnN06NlWdq/f79iY2NPWNdqQ87pcDgccjgcPtuioqKa7fkiIiKMfdFK5vcn0aMJTO9PokcTmN6f1PQ9RkZGnrSm1X7wuGPHjgoKClJlZaXP9srKSsXExLTQqgAAwNmi1YackJAQJSUlqbS01N7m9XpVWloqp9PZgisDAABng1b9dlVubq4yMzOVnJysAQMG6Pnnn9eBAwfsq61aisPh0OTJkxu9NWYK0/uT6NEEpvcn0aMJTO9PatkeAyzrZNdfnd1efPFFPfvss3K5XEpMTNQLL7yglJSUll4WAABoYa0+5AAAABxLq/1MDgAAwIkQcgAAgJEIOQAAwEiEHAAAYCRCThPLz89X9+7dFRoaqpSUFG3cuLGll3Ta1q5dqxtvvFGxsbEKCAjQsmXLfMYty9KkSZPUuXNnhYWFKTU1VV988UXLLPY0zJgxQ1dccYXOP/98derUSbfccot27drlU3P48GFlZWWpQ4cOatu2rYYNG9boCyjPZvPmzVPfvn3tbxp1Op1677337PHW3t9PzZw5UwEBAcrJybG3tfYep0yZooCAAJ9bz5497fHW3l+Df/3rX/qv//ovdejQQWFhYerTp482b95sj7f2vzfdu3dvdBwDAgKUlZUlqfUfx/r6ej355JOKj49XWFiYLrroIk2fPt3nBzRb5Bie4e9k4ihvvfWWFRISYs2fP9/asWOHNXr0aCsqKsqqrKxs6aWdlnfffdd64oknrL/85S+WpEY/hjpz5kwrMjLSWrZsmfXxxx9bN910kxUfH28dOnSoZRbsp/T0dGvBggXW9u3brYqKCuuGG26w4uLirB9++MGueeihh6yuXbtapaWl1ubNm62BAwdaV155ZQuu2j9vv/22tWLFCuvzzz+3du3aZT3++ONWcHCwtX37dsuyWn9/R9u4caPVvXt3q2/fvtbYsWPt7a29x8mTJ1uXXXaZ9e2339q37777zh5v7f1ZlmXt27fP6tatm3XfffdZGzZssL766iurqKjI+vLLL+2a1v73pqqqyucYlpSUWJKs999/37Ks1n8cn376aatDhw7W8uXLrd27d1tLliyx2rZta82dO9euaYljSMhpQgMGDLCysrLs+/X19VZsbKw1Y8aMFlxV0/hpyPF6vVZMTIz17LPP2tuqq6sth8Nh/elPf2qBFZ65qqoqS5K1Zs0ay7J+7Cc4ONhasmSJXfPZZ59ZkqyysrKWWuYZa9eunfXqq68a1d/+/futiy++2CopKbF+9atf2SHHhB4nT55s9evX75hjJvRnWZb12GOPWVdfffVxx038ezN27FjroosusrxerxHHMSMjw7r//vt9tt12223WiBEjLMtquWPI21VNpK6uTuXl5UpNTbW3BQYGKjU1VWVlZS24suaxe/duuVwun34jIyOVkpLSavutqamRJLVv316SVF5eLo/H49Njz549FRcX1yp7rK+v11tvvaUDBw7I6XQa1V9WVpYyMjJ8epHMOYZffPGFYmNj9Ytf/EIjRozQnj17JJnT39tvv63k5GTdcccd6tSpk/r3769XXnnFHjft701dXZ3eeOMN3X///QoICDDiOF555ZUqLS3V559/Lkn6+OOP9eGHH2ro0KGSWu4YtuqfdTib/Pvf/1Z9fb2io6N9tkdHR2vnzp0ttKrm43K5JOmY/TaMtSZer1c5OTm66qqr1Lt3b0k/9hgSEtLol+pbW4/btm2T0+nU4cOH1bZtWy1dulQJCQmqqKgwor+33npLW7Zs0aZNmxqNmXAMU1JSVFhYqEsvvVTffvutpk6dqmuuuUbbt283oj9J+uqrrzRv3jzl5ubq8ccf16ZNm/Tb3/5WISEhyszMNO7vzbJly1RdXa377rtPkhmv0wkTJqi2tlY9e/ZUUFCQ6uvr9fTTT2vEiBGSWu6/GYQcQD+eCdi+fbs+/PDDll5Kk7v00ktVUVGhmpoa/fnPf1ZmZqbWrFnT0stqEnv37tXYsWNVUlKi0NDQll5Os2j4f8KS1LdvX6WkpKhbt25avHixwsLCWnBlTcfr9So5OVnPPPOMJKl///7avn27CgoKlJmZ2cKra3qvvfaahg4dqtjY2JZeSpNZvHix3nzzTS1cuFCXXXaZKioqlJOTo9jY2BY9hrxd1UQ6duyooKCgRp+Gr6ysVExMTAutqvk09GRCv9nZ2Vq+fLnef/99denSxd4eExOjuro6VVdX+9S3th5DQkLUo0cPJSUlacaMGerXr5/mzp1rRH/l5eWqqqrS5ZdfrjZt2qhNmzZas2aNXnjhBbVp00bR0dGtvsefioqK0iWXXKIvv/zSiGMoSZ07d1ZCQoLPtl69etlvy5n09+Yf//iH/va3v+mBBx6wt5lwHB999FFNmDBBd955p/r06aN77rlH48aN04wZMyS13DEk5DSRkJAQJSUlqbS01N7m9XpVWloqp9PZgitrHvHx8YqJifHpt7a2Vhs2bGg1/VqWpezsbC1dulSrVq1SfHy8z3hSUpKCg4N9ety1a5f27NnTano8Fq/XK7fbbUR/gwcP1rZt21RRUWHfkpOTNWLECPufW3uPP/XDDz/o73//uzp37mzEMZSkq666qtHXN3z++efq1q2bJDP+3jRYsGCBOnXqpIyMDHubCcfx4MGDCgz0jRRBQUHyer2SWvAYNttHms9Bb731luVwOKzCwkLr008/tR588EErKirKcrlcLb2007J//35r69at1tatWy1J1uzZs62tW7da//jHPyzL+vFywKioKOuvf/2r9cknn1g333xzq7qkc8yYMVZkZKS1evVqn0s7Dx48aNc89NBDVlxcnLVq1Spr8+bNltPptJxOZwuu2j8TJkyw1qxZY+3evdv65JNPrAkTJlgBAQFWcXGxZVmtv79jOfrqKstq/T0+8sgj1urVq63du3dbH330kZWammp17NjRqqqqsiyr9fdnWT9e/t+mTRvr6aeftr744gvrzTfftMLDw6033njDrmntf28s68crbuPi4qzHHnus0VhrP46ZmZnWhRdeaF9C/pe//MXq2LGjNX78eLumJY4hIaeJ/eEPf7Di4uKskJAQa8CAAdb69etbekmn7f3337ckNbplZmZalvXjJYFPPvmkFR0dbTkcDmvw4MHWrl27WnbRfjhWb5KsBQsW2DWHDh2yfvOb31jt2rWzwsPDrVtvvdX69ttvW27Rfrr//vutbt26WSEhIdYFF1xgDR482A44ltX6+zuWn4ac1t7j8OHDrc6dO1shISHWhRdeaA0fPtzn+2Nae38N3nnnHat3796Ww+Gwevbsab388ss+4639741lWVZRUZEl6Zjrbu3Hsba21ho7dqwVFxdnhYaGWr/4xS+sJ554wnK73XZNSxzDAMs66usIAQAADMFncgAAgJEIOQAAwEiEHAAAYCRCDgAAMBIhBwAAGImQAwAAjETIAQAARiLkAAAAIxFyAACAkQg5AADASIQcAABgpP8DCOTt7zEBC08AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "speed_df.eric_speed_mph.hist()" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "b43d17dc-75ad-4357-8f36-57a7c6b93b08", + "metadata": {}, + "outputs": [], + "source": [ + "# (speed_df >> filter(_.tiff_speed_mph < 80)).tiff_speed_mph.hist()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "169a74a9-c4fc-4c44-ba7b-46e2fc8ba3a8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "(speed_df >> filter(_.tiff_interp_speed_mph < 80)).tiff_interp_speed_mph.hist()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "9a50b916-a7d1-412e-9c98-6991ed9f7c33", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
stop_sequencedirection_ideric_speed_mphtiff_speed_mphtiff_interp_speed_mphinterp_difference
count121737.000000121737.000000121737.000000121737.000000121737.000000121737.000000
mean36.8386440.51301614.80954312.06044114.9054570.095914
std23.0394390.4998337.88869812.57581713.58204311.456724
min3.0000000.0000000.0560440.0000000.119131-77.173946
25%18.0000000.0000008.9560676.3511698.917777-0.301087
50%34.0000001.00000013.2420029.82597313.2057250.000000
75%53.0000001.00000019.10854815.25310019.0275810.000000
max133.0000001.00000079.6887682442.0992251559.3511511544.777775
\n", + "
" + ], + "text/plain": [ + " stop_sequence direction_id eric_speed_mph tiff_speed_mph \\\n", + "count 121737.000000 121737.000000 121737.000000 121737.000000 \n", + "mean 36.838644 0.513016 14.809543 12.060441 \n", + "std 23.039439 0.499833 7.888698 12.575817 \n", + "min 3.000000 0.000000 0.056044 0.000000 \n", + "25% 18.000000 0.000000 8.956067 6.351169 \n", + "50% 34.000000 1.000000 13.242002 9.825973 \n", + "75% 53.000000 1.000000 19.108548 15.253100 \n", + "max 133.000000 1.000000 79.688768 2442.099225 \n", + "\n", + " tiff_interp_speed_mph interp_difference \n", + "count 121737.000000 121737.000000 \n", + "mean 14.905457 0.095914 \n", + "std 13.582043 11.456724 \n", + "min 0.119131 -77.173946 \n", + "25% 8.917777 -0.301087 \n", + "50% 13.205725 0.000000 \n", + "75% 19.027581 0.000000 \n", + "max 1559.351151 1544.777775 " + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "speed_df.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "081f348a-91f2-4727-a2cc-a64c182b55d3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.8884715484353258" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "speed_df.interp_difference.quantile(.95)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "43f16144-f52c-4b1a-85ba-559a74c8c5a7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-1.8717697511490712" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "speed_df.interp_difference.quantile(.05)" + ] + }, + { + "cell_type": "markdown", + "id": "3c362785-d64b-489b-ab5d-071525dd488d", + "metadata": {}, + "source": [ + "## Differences by route at 80th, 90th percentiles\n", + "\n", + "* limited opportunity for further investigation, but again generally very good!" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "73bc311e-2606-4a70-a64a-153b4ce4cad1", + "metadata": {}, + "outputs": [], + "source": [ + "p80_diffs = speed_df >> group_by(_.route_id, _.shape_id) >> summarize(p80_difference = _.interp_difference.quantile(.8))" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "a436bf70-b4e9-46b3-ae43-431195a1f55a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
route_idshape_idp80_difference
28051-13168510344_JUNE2314.594673
348805805WB_1905139.230499
341802802EB_1905136.481253
344803803WB_1202156.030507
342802802WB_1905135.432001
............
36792-13168920299_JUNE230.000000
36894-13168940256_JUNE230.000000
36994-13168940258_JUNE230.000000
37096-13168960250_JUNE230.000000
37196-13168960251_JUNE230.000000
\n", + "

372 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " route_id shape_id p80_difference\n", + "280 51-13168 510344_JUNE23 14.594673\n", + "348 805 805WB_190513 9.230499\n", + "341 802 802EB_190513 6.481253\n", + "344 803 803WB_120215 6.030507\n", + "342 802 802WB_190513 5.432001\n", + ".. ... ... ...\n", + "367 92-13168 920299_JUNE23 0.000000\n", + "368 94-13168 940256_JUNE23 0.000000\n", + "369 94-13168 940258_JUNE23 0.000000\n", + "370 96-13168 960250_JUNE23 0.000000\n", + "371 96-13168 960251_JUNE23 0.000000\n", + "\n", + "[372 rows x 3 columns]" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p80_diffs >> arrange(-_.p80_difference)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "93045b44-a5b8-4f29-b827-03ef304b980c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
p80_differencen
00.000000355
10.1192731
20.2440661
30.3618351
40.4179221
50.4511171
60.7194161
70.7804471
80.8219061
91.0504041
101.3102361
112.8728821
123.1061031
135.4320011
146.0305071
156.4812531
169.2304991
1714.5946731
\n", + "
" + ], + "text/plain": [ + " p80_difference n\n", + "0 0.000000 355\n", + "1 0.119273 1\n", + "2 0.244066 1\n", + "3 0.361835 1\n", + "4 0.417922 1\n", + "5 0.451117 1\n", + "6 0.719416 1\n", + "7 0.780447 1\n", + "8 0.821906 1\n", + "9 1.050404 1\n", + "10 1.310236 1\n", + "11 2.872882 1\n", + "12 3.106103 1\n", + "13 5.432001 1\n", + "14 6.030507 1\n", + "15 6.481253 1\n", + "16 9.230499 1\n", + "17 14.594673 1" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p80_diffs >> count(_.p80_difference)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "219f9a43-b061-4380-b9da-b0f71b57dd2c", + "metadata": {}, + "outputs": [], + "source": [ + "p90_diffs = speed_df >> group_by(_.route_id, _.shape_id) >> summarize(p90_difference = _.interp_difference.quantile(.9))" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "ed7b0281-a0d9-4a97-b749-f80a184c60eb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
route_idshape_idp90_difference
28051-13168510344_JUNE2317.608822
348805805WB_19051311.145241
342802802WB_19051311.103630
341802802EB_19051310.504373
291577-131685770040_JUNE239.318308
............
36792-13168920299_JUNE230.000000
36894-13168940256_JUNE230.000000
36994-13168940258_JUNE230.000000
37096-13168960250_JUNE230.000000
37196-13168960251_JUNE230.000000
\n", + "

372 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " route_id shape_id p90_difference\n", + "280 51-13168 510344_JUNE23 17.608822\n", + "348 805 805WB_190513 11.145241\n", + "342 802 802WB_190513 11.103630\n", + "341 802 802EB_190513 10.504373\n", + "291 577-13168 5770040_JUNE23 9.318308\n", + ".. ... ... ...\n", + "367 92-13168 920299_JUNE23 0.000000\n", + "368 94-13168 940256_JUNE23 0.000000\n", + "369 94-13168 940258_JUNE23 0.000000\n", + "370 96-13168 960250_JUNE23 0.000000\n", + "371 96-13168 960251_JUNE23 0.000000\n", + "\n", + "[372 rows x 3 columns]" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(p90_diffs >> arrange(-_.p90_difference))" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "c5539467-797d-4be5-9ce7-6c276bf37de9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
route_idshape_idp90_difference
28051-13168510344_JUNE2317.608822
348805805WB_19051311.145241
342802802WB_19051311.103630
341802802EB_19051310.504373
291577-131685770040_JUNE239.318308
28453-13168530240_JUNE237.956904
344803803WB_1202157.737499
27351-13168510324_JUNE237.678630
339801801NB_RC_2211215.241358
346804804WB_RC_2211213.389427
345804804EB_RC_2211213.275685
139212-131682120230_JUNE232.930842
31166-13168660421_JUNE232.892077
28553-13168530241_JUNE232.717356
323720-131687201278_JUNE232.249340
37111-131681110401_JUNE232.161038
340801801SB_RC_2211212.125345
90165-131681650208_JUNE231.970811
343803803EB_1202151.897613
265460-131684600200_JUNE231.869998
349807807NB_2208101.857321
40111-131681110423_JUNE231.712616
13105-131681050261_JUNE231.625885
8016-13168160435_JUNE231.515765
42111-131681110427_JUNE231.489256
297601-131686010002_JUNE231.470744
350807807SB_2208101.395148
357901-131689010054_JUNE231.358461
334761-131687610074_JUNE231.345373
123206-131682060180_JUNE231.308359
22135-13168350273_JUNE231.298307
269487-131684870124_JUNE231.237686
330754-131687540103_JUNE231.221909
2483650265121.185546
322720-131687201275_JUNE231.123097
1142-1316821124_JUNE231.065693
329754-131687540100_JUNE231.021511
35181-13168810319_JUNE230.983131
11018-13168180339_JUNE230.966541
21330-13168300816_JUNE230.928976
328720-131687201299_JUNE230.927439
325720-131687201296_JUNE230.887781
11720-13168200801_JUNE230.831867
39111-131681110417_JUNE230.816518
28351-13168510347_JUNE230.776240
43111-131681110428_JUNE230.763027
326720-131687201297_JUNE230.746771
38111-131681110414_JUNE230.740132
30766-13168660417_JUNE230.737124
2353637264630.724721
51115-131681150537_JUNE230.699571
158233-131682330157_JUNE230.689547
7916-13168160434_JUNE230.626378
126207-131682070299_JUNE230.623644
264460-131684600199_JUNE230.561841
140212-131682120231_JUNE230.543471
24108-131681080360_JUNE230.542826
48115-131681150530_JUNE230.433483
165236-131682360123_JUNE230.416887
313660-131686600011_JUNE230.409033
20428-13168280646_JUNE230.408705
27551-13168510326_JUNE230.408559
364910-131689100212_JUNE230.381431
28151-13168510345_JUNE230.379124
122206-131682060178_JUNE230.374014
173242-131682420003_JUNE230.342196
27451-13168510325_JUNE230.321498
27108-131681080417_JUNE230.312257
20328-13168280634_JUNE230.301458
32170-13168700302_JUNE230.291651
324720-131687201293_JUNE230.252039
147222-131682220081_JUNE230.249317
56125-131681250150_JUNE230.240534
10918-13168180337_JUNE230.232762
2544-1316840330_JUNE230.216359
266460-131684600205_JUNE230.202816
46115-131681150442_JUNE230.196068
100177-131681770041_JUNE230.188112
26040-13168400947_JUNE230.156627
30662-13168620347_JUNE230.141522
32110-131681100284_JUNE230.141359
70152-131681520163_JUNE230.137985
28855-13168550290_JUNE230.131606
302605-131686050045_JUNE230.123064
110-13168100751_JUNE230.121139
27851-13168510342_JUNE230.098545
300603-131686030026_JUNE230.090212
47115-131681150445_JUNE230.079408
347805805EB_1905130.073547
89165-131681650207_JUNE230.069372
157233-131682330156_JUNE230.061581
72154-131681540042_JUNE230.039409
271501-131685010013_JUNE230.037952
26240-13168400949_JUNE230.037253
150224-131682240271_JUNE230.028583
31066-13168660420_JUNE230.028280
21533-13168330654_JUNE230.010921
2564-1316840345_JUNE230.002339
\n", + "
" + ], + "text/plain": [ + " route_id shape_id p90_difference\n", + "280 51-13168 510344_JUNE23 17.608822\n", + "348 805 805WB_190513 11.145241\n", + "342 802 802WB_190513 11.103630\n", + "341 802 802EB_190513 10.504373\n", + "291 577-13168 5770040_JUNE23 9.318308\n", + "284 53-13168 530240_JUNE23 7.956904\n", + "344 803 803WB_120215 7.737499\n", + "273 51-13168 510324_JUNE23 7.678630\n", + "339 801 801NB_RC_221121 5.241358\n", + "346 804 804WB_RC_221121 3.389427\n", + "345 804 804EB_RC_221121 3.275685\n", + "139 212-13168 2120230_JUNE23 2.930842\n", + "311 66-13168 660421_JUNE23 2.892077\n", + "285 53-13168 530241_JUNE23 2.717356\n", + "323 720-13168 7201278_JUNE23 2.249340\n", + "37 111-13168 1110401_JUNE23 2.161038\n", + "340 801 801SB_RC_221121 2.125345\n", + "90 165-13168 1650208_JUNE23 1.970811\n", + "343 803 803EB_120215 1.897613\n", + "265 460-13168 4600200_JUNE23 1.869998\n", + "349 807 807NB_220810 1.857321\n", + "40 111-13168 1110423_JUNE23 1.712616\n", + "13 105-13168 1050261_JUNE23 1.625885\n", + "80 16-13168 160435_JUNE23 1.515765\n", + "42 111-13168 1110427_JUNE23 1.489256\n", + "297 601-13168 6010002_JUNE23 1.470744\n", + "350 807 807SB_220810 1.395148\n", + "357 901-13168 9010054_JUNE23 1.358461\n", + "334 761-13168 7610074_JUNE23 1.345373\n", + "123 206-13168 2060180_JUNE23 1.308359\n", + "221 35-13168 350273_JUNE23 1.298307\n", + "269 487-13168 4870124_JUNE23 1.237686\n", + "330 754-13168 7540103_JUNE23 1.221909\n", + "248 3650 26512 1.185546\n", + "322 720-13168 7201275_JUNE23 1.123097\n", + "114 2-13168 21124_JUNE23 1.065693\n", + "329 754-13168 7540100_JUNE23 1.021511\n", + "351 81-13168 810319_JUNE23 0.983131\n", + "110 18-13168 180339_JUNE23 0.966541\n", + "213 30-13168 300816_JUNE23 0.928976\n", + "328 720-13168 7201299_JUNE23 0.927439\n", + "325 720-13168 7201296_JUNE23 0.887781\n", + "117 20-13168 200801_JUNE23 0.831867\n", + "39 111-13168 1110417_JUNE23 0.816518\n", + "283 51-13168 510347_JUNE23 0.776240\n", + "43 111-13168 1110428_JUNE23 0.763027\n", + "326 720-13168 7201297_JUNE23 0.746771\n", + "38 111-13168 1110414_JUNE23 0.740132\n", + "307 66-13168 660417_JUNE23 0.737124\n", + "235 3637 26463 0.724721\n", + "51 115-13168 1150537_JUNE23 0.699571\n", + "158 233-13168 2330157_JUNE23 0.689547\n", + "79 16-13168 160434_JUNE23 0.626378\n", + "126 207-13168 2070299_JUNE23 0.623644\n", + "264 460-13168 4600199_JUNE23 0.561841\n", + "140 212-13168 2120231_JUNE23 0.543471\n", + "24 108-13168 1080360_JUNE23 0.542826\n", + "48 115-13168 1150530_JUNE23 0.433483\n", + "165 236-13168 2360123_JUNE23 0.416887\n", + "313 660-13168 6600011_JUNE23 0.409033\n", + "204 28-13168 280646_JUNE23 0.408705\n", + "275 51-13168 510326_JUNE23 0.408559\n", + "364 910-13168 9100212_JUNE23 0.381431\n", + "281 51-13168 510345_JUNE23 0.379124\n", + "122 206-13168 2060178_JUNE23 0.374014\n", + "173 242-13168 2420003_JUNE23 0.342196\n", + "274 51-13168 510325_JUNE23 0.321498\n", + "27 108-13168 1080417_JUNE23 0.312257\n", + "203 28-13168 280634_JUNE23 0.301458\n", + "321 70-13168 700302_JUNE23 0.291651\n", + "324 720-13168 7201293_JUNE23 0.252039\n", + "147 222-13168 2220081_JUNE23 0.249317\n", + "56 125-13168 1250150_JUNE23 0.240534\n", + "109 18-13168 180337_JUNE23 0.232762\n", + "254 4-13168 40330_JUNE23 0.216359\n", + "266 460-13168 4600205_JUNE23 0.202816\n", + "46 115-13168 1150442_JUNE23 0.196068\n", + "100 177-13168 1770041_JUNE23 0.188112\n", + "260 40-13168 400947_JUNE23 0.156627\n", + "306 62-13168 620347_JUNE23 0.141522\n", + "32 110-13168 1100284_JUNE23 0.141359\n", + "70 152-13168 1520163_JUNE23 0.137985\n", + "288 55-13168 550290_JUNE23 0.131606\n", + "302 605-13168 6050045_JUNE23 0.123064\n", + "1 10-13168 100751_JUNE23 0.121139\n", + "278 51-13168 510342_JUNE23 0.098545\n", + "300 603-13168 6030026_JUNE23 0.090212\n", + "47 115-13168 1150445_JUNE23 0.079408\n", + "347 805 805EB_190513 0.073547\n", + "89 165-13168 1650207_JUNE23 0.069372\n", + "157 233-13168 2330156_JUNE23 0.061581\n", + "72 154-13168 1540042_JUNE23 0.039409\n", + "271 501-13168 5010013_JUNE23 0.037952\n", + "262 40-13168 400949_JUNE23 0.037253\n", + "150 224-13168 2240271_JUNE23 0.028583\n", + "310 66-13168 660420_JUNE23 0.028280\n", + "215 33-13168 330654_JUNE23 0.010921\n", + "256 4-13168 40345_JUNE23 0.002339" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rt_utils.show_full_df((p90_diffs >> arrange(-_.p90_difference)) >> filter(_.p90_difference > 0))" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "e55b76e3-10f3-4afb-bfd8-5de1e95a3743", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
p90_differencen
00.000000274
10.0023391
20.0109211
30.0282801
40.0285831
.........
949.3183081
9510.5043731
9611.1036301
9711.1452411
9817.6088221
\n", + "

99 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " p90_difference n\n", + "0 0.000000 274\n", + "1 0.002339 1\n", + "2 0.010921 1\n", + "3 0.028280 1\n", + "4 0.028583 1\n", + ".. ... ...\n", + "94 9.318308 1\n", + "95 10.504373 1\n", + "96 11.103630 1\n", + "97 11.145241 1\n", + "98 17.608822 1\n", + "\n", + "[99 rows x 2 columns]" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p90_diffs >> count(_.p90_difference)" + ] + }, + { + "cell_type": "markdown", + "id": "cfbb866a-797b-4f68-bd34-9f124d545f9e", + "metadata": {}, + "source": [ + "# Conclusion\n", + "\n", + "* `rt_delay` and post-interpolation `rt_segment_speeds` results are now substantially in alignment\n", + "* Accuracy is no longer a blocker to publishing/promoting this data\n", + "* Speedmaps could be transitioned with a few more steps, for example by\n", + " * porting the \"virtual segments\" approach for long stop spacings into a version of `rt_segment_speeds`\n", + " * deprecating `rt_analysis.rt_parser`\n", + " * reworking `rt_analysis.rt_filter_map_plot` and associated `RtFilterMapper` class to provide an interface to `rt_segment speeds`\n", + "* Routes highlighted above could be investigated further to understand remaining discrepancies " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.13" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}