Package specifically designed to speed up some frequent GTFS spatial analyses like mapping frequncies and speeds.
Project description
GTFS functions
This package allows you to create various layers directly from the GTFS and visualize the results in the most straightforward way possible. It is still in its testing face.
Table of contents
- Installation
- GTFS parsing
- Stop frequencies
- Line frequencies
- Cut in Bus segments
- Speeds
- Segment frequencies
- Mapping the results
- Export/Save your work
- Other plots
Installation
!pip install gtfs_functions
import gtfs_functions as gtfs
GTFS Import
The function import_gtfs
takes the path or the zip file as argument and returns 5 dataframes/geodataframes.
routes, stops, stop_times, trips, shapes = gtfs.import_gtfs(r"C:\Users\santi\Desktop\Articles\SFMTA_GTFS.zip")
routes.head(2)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
route_id | agency_id | route_short_name | route_long_name | route_desc | route_type | route_url | route_color | route_text_color | |
---|---|---|---|---|---|---|---|---|---|
0 | 15761 | SFMTA | 1 | CALIFORNIA | 3 | https://SFMTA.com/1 | |||
1 | 15766 | SFMTA | 5 | FULTON | 3 | https://SFMTA.com/5 |
stops.head(2)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
stop_id | stop_code | stop_name | stop_desc | zone_id | stop_url | geometry | |
---|---|---|---|---|---|---|---|
0 | 390 | 10390 | 19th Avenue & Holloway St | POINT (-122.47510 37.72119) | |||
1 | 3016 | 13016 | 3rd St & 4th St | POINT (-122.38979 37.77262) |
stop_times.head(2)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
trip_id | arrival_time | departure_time | stop_id | stop_sequence | stop_headsign | pickup_type | drop_off_type | shape_dist_traveled | route_id | service_id | direction_id | shape_id | stop_code | stop_name | stop_desc | zone_id | stop_url | geometry | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 9413147 | 81840.0 | 81840.0 | 4015 | 1 | NaN | NaN | 15761 | 1 | 0 | 179928 | 14015 | Clay St & Drumm St | POINT (-122.39682 37.79544) | |||||
1 | 9413147 | 81902.0 | 81902.0 | 6294 | 2 | NaN | NaN | 15761 | 1 | 0 | 179928 | 16294 | Sacramento St & Davis St | POINT (-122.39761 37.79450) |
trips.head(2)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
trip_id | route_id | service_id | direction_id | shape_id | |
---|---|---|---|---|---|
0 | 9547346 | 15804 | 1 | 0 | 180140 |
1 | 9547345 | 15804 | 1 | 0 | 180140 |
shapes.head(2)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
shape_id | geometry | |
---|---|---|
0 | 179928 | LINESTRING (-122.39697 37.79544, -122.39678 37... |
1 | 179929 | LINESTRING (-122.39697 37.79544, -122.39678 37... |
Stop frequencies
This function will create a geodataframe with the frequency for each combination of stop
, time of day
and direction
. Each row with a Point geometry. The stops_freq
function takes stop_times
and stops
created in the previous steps as arguments. The user can optionally specify cutoffs
as a list in case the default is not good. These cutoffs
are the times of days to use as aggregation.
cutoffs = [0,6,9,15.5,19,22,24]
stop_freq = gtfs.stops_freq(stop_times, stops, cutoffs = cutoffs)
stop_freq.head(2)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
stop_id | dir_id | window | ntrips | frequency | max_trips | max_freq | stop_name | geometry | |
---|---|---|---|---|---|---|---|---|---|
8157 | 5763 | Inbound | 0:00-6:00 | 1 | 360 | 5 | 12 | Noriega St & 48th Ave | POINT (-122.50785 37.75293) |
13102 | 7982 | Outbound | 0:00-6:00 | 1 | 360 | 3 | 20 | Moscow St & RussiaAvet | POINT (-122.42996 37.71804) |
9539 | 6113 | Inbound | 0:00-6:00 | 1 | 360 | 5 | 12 | Portola Dr & Laguna Honda Blvd | POINT (-122.45526 37.74310) |
12654 | 7719 | Inbound | 0:00-6:00 | 1 | 360 | 5 | 12 | Middle Point & Acacia | POINT (-122.37952 37.73707) |
9553 | 6116 | Inbound | 0:00-6:00 | 1 | 360 | 5 | 12 | Portola Dr & San Pablo Ave | POINT (-122.46107 37.74040) |
Line frequencies
This function will create a geodataframe with the frequency for each combination of line
, time of day
and direction
. Each row with a LineString geometry. The line_freq
function takes stop_times
, trips
, shapes
, routes
created in the previous steps as arguments. The user can optionally specify cutoffs
as a list in case the default is not good. These cutoffs
are the times of days to use as aggregation.
cutoffs = [0,6,9,15.5,19,22,24]
line_freq = gtfs.lines_freq(stop_times, trips, shapes, routes, cutoffs = cutoffs)
line_freq.head()
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
route_id | route_name | dir_id | window | frequency | ntrips | max_freq | max_trips | geometry | |
---|---|---|---|---|---|---|---|---|---|
376 | 15808 | 44 O'SHAUGHNESSY | Inbound | 0:00-6:00 | 360 | 1 | 12 | 5 | LINESTRING (-122.46459 37.78500, -122.46352 37... |
378 | 15808 | 44 O'SHAUGHNESSY | Inbound | 0:00-6:00 | 360 | 1 | 12 | 5 | LINESTRING (-122.43416 37.73355, -122.43299 37... |
242 | 15787 | 25 TREASURE ISLAND | Inbound | 0:00-6:00 | 360 | 1 | 15 | 4 | LINESTRING (-122.39611 37.79013, -122.39603 37... |
451 | 15814 | 54 FELTON | Inbound | 0:00-6:00 | 360 | 1 | 20 | 3 | LINESTRING (-122.38845 37.73994, -122.38844 37... |
241 | 15787 | 25 TREASURE ISLAND | Inbound | 0:00-6:00 | 360 | 1 | 15 | 4 | LINESTRING (-122.39542 37.78978, -122.39563 37... |
Bus segments
The function cut_gtfs
takes stop_times
, stops
, and shapes
created by import_gtfs
as arguments and returns a geodataframe where each segment is a row and has a LineString geometry.
segments_gdf = gtfs.cut_gtfs(stop_times, stops, shapes)
segments_gdf.head(2)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
route_id | direction_id | stop_sequence | start_stop_name | end_stop_name | start_stop_id | end_stop_id | segment_id | shape_id | geometry | distance_m | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 15761 | 0 | 1 | Clay St & Drumm St | Sacramento St & Davis St | 4015 | 6294 | 4015-6294 | 179928 | LINESTRING (-122.39697 37.79544, -122.39678 37... | 205.281653 |
1 | 15761 | 0 | 2 | Sacramento St & Davis St | Sacramento St & Battery St | 6294 | 6290 | 6294-6290 | 179928 | LINESTRING (-122.39761 37.79446, -122.39781 37... | 238.047505 |
Scheduled Speeds
This function will create a geodataframe with the speed_kmh
and speed_mph
for each combination of line
, segment
, time of day
and direction
. Each row with a LineString geometry. The function speeds_from_gtfs
takes routes
, stop_times
and segments_gdf
created in the previous steps as arguments. The user can optionally specify cutoffs
as a list in case the default is not good. These cutoffs
are the times of days to use as aggregation.
# Cutoffs to make get hourly values
cutoffs = list(range(24))
speeds = speeds_from_gtfs(routes, stop_times, segments_gdf, cutoffs = cutoffs)
speeds.head(1)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
route_id | route_name | dir_id | segment_id | window | speed_kmh | s_st_id | s_st_name | e_st_id | e_st_name | distance_m | stop_seq | runtime_h | max_kmh | geometry | speed_mph | max_mph | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 15761 | 1 CALIFORNIA | Inbound | 4015-6294 | 10:00-11:00 | 12.0 | 4015 | Clay St & Drumm St | 6294 | Sacramento St & Davis St | 205.281653 | 1 | 0.017222 | 12.0 | LINESTRING (-122.39697 37.79544, -122.39678 37... | 7.456452 | 7.456452 |
speeds.loc[(speeds.segment_id=='3114-3144')&(speeds.window=='0:00-6:00')]
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
route_id | route_name | dir_id | segment_id | window | speed_kmh | s_st_id | s_st_name | e_st_id | e_st_name | distance_m | stop_seq | runtime_h | max_kmh | geometry | speed_mph | max_mph | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
11183 | 15792 | 30 STOCKTON | Inbound | 3114-3144 | 0:00-6:00 | 12.8 | 3114 | 3rd St & Brannan St | 3144 | 3rd St & Bryant St | 373.952483 | 2 | 0.028565 | 13.0 | LINESTRING (-122.39323 37.77923, -122.39431 37... | 7.953549 | 8.077823 |
16862 | 15809 | 45 UNION-STOCKTON | Inbound | 3114-3144 | 0:00-6:00 | 13.0 | 3114 | 3rd St & Brannan St | 3144 | 3rd St & Bryant St | 373.952483 | 2 | 0.027778 | 13.0 | LINESTRING (-122.39323 37.77923, -122.39431 37... | 8.077823 | 8.077823 |
19889 | 15831 | 91 3RD-19TH AVE OWL | Outbound | 3114-3144 | 0:00-6:00 | 17.0 | 3114 | 3rd St & Brannan St | 3144 | 3rd St & Bryant St | 373.952483 | 56 | 0.021667 | 17.0 | LINESTRING (-122.39323 37.77923, -122.39431 37... | 10.563307 | 10.563307 |
22823 | ALL_LINES | All lines | NA | 3114-3144 | 0:00-6:00 | 15.2 | 3114 | 3rd St & Brannan St | 3144 | 3rd St & Bryant St | 373.952483 | 2 | 0.024511 | NaN | LINESTRING (-122.39323 37.77923, -122.39431 37... | 9.444839 | NaN |
Segment frequencies
cutoffs = [0,6,9,15.5,19,22,24]
seg_freq = gtfs.segments_freq(segments_gdf, stop_times, routes, cutoffs = cutoffs)
seg_freq.head(2)
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
route_id | route_name | dir_id | segment_id | window | frequency | ntrips | s_st_id | s_st_name | e_st_name | max_freq | max_trips | geometry | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
23191 | ALL_LINES | All lines | NA | 3628-3622 | 0:00-6:00 | 360 | 1 | 3628 | Alemany Blvd & St Charles Ave | Alemany Blvd & Arch St | 20 | 18 | LINESTRING (-122.46949 37.71045, -122.46941 37... |
6160 | 15787 | 25 TREASURE ISLAND | Inbound | 7948-8017 | 0:00-6:00 | 360 | 1 | 7948 | Transit Center Bay 29 | Shoreline Access Road | 15 | 4 | LINESTRING (-122.39611 37.79013, -122.39603 37... |
seg_freq.loc[(seg_freq.segment_id=='3114-3144')&(seg_freq.window=='0:00-6:00')]
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
route_id | route_name | dir_id | segment_id | window | frequency | ntrips | s_st_id | s_st_name | e_st_name | max_freq | max_trips | geometry | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
10566 | 15809 | 45 UNION-STOCKTON | Inbound | 3114-3144 | 0:00-6:00 | 120 | 3 | 3114 | 3rd St & Brannan St | 3rd St & Bryant St | 12 | 5 | LINESTRING (-122.39323 37.77923, -122.39431 37... |
7604 | 15792 | 30 STOCKTON | Inbound | 3114-3144 | 0:00-6:00 | 60 | 6 | 3114 | 3rd St & Brannan St | 3rd St & Bryant St | 12 | 5 | LINESTRING (-122.39323 37.77923, -122.39431 37... |
13209 | 15831 | 91 3RD-19TH AVE OWL | Outbound | 3114-3144 | 0:00-6:00 | 30 | 12 | 3114 | 3rd St & Brannan St | 3rd St & Bryant St | 30 | 2 | LINESTRING (-122.39323 37.77923, -122.39431 37... |
16580 | ALL_LINES | All lines | NA | 3114-3144 | 0:00-6:00 | 17 | 21 | 3114 | 3rd St & Brannan St | 3rd St & Bryant St | 5 | 59 | LINESTRING (-122.39323 37.77923, -122.39431 37... |
Mapping
# Speeds
import keplergl as kp
m = kp.KeplerGl(data=dict(data=speeds, name='Speed Lines'), height=400)
m
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter
KeplerGl(data={'data': route_id route_name dir_id segment_id window speed_kmh \
0 …
# Segment frequencies
import keplergl as kp
m = kp.KeplerGl(data=dict(data=seg_freq, name='Segment frequency'), height=400)
m
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter
KeplerGl(data={'data': route_id route_name dir_id segment_id window \
23191 ALL_LIN…
# Line frequencies
condition_dir = line_freq.dir_id == 'Inbound'
condition_window = line_freq.window == '6:00-9:00'
gdf = line_freq.loc[(condition_dir & condition_window),:].reset_index()
gtfs.map_gdf(gdf = gdf,
variable = 'ntrips',
colors = ["#d13870", "#e895b3" ,'#55d992', '#3ab071', '#0e8955','#066a40'],
tooltip_var = ['route_name'] ,
tooltip_labels = ['Route: '],
breaks = [5, 10, 20, 50])
# Stops
condition_dir = stop_freq.dir_id == 'Inbound'
condition_window = stop_freq.window == '6:00-9:00'
gdf = stop_freq.loc[(condition_dir & condition_window),:].reset_index()
gtfs.map_gdf(gdf = gdf,
variable = 'ntrips',
colors = ["#d13870", "#e895b3" ,'#55d992', '#3ab071', '#0e8955','#066a40'],
tooltip_var = ['frequency'] ,
tooltip_labels = ['Frequency: '],
breaks = [10, 20, 30, 40, 120, 200])
Save files
file_name = 'stop_frequencies'
gtfs.save_gdf(stop_frequencies_gdf, file_name, shapefile=True, geojson=True)
Plotly
# Histogram
import plotly.express as px
px.histogram(
stop_freq.loc[stop_freq.frequency<50],
x='frequency',
title='Stop frequencies',
template='simple_white',
nbins =20)
<div id="7ad7f520-99f8-484f-bb27-bf46735cfdba" class="plotly-graph-div" style="height:525px; width:100%;"></div>
<script type="text/javascript">
require(["plotly"], function(Plotly) {
window.PLOTLYENV=window.PLOTLYENV || {};
if (document.getElementById("7ad7f520-99f8-484f-bb27-bf46735cfdba")) {
Plotly.newPlot(
'7ad7f520-99f8-484f-bb27-bf46735cfdba',
[{"alignmentgroup": "True", "bingroup": "x", "hoverlabel": {"namelength": 0}, "hovertemplate": "frequency=%{x}<br>count=%{y}", "legendgroup": "", "marker": {"color": "#1F77B4"}, "name": "", "nbinsx": 20, "offsetgroup": "", "orientation": "v", "showlegend": false, "type": "histogram", "x": [45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], "xaxis": "x", "yaxis": "y"}],
{"barmode": "relative", "legend": {"tracegroupgap": 0}, "template": {"data": {"bar": [{"error_x": {"color": "rgb(36,36,36)"}, "error_y": {"color": "rgb(36,36,36)"}, "marker": {"line": {"color": "white", "width": 0.5}}, "type": "bar"}], "barpolar": [{"marker": {"line": {"color": "white", "width": 0.5}}, "type": "barpolar"}], "carpet": [{"aaxis": {"endlinecolor": "rgb(36,36,36)", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "rgb(36,36,36)"}, "baxis": {"endlinecolor": "rgb(36,36,36)", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "rgb(36,36,36)"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "type": "choropleth"}], "contour": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "contour"}], "contourcarpet": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "type": "contourcarpet"}], "heatmap": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "heatmap"}], "heatmapgl": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "heatmapgl"}], "histogram": [{"marker": {"line": {"color": "white", "width": 0.6}}, "type": "histogram"}], "histogram2d": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "histogram2d"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "histogram2dcontour"}], "mesh3d": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "parcoords"}], "pie": [{"automargin": true, "type": "pie"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatter"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scattermapbox"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatterpolar"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatterpolargl"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "rgb(237,237,237)"}, "line": {"color": "white"}}, "header": {"fill": {"color": "rgb(217,217,217)"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowhead": 0, "arrowwidth": 1}, "coloraxis": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "colorscale": {"diverging": [[0.0, "rgb(103,0,31)"], [0.1, "rgb(178,24,43)"], [0.2, "rgb(214,96,77)"], [0.3, "rgb(244,165,130)"], [0.4, "rgb(253,219,199)"], [0.5, "rgb(247,247,247)"], [0.6, "rgb(209,229,240)"], [0.7, "rgb(146,197,222)"], [0.8, "rgb(67,147,195)"], [0.9, "rgb(33,102,172)"], [1.0, "rgb(5,48,97)"]], "sequential": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "sequentialminus": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]]}, "colorway": ["#1F77B4", "#FF7F0E", "#2CA02C", "#D62728", "#9467BD", "#8C564B", "#E377C2", "#7F7F7F", "#BCBD22", "#17BECF"], "font": {"color": "rgb(36,36,36)"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "white", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "white", "polar": {"angularaxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}, "bgcolor": "white", "radialaxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}}, "scene": {"xaxis": {"backgroundcolor": "white", "gridcolor": "rgb(232,232,232)", "gridwidth": 2, "linecolor": "rgb(36,36,36)", "showbackground": true, "showgrid": false, "showline": true, "ticks": "outside", "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}, "yaxis": {"backgroundcolor": "white", "gridcolor": "rgb(232,232,232)", "gridwidth": 2, "linecolor": "rgb(36,36,36)", "showbackground": true, "showgrid": false, "showline": true, "ticks": "outside", "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}, "zaxis": {"backgroundcolor": "white", "gridcolor": "rgb(232,232,232)", "gridwidth": 2, "linecolor": "rgb(36,36,36)", "showbackground": true, "showgrid": false, "showline": true, "ticks": "outside", "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}}, "shapedefaults": {"fillcolor": "black", "line": {"width": 0}, "opacity": 0.3}, "ternary": {"aaxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}, "baxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}, "bgcolor": "white", "caxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside", "title": {"standoff": 15}, "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}, "yaxis": {"automargin": true, "gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside", "title": {"standoff": 15}, "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}}}, "title": {"text": "Stop frequencies"}, "xaxis": {"anchor": "y", "domain": [0.0, 1.0], "title": {"text": "frequency"}}, "yaxis": {"anchor": "x", "domain": [0.0, 1.0], "title": {"text": "count"}}},
{"responsive": true}
).then(function(){
var gd = document.getElementById('7ad7f520-99f8-484f-bb27-bf46735cfdba'); var x = new MutationObserver(function (mutations, observer) {{ var display = window.getComputedStyle(gd).display; if (!display || display === 'none') {{ console.log([gd, 'removed!']); Plotly.purge(gd); observer.disconnect(); }} }});
// Listen for the removal of the full notebook cells var notebookContainer = gd.closest('#notebook-container'); if (notebookContainer) {{ x.observe(notebookContainer, {childList: true}); }}
// Listen for the clearing of the current output cell var outputEl = gd.closest('.output'); if (outputEl) {{ x.observe(outputEl, {childList: true}); }}
})
};
});
</script>
</div>
by_hour = speeds.pivot_table('speed_kmh', index = ['window'], aggfunc = ['mean','std'] ).reset_index()
by_hour.columns = ['_'.join(col).strip() for col in by_hour.columns.values]
by_hour['hour'] = by_hour.window_.apply(lambda x: int(x.split(':')[0]))
by_hour.sort_values(by='hour', ascending=True, inplace=True)
# Scatter
fig = px.line(by_hour,
x='window_',
y='mean_speed_kmh',
template='simple_white',
#error_y = 'std_speed_kmh'
)
fig.update_yaxes(rangemode='tozero')
fig.show()
<div id="9818e64d-d27b-4995-a64f-b2199fcbb7f9" class="plotly-graph-div" style="height:525px; width:100%;"></div>
<script type="text/javascript">
require(["plotly"], function(Plotly) {
window.PLOTLYENV=window.PLOTLYENV || {};
if (document.getElementById("9818e64d-d27b-4995-a64f-b2199fcbb7f9")) {
Plotly.newPlot(
'9818e64d-d27b-4995-a64f-b2199fcbb7f9',
[{"hoverlabel": {"namelength": 0}, "hovertemplate": "window_=%{x}<br>mean_speed_kmh=%{y}", "legendgroup": "", "line": {"color": "#1F77B4", "dash": "solid"}, "mode": "lines", "name": "", "showlegend": false, "type": "scatter", "x": ["0:00-6:00", "6:00-9:00", "9:00-15:00", "15:00-19:00", "19:00-22:00", "22:00-24:00"], "xaxis": "x", "y": [19.239002079002077, 16.70880335365849, 15.150495458298863, 14.857848179386913, 16.700436227669304, 19.038402270884035], "yaxis": "y"}],
{"legend": {"tracegroupgap": 0}, "margin": {"t": 60}, "template": {"data": {"bar": [{"error_x": {"color": "rgb(36,36,36)"}, "error_y": {"color": "rgb(36,36,36)"}, "marker": {"line": {"color": "white", "width": 0.5}}, "type": "bar"}], "barpolar": [{"marker": {"line": {"color": "white", "width": 0.5}}, "type": "barpolar"}], "carpet": [{"aaxis": {"endlinecolor": "rgb(36,36,36)", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "rgb(36,36,36)"}, "baxis": {"endlinecolor": "rgb(36,36,36)", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "rgb(36,36,36)"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "type": "choropleth"}], "contour": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "contour"}], "contourcarpet": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "type": "contourcarpet"}], "heatmap": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "heatmap"}], "heatmapgl": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "heatmapgl"}], "histogram": [{"marker": {"line": {"color": "white", "width": 0.6}}, "type": "histogram"}], "histogram2d": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "histogram2d"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "histogram2dcontour"}], "mesh3d": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "parcoords"}], "pie": [{"automargin": true, "type": "pie"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatter"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scattermapbox"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatterpolar"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatterpolargl"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "rgb(237,237,237)"}, "line": {"color": "white"}}, "header": {"fill": {"color": "rgb(217,217,217)"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowhead": 0, "arrowwidth": 1}, "coloraxis": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "colorscale": {"diverging": [[0.0, "rgb(103,0,31)"], [0.1, "rgb(178,24,43)"], [0.2, "rgb(214,96,77)"], [0.3, "rgb(244,165,130)"], [0.4, "rgb(253,219,199)"], [0.5, "rgb(247,247,247)"], [0.6, "rgb(209,229,240)"], [0.7, "rgb(146,197,222)"], [0.8, "rgb(67,147,195)"], [0.9, "rgb(33,102,172)"], [1.0, "rgb(5,48,97)"]], "sequential": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "sequentialminus": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]]}, "colorway": ["#1F77B4", "#FF7F0E", "#2CA02C", "#D62728", "#9467BD", "#8C564B", "#E377C2", "#7F7F7F", "#BCBD22", "#17BECF"], "font": {"color": "rgb(36,36,36)"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "white", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "white", "polar": {"angularaxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}, "bgcolor": "white", "radialaxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}}, "scene": {"xaxis": {"backgroundcolor": "white", "gridcolor": "rgb(232,232,232)", "gridwidth": 2, "linecolor": "rgb(36,36,36)", "showbackground": true, "showgrid": false, "showline": true, "ticks": "outside", "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}, "yaxis": {"backgroundcolor": "white", "gridcolor": "rgb(232,232,232)", "gridwidth": 2, "linecolor": "rgb(36,36,36)", "showbackground": true, "showgrid": false, "showline": true, "ticks": "outside", "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}, "zaxis": {"backgroundcolor": "white", "gridcolor": "rgb(232,232,232)", "gridwidth": 2, "linecolor": "rgb(36,36,36)", "showbackground": true, "showgrid": false, "showline": true, "ticks": "outside", "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}}, "shapedefaults": {"fillcolor": "black", "line": {"width": 0}, "opacity": 0.3}, "ternary": {"aaxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}, "baxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}, "bgcolor": "white", "caxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside", "title": {"standoff": 15}, "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}, "yaxis": {"automargin": true, "gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside", "title": {"standoff": 15}, "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}}}, "xaxis": {"anchor": "y", "domain": [0.0, 1.0], "title": {"text": "window_"}}, "yaxis": {"anchor": "x", "domain": [0.0, 1.0], "rangemode": "tozero", "title": {"text": "mean_speed_kmh"}}},
{"responsive": true}
).then(function(){
var gd = document.getElementById('9818e64d-d27b-4995-a64f-b2199fcbb7f9'); var x = new MutationObserver(function (mutations, observer) {{ var display = window.getComputedStyle(gd).display; if (!display || display === 'none') {{ console.log([gd, 'removed!']); Plotly.purge(gd); observer.disconnect(); }} }});
// Listen for the removal of the full notebook cells var notebookContainer = gd.closest('#notebook-container'); if (notebookContainer) {{ x.observe(notebookContainer, {childList: true}); }}
// Listen for the clearing of the current output cell var outputEl = gd.closest('.output'); if (outputEl) {{ x.observe(outputEl, {childList: true}); }}
})
};
});
</script>
</div>
# Heatmap
import plotly.graph_objects as go
dir_0 = speeds.loc[(speeds.dir_id=='Inbound')&(speeds.route_name=='1 CALIFORNIA')].sort_values(by='stop_seq')
dir_0['hour'] = dir_0.window.apply(lambda x: int(x.split(':')[0]))
dir_0.sort_values(by='hour', ascending=True, inplace=True)
fig = go.Figure(data=go.Heatmap(
z=dir_0.speed_kmh,
y=dir_0.s_st_name,
x=dir_0.window,
hoverongaps = False,
colorscale=px.colors.colorbrewer.RdYlBu,
reversescale=False
))
fig.update_yaxes(title_text='Stop', autorange='reversed')
fig.update_xaxes(title_text='Hour of day', side='top')
fig.update_layout(showlegend=False, height=600, width=1000,
title='Speed heatmap per direction and hour of the day')
fig.show()
<div id="da918f34-791a-4a6f-ba01-187f4825d17b" class="plotly-graph-div" style="height:600px; width:1000px;"></div>
<script type="text/javascript">
require(["plotly"], function(Plotly) {
window.PLOTLYENV=window.PLOTLYENV || {};
if (document.getElementById("da918f34-791a-4a6f-ba01-187f4825d17b")) {
Plotly.newPlot(
'da918f34-791a-4a6f-ba01-187f4825d17b',
[{"colorscale": [[0.0, "rgb(165,0,38)"], [0.1, "rgb(215,48,39)"], [0.2, "rgb(244,109,67)"], [0.3, "rgb(253,174,97)"], [0.4, "rgb(254,224,144)"], [0.5, "rgb(255,255,191)"], [0.6, "rgb(224,243,248)"], [0.7, "rgb(171,217,233)"], [0.8, "rgb(116,173,209)"], [0.9, "rgb(69,117,180)"], [1.0, "rgb(49,54,149)"]], "hoverongaps": false, "reversescale": false, "type": "heatmap", "x": ["4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "4:00-5:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "5:00-6:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "6:00-7:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "7:00-8:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "8:00-9:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "9:00-10:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "10:00-11:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "11:00-12:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "12:00-13:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "13:00-14:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "14:00-15:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "15:00-16:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "16:00-17:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "17:00-18:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "18:00-19:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "19:00-20:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "20:00-21:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "21:00-22:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00", "22:00-23:00"], "y": ["California St & Spruce St", "California St & 25th Ave", "California St & Arguello Blvd", "California St & 28th Ave", "California St & 30th Ave", "California St & 22nd Ave", "California St & 19th Ave", "California St & 10th Ave", "32nd Ave & California St", "California St & 16th Ave", "California St & 4th Ave", "California St & 8th St", "California St & Presidio Ave", "California St & 12th Ave", "California St & 6th Ave", "32nd Ave & Clement St", "California St & Laurel St", "California St & Park Presidio Blvd", "California St & Cherry St", "California St & Presidio Ave", "32nd Ave & Geary Blvd", "California St & Park Presidio Blvd", "California St & Divisadero St", "California St & Laurel St", "California St & Baker St", "Sacramento St & Battery St", "California St & Baker St", "California St & 22nd Ave", "California St & 6th Ave", "Sacramento St & Stockton St", "California St & Presidio Ave", "California St & Presidio Ave", "California St & 19th Ave", "California St & 12th Ave", "Sacramento St & Jones St", "California St & Cherry St", "California St & 16th Ave", "Sacramento St & Sansome St", "Sacramento St & Powell St", "Sacramento St & Sproule Ln", "California St & 25th Ave", "Sacramento St & Larkin St", "California St & Arguello Blvd", "Sacramento St & Polk St", "California St & 8th St", "32nd Ave & Geary Blvd", "Sacramento St & Van Ness Ave", "Sacramento St & Kearny St", "Sacramento St & Franklin St", "32nd Ave & Clement St", "Clay St & Drumm St", "Sacramento St & Hyde St", "Sacramento St & Gough St", "Sacramento St & Octavia St", "Sacramento St & Davis St", "California St & 10th Ave", "California St & Pierce St", "32nd Ave & California St", "Sacramento St & Buchanan St", "California St & Spruce St", "Steiner St & California St", "Sacramento St & Fillmore St", "Sacramento St & Montgomery St", "Sacramento St & Laguna St", "California St & 28th Ave", "Sacramento St & Webster St", "California St & 4th Ave", "California St & 30th Ave", "Sacramento St & Leavenworth St", "Sacramento St & Grant Ave", "California St & Cherry St", "Sacramento St & Grant Ave", "California St & Arguello Blvd", "Sacramento St & Larkin St", "California St & 4th Ave", "California St & Baker St", "Sacramento St & Stockton St", "Sacramento St & Polk St", "Sacramento St & Van Ness Ave", "Sacramento St & Franklin St", "Sacramento St & Gough St", "Sacramento St & Hyde St", "Sacramento St & Octavia St", "Sacramento St & Laguna St", "Sacramento St & Buchanan St", "Sacramento St & Webster St", "California St & Spruce St", "Sacramento St & Fillmore St", "Steiner St & California St", "Sacramento St & Jones St", "California St & Pierce St", "California St & Baker St", "Sacramento St & Sproule Ln", "Sacramento St & Powell St", "California St & Presidio Ave", "California St & Presidio Ave", "California St & Laurel St", "Sacramento St & Leavenworth St", "Sacramento St & Kearny St", "California St & Divisadero St", "California St & 25th Ave", "Clay St & Drumm St", "Sacramento St & Battery St", "32nd Ave & Clement St", "Sacramento St & Montgomery St", "Sacramento St & Davis St", "California St & 12th Ave", "California St & 22nd Ave", "California St & 30th Ave", "California St & 16th Ave", "California St & 19th Ave", "California St & 10th Ave", "32nd Ave & Geary Blvd", "California St & Park Presidio Blvd", "Sacramento St & Sansome St", "California St & 28th Ave", "32nd Ave & California St", "California St & 8th St", "California St & 6th Ave", "Sacramento St & Powell St", "California St & Presidio Ave", "California St & 16th Ave", "32nd Ave & California St", "California St & 19th Ave", "Sacramento St & Buchanan St", "Sacramento St & Laguna St", "California St & Presidio Ave", "California St & 30th Ave", "California St & Baker St", "California St & Baker St", "Sacramento St & Davis St", "Sacramento St & Battery St", "California St & 22nd Ave", "Sacramento St & Leavenworth St", "California St & 28th Ave", "Sacramento St & Sproule Ln", "California St & Divisadero St", "Sacramento St & Fillmore St", "Steiner St & California St", "California St & 25th Ave", "California St & Pierce St", "Sacramento St & Jones St", "Sacramento St & Webster St", "California St & Laurel St", "California St & Cherry St", "Sacramento St & Hyde St", "Sacramento St & Larkin St", "California St & Arguello Blvd", "California St & 10th Ave", "California St & 12th Ave", "Sacramento St & Octavia St", "Sacramento St & Van Ness Ave", "Sacramento St & Grant Ave", "California St & 4th Ave", "Sacramento St & Franklin St", "Sacramento St & Stockton St", "Sacramento St & Gough St", "32nd Ave & Clement St", "Clay St & Drumm St", "California St & 6th Ave", "Sacramento St & Montgomery St", "California St & Spruce St", "California St & Park Presidio Blvd", "32nd Ave & Geary Blvd", "California St & 8th St", "Sacramento St & Polk St", "Sacramento St & Sansome St", "Sacramento St & Kearny St", "Sacramento St & Davis St", "32nd Ave & Geary Blvd", "Sacramento St & Polk St", "California St & 28th Ave", "Sacramento St & Fillmore St", "Sacramento St & Laguna St", "Sacramento St & Larkin St", "Sacramento St & Leavenworth St", "California St & 30th Ave", "Sacramento St & Franklin St", "Sacramento St & Buchanan St", "Sacramento St & Gough St", "Clay St & Drumm St", "Sacramento St & Octavia St", "Sacramento St & Hyde St", "32nd Ave & Clement St", "32nd Ave & California St", "Steiner St & California St", "Sacramento St & Van Ness Ave", "Sacramento St & Webster St", "Sacramento St & Kearny St", "California St & 25th Ave", "California St & Spruce St", "California St & Park Presidio Blvd", "Sacramento St & Sansome St", "Sacramento St & Stockton St", "California St & Laurel St", "California St & 16th Ave", "Sacramento St & Powell St", "California St & Presidio Ave", "California St & 12th Ave", "California St & Presidio Ave", "California St & Arguello Blvd", "California St & 19th Ave", "Sacramento St & Montgomery St", "Sacramento St & Grant Ave", "California St & Cherry St", "Sacramento St & Battery St", "Sacramento St & Sproule Ln", "California St & Pierce St", "California St & 4th Ave", "California St & 10th Ave", "California St & Baker St", "California St & Baker St", "California St & 8th St", "Sacramento St & Jones St", "California St & 22nd Ave", "California St & 6th Ave", "California St & Divisadero St", "California St & 4th Ave", "California St & 6th Ave", "Sacramento St & Polk St", "Sacramento St & Franklin St", "California St & 8th St", "California St & 12th Ave", "California St & Cherry St", "California St & Arguello Blvd", "California St & 10th Ave", "32nd Ave & Clement St", "Sacramento St & Van Ness Ave", "California St & Laurel St", "California St & Spruce St", "California St & 28th Ave", "California St & Pierce St", "California St & Divisadero St", "California St & Baker St", "Sacramento St & Fillmore St", "California St & Baker St", "California St & 22nd Ave", "California St & Presidio Ave", "California St & 30th Ave", "Sacramento St & Webster St", "California St & Presidio Ave", "Sacramento St & Buchanan St", "California St & 19th Ave", "Sacramento St & Laguna St", "32nd Ave & California St", "Sacramento St & Octavia St", "Steiner St & California St", "California St & 16th Ave", "Sacramento St & Gough St", "California St & Park Presidio Blvd", "California St & 25th Ave", "32nd Ave & Geary Blvd", "Sacramento St & Stockton St", "Sacramento St & Sansome St", "Sacramento St & Hyde St", "Sacramento St & Powell St", "Sacramento St & Battery St", "Sacramento St & Jones St", "Sacramento St & Sproule Ln", "Sacramento St & Davis St", "Sacramento St & Kearny St", "Sacramento St & Larkin St", "Clay St & Drumm St", "Sacramento St & Grant Ave", "Sacramento St & Leavenworth St", "Sacramento St & Montgomery St", "California St & Presidio Ave", "California St & Presidio Ave", "Sacramento St & Powell St", "California St & Laurel St", "California St & Baker St", "Sacramento St & Stockton St", "Sacramento St & Larkin St", "Sacramento St & Sproule Ln", "California St & Spruce St", "California St & Pierce St", "Steiner St & California St", "Sacramento St & Jones St", "Sacramento St & Fillmore St", "Sacramento St & Webster St", "Sacramento St & Buchanan St", "Sacramento St & Leavenworth St", "Sacramento St & Laguna St", "California St & Baker St", "California St & Divisadero St", "California St & 4th Ave", "California St & Arguello Blvd", "32nd Ave & Geary Blvd", "32nd Ave & Clement St", "32nd Ave & California St", "California St & 30th Ave", "Sacramento St & Davis St", "California St & 28th Ave", "California St & 25th Ave", "Sacramento St & Battery St", "California St & 22nd Ave", "California St & 19th Ave", "California St & 16th Ave", "Sacramento St & Sansome St", "California St & Park Presidio Blvd", "Sacramento St & Montgomery St", "California St & 12th Ave", "California St & 10th Ave", "California St & 8th St", "Sacramento St & Kearny St", "California St & 6th Ave", "Sacramento St & Grant Ave", "Sacramento St & Octavia St", "California St & Cherry St", "Sacramento St & Gough St", "Clay St & Drumm St", "Sacramento St & Polk St", "Sacramento St & Van Ness Ave", "Sacramento St & Franklin St", "Sacramento St & Hyde St", "California St & 19th Ave", "Sacramento St & Grant Ave", "Steiner St & California St", "Sacramento St & Van Ness Ave", "Sacramento St & Franklin St", "California St & Arguello Blvd", "Sacramento St & Fillmore St", "Sacramento St & Jones St", "Sacramento St & Battery St", "California St & 30th Ave", "California St & 6th Ave", "Sacramento St & Davis St", "Sacramento St & Webster St", "32nd Ave & California St", "Sacramento St & Polk St", "Sacramento St & Leavenworth St", "California St & 28th Ave", "California St & Pierce St", "California St & 25th Ave", "California St & Divisadero St", "California St & Spruce St", "California St & Laurel St", "California St & 12th Ave", "Sacramento St & Montgomery St", "Sacramento St & Kearny St", "California St & Park Presidio Blvd", "California St & Presidio Ave", "Sacramento St & Sansome St", "Sacramento St & Buchanan St", "Sacramento St & Powell St", "California St & 16th Ave", "California St & Baker St", "California St & Baker St", "California St & 8th St", "California St & Cherry St", "Sacramento St & Sproule Ln", "California St & 22nd Ave", "Sacramento St & Stockton St", "California St & Presidio Ave", "Clay St & Drumm St", "California St & 10th Ave", "32nd Ave & Geary Blvd", "Sacramento St & Octavia St", "Sacramento St & Hyde St", "Sacramento St & Gough St", "California St & 4th Ave", "32nd Ave & Clement St", "Sacramento St & Laguna St", "Sacramento St & Larkin St", "Sacramento St & Laguna St", "California St & Park Presidio Blvd", "Sacramento St & Kearny St", "Sacramento St & Hyde St", "Sacramento St & Octavia St", "California St & 4th Ave", "Sacramento St & Fillmore St", "Sacramento St & Jones St", "California St & 12th Ave", "California St & 28th Ave", "California St & Presidio Ave", "Steiner St & California St", "Sacramento St & Battery St", "California St & Pierce St", "Clay St & Drumm St", "Sacramento St & Sansome St", "32nd Ave & Geary Blvd", "California St & Baker St", "California St & Baker St", "Sacramento St & Stockton St", "California St & 22nd Ave", "California St & Divisadero St", "Sacramento St & Sproule Ln", "California St & 8th St", "Sacramento St & Van Ness Ave", "California St & Arguello Blvd", "Sacramento St & Gough St", "California St & 25th Ave", "California St & 16th Ave", "Sacramento St & Powell St", "California St & Cherry St", "Sacramento St & Grant Ave", "California St & 19th Ave", "Sacramento St & Leavenworth St", "32nd Ave & Clement St", "California St & Laurel St", "California St & Spruce St", "California St & 30th Ave", "Sacramento St & Webster St", "Sacramento St & Davis St", "Sacramento St & Franklin St", "Sacramento St & Polk St", "Sacramento St & Montgomery St", "Sacramento St & Buchanan St", "Sacramento St & Larkin St", "California St & Presidio Ave", "California St & 6th Ave", "32nd Ave & California St", "California St & 10th Ave", "Sacramento St & Sansome St", "California St & Presidio Ave", "California St & 25th Ave", "California St & Pierce St", "Sacramento St & Buchanan St", "Sacramento St & Davis St", "California St & Baker St", "Sacramento St & Leavenworth St", "32nd Ave & Geary Blvd", "California St & 19th Ave", "California St & 22nd Ave", "California St & 10th Ave", "Sacramento St & Battery St", "California St & 8th St", "Sacramento St & Stockton St", "Sacramento St & Laguna St", "Sacramento St & Grant Ave", "California St & Spruce St", "32nd Ave & California St", "California St & Baker St", "California St & Arguello Blvd", "Steiner St & California St", "California St & Laurel St", "Sacramento St & Webster St", "Sacramento St & Fillmore St", "California St & 30th Ave", "Sacramento St & Franklin St", "Sacramento St & Montgomery St", "Sacramento St & Jones St", "Sacramento St & Polk St", "California St & Cherry St", "California St & 12th Ave", "Sacramento St & Hyde St", "California St & 4th Ave", "Sacramento St & Powell St", "Sacramento St & Octavia St", "California St & Divisadero St", "Sacramento St & Sproule Ln", "32nd Ave & Clement St", "California St & 28th Ave", "Sacramento St & Gough St", "Sacramento St & Kearny St", "California St & Presidio Ave", "Sacramento St & Van Ness Ave", "Clay St & Drumm St", "California St & Park Presidio Blvd", "California St & 16th Ave", "California St & 6th Ave", "Sacramento St & Larkin St", "California St & 4th Ave", "California St & 19th Ave", "Sacramento St & Hyde St", "Sacramento St & Sansome St", "California St & Spruce St", "Sacramento St & Montgomery St", "California St & 16th Ave", "California St & Presidio Ave", "California St & Presidio Ave", "California St & 10th Ave", "California St & Park Presidio Blvd", "Sacramento St & Stockton St", "California St & 8th St", "California St & 12th Ave", "California St & Laurel St", "Sacramento St & Powell St", "Sacramento St & Sproule Ln", "Sacramento St & Larkin St", "32nd Ave & Geary Blvd", "California St & 30th Ave", "Steiner St & California St", "California St & 28th Ave", "Sacramento St & Leavenworth St", "Sacramento St & Octavia St", "Sacramento St & Davis St", "Sacramento St & Buchanan St", "California St & Arguello Blvd", "California St & 6th Ave", "Sacramento St & Polk St", "California St & Divisadero St", "California St & Pierce St", "Sacramento St & Grant Ave", "Sacramento St & Laguna St", "Sacramento St & Van Ness Ave", "Sacramento St & Fillmore St", "32nd Ave & Clement St", "California St & 22nd Ave", "Clay St & Drumm St", "California St & Baker St", "32nd Ave & California St", "Sacramento St & Gough St", "Sacramento St & Battery St", "Sacramento St & Webster St", "California St & Cherry St", "Sacramento St & Kearny St", "Sacramento St & Jones St", "California St & Baker St", "California St & 25th Ave", "Sacramento St & Franklin St", "California St & 19th Ave", "32nd Ave & Clement St", "Sacramento St & Fillmore St", "California St & Arguello Blvd", "California St & 12th Ave", "Sacramento St & Webster St", "California St & 30th Ave", "Sacramento St & Gough St", "Sacramento St & Laguna St", "California St & Laurel St", "Sacramento St & Buchanan St", "Sacramento St & Grant Ave", "Sacramento St & Van Ness Ave", "Clay St & Drumm St", "Sacramento St & Leavenworth St", "California St & 4th Ave", "32nd Ave & California St", "California St & 10th Ave", "Sacramento St & Montgomery St", "Sacramento St & Kearny St", "California St & 6th Ave", "California St & Spruce St", "California St & Baker St", "Sacramento St & Sproule Ln", "Sacramento St & Sansome St", "California St & Baker St", "California St & Cherry St", "Sacramento St & Polk St", "32nd Ave & Geary Blvd", "Sacramento St & Hyde St", "California St & 16th Ave", "California St & 22nd Ave", "California St & Divisadero St", "Sacramento St & Franklin St", "Sacramento St & Octavia St", "California St & Presidio Ave", "California St & Presidio Ave", "Sacramento St & Battery St", "Sacramento St & Powell St", "California St & 8th St", "Sacramento St & Stockton St", "Sacramento St & Larkin St", "California St & Park Presidio Blvd", "Sacramento St & Davis St", "California St & Pierce St", "Steiner St & California St", "California St & 25th Ave", "Sacramento St & Jones St", "California St & 28th Ave", "California St & Cherry St", "Sacramento St & Stockton St", "Sacramento St & Van Ness Ave", "California St & Arguello Blvd", "California St & 8th St", "California St & Spruce St", "Sacramento St & Grant Ave", "Sacramento St & Kearny St", "California St & 6th Ave", "California St & 4th Ave", "Sacramento St & Polk St", "California St & 22nd Ave", "32nd Ave & Clement St", "California St & Divisadero St", "Sacramento St & Sproule Ln", "Sacramento St & Leavenworth St", "Sacramento St & Battery St", "Sacramento St & Larkin St", "California St & Pierce St", "California St & 30th Ave", "California St & 25th Ave", "Sacramento St & Jones St", "Steiner St & California St", "Sacramento St & Davis St", "California St & 28th Ave", "Sacramento St & Buchanan St", "32nd Ave & California St", "Sacramento St & Fillmore St", "Sacramento St & Webster St", "Sacramento St & Laguna St", "Sacramento St & Sansome St", "Sacramento St & Gough St", "Sacramento St & Franklin St", "California St & 10th Ave", "California St & Laurel St", "Clay St & Drumm St", "Sacramento St & Powell St", "California St & 12th Ave", "Sacramento St & Montgomery St", "California St & Presidio Ave", "32nd Ave & Geary Blvd", "California St & Presidio Ave", "Sacramento St & Hyde St", "California St & Baker St", "California St & Baker St", "California St & 16th Ave", "Sacramento St & Octavia St", "California St & 19th Ave", "California St & Park Presidio Blvd", "Clay St & Drumm St", "California St & 6th Ave", "32nd Ave & California St", "Sacramento St & Polk St", "32nd Ave & Clement St", "32nd Ave & Geary Blvd", "California St & 10th Ave", "California St & 30th Ave", "California St & 28th Ave", "California St & 25th Ave", "California St & 8th St", "Sacramento St & Battery St", "California St & 22nd Ave", "Sacramento St & Larkin St", "Sacramento St & Kearny St", "California St & 19th Ave", "Sacramento St & Sansome St", "California St & 16th Ave", "California St & Park Presidio Blvd", "California St & 12th Ave", "Sacramento St & Montgomery St", "Sacramento St & Davis St", "Sacramento St & Hyde St", "Sacramento St & Stockton St", "Sacramento St & Van Ness Ave", "California St & Spruce St", "Sacramento St & Sproule Ln", "California St & Cherry St", "Sacramento St & Franklin St", "Sacramento St & Powell St", "Sacramento St & Octavia St", "California St & Laurel St", "Sacramento St & Laguna St", "California St & Presidio Ave", "California St & Divisadero St", "California St & Pierce St", "Sacramento St & Webster St", "Sacramento St & Leavenworth St", "Sacramento St & Buchanan St", "California St & Arguello Blvd", "Sacramento St & Fillmore St", "California St & Baker St", "California St & Baker St", "Steiner St & California St", "California St & Presidio Ave", "Sacramento St & Grant Ave", "Sacramento St & Gough St", "California St & 4th Ave", "Sacramento St & Jones St", "Sacramento St & Larkin St", "California St & Presidio Ave", "Sacramento St & Powell St", "32nd Ave & California St", "Sacramento St & Battery St", "Sacramento St & Sansome St", "Sacramento St & Montgomery St", "California St & 10th Ave", "Sacramento St & Stockton St", "California St & 19th Ave", "California St & Baker St", "California St & 16th Ave", "California St & 12th Ave", "Sacramento St & Hyde St", "California St & Laurel St", "Sacramento St & Webster St", "Sacramento St & Laguna St", "California St & Baker St", "California St & Divisadero St", "California St & Spruce St", "32nd Ave & Clement St", "California St & 4th Ave", "Sacramento St & Grant Ave", "California St & 28th Ave", "Sacramento St & Buchanan St", "Steiner St & California St", "Sacramento St & Leavenworth St", "Sacramento St & Franklin St", "Sacramento St & Fillmore St", "Sacramento St & Jones St", "Sacramento St & Polk St", "California St & 25th Ave", "California St & 6th Ave", "California St & Arguello Blvd", "Sacramento St & Kearny St", "Clay St & Drumm St", "Sacramento St & Davis St", "Sacramento St & Van Ness Ave", "California St & 30th Ave", "California St & Pierce St", "California St & 22nd Ave", "Sacramento St & Octavia St", "California St & Cherry St", "32nd Ave & Geary Blvd", "California St & Park Presidio Blvd", "Sacramento St & Sproule Ln", "California St & 8th St", "Sacramento St & Gough St", "California St & Presidio Ave", "Sacramento St & Buchanan St", "Sacramento St & Sproule Ln", "California St & 16th Ave", "32nd Ave & California St", "Sacramento St & Sansome St", "Steiner St & California St", "Sacramento St & Fillmore St", "California St & Pierce St", "California St & 25th Ave", "Sacramento St & Battery St", "Sacramento St & Davis St", "California St & 22nd Ave", "California St & Divisadero St", "California St & 30th Ave", "Sacramento St & Franklin St", "Sacramento St & Webster St", "California St & 4th Ave", "Sacramento St & Leavenworth St", "California St & Baker St", "California St & 19th Ave", "California St & Baker St", "Sacramento St & Polk St", "Sacramento St & Jones St", "Sacramento St & Laguna St", "Sacramento St & Octavia St", "Sacramento St & Stockton St", "Sacramento St & Powell St", "California St & Spruce St", "California St & 10th Ave", "California St & Cherry St", "California St & 8th St", "Sacramento St & Montgomery St", "California St & Laurel St", "Sacramento St & Van Ness Ave", "32nd Ave & Geary Blvd", "California St & Arguello Blvd", "California St & Presidio Ave", "California St & Presidio Ave", "Sacramento St & Gough St", "Clay St & Drumm St", "Sacramento St & Larkin St", "California St & 28th Ave", "Sacramento St & Grant Ave", "California St & 6th Ave", "Sacramento St & Kearny St", "California St & Park Presidio Blvd", "California St & 12th Ave", "Sacramento St & Hyde St", "32nd Ave & Clement St", "California St & Pierce St", "California St & 8th St", "California St & Cherry St", "Sacramento St & Franklin St", "Sacramento St & Battery St", "Sacramento St & Octavia St", "Sacramento St & Van Ness Ave", "California St & Divisadero St", "Sacramento St & Fillmore St", "California St & 28th Ave", "Steiner St & California St", "Sacramento St & Gough St", "Sacramento St & Larkin St", "Sacramento St & Kearny St", "California St & 25th Ave", "Sacramento St & Grant Ave", "California St & 6th Ave", "Sacramento St & Webster St", "Sacramento St & Jones St", "32nd Ave & Geary Blvd", "California St & 30th Ave", "California St & Arguello Blvd", "Sacramento St & Davis St", "California St & 4th Ave", "Sacramento St & Sproule Ln", "California St & 12th Ave", "California St & Presidio Ave", "California St & 16th Ave", "California St & Presidio Ave", "Sacramento St & Montgomery St", "Sacramento St & Hyde St", "California St & 10th Ave", "32nd Ave & Clement St", "32nd Ave & California St", "Sacramento St & Sansome St", "Sacramento St & Powell St", "California St & Baker St", "Sacramento St & Polk St", "California St & 19th Ave", "Sacramento St & Leavenworth St", "Sacramento St & Laguna St", "California St & Park Presidio Blvd", "California St & Laurel St", "Sacramento St & Stockton St", "California St & 22nd Ave", "Sacramento St & Buchanan St", "Clay St & Drumm St", "California St & Spruce St", "California St & Baker St", "Clay St & Drumm St", "California St & 28th Ave", "Sacramento St & Gough St", "Sacramento St & Octavia St", "32nd Ave & Geary Blvd", "Sacramento St & Buchanan St", "32nd Ave & California St", "Sacramento St & Davis St", "Sacramento St & Fillmore St", "32nd Ave & Clement St", "Sacramento St & Hyde St", "California St & 30th Ave", "Sacramento St & Webster St", "Sacramento St & Leavenworth St", "Sacramento St & Laguna St", "Sacramento St & Sansome St", "Steiner St & California St", "California St & 16th Ave", "California St & Baker St", "Sacramento St & Larkin St", "California St & Presidio Ave", "California St & Presidio Ave", "Sacramento St & Montgomery St", "California St & Park Presidio Blvd", "Sacramento St & Powell St", "California St & 12th Ave", "California St & Baker St", "California St & Laurel St", "Sacramento St & Van Ness Ave", "California St & Spruce St", "Sacramento St & Stockton St", "California St & Cherry St", "Sacramento St & Kearny St", "California St & 8th St", "California St & 6th Ave", "California St & Arguello Blvd", "California St & 4th Ave", "California St & 10th Ave", "Sacramento St & Franklin St", "Sacramento St & Grant Ave", "California St & 25th Ave", "Sacramento St & Polk St", "Sacramento St & Jones St", "California St & 19th Ave", "California St & Divisadero St", "California St & Pierce St", "Sacramento St & Battery St", "Sacramento St & Sproule Ln", "California St & 22nd Ave", "Sacramento St & Fillmore St", "California St & 10th Ave", "California St & 25th Ave", "California St & Spruce St", "Sacramento St & Octavia St", "Sacramento St & Battery St", "Sacramento St & Hyde St", "Sacramento St & Jones St", "Sacramento St & Van Ness Ave", "California St & Cherry St", "Sacramento St & Grant Ave", "California St & Arguello Blvd", "Sacramento St & Kearny St", "California St & 6th Ave", "32nd Ave & Geary Blvd", "Sacramento St & Larkin St", "California St & 28th Ave", "California St & 4th Ave", "Sacramento St & Gough St", "California St & 8th St", "Sacramento St & Stockton St", "California St & 19th Ave", "32nd Ave & Clement St", "Sacramento St & Webster St", "Sacramento St & Leavenworth St", "California St & Baker St", "Sacramento St & Buchanan St", "California St & 16th Ave", "Sacramento St & Sproule Ln", "Sacramento St & Polk St", "California St & Baker St", "32nd Ave & California St", "Sacramento St & Davis St", "Sacramento St & Franklin St", "Clay St & Drumm St", "California St & 30th Ave", "Steiner St & California St", "California St & Presidio Ave", "California St & Park Presidio Blvd", "Sacramento St & Laguna St", "Sacramento St & Powell St", "California St & 22nd Ave", "California St & Pierce St", "Sacramento St & Montgomery St", "California St & 12th Ave", "California St & Laurel St", "Sacramento St & Sansome St", "California St & Divisadero St", "California St & Presidio Ave"], "z": [16.0, 20.0, 16.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 15.0, 20.0, 17.0, 20.0, 20.0, 20.0, 16.0, 20.0, 16.0, 17.0, 14.0, 20.0, 15.0, 16.0, 15.0, 10.0, 15.0, 20.0, 20.0, 10.0, 16.4, 16.4, 20.0, 20.0, 13.0, 16.0, 20.0, 10.0, 13.0, 13.0, 20.0, 12.0, 16.0, 12.0, 20.0, 14.0, 12.0, 10.0, 12.0, 20.0, 12.0, 13.0, 10.0, 13.0, 11.0, 20.0, 15.0, 20.0, 12.0, 16.0, 15.0, 15.0, 10.0, 12.0, 20.0, 11.0, 15.0, 20.0, 13.0, 10.0, 16.0, 10.0, 16.0, 12.0, 15.0, 15.0, 10.0, 12.0, 12.0, 12.0, 10.0, 13.0, 13.0, 12.0, 12.0, 11.0, 16.0, 15.0, 15.0, 13.0, 15.0, 15.0, 13.0, 13.0, 16.0, 16.0, 16.0, 13.0, 10.0, 15.0, 20.0, 12.0, 10.0, 20.0, 10.0, 11.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 14.0, 20.0, 10.0, 20.0, 20.0, 20.0, 20.0, 13.0, 16.0, 19.7, 19.8, 19.7, 12.0, 12.0, 16.0, 19.7, 14.6, 14.6, 11.0, 10.0, 19.7, 13.0, 19.7, 13.0, 14.8, 14.7, 14.7, 19.7, 14.7, 13.0, 11.0, 16.0, 16.0, 13.0, 12.0, 16.0, 19.5, 19.5, 13.0, 12.0, 8.5, 15.0, 12.0, 8.5, 10.0, 19.8, 12.0, 19.5, 8.3, 16.0, 19.7, 14.0, 19.5, 12.0, 8.3, 8.5, 11.0, 14.0, 12.0, 18.0, 13.0, 12.0, 11.4, 12.2, 18.0, 12.0, 12.0, 10.0, 12.0, 13.0, 12.4, 18.0, 18.0, 13.0, 12.0, 11.0, 8.0, 18.0, 14.2, 18.0, 8.0, 8.0, 13.3, 18.0, 12.2, 14.3, 18.0, 14.3, 14.2, 18.0, 8.0, 8.0, 14.2, 10.0, 12.2, 13.0, 13.0, 18.0, 12.0, 12.0, 18.0, 12.2, 18.0, 18.0, 13.0, 13.2, 18.2, 11.2, 11.2, 18.2, 18.2, 14.0, 14.0, 18.2, 18.2, 11.2, 13.0, 14.0, 18.2, 13.0, 13.0, 12.0, 13.0, 12.0, 18.2, 14.0, 18.2, 10.4, 14.0, 11.4, 18.2, 11.4, 18.2, 12.4, 13.0, 18.2, 9.7, 18.2, 18.2, 14.0, 8.0, 8.0, 11.0, 11.0, 10.0, 11.0, 11.0, 11.0, 8.0, 10.0, 12.0, 8.0, 11.0, 8.0, 14.0, 14.0, 11.0, 13.0, 12.0, 7.0, 10.0, 11.0, 14.0, 13.0, 13.0, 11.0, 13.0, 9.0, 10.0, 11.0, 10.0, 12.0, 13.0, 13.0, 14.0, 14.0, 18.0, 18.0, 18.0, 11.0, 18.0, 18.0, 10.0, 18.0, 18.0, 18.0, 7.0, 18.0, 7.0, 18.0, 18.0, 18.0, 7.0, 18.0, 7.0, 11.0, 14.0, 9.0, 12.0, 10.0, 10.0, 10.0, 11.0, 18.2, 7.0, 13.0, 10.0, 10.0, 14.0, 13.0, 11.0, 10.0, 18.3, 18.3, 11.0, 9.0, 18.3, 10.0, 11.0, 18.3, 13.0, 18.3, 13.0, 14.0, 13.0, 18.2, 7.0, 7.0, 18.2, 14.0, 7.0, 10.0, 11.0, 18.2, 12.0, 12.0, 18.3, 14.0, 11.0, 18.3, 7.0, 14.0, 12.0, 18.2, 14.0, 11.0, 11.0, 9.0, 13.0, 18.3, 10.0, 10.0, 10.0, 18.0, 7.0, 11.0, 11.0, 13.0, 13.0, 11.0, 18.0, 18.0, 14.0, 13.0, 10.0, 13.0, 12.0, 7.0, 14.0, 12.0, 12.0, 7.0, 18.0, 13.0, 11.0, 18.0, 10.0, 14.0, 9.0, 18.0, 18.0, 11.0, 14.0, 7.0, 18.0, 11.0, 18.0, 13.0, 14.0, 18.0, 9.0, 11.0, 10.0, 10.0, 7.0, 10.0, 10.0, 14.0, 18.0, 18.0, 18.0, 7.0, 14.0, 18.0, 13.0, 10.0, 11.0, 12.0, 11.0, 14.0, 18.0, 18.0, 18.0, 10.0, 18.0, 7.0, 10.0, 7.0, 14.0, 18.0, 12.0, 14.0, 13.0, 13.0, 9.0, 12.6, 18.0, 10.0, 7.0, 11.0, 10.0, 14.0, 18.0, 11.0, 13.0, 11.0, 11.0, 13.0, 11.0, 18.0, 18.0, 9.0, 7.0, 14.0, 10.0, 12.0, 18.0, 18.0, 18.0, 10.0, 13.0, 18.0, 11.0, 7.0, 14.0, 7.0, 18.0, 14.0, 14.0, 18.0, 18.0, 7.0, 18.0, 18.0, 13.0, 11.0, 11.0, 10.0, 14.0, 18.0, 13.0, 18.0, 11.0, 11.0, 11.0, 10.0, 14.0, 18.0, 10.0, 13.0, 13.0, 7.0, 10.0, 10.0, 12.5, 18.0, 18.0, 12.0, 12.0, 18.0, 9.0, 10.0, 9.0, 14.0, 7.0, 11.0, 12.0, 18.0, 10.0, 17.2, 17.4, 13.0, 14.0, 17.2, 9.0, 17.4, 9.0, 10.0, 13.0, 10.0, 7.0, 10.0, 12.0, 11.0, 13.0, 17.4, 17.2, 7.0, 7.0, 17.1, 14.0, 12.0, 11.0, 7.0, 12.0, 14.0, 10.0, 13.5, 11.0, 17.2, 17.4, 13.0, 10.0, 11.0, 14.0, 14.0, 10.0, 11.0, 17.1, 7.0, 10.0, 17.6, 11.0, 13.0, 13.0, 17.4, 11.0, 17.4, 14.0, 7.0, 10.0, 14.0, 16.0, 14.0, 7.0, 7.0, 16.0, 13.0, 10.0, 16.0, 16.0, 13.0, 11.0, 11.0, 10.0, 10.0, 13.0, 16.0, 16.0, 11.0, 13.0, 11.0, 16.0, 10.0, 16.0, 13.0, 9.0, 10.0, 7.0, 9.0, 10.0, 16.0, 13.0, 12.0, 11.0, 16.0, 7.0, 14.0, 12.0, 14.0, 11.0, 12.0, 12.0, 16.0, 11.0, 16.0, 17.0, 12.0, 16.0, 16.0, 10.0, 16.0, 12.0, 16.0, 16.0, 16.0, 16.0, 16.0, 10.0, 16.0, 10.0, 7.0, 16.0, 7.0, 16.0, 17.0, 16.0, 7.0, 11.0, 11.0, 7.0, 10.0, 14.0, 11.0, 14.0, 10.0, 11.0, 11.0, 13.0, 10.0, 14.0, 13.0, 13.0, 9.0, 11.0, 10.0, 14.0, 13.0, 12.0, 12.0, 13.0, 14.0, 7.0, 9.0, 13.0, 11.0, 10.0, 14.0, 11.0, 16.2, 10.0, 7.0, 7.0, 16.5, 7.0, 16.3, 13.1, 16.3, 16.5, 11.0, 13.0, 9.0, 10.0, 13.1, 13.8, 14.0, 16.2, 13.0, 7.0, 16.2, 10.0, 13.9, 11.0, 10.0, 13.9, 11.0, 10.0, 16.2, 16.5, 14.0, 7.0, 12.0, 11.0, 10.0, 16.2, 13.9, 16.2, 11.0, 14.0, 12.2, 17.1, 11.0, 16.5, 9.0, 14.0, 10.0, 11.0, 18.0, 18.0, 7.1, 15.0, 15.0, 15.0, 18.0, 10.0, 11.0, 18.0, 15.0, 18.0, 10.0, 9.0, 13.0, 11.0, 15.0, 18.0, 15.0, 10.0, 11.0, 10.0, 11.0, 7.1, 11.0, 14.0, 18.0, 14.0, 18.0, 7.1, 13.0, 10.0, 14.0, 14.0, 14.0, 14.0, 9.0, 12.0, 10.0, 18.0, 7.1, 18.0, 7.1, 18.0, 18.0, 11.0, 18.0, 15.0, 18.0, 16.0, 11.8, 10.0, 12.8, 12.0, 15.0, 15.0, 18.0, 15.0, 9.9, 10.0, 8.0, 18.0, 8.0, 18.0, 10.6, 11.0, 14.0, 18.0, 16.0, 11.0, 14.8, 11.0, 18.0, 16.0, 18.0, 16.0, 8.0, 11.0, 18.0, 18.0, 18.0, 8.0, 11.0, 15.0, 12.0, 18.0, 11.0, 11.8, 18.0, 16.0, 8.0, 18.0, 11.6, 12.0, 16.0, 15.0, 12.0, 18.0, 10.0, 13.0, 14.0, 12.0, 18.0, 11.0, 15.0, 18.0, 11.5, 18.0, 11.0, 11.6, 12.0, 8.5, 15.0, 18.0, 15.0, 10.5, 16.0, 16.0, 8.5, 18.0, 11.8, 18.0, 15.0, 16.0, 12.0, 16.0, 8.2, 16.0, 8.2, 18.0, 18.0, 16.0, 15.0, 18.0, 12.0, 8.2, 18.0, 12.0, 11.6, 18.0, 15.0, 15.0, 10.0, 11.6, 18.0, 15.0, 19.6, 19.6, 16.0, 16.0, 10.0, 13.0, 13.0, 14.0, 16.0, 10.0, 16.0, 10.0, 20.0, 14.0, 12.0, 19.6, 15.0, 12.0, 20.0, 10.0, 19.6, 19.6, 12.8, 13.0, 15.0, 13.8, 19.6, 13.0, 14.0, 15.0, 19.6, 11.0, 14.0, 12.0, 19.6, 15.0, 16.0, 19.6, 13.8, 13.0, 19.6, 15.0, 10.0, 19.6, 16.0, 10.0, 15.0, 16.0]}],
{"height": 600, "showlegend": false, "template": {"data": {"bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "bar"}], "barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}}, "type": "barpolar"}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "choropleth"}], "contour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "contour"}], "contourcarpet": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "contourcarpet"}], "heatmap": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmap"}], "heatmapgl": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "heatmapgl"}], "histogram": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "histogram"}], "histogram2d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2d"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "histogram2dcontour"}], "mesh3d": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "parcoords"}], "pie": [{"automargin": true, "type": "pie"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scattermapbox"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolar"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterpolargl"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "coloraxis": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "colorscale": {"diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]], "sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}, "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white"}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "ternary": {"aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "bgcolor": "#E5ECF6", "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": {"standoff": 15}, "zerolinecolor": "white", "zerolinewidth": 2}, "yaxis": {"automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": {"standoff": 15}, "zerolinecolor": "white", "zerolinewidth": 2}}}, "title": {"text": "Speed heatmap per direction and hour of the day"}, "width": 1000, "xaxis": {"side": "top", "title": {"text": "Hour of day"}}, "yaxis": {"autorange": "reversed", "title": {"text": "Stop"}}},
{"responsive": true}
).then(function(){
var gd = document.getElementById('da918f34-791a-4a6f-ba01-187f4825d17b'); var x = new MutationObserver(function (mutations, observer) {{ var display = window.getComputedStyle(gd).display; if (!display || display === 'none') {{ console.log([gd, 'removed!']); Plotly.purge(gd); observer.disconnect(); }} }});
// Listen for the removal of the full notebook cells var notebookContainer = gd.closest('#notebook-container'); if (notebookContainer) {{ x.observe(notebookContainer, {childList: true}); }}
// Listen for the clearing of the current output cell var outputEl = gd.closest('.output'); if (outputEl) {{ x.observe(outputEl, {childList: true}); }}
})
};
});
</script>
</div>
# Line graphs
import plotly.graph_objects as go
example2 = speeds.loc[(speeds.s_st_name=='Fillmore St & Bay St')&(speeds.route_name=='All lines')].sort_values(by='stop_seq')
example2['hour'] = example2.window.apply(lambda x: int(x.split(':')[0]))
example2.sort_values(by='hour', ascending=True, inplace=True)
fig = go.Figure()
trace = go.Scatter(
name='Speed',
x=example2.hour,
y=example2.speed_kmh,
mode='lines',
line=dict(color='rgb(31, 119, 180)'),
fillcolor='#F0F0F0',
fill='tonexty',
opacity = 0.5)
data = [trace]
layout = go.Layout(
yaxis=dict(title='Average Speed (km/h)'),
xaxis=dict(title='Hour of day'),
title='Average Speed by hour of day in stop Fillmore St & Bay St',
showlegend = False, template = 'simple_white')
fig = go.Figure(data=data, layout=layout)
# Get the labels in the X axis right
axes_labels = []
tickvals=example2.hour.unique()[::3][1:]
for i in range(0, len(tickvals)):
label = str(tickvals[i]) + ':00'
axes_labels.append(label)
fig.update_xaxes(
ticktext=axes_labels,
tickvals=tickvals
)
# Add vertical lines
y_max_value = example2.speed_kmh.max()
for i in range(0, len(tickvals)):
fig.add_shape(
# Line Vertical
dict(
type="line",
x0=tickvals[i],
y0=0,
x1=tickvals[i],
y1=y_max_value,
line=dict(
color="Grey",
width=1
)
)
)
# Labels in the edge values
for i in range(0, len(tickvals)):
y_value = example2.loc[example2.hour==tickvals[i], 'speed_kmh'].values[0].round(2)
fig.add_annotation(
x=tickvals[i],
y=y_value,
text=str(y_value),
)
fig.update_annotations(dict(
xref="x",
yref="y",
showarrow=True,
arrowhead=0,
ax=0,
ay=-18
))
fig.update_yaxes(rangemode='tozero')
fig.show()
<div id="54737bc3-12e7-41cc-8d85-915b30c7d2e7" class="plotly-graph-div" style="height:525px; width:100%;"></div>
<script type="text/javascript">
require(["plotly"], function(Plotly) {
window.PLOTLYENV=window.PLOTLYENV || {};
if (document.getElementById("54737bc3-12e7-41cc-8d85-915b30c7d2e7")) {
Plotly.newPlot(
'54737bc3-12e7-41cc-8d85-915b30c7d2e7',
[{"fill": "tonexty", "fillcolor": "#F0F0F0", "line": {"color": "rgb(31, 119, 180)"}, "mode": "lines", "name": "Speed", "opacity": 0.5, "type": "scatter", "x": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "y": [22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 20.8, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 20.0, 22.0, 22.0, 22.0]}],
{"annotations": [{"arrowhead": 0, "ax": 0, "ay": -18, "showarrow": true, "text": "22.0", "x": 3, "xref": "x", "y": 22.0, "yref": "y"}, {"arrowhead": 0, "ax": 0, "ay": -18, "showarrow": true, "text": "20.8", "x": 6, "xref": "x", "y": 20.8, "yref": "y"}, {"arrowhead": 0, "ax": 0, "ay": -18, "showarrow": true, "text": "16.0", "x": 9, "xref": "x", "y": 16.0, "yref": "y"}, {"arrowhead": 0, "ax": 0, "ay": -18, "showarrow": true, "text": "16.0", "x": 12, "xref": "x", "y": 16.0, "yref": "y"}, {"arrowhead": 0, "ax": 0, "ay": -18, "showarrow": true, "text": "16.0", "x": 15, "xref": "x", "y": 16.0, "yref": "y"}, {"arrowhead": 0, "ax": 0, "ay": -18, "showarrow": true, "text": "16.0", "x": 18, "xref": "x", "y": 16.0, "yref": "y"}, {"arrowhead": 0, "ax": 0, "ay": -18, "showarrow": true, "text": "22.0", "x": 21, "xref": "x", "y": 22.0, "yref": "y"}], "shapes": [{"line": {"color": "Grey", "width": 1}, "type": "line", "x0": 3, "x1": 3, "y0": 0, "y1": 22.0}, {"line": {"color": "Grey", "width": 1}, "type": "line", "x0": 6, "x1": 6, "y0": 0, "y1": 22.0}, {"line": {"color": "Grey", "width": 1}, "type": "line", "x0": 9, "x1": 9, "y0": 0, "y1": 22.0}, {"line": {"color": "Grey", "width": 1}, "type": "line", "x0": 12, "x1": 12, "y0": 0, "y1": 22.0}, {"line": {"color": "Grey", "width": 1}, "type": "line", "x0": 15, "x1": 15, "y0": 0, "y1": 22.0}, {"line": {"color": "Grey", "width": 1}, "type": "line", "x0": 18, "x1": 18, "y0": 0, "y1": 22.0}, {"line": {"color": "Grey", "width": 1}, "type": "line", "x0": 21, "x1": 21, "y0": 0, "y1": 22.0}], "showlegend": false, "template": {"data": {"bar": [{"error_x": {"color": "rgb(36,36,36)"}, "error_y": {"color": "rgb(36,36,36)"}, "marker": {"line": {"color": "white", "width": 0.5}}, "type": "bar"}], "barpolar": [{"marker": {"line": {"color": "white", "width": 0.5}}, "type": "barpolar"}], "carpet": [{"aaxis": {"endlinecolor": "rgb(36,36,36)", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "rgb(36,36,36)"}, "baxis": {"endlinecolor": "rgb(36,36,36)", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "rgb(36,36,36)"}, "type": "carpet"}], "choropleth": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "type": "choropleth"}], "contour": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "contour"}], "contourcarpet": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "type": "contourcarpet"}], "heatmap": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "heatmap"}], "heatmapgl": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "heatmapgl"}], "histogram": [{"marker": {"line": {"color": "white", "width": 0.6}}, "type": "histogram"}], "histogram2d": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "histogram2d"}], "histogram2dcontour": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "histogram2dcontour"}], "mesh3d": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "type": "mesh3d"}], "parcoords": [{"line": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "parcoords"}], "pie": [{"automargin": true, "type": "pie"}], "scatter": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatter"}], "scatter3d": [{"line": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatter3d"}], "scattercarpet": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scattercarpet"}], "scattergeo": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scattergeo"}], "scattergl": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scattergl"}], "scattermapbox": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scattermapbox"}], "scatterpolar": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatterpolar"}], "scatterpolargl": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatterpolargl"}], "scatterternary": [{"marker": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "type": "scatterternary"}], "surface": [{"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}, "colorscale": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "type": "surface"}], "table": [{"cells": {"fill": {"color": "rgb(237,237,237)"}, "line": {"color": "white"}}, "header": {"fill": {"color": "rgb(217,217,217)"}, "line": {"color": "white"}}, "type": "table"}]}, "layout": {"annotationdefaults": {"arrowhead": 0, "arrowwidth": 1}, "coloraxis": {"colorbar": {"outlinewidth": 1, "tickcolor": "rgb(36,36,36)", "ticks": "outside"}}, "colorscale": {"diverging": [[0.0, "rgb(103,0,31)"], [0.1, "rgb(178,24,43)"], [0.2, "rgb(214,96,77)"], [0.3, "rgb(244,165,130)"], [0.4, "rgb(253,219,199)"], [0.5, "rgb(247,247,247)"], [0.6, "rgb(209,229,240)"], [0.7, "rgb(146,197,222)"], [0.8, "rgb(67,147,195)"], [0.9, "rgb(33,102,172)"], [1.0, "rgb(5,48,97)"]], "sequential": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]], "sequentialminus": [[0.0, "#440154"], [0.1111111111111111, "#482878"], [0.2222222222222222, "#3e4989"], [0.3333333333333333, "#31688e"], [0.4444444444444444, "#26828e"], [0.5555555555555556, "#1f9e89"], [0.6666666666666666, "#35b779"], [0.7777777777777778, "#6ece58"], [0.8888888888888888, "#b5de2b"], [1.0, "#fde725"]]}, "colorway": ["#1F77B4", "#FF7F0E", "#2CA02C", "#D62728", "#9467BD", "#8C564B", "#E377C2", "#7F7F7F", "#BCBD22", "#17BECF"], "font": {"color": "rgb(36,36,36)"}, "geo": {"bgcolor": "white", "lakecolor": "white", "landcolor": "white", "showlakes": true, "showland": true, "subunitcolor": "white"}, "hoverlabel": {"align": "left"}, "hovermode": "closest", "mapbox": {"style": "light"}, "paper_bgcolor": "white", "plot_bgcolor": "white", "polar": {"angularaxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}, "bgcolor": "white", "radialaxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}}, "scene": {"xaxis": {"backgroundcolor": "white", "gridcolor": "rgb(232,232,232)", "gridwidth": 2, "linecolor": "rgb(36,36,36)", "showbackground": true, "showgrid": false, "showline": true, "ticks": "outside", "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}, "yaxis": {"backgroundcolor": "white", "gridcolor": "rgb(232,232,232)", "gridwidth": 2, "linecolor": "rgb(36,36,36)", "showbackground": true, "showgrid": false, "showline": true, "ticks": "outside", "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}, "zaxis": {"backgroundcolor": "white", "gridcolor": "rgb(232,232,232)", "gridwidth": 2, "linecolor": "rgb(36,36,36)", "showbackground": true, "showgrid": false, "showline": true, "ticks": "outside", "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}}, "shapedefaults": {"fillcolor": "black", "line": {"width": 0}, "opacity": 0.3}, "ternary": {"aaxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}, "baxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}, "bgcolor": "white", "caxis": {"gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside"}}, "title": {"x": 0.05}, "xaxis": {"automargin": true, "gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside", "title": {"standoff": 15}, "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}, "yaxis": {"automargin": true, "gridcolor": "rgb(232,232,232)", "linecolor": "rgb(36,36,36)", "showgrid": false, "showline": true, "ticks": "outside", "title": {"standoff": 15}, "zeroline": false, "zerolinecolor": "rgb(36,36,36)"}}}, "title": {"text": "Average Speed by hour of day in stop Fillmore St & Bay St"}, "xaxis": {"ticktext": ["3:00", "6:00", "9:00", "12:00", "15:00", "18:00", "21:00"], "tickvals": [3, 6, 9, 12, 15, 18, 21], "title": {"text": "Hour of day"}}, "yaxis": {"rangemode": "tozero", "title": {"text": "Average Speed (km/h)"}}},
{"responsive": true}
).then(function(){
var gd = document.getElementById('54737bc3-12e7-41cc-8d85-915b30c7d2e7'); var x = new MutationObserver(function (mutations, observer) {{ var display = window.getComputedStyle(gd).display; if (!display || display === 'none') {{ console.log([gd, 'removed!']); Plotly.purge(gd); observer.disconnect(); }} }});
// Listen for the removal of the full notebook cells var notebookContainer = gd.closest('#notebook-container'); if (notebookContainer) {{ x.observe(notebookContainer, {childList: true}); }}
// Listen for the clearing of the current output cell var outputEl = gd.closest('.output'); if (outputEl) {{ x.observe(outputEl, {childList: true}); }}
})
};
});
</script>
</div>
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file gtfs_functions-1.0.1.tar.gz
.
File metadata
- Download URL: gtfs_functions-1.0.1.tar.gz
- Upload date:
- Size: 523.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d1427005066dfcde6e94e5f30cf987ee8a6928fec98352ed24d70df3b837d54b |
|
MD5 | a25cfa35ae2e6df3b853036849783c0e |
|
BLAKE2b-256 | 7739d6a6aaabd869853079c7228ba7055d1e60d9dc6d98824c5bd8fd931fd700 |
File details
Details for the file gtfs_functions-1.0.1-py3-none-any.whl
.
File metadata
- Download URL: gtfs_functions-1.0.1-py3-none-any.whl
- Upload date:
- Size: 188.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 55325bd97fb66ccd3ea2ef9f2eb51a6e33e44501098246f59d58d690a4aa71f2 |
|
MD5 | eea5cb1b4767a87421965d8392942c8a |
|
BLAKE2b-256 | 0942e3958a1d2bc2a3d0b7c3efb5537d69bdb5332ab4485e907e1e04b5e8b80e |