-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path[7] spacex dash app.py
136 lines (126 loc) · 6.38 KB
/
[7] spacex dash app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# Import required libraries
import pandas as pd
import dash
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Input, Output
import plotly.express as px
# Read the airline data into pandas dataframe
spacex_df = pd.read_csv("spacex_launch_dash.csv")
max_payload = spacex_df['Payload Mass (kg)'].max()
min_payload = spacex_df['Payload Mass (kg)'].min()
launch_sites = []
launch_sites.append({'label': 'All Sites', 'value': 'All Sites'})
all_launch_sites = spacex_df['Launch Site'].unique().tolist()
for launch_site in all_launch_sites:
launch_sites.append({'label': launch_site, 'value': launch_site})
# Create a dash application
app = dash.Dash(__name__)
# Create an app layout
app.layout = html.Div(children=[html.H1('SpaceX Launch Records Dashboard',
style={'textAlign': 'center', 'color': '#503D36',
'font-size': 40}),
# TASK 1: Add a dropdown list to enable Launch Site selection
# The default select value is for ALL sites
# dcc.Dropdown(id='site-dropdown',...)
html.Div([
dcc.Dropdown(
id = 'site-dropdown',
options = launch_sites,
placeholder = 'Select a Launch Site here',
searchable = True ,
clearable = False,
value = 'All Sites'
),]),
html.Br(),
# TASK 2: Add a pie chart to show the total successful launches count for all sites
# If a specific launch site was selected, show the Success vs. Failed counts for the site
html.Div(dcc.Graph(id='success-pie-chart')),
html.Br(),
html.P("Payload range (Kg):"),
# TASK 3: Add a slider to select payload range
#dcc.RangeSlider(id='payload-slider',...)
html.Div([
dcc.RangeSlider(
id = 'payload_slider',
min = 0,
max = 10000,
step = 1000,
marks = {
0: {'label': '0 Kg', 'style': {'color': '#77b0b1'}},
1000: {'label': '1000 Kg'},
2000: {'label': '2000 Kg'},
3000: {'label': '3000 Kg'},
4000: {'label': '4000 Kg'},
5000: {'label': '5000 Kg'},
6000: {'label': '6000 Kg'},
7000: {'label': '7000 Kg'},
8000: {'label': '8000 Kg'},
9000: {'label': '9000 Kg'},
10000: {'label': '10000 Kg', 'style': {'color': '#f50'}},
},
value = [min_payload,max_payload]),
]),
# TASK 4: Add a scatter chart to show the correlation between payload and launch success
html.Div(dcc.Graph(id='success-payload-scatter-chart')),
])
# TASK 2:
# Add a callback function for `site-dropdown` as input, `success-pie-chart` as output
@app.callback(
Output(component_id = 'success-pie-chart', component_property = 'figure'),
[Input(component_id = 'site-dropdown', component_property = 'value')]
)
def update_piegraph(site_dropdown):
if (site_dropdown == 'All Sites' or site_dropdown == 'None'):
data = spacex_df[spacex_df['class'] == 1]
fig = px.pie(
data,
names = 'Launch Site',
title = 'Total Success Launches by All Sites',
)
else:
data = spacex_df.loc[spacex_df['Launch Site'] == site_dropdown]
fig = px.pie(
data,
names = 'class',
title = 'Total Success Launches for Site ↠ '+site_dropdown,
)
return fig
# TASK 4:
# Add a callback function for `site-dropdown` and `payload-slider` as inputs, `success-payload-scatter-chart` as output
@app.callback(
Output(component_id = 'success-payload-scatter-chart', component_property = 'figure'),
[Input(component_id = 'site-dropdown', component_property = 'value'),
Input(component_id = "payload_slider", component_property = "value")]
)
def update_scattergraph(site_dropdown,payload_slider):
if (site_dropdown == 'All Sites' or site_dropdown == 'None'):
low, high = payload_slider
data = spacex_df
inrange = (data['Payload Mass (kg)'] > low) & (data['Payload Mass (kg)'] < high)
fig = px.scatter(
data[inrange],
x = "Payload Mass (kg)",
y = "class",
title = 'Correlation Between Payload and Success for All Sites',
color="Booster Version Category",
size='Payload Mass (kg)',
hover_data=['Payload Mass (kg)']
)
else:
low, high = payload_slider
data = spacex_df.loc[spacex_df['Launch Site'] == site_dropdown]
inrange = (data['Payload Mass (kg)'] > low) & (data['Payload Mass (kg)'] < high)
fig = px.scatter(
data[inrange],
x = "Payload Mass (kg)",
y = "class",
title = 'Correlation Between Payload and Success for Site ↠ '+site_dropdown,
color="Booster Version Category",
size='Payload Mass (kg)',
hover_data=['Payload Mass (kg)']
)
return fig
# Run the app
if __name__ == '__main__':
app.run_server()