Spaces:
Runtime error
Runtime error
import streamlit as st | |
import pandas as pd | |
import numpy as np | |
import altair as alt | |
import pydeck as pdk | |
import random | |
from pytz import country_names | |
from st_aggrid import AgGrid, GridUpdateMode, JsCode | |
from st_aggrid.grid_options_builder import GridOptionsBuilder | |
import snowflake.connector | |
from snowflake.connector.pandas_tools import write_pandas | |
from snowflake.connector import connect | |
# callback to update query param on selectbox change | |
def update_params(): | |
st.experimental_set_query_params(option=st.session_state.qp) | |
options = ["cat", "dog", "mouse", "bat", "duck"] | |
query_params = st.experimental_get_query_params() | |
# set selectbox value based on query param, or provide a default | |
ix = 0 | |
if query_params: | |
try: | |
ix = options.index(query_params['option'][0]) | |
except ValueError: | |
pass | |
selected_option = st.radio( | |
"Param", options, index=ix, key="qp", on_change=update_params | |
) | |
# set query param based on selection | |
st.experimental_set_query_params(option=selected_option) | |
# display for debugging purposes | |
st.write('---', st.experimental_get_query_params()) | |
# SETTING PAGE CONFIG TO WIDE MODE AND ADDING A TITLE AND FAVICON | |
#st.set_page_config(layout="wide", page_title="NYC Ridesharing Demo", page_icon=":taxi:") | |
# LOAD DATA ONCE | |
def load_data(): | |
data = pd.read_csv( | |
"./uber-raw-data-sep14.csv.gz", | |
nrows=100000, # approx. 10% of data | |
names=[ | |
"date/time", | |
"lat", | |
"lon", | |
], # specify names directly since they don't change | |
skiprows=1, # don't read header since names specified directly | |
usecols=[0, 1, 2], # doesn't load last column, constant value "B02512" | |
parse_dates=[ | |
"date/time" | |
], # set as datetime instead of converting after the fact | |
) | |
return data | |
# FUNCTION FOR AIRPORT MAPS | |
def map(data, lat, lon, zoom): | |
st.write( | |
pdk.Deck( | |
map_style="mapbox://styles/mapbox/light-v9", | |
initial_view_state={ | |
"latitude": lat, | |
"longitude": lon, | |
"zoom": zoom, | |
"pitch": 50, | |
}, | |
layers=[ | |
pdk.Layer( | |
"HexagonLayer", | |
data=data, | |
get_position=["lon", "lat"], | |
radius=100, | |
elevation_scale=4, | |
elevation_range=[0, 1000], | |
pickable=True, | |
extruded=True, | |
), | |
], | |
) | |
) | |
# FILTER DATA FOR A SPECIFIC HOUR, CACHE | |
def filterdata(df, hour_selected): | |
return df[df["date/time"].dt.hour == hour_selected] | |
# CALCULATE MIDPOINT FOR GIVEN SET OF DATA | |
def mpoint(lat, lon): | |
return (np.average(lat), np.average(lon)) | |
# FILTER DATA BY HOUR | |
def histdata(df, hr): | |
filtered = data[ | |
(df["date/time"].dt.hour >= hr) & (df["date/time"].dt.hour < (hr + 1)) | |
] | |
hist = np.histogram(filtered["date/time"].dt.minute, bins=60, range=(0, 60))[0] | |
return pd.DataFrame({"minute": range(60), "pickups": hist}) | |
# STREAMLIT APP LAYOUT | |
data = load_data() | |
# LAYING OUT THE TOP SECTION OF THE APP | |
row1_1, row1_2 = st.columns((2, 3)) | |
with row1_1: | |
st.title("NYC Uber Ridesharing Data") | |
hour_selected = st.slider("Select hour of pickup", 0, 23) | |
with row1_2: | |
st.write( | |
""" | |
## | |
Examining how Uber pickups vary over time in New York City's and at its major regional airports. | |
By sliding the slider on the left you can view different slices of time and explore different transportation trends. | |
""" | |
) | |
# LAYING OUT THE MIDDLE SECTION OF THE APP WITH THE MAPS | |
row2_1, row2_2, row2_3, row2_4 = st.columns((2, 1, 1, 1)) | |
# SETTING THE ZOOM LOCATIONS FOR THE AIRPORTS | |
la_guardia = [40.7900, -73.8700] | |
jfk = [40.6650, -73.7821] | |
newark = [40.7090, -74.1805] | |
zoom_level = 12 | |
midpoint = mpoint(data["lat"], data["lon"]) | |
with row2_1: | |
st.write( | |
f"""**All New York City from {hour_selected}:00 and {(hour_selected + 1) % 24}:00**""" | |
) | |
map(filterdata(data, hour_selected), midpoint[0], midpoint[1], 11) | |
with row2_2: | |
st.write("**La Guardia Airport**") | |
map(filterdata(data, hour_selected), la_guardia[0], la_guardia[1], zoom_level) | |
with row2_3: | |
st.write("**JFK Airport**") | |
map(filterdata(data, hour_selected), jfk[0], jfk[1], zoom_level) | |
with row2_4: | |
st.write("**Newark Airport**") | |
map(filterdata(data, hour_selected), newark[0], newark[1], zoom_level) | |
# CALCULATING DATA FOR THE HISTOGRAM | |
chart_data = histdata(data, hour_selected) | |
# LAYING OUT THE HISTOGRAM SECTION | |
st.write( | |
f"""**Breakdown of rides per minute between {hour_selected}:00 and {(hour_selected + 1) % 24}:00**""" | |
) | |
st.altair_chart( | |
alt.Chart(chart_data) | |
.mark_area( | |
interpolate="step-after", | |
) | |
.encode( | |
x=alt.X("minute:Q", scale=alt.Scale(nice=False)), | |
y=alt.Y("pickups:Q"), | |
tooltip=["minute", "pickups"], | |
) | |
.configure_mark(opacity=0.2, color="red"), | |
use_container_width=True, | |
) | |
def foo(x): | |
return x**2 | |
if st.button("Clear Foo"): | |
# Clear foo's memoized values: | |
foo.clear() | |
if st.button("Clear All"): | |
# Clear values from *all* memoized functions: | |
st.experimental_memo.clear() |