Как создать интерактивный сюжет в Jupyter Notebook и Python - PullRequest
1 голос
/ 03 июля 2019

У меня есть следующий фрейм данных.

CustID| Age |Gender|Smoking_history |Alcohol_history

1 |18-24| M | Non-smoker | <21 units per week

2 |43-48| F | Non-smoker | <21 units per week

3 |37-42| M | Unknown | <21 units per week

4 |18-24| F | Unknown | Unknown

5 |43-48| M | Previous smoker | <21 units per week

Я создал гистограмму и использовал следующий код:

df.groupby (['История курения', 'Возраст']). size (). unstack (). plot (kind = 'bar', stacked = True) plt.show ()

Следует отметить, что Age - это числовое значение диапазона, и "«История курения» - это строковое значение.

В блокноте Jupyter создается гистограмма с накоплением и отображается количество людей в разных возрастных группах на основе истории курения.

Я хочу сделать это интерактивным, чтобыЯ могу выбрать столбцы из выпадающего списка.

Как я могу сделать это, используя ipywidgets в Jupyter Notebook?

** Есть ли способ использовать нечисловые столбцы на графике?

1 Ответ

1 голос
/ 03 июля 2019

На самом деле это не так сложно создать. Сначала вы должны импортировать всю необходимую библиотеку виджетов. Библиотека виджетов содержит определение элементов пользовательского интерфейса. Интерактивная библиотека будет вызывать вашу пользовательскую функцию каждый раз, когда вы запускаете событие для элемента - в нашем случае выбираем другой столбец. При каждом вызове функции мы просто возвращаем новый сюжет. Обратите внимание, что вы должны только читать данные из вашего набора данных внутри функции. Изменение может привести к появлению побочных эффектов в более поздних клетках.

import ipywidgets as widgets
from ipywidgets import interact, interactive, fixed, interact_manual
drop_down=widgets.Dropdown(
    options=data2.columns.values,
    value='Age',
    description='Column:',
    disabled=False,
)

def update_barchart(columns):
    return data2.groupby(columns).size().plot(kind='bar',stacked=True)

interactive(update_barchart, columns=drop_down)
...