Я пытаюсь реализовать интерактивную (HTML) карту с помощью Bokeh на Python, чтобы я мог опубликовать ее на своем личном GitHub. Я понял, что не могу использовать обратные вызовы с Python, если я не хочу использовать сервер Bokeh. Я написал функцию обратного вызова или обновления на Python, прежде чем понял эту проблему, и теперь у меня возникают проблемы при перезаписи на JS.
Функция обновляет источник данных для активного глифа на карте после выделения кадра данных pandas из значений, выбранных на ползунках.
def make_data(year=1718, market='dayof', mode='priority_b',
zone='None', sibling='None'):
"""
This functions subsets the ratexs_dfs by year, market, mode and sibling
parameters refer to the following:
year = school year, 1718 or 1819
market = time at which cutoffs were calculated:
any = anyday, this includes waitlisted applicants and such
dayof = these cutoffs were calculated at the day of the lottery
# it should be noted that only the shp_data from SY1718
has shp_data from both dayof and any markets.
any or dayof markets for SY1819 are identical
since the shp_data was obtained before waitlist placements
mode = priority system.
priority = this system is the native method of the yearself.
SY1718 uses the 2 digit priority system,
SY1819 uses the 3 digit priority system.
priority_b = this is the secondary system. For SY1718, priority
and priority_b are identical. However for SY1819,
priority is the 3 digit priority system, while
priority_b is the SY1819 priorities adapted for the
SY1718 priority system.
sibling = school where applicant would get sibling priority
"""
school_ratex = ratexs_df[(ratexs_df['year'] == year)
& (ratexs_df['market'] == market)
& (ratexs_df['prio_mode'] == mode)
& ((ratexs_df['nhood'] == zone)
| (ratexs_df['nhood'] == 'None'))
& ((ratexs_df['sibling'] == sibling)
| (ratexs_df['sibling'] == 'None'))]
school_ratex = school_ratex.drop_duplicates(subset='school', keep='first')
school_ratex['ratex'] = (school_ratex['ratex'] * 100).round(2)
school_ratex['ratex_str'] = school_ratex['ratex'].astype(str) + ' %'
school_ratex = school_ratex.sort_values(by='priority')
return ColumnDataSource(school_ratex)
Тогда функция обновления:
def update(attr, old, new):
# make a new def
new_src = make_data(zone=schoolzone_dd.value,
sibling=sibling_dd.value)
# update data on map
psource2.data.update(new_src.data)
, где sibling_dd
и schoolzone_dd
- ползунки:
# define dropdown widgets
# school lists
schools = ['None']
schools.extend(sorted(src['school'].values.tolist(), reverse=False))
sibling_dd = Select(title='Sibling School',
value=schools[0],
options=schools)
# zones lists
zones = ['None']
zones.extend(sorted(shp_source['app_name'].values.tolist(), reverse=False))
zones.insert(1, schools[1])
schoolzone_dd = Select(title='School Zone',
value=zones[0],
options=zones)
Есть ли простой способ, с помощью которого я могу разделить фрейм данных аналогичным образом при вызове CustomJS, используя значения двух ползунков параллельно?
Заранее спасибо.