jupyter | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
importdatetimeimportnumpyasnpimportpandasaspdimportplotly.graph_objectsasgofromipywidgetsimportwidgets
We'll be making an application to take a look at delays from all flights out of NYC in the year 2013.
df=pd.read_csv( 'https://raw.githubusercontent.com/yankev/testing/master/datasets/nycflights.csv') df=df.drop(df.columns[[0]], axis=1)
df.sample(3)
Let's get the set of all the airlines
, so that we can type the right things into the search box later.
df['carrier'].unique()
Let's assign the widgets that we're going to be using in our app. In general all these widgets will be used to filter the data set, and thus what we visualize.
month=widgets.IntSlider( value=1.0, min=1.0, max=12.0, step=1.0, description='Month:', continuous_update=False ) use_date=widgets.Checkbox( description='Date: ', value=True, ) container=widgets.HBox(children=[use_date, month]) textbox=widgets.Dropdown( description='Airline: ', value='DL', options=df['carrier'].unique().tolist() ) origin=widgets.Dropdown( options=list(df['origin'].unique()), value='LGA', description='Origin Airport:', ) # Assign an empty figure widget with two tracestrace1=go.Histogram(x=df['arr_delay'], opacity=0.75, name='Arrival Delays') trace2=go.Histogram(x=df['dep_delay'], opacity=0.75, name='Departure Delays') g=go.FigureWidget(data=[trace1, trace2], layout=go.Layout( title=dict( text='NYC FlightDatabase' ), barmode='overlay' ))
Let now write a function that will handle the input from the widgets, and alter the state of the graph.
defvalidate(): iforigin.valueindf['origin'].unique() andtextbox.valueindf['carrier'].unique(): returnTrueelse: returnFalsedefresponse(change): ifvalidate(): ifuse_date.value: filter_list= [iandjandkfori, j, kinzip(df['month'] ==month.value, df['carrier'] ==textbox.value, df['origin'] ==origin.value)] temp_df=df[filter_list] else: filter_list= [iandjfori, jinzip(df['carrier'] =='DL', df['origin'] ==origin.value)] temp_df=df[filter_list] x1=temp_df['arr_delay'] x2=temp_df['dep_delay'] withg.batch_update(): g.data[0].x=x1g.data[1].x=x2g.layout.barmode='overlay'g.layout.xaxis.title='Delay in Minutes'g.layout.yaxis.title='Number of Delays'origin.observe(response, names="value") textbox.observe(response, names="value") month.observe(response, names="value") use_date.observe(response, names="value")
Time to try the app out!!
container2=widgets.HBox([origin, textbox]) widgets.VBox([container, container2, g])
<imgsrc = 'https://cloud.githubusercontent.com/assets/12302455/16637308/4e476280-43ac-11e6-9fd3-ada2c9506ee1.gif' >
help(go.FigureWidget)