|
|
|
|
|
import panel as pn |
|
import vega_datasets |
|
|
|
|
|
pn.extension() |
|
|
|
template = pn.template.BootstrapTemplate( |
|
title='SI649 Altair3', |
|
) |
|
|
|
maincol = pn.Column() |
|
|
|
|
|
def create_plot(subgroup, date_range, moving_av_window): |
|
|
|
|
|
filtered_df = df2_approve[df2_approve['subgroup'] == subgroup] |
|
filtered_df = filtered_df[(filtered_df['timestamp'].dt.date >= date_range[0]) & (filtered_df['timestamp'].dt.date <= date_range[1])] |
|
filtered_df['mov_avg'] = filtered_df['rate'].rolling(window=moving_av_window, min_periods=1).mean().shift(moving_av_window//2) |
|
|
|
|
|
line_chart = alt.Chart(filtered_df).mark_line(color='red', size=2).encode( |
|
x='timestamp:T', |
|
y='mov_avg:Q' |
|
) |
|
|
|
|
|
scatter_plot = alt.Chart(filtered_df).mark_point(color='grey', size=2, opacity=0.7).encode( |
|
x='timestamp:T', |
|
y='rate:Q' |
|
) |
|
|
|
|
|
plot = scatter_plot + line_chart |
|
|
|
|
|
return plot |
|
|
|
|
|
|
|
select = pn.widgets.Select(name='Select', options=['All polls', 'Adults', 'Voters']) |
|
|
|
|
|
|
|
date_range_slider = pn.widgets.DateRangeSlider( |
|
name='Date Range Slider', |
|
start=df2['timestamp'].dt.date.min(), end=df2['timestamp'].dt.date.max(), |
|
value=(df2['timestamp'].dt.date.min(), df2['timestamp'].dt.date.max()), |
|
step=1 |
|
) |
|
|
|
|
|
|
|
moving_av_slider = pn.widgets.IntSlider(name='Moving Average Window', start=1, end=100, value=1) |
|
|
|
|
|
|
|
final = pn.Row(pn.bind(create_plot, |
|
subgroup=select, |
|
date_range=date_range_slider, |
|
moving_av_window=moving_av_slider)) |
|
|
|
|
|
|
|
maincol.append(final) |
|
maincol.append(select) |
|
maincol.append(date_range_slider) |
|
maincol.append(moving_av_slider) |
|
template.main.append(maincol) |
|
|
|
|
|
template.servable(title="SI649 Altair3") |