Nano Hash - криптовалюты, майнинг, программирование

Bokeh DataTable Несколько входов/виджетов/фильтров

Я пытаюсь отобразить таблицу на основе нескольких фильтров.

def update():
    current = df[(df['nb_words'] >= slider.value[0]) & (df['nb_words'] <= slider.value[1])].dropna()
    source.data = {
        'id'                   : current.id,
        'author'               : current.author,
        'nb_words'             : current.nb_words,
        'text'                 : current.text,
        'topic'                : current.topic,
        'national'             : current.national
}

nb_words = RangeSlider(title="Min nb employees", start=0, end=1000, value=(0, 1000), step=10, format="0,0")
topic = CheckboxButtonGroup(labels=list(df.topic.unique()))
national = RadioButtonGroup(labels=['Yes', 'No'], active=0)
text = TextInput()

nb_words.on_change('value', lambda attr, old, new: update())

data_table = DataTable(source=source, columns=columns, width=1000, fit_columns=False)
controls = widgetbox(nb_words, button)
table = widgetbox(data_table)

Здесь обновление действует только при изменении ползунка nb_words.
Однако я хотел бы разрешить пользователю несколько вариантов выбора за раз.
Например, таблица будет адекватно обновляться, если пользователь выбирает строки с

- 20 <= nb_words <= 200  
- topic = ["topic1", "topic2"]  
- national = 1  
- and text that contains the word "fantastic"

Как обновить таблицу с помощью нескольких виджетов?

24.11.2017

Ответы:


1

На основе https://demo.bokeh.org/movies мне пришлось создать другую функцию, select_text() . Вот окончательный сценарий:

nb_words = RangeSlider(title="Min nb words", start=0, end=1000, value=(0,1000), step=10, format="0,0")
text = TextInput(title="Enter a Keyword")

source = ColumnDataSource(data=dict())


def select_text():
    text_value = text.value.strip()
    selected = df[
        (df.nb_words >= slider.value[0]) &
        (df.nb_words <= slider.value[1])
    ]
    if (text_value != ""):
        selected = selected[selected.text.str.lower().str.contains(text_value)==True]
    return selected



def update():
    current = select_text()
    source.data = dict(
                id = current.id,
                author = current.author,
                nb_words = current.nb_words,
                text = current.text,
                topic = current.topic,
                national = current.national,
    )

controls = [nb_words, text]
for control in controls:
    control.on_change('value', lambda attr, old, new: update())


columns = [TableColumn(field="id", title="ID"),
           ...
           TableColumn(field="national", title="National"),
           ]

data_table = DataTable(source=source, columns=columns, width=1000, fit_columns=False)


sizing_mode = 'fixed'
inputs = widgetbox(*controls, sizing_mode = sizing_mode)
table = widgetbox(data_table)

curdoc().add_root(row(inputs, table))
curdoc().title = "Topic Selection"

update()
24.11.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..