Получение Ipywidgets для взаимодействия с Pandas Dataframe в блокноте Jupyter - PullRequest
0 голосов
/ 11 мая 2018

Привет. Я пытаюсь заставить график работать с ipywidgets в блокноте Jupyter, но мне не повезло.Я хотел бы, чтобы виджеты обновлялись на основе кадра данных, когда функционирует кнопка обновления.Кто-нибудь знает, где я иду не так?

#Import Libraries
import pandas as pd
import folium
import geocoder
import numpy as np
import plotly.plotly as py
from plotly.graph_objs import *
import plotly.offline as py
from ipywidgets import widgets, HBox, Output, interactive

py.offline.init_notebook_mode(connected=False)

#Load Dataset
df = pd.read_excel('LOAS_Biography data (feb 2018).xlsx', sheetname='concerts')

#Rename Columns In DataFrame
df.columns = ['Date', 'City', 'Country', 'Venue', 'Capacity', 'Ticket', 'Tour', 'Event', 'Sold Out', 'Champion']

#Summarises Data by Summing Data Per Country
df = df.groupby('Country', as_index= False).sum()

df = df.head(10)

data = [Bar(x=df.Country,
            y=df.Ticket)]

#Make lists
list1 = list(df['Country'].unique())
#list2 = list(df['City'].unique())

#Create Dropdown Box Widget
w = widgets.Dropdown(
    options= list1,
    value= 'Australia',
    description='Country:',
    disabled=False,
)

#Create Text Box Widget
w1 = widgets.Text(
     value='',
     placeholder='Type something',
     description='Search by:',
     disabled=False
)

#Create Update Button For Widgets
w2 = widgets.Button(description="Update")

def update():
    display(HBox([w, w1, w2]))
    display(py.offline.iplot(data, filename='jupyter-basic_bar'))

def on_button_clicked(b):
    venue = (w.options, w1.value)
    clear_output()
    #print(venue)
    update()

w2.on_click(on_button_clicked)
update()

Спасибо

1 Ответ

0 голосов
/ 23 июля 2018

Нет функции в функции кнопки Обновить. Я добавил несколько строк, чтобы обновить фрейм данных, прежде чем он вызовет функцию обновления. Я могу отфильтровать график после нажатия обновления с кодом ниже

def on_button_clicked(b):
venue = (w.options, w1.value)    
print(w.value)  
clear_output()  

if w.value=='All':
    df1=df
else:
    df1=df[df['CREATED_YYYYMMDD']==w.value]

update(df1)
...